/* * File: jquery.dataTables.min.js * Version: 1.9.4 * Author: Allan Jardine (www.sprymedia.co.uk) * Info: www.datatables.net * * Copyright 2008-2012 Allan Jardine, all rights reserved. * * This source file is free software, under either the GPL v2 license or a * BSD style license, available at: * http://datatables.net/license_gpl2 * http://datatables.net/license_bsd * * This source file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. */ ( function(window, document, undefined) {( function(factory) {"use strict"; if ( typeof define === 'function' && define.amd) { define(['jquery'], factory) } else if (jQuery && !jQuery.fn.dataTable) { factory(jQuery) } }(function($) {"use strict"; var DataTable = function(oInit) { function _fnAddColumn(oSettings, nTh) { var oDefaults = DataTable.defaults.columns; var iCol = oSettings.aoColumns.length; var oCol = $.extend({}, DataTable.models.oColumn, oDefaults, { "sSortingClass" : oSettings.oClasses.sSortable, "sSortingClassJUI" : oSettings.oClasses.sSortJUI, "nTh" : nTh ? nTh : document.createElement('th'), "sTitle" : oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '', "aDataSort" : oDefaults.aDataSort ? oDefaults.aDataSort : [iCol], "mData" : oDefaults.mData ? oDefaults.oDefaults : iCol }); oSettings.aoColumns.push(oCol); if (oSettings.aoPreSearchCols[iCol] === undefined || oSettings.aoPreSearchCols[iCol] === null) { oSettings.aoPreSearchCols[iCol] = $.extend({}, DataTable.models.oSearch) } else { var oPre = oSettings.aoPreSearchCols[iCol]; if (oPre.bRegex === undefined) { oPre.bRegex = true } if (oPre.bSmart === undefined) { oPre.bSmart = true } if (oPre.bCaseInsensitive === undefined) { oPre.bCaseInsensitive = true } } _fnColumnOptions(oSettings, iCol, null) } function _fnColumnOptions(oSettings, iCol, oOptions) { var oCol = oSettings.aoColumns[iCol]; if (oOptions !== undefined && oOptions !== null) { if (oOptions.mDataProp && !oOptions.mData) { oOptions.mData = oOptions.mDataProp } if (oOptions.sType !== undefined) { oCol.sType = oOptions.sType; oCol._bAutoType = false } $.extend(oCol, oOptions); _fnMap(oCol, oOptions, "sWidth", "sWidthOrig"); if (oOptions.iDataSort !== undefined) { oCol.aDataSort = [oOptions.iDataSort] } _fnMap(oCol, oOptions, "aDataSort") } var mRender = oCol.mRender ? _fnGetObjectDataFn(oCol.mRender) : null; var mData = _fnGetObjectDataFn(oCol.mData); oCol.fnGetData = function(oData, sSpecific) { var innerData = mData(oData, sSpecific); if (oCol.mRender && (sSpecific && sSpecific !== '')) { return mRender(innerData, sSpecific, oData) } return innerData }; oCol.fnSetData = _fnSetObjectDataFn(oCol.mData); if (!oSettings.oFeatures.bSort) { oCol.bSortable = false } if (!oCol.bSortable || ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1)) { oCol.sSortingClass = oSettings.oClasses.sSortableNone; oCol.sSortingClassJUI = "" } else if ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) { oCol.sSortingClass = oSettings.oClasses.sSortable; oCol.sSortingClassJUI = oSettings.oClasses.sSortJUI } else if ($.inArray('asc', oCol.asSorting) != -1 && $.inArray('desc', oCol.asSorting) == -1) { oCol.sSortingClass = oSettings.oClasses.sSortableAsc; oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIAscAllowed } else if ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) != -1) { oCol.sSortingClass = oSettings.oClasses.sSortableDesc; oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIDescAllowed } } function _fnAdjustColumnSizing(oSettings) { if (oSettings.oFeatures.bAutoWidth === false) { return false } _fnCalculateColumnWidths(oSettings); for (var i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { oSettings.aoColumns[i].nTh.style.width = oSettings.aoColumns[i].sWidth } } function _fnVisibleToColumnIndex(oSettings, iMatch) { var aiVis = _fnGetColumns(oSettings, 'bVisible'); return typeof aiVis[iMatch] === 'number' ? aiVis[iMatch] : null } function _fnColumnIndexToVisible(oSettings, iMatch) { var aiVis = _fnGetColumns(oSettings, 'bVisible'); var iPos = $.inArray(iMatch, aiVis); return iPos !== -1 ? iPos : null } function _fnVisbleColumns(oSettings) { return _fnGetColumns(oSettings, 'bVisible').length } function _fnGetColumns(oSettings, sParam) { var a = []; $.map(oSettings.aoColumns, function(val, i) { if (val[sParam]) { a.push(i) } }); return a } function _fnDetectType(sData) { var aTypes = DataTable.ext.aTypes; var iLen = aTypes.length; for (var i = 0; i < iLen; i++) { var sType = aTypes[i](sData); if (sType !== null) { return sType } } return 'string' } function _fnReOrderIndex(oSettings, sColumns) { var aColumns = sColumns.split(','); var aiReturn = []; for (var i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { for (var j = 0; j < iLen; j++) { if (oSettings.aoColumns[i].sName == aColumns[j]) { aiReturn.push(j); break } } } return aiReturn } function _fnColumnOrdering(oSettings) { var sNames = ''; for (var i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { sNames += oSettings.aoColumns[i].sName + ',' } if (sNames.length == iLen) { return "" } return sNames.slice(0, -1) } function _fnApplyColumnDefs(oSettings, aoColDefs, aoCols, fn) { var i, iLen, j, jLen, k, kLen; if (aoColDefs) { for ( i = aoColDefs.length - 1; i >= 0; i--) { var aTargets = aoColDefs[i].aTargets; if (!$.isArray(aTargets)) { _fnLog(oSettings, 1, 'aTargets must be an array of targets, not a ' + ( typeof aTargets)) } for ( j = 0, jLen = aTargets.length; j < jLen; j++) { if ( typeof aTargets[j] === 'number' && aTargets[j] >= 0) { while (oSettings.aoColumns.length <= aTargets[j]) { _fnAddColumn(oSettings) } fn(aTargets[j], aoColDefs[i]) } else if ( typeof aTargets[j] === 'number' && aTargets[j] < 0) { fn(oSettings.aoColumns.length + aTargets[j], aoColDefs[i]) } else if ( typeof aTargets[j] === 'string') { for ( k = 0, kLen = oSettings.aoColumns.length; k < kLen; k++) { if (aTargets[j] == "_all" || $(oSettings.aoColumns[k].nTh).hasClass(aTargets[j])) { fn(k, aoColDefs[i]) } } } } } } if (aoCols) { for ( i = 0, iLen = aoCols.length; i < iLen; i++) { fn(i, aoCols[i]) } } } function _fnAddData(oSettings, aDataSupplied) { var oCol; var aDataIn = ($.isArray(aDataSupplied)) ? aDataSupplied.slice() : $.extend(true, {}, aDataSupplied); var iRow = oSettings.aoData.length; var oData = $.extend(true, {}, DataTable.models.oRow); oData._aData = aDataIn; oSettings.aoData.push(oData); var nTd, sThisType; for (var i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { oCol = oSettings.aoColumns[i]; if ( typeof oCol.fnRender === 'function' && oCol.bUseRendered && oCol.mData !== null) { _fnSetCellData(oSettings, iRow, i, _fnRender(oSettings, iRow, i)) } else { _fnSetCellData(oSettings, iRow, i, _fnGetCellData(oSettings, iRow, i)) } if (oCol._bAutoType && oCol.sType != 'string') { var sVarType = _fnGetCellData(oSettings, iRow, i, 'type'); if (sVarType !== null && sVarType !== '') { sThisType = _fnDetectType(sVarType); if (oCol.sType === null) { oCol.sType = sThisType } else if (oCol.sType != sThisType && oCol.sType != "html") { oCol.sType = 'string' } } } } oSettings.aiDisplayMaster.push(iRow); if (!oSettings.oFeatures.bDeferRender) { _fnCreateTr(oSettings, iRow) } return iRow } function _fnGatherData(oSettings) { var iLoop, i, iLen, j, jLen, jInner, nTds, nTrs, nTd, nTr, aLocalData, iThisIndex, iRow, iRows, iColumn, iColumns, sNodeName, oCol, oData; if (oSettings.bDeferLoading || oSettings.sAjaxSource === null) { nTr = oSettings.nTBody.firstChild; while (nTr) { if (nTr.nodeName.toUpperCase() == "TR") { iThisIndex = oSettings.aoData.length; nTr._DT_RowIndex = iThisIndex; oSettings.aoData.push($.extend(true, {}, DataTable.models.oRow, { "nTr" : nTr })); oSettings.aiDisplayMaster.push(iThisIndex); nTd = nTr.firstChild; jInner = 0; while (nTd) { sNodeName = nTd.nodeName.toUpperCase(); if (sNodeName == "TD" || sNodeName == "TH") { _fnSetCellData(oSettings, iThisIndex, jInner, $.trim(nTd.innerHTML)); jInner++ } nTd = nTd.nextSibling } } nTr = nTr.nextSibling } } nTrs = _fnGetTrNodes(oSettings); nTds = []; for ( i = 0, iLen = nTrs.length; i < iLen; i++) { nTd = nTrs[i].firstChild; while (nTd) { sNodeName = nTd.nodeName.toUpperCase(); if (sNodeName == "TD" || sNodeName == "TH") { nTds.push(nTd) } nTd = nTd.nextSibling } } for ( iColumn = 0, iColumns = oSettings.aoColumns.length; iColumn < iColumns; iColumn++) { oCol = oSettings.aoColumns[iColumn]; if (oCol.sTitle === null) { oCol.sTitle = oCol.nTh.innerHTML } var bAutoType = oCol._bAutoType, bRender = typeof oCol.fnRender === 'function', bClass = oCol.sClass !== null, bVisible = oCol.bVisible, nCell, sThisType, sRendered, sValType; if (bAutoType || bRender || bClass || !bVisible) { for ( iRow = 0, iRows = oSettings.aoData.length; iRow < iRows; iRow++) { oData = oSettings.aoData[iRow]; nCell = nTds[(iRow * iColumns) + iColumn]; if (bAutoType && oCol.sType != 'string') { sValType = _fnGetCellData(oSettings, iRow, iColumn, 'type'); if (sValType !== '') { sThisType = _fnDetectType(sValType); if (oCol.sType === null) { oCol.sType = sThisType } else if (oCol.sType != sThisType && oCol.sType != "html") { oCol.sType = 'string' } } } if (oCol.mRender) { nCell.innerHTML = _fnGetCellData(oSettings, iRow, iColumn, 'display') } else if (oCol.mData !== iColumn) { nCell.innerHTML = _fnGetCellData(oSettings, iRow, iColumn, 'display') } if (bRender) { sRendered = _fnRender(oSettings, iRow, iColumn); nCell.innerHTML = sRendered; if (oCol.bUseRendered) { _fnSetCellData(oSettings, iRow, iColumn, sRendered) } } // if (bClass) { // nCell.className += ' ' + oCol.sClass // } if (!bVisible) { oData._anHidden[iColumn] = nCell; nCell.parentNode.removeChild(nCell) } else { oData._anHidden[iColumn] = null } if (oCol.fnCreatedCell) { oCol.fnCreatedCell.call(oSettings.oInstance, nCell, _fnGetCellData(oSettings, iRow, iColumn, 'display'), oData._aData, iRow, iColumn) } } } } if (oSettings.aoRowCreatedCallback.length !== 0) { for ( i = 0, iLen = oSettings.aoData.length; i < iLen; i++) { oData = oSettings.aoData[i]; _fnCallbackFire(oSettings, 'aoRowCreatedCallback', null, [oData.nTr, oData._aData, i]) } } } function _fnNodeToDataIndex(oSettings, n) { return (n._DT_RowIndex !== undefined) ? n._DT_RowIndex : null } function _fnNodeToColumnIndex(oSettings, iRow, n) { var anCells = _fnGetTdNodes(oSettings, iRow); for (var i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { if (anCells[i] === n) { return i } } return -1 } function _fnGetRowData(oSettings, iRow, sSpecific, aiColumns) { var out = []; for (var i = 0, iLen = aiColumns.length; i < iLen; i++) { out.push(_fnGetCellData(oSettings, iRow, aiColumns[i], sSpecific)) } return out } function _fnGetCellData(oSettings, iRow, iCol, sSpecific) { var sData; var oCol = oSettings.aoColumns[iCol]; var oData = oSettings.aoData[iRow]._aData; if (( sData = oCol.fnGetData(oData, sSpecific)) === undefined) { if (oSettings.iDrawError != oSettings.iDraw && oCol.sDefaultContent === null) { _fnLog(oSettings, 0, "Requested unknown parameter " + ( typeof oCol.mData == 'function' ? '{mData function}' : "'" + oCol.mData + "'") + " from the data source for row " + iRow); oSettings.iDrawError = oSettings.iDraw } return oCol.sDefaultContent } if (sData === null && oCol.sDefaultContent !== null) { sData = oCol.sDefaultContent } else if ( typeof sData === 'function') { return sData() } if (sSpecific == 'display' && sData === null) { return '' } return sData } function _fnSetCellData(oSettings, iRow, iCol, val) { var oCol = oSettings.aoColumns[iCol]; var oData = oSettings.aoData[iRow]._aData; oCol.fnSetData(oData, val) } var __reArray = /\[.*?\]$/; function _fnGetObjectDataFn(mSource) { if (mSource === null) { return function(data, type) { return null } } else if ( typeof mSource === 'function') { return function(data, type, extra) { return mSource(data, type, extra) } } else if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 || mSource.indexOf('[') !== -1)) { var fetchData = function(data, type, src) { var a = src.split('.'); var arrayNotation, out, innerSrc; if (src !== "") { for (var i = 0, iLen = a.length; i < iLen; i++) { arrayNotation = a[i].match(__reArray); if (arrayNotation) { a[i] = a[i].replace(__reArray, ''); if (a[i] !== "") { data = data[a[i]] } out = []; a.splice(0, i + 1); innerSrc = a.join('.'); for (var j = 0, jLen = data.length; j < jLen; j++) { out.push(fetchData(data[j], type, innerSrc)) } var join = arrayNotation[0].substring(1, arrayNotation[0].length - 1); data = (join === "") ? out : out.join(join); break } if (data === null || data[a[i]] === undefined) { return undefined } data = data[a[i]] } } return data }; return function(data, type) { return fetchData(data, type, mSource) } } else { return function(data, type) { return data[mSource] } } } function _fnSetObjectDataFn(mSource) { if (mSource === null) { return function(data, val) { } } else if ( typeof mSource === 'function') { return function(data, val) { mSource(data, 'set', val) } } else if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 || mSource.indexOf('[') !== -1)) { var setData = function(data, val, src) { var a = src.split('.'), b; var arrayNotation, o, innerSrc; for (var i = 0, iLen = a.length - 1; i < iLen; i++) { arrayNotation = a[i].match(__reArray); if (arrayNotation) { a[i] = a[i].replace(__reArray, ''); data[a[i]] = []; b = a.slice(); b.splice(0, i + 1); innerSrc = b.join('.'); for (var j = 0, jLen = val.length; j < jLen; j++) { o = {}; setData(o, val[j], innerSrc); data[a[i]].push(o) } return } if (data[a[i]] === null || data[a[i]] === undefined) { data[a[i]] = {} } data = data[a[i]] } data[a[a.length - 1].replace(__reArray, '')] = val }; return function(data, val) { return setData(data, val, mSource) } } else { return function(data, val) { data[mSource] = val } } } function _fnGetDataMaster(oSettings) { var aData = []; var iLen = oSettings.aoData.length; for (var i = 0; i < iLen; i++) { aData.push(oSettings.aoData[i]._aData) } return aData } function _fnClearTable(oSettings) { oSettings.aoData.splice(0, oSettings.aoData.length); oSettings.aiDisplayMaster.splice(0, oSettings.aiDisplayMaster.length); oSettings.aiDisplay.splice(0, oSettings.aiDisplay.length); _fnCalculateEnd(oSettings) } function _fnDeleteIndex(a, iTarget) { var iTargetIndex = -1; for (var i = 0, iLen = a.length; i < iLen; i++) { if (a[i] == iTarget) { iTargetIndex = i } else if (a[i] > iTarget) { a[i]-- } } if (iTargetIndex != -1) { a.splice(iTargetIndex, 1) } } function _fnRender(oSettings, iRow, iCol) { var oCol = oSettings.aoColumns[iCol]; return oCol.fnRender({ "iDataRow" : iRow, "iDataColumn" : iCol, "oSettings" : oSettings, "aData" : oSettings.aoData[iRow]._aData, "mDataProp" : oCol.mData }, _fnGetCellData(oSettings, iRow, iCol, 'display')) } function _fnCreateTr(oSettings, iRow) { var oData = oSettings.aoData[iRow]; var nTd; if (oData.nTr === null) { oData.nTr = document.createElement('tr'); oData.nTr._DT_RowIndex = iRow; if (oData._aData.DT_RowId) { oData.nTr.id = oData._aData.DT_RowId } if (oData._aData.DT_RowClass) { oData.nTr.className = oData._aData.DT_RowClass } for (var i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { var oCol = oSettings.aoColumns[i]; nTd = document.createElement(oCol.sCellType); nTd.innerHTML = ( typeof oCol.fnRender === 'function' && (!oCol.bUseRendered || oCol.mData === null)) ? _fnRender(oSettings, iRow, i) : _fnGetCellData(oSettings, iRow, i, 'display'); if (oCol.sClass !== null) { nTd.className = oCol.sClass } if (oCol.bVisible) { oData.nTr.appendChild(nTd); oData._anHidden[i] = null } else { oData._anHidden[i] = nTd } if (oCol.fnCreatedCell) { oCol.fnCreatedCell.call(oSettings.oInstance, nTd, _fnGetCellData(oSettings, iRow, i, 'display'), oData._aData, iRow, i) } } _fnCallbackFire(oSettings, 'aoRowCreatedCallback', null, [oData.nTr, oData._aData, iRow]) } } function _fnBuildHead(oSettings) { var i, nTh, iLen, j, jLen; var iThs = $('th, td', oSettings.nTHead).length; var iCorrector = 0; var jqChildren; if (iThs !== 0) { for ( i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { nTh = oSettings.aoColumns[i].nTh; nTh.setAttribute('role', 'columnheader'); if (oSettings.aoColumns[i].bSortable) { nTh.setAttribute('tabindex', oSettings.iTabIndex); nTh.setAttribute('aria-controls', oSettings.sTableId) } if (oSettings.aoColumns[i].sClass !== null) { $(nTh).addClass(oSettings.aoColumns[i].sClass) } if (oSettings.aoColumns[i].sTitle != nTh.innerHTML) { nTh.innerHTML = oSettings.aoColumns[i].sTitle } } } else { var nTr = document.createElement("tr"); for ( i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { nTh = oSettings.aoColumns[i].nTh; nTh.innerHTML = oSettings.aoColumns[i].sTitle; nTh.setAttribute('tabindex', '0'); if (oSettings.aoColumns[i].sClass !== null) { $(nTh).addClass(oSettings.aoColumns[i].sClass) } nTr.appendChild(nTh) } $(oSettings.nTHead).html('')[0].appendChild(nTr); _fnDetectHeader(oSettings.aoHeader, oSettings.nTHead) } $(oSettings.nTHead).children('tr').attr('role', 'row'); if (oSettings.bJUI) { for ( i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { nTh = oSettings.aoColumns[i].nTh; var nDiv = document.createElement('div'); nDiv.className = oSettings.oClasses.sSortJUIWrapper; $(nTh).contents().appendTo(nDiv); var nSpan = document.createElement('span'); nSpan.className = oSettings.oClasses.sSortIcon; nDiv.appendChild(nSpan); nTh.appendChild(nDiv) } } if (oSettings.oFeatures.bSort) { for ( i = 0; i < oSettings.aoColumns.length; i++) { if (oSettings.aoColumns[i].bSortable !== false) { _fnSortAttachListener(oSettings, oSettings.aoColumns[i].nTh, i) } else { $(oSettings.aoColumns[i].nTh).addClass(oSettings.oClasses.sSortableNone) } } } if (oSettings.oClasses.sFooterTH !== "") { $(oSettings.nTFoot).children('tr').children('th').addClass(oSettings.oClasses.sFooterTH) } if (oSettings.nTFoot !== null) { var anCells = _fnGetUniqueThs(oSettings, null, oSettings.aoFooter); for ( i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { if (anCells[i]) { oSettings.aoColumns[i].nTf = anCells[i]; if (oSettings.aoColumns[i].sClass) { $(anCells[i]).addClass(oSettings.aoColumns[i].sClass) } } } } } function _fnDrawHead(oSettings, aoSource, bIncludeHidden) { var i, iLen, j, jLen, k, kLen, n, nLocalTr; var aoLocal = []; var aApplied = []; var iColumns = oSettings.aoColumns.length; var iRowspan, iColspan; if (bIncludeHidden === undefined) { bIncludeHidden = false } for ( i = 0, iLen = aoSource.length; i < iLen; i++) { aoLocal[i] = aoSource[i].slice(); aoLocal[i].nTr = aoSource[i].nTr; for ( j = iColumns - 1; j >= 0; j--) { if (!oSettings.aoColumns[j].bVisible && !bIncludeHidden) { aoLocal[i].splice(j, 1) } } aApplied.push([]) } for ( i = 0, iLen = aoLocal.length; i < iLen; i++) { nLocalTr = aoLocal[i].nTr; if (nLocalTr) { while (( n = nLocalTr.firstChild)) { nLocalTr.removeChild(n) } } for ( j = 0, jLen = aoLocal[i].length; j < jLen; j++) { iRowspan = 1; iColspan = 1; if (aApplied[i][j] === undefined) { nLocalTr.appendChild(aoLocal[i][j].cell); aApplied[i][j] = 1; while (aoLocal[i + iRowspan] !== undefined && aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell) { aApplied[i+iRowspan][j] = 1; iRowspan++ } while (aoLocal[i][j + iColspan] !== undefined && aoLocal[i][j].cell == aoLocal[i][j + iColspan].cell) { for ( k = 0; k < iRowspan; k++) { aApplied[i+k][j + iColspan] = 1 } iColspan++ } aoLocal[i][j].cell.rowSpan = iRowspan; aoLocal[i][j].cell.colSpan = iColspan } } } } function _fnDraw(oSettings) { var aPreDraw = _fnCallbackFire(oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings]); if ($.inArray(false, aPreDraw) !== -1) { _fnProcessingDisplay(oSettings, false); return } var i, iLen, n; var anRows = []; var iRowCount = 0; var iStripes = oSettings.asStripeClasses.length; var iOpenRows = oSettings.aoOpenRows.length; oSettings.bDrawing = true; if (oSettings.iInitDisplayStart !== undefined && oSettings.iInitDisplayStart != -1) { if (oSettings.oFeatures.bServerSide) { oSettings._iDisplayStart = oSettings.iInitDisplayStart } else { oSettings._iDisplayStart = (oSettings.iInitDisplayStart >= oSettings.fnRecordsDisplay()) ? 0 : oSettings.iInitDisplayStart } oSettings.iInitDisplayStart = -1; _fnCalculateEnd(oSettings) } if (oSettings.bDeferLoading) { oSettings.bDeferLoading = false; oSettings.iDraw++ } else if (!oSettings.oFeatures.bServerSide) { oSettings.iDraw++ } else if (!oSettings.bDestroying && !_fnAjaxUpdate(oSettings)) { return } if (oSettings.aiDisplay.length !== 0) { var iStart = oSettings._iDisplayStart; var iEnd = oSettings._iDisplayEnd; if (oSettings.oFeatures.bServerSide) { iStart = 0; iEnd = oSettings.aoData.length } for (var j = iStart; j < iEnd; j++) { var aoData = oSettings.aoData[oSettings.aiDisplay[j]]; if (aoData.nTr === null) { _fnCreateTr(oSettings, oSettings.aiDisplay[j]) } var nRow = aoData.nTr; if (iStripes !== 0) { var sStripe = oSettings.asStripeClasses[iRowCount % iStripes]; if (aoData._sRowStripe != sStripe) { $(nRow).removeClass(aoData._sRowStripe).addClass(sStripe); aoData._sRowStripe = sStripe } } _fnCallbackFire(oSettings, 'aoRowCallback', null, [nRow, oSettings.aoData[oSettings.aiDisplay[j]]._aData, iRowCount, j]); anRows.push(nRow); iRowCount++; if (iOpenRows !== 0) { for (var k = 0; k < iOpenRows; k++) { if (nRow == oSettings.aoOpenRows[k].nParent) { anRows.push(oSettings.aoOpenRows[k].nTr); break } } } } } else { anRows[0] = document.createElement('tr'); if (oSettings.asStripeClasses[0]) { anRows[0].className = oSettings.asStripeClasses[0] } var oLang = oSettings.oLanguage; var sZero = oLang.sZeroRecords; if (oSettings.iDraw == 1 && oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide) { sZero = oLang.sLoadingRecords } else if (oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0) { sZero = oLang.sEmptyTable } var nTd = document.createElement('td'); nTd.setAttribute('valign', "top"); nTd.colSpan = _fnVisbleColumns(oSettings); nTd.className = oSettings.oClasses.sRowEmpty; nTd.innerHTML = _fnInfoMacros(oSettings, sZero); anRows[iRowCount].appendChild(nTd) } _fnCallbackFire(oSettings, 'aoHeaderCallback', 'header', [$(oSettings.nTHead).children('tr')[0], _fnGetDataMaster(oSettings), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay]); _fnCallbackFire(oSettings, 'aoFooterCallback', 'footer', [$(oSettings.nTFoot).children('tr')[0], _fnGetDataMaster(oSettings), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay]); var nAddFrag = document.createDocumentFragment(), nRemoveFrag = document.createDocumentFragment(), nBodyPar, nTrs; if (oSettings.nTBody) { nBodyPar = oSettings.nTBody.parentNode; nRemoveFrag.appendChild(oSettings.nTBody); if (!oSettings.oScroll.bInfinite || !oSettings._bInitComplete || oSettings.bSorted || oSettings.bFiltered) { while (( n = oSettings.nTBody.firstChild)) { oSettings.nTBody.removeChild(n) } } for ( i = 0, iLen = anRows.length; i < iLen; i++) { nAddFrag.appendChild(anRows[i]) } oSettings.nTBody.appendChild(nAddFrag); if (nBodyPar !== null) { nBodyPar.appendChild(oSettings.nTBody) } } _fnCallbackFire(oSettings, 'aoDrawCallback', 'draw', [oSettings]); oSettings.bSorted = false; oSettings.bFiltered = false; oSettings.bDrawing = false; if (oSettings.oFeatures.bServerSide) { _fnProcessingDisplay(oSettings, false); if (!oSettings._bInitComplete) { _fnInitComplete(oSettings) } } } function _fnReDraw(oSettings) { if (oSettings.oFeatures.bSort) { _fnSort(oSettings, oSettings.oPreviousSearch) } else if (oSettings.oFeatures.bFilter) { _fnFilterComplete(oSettings, oSettings.oPreviousSearch) } else { _fnCalculateEnd(oSettings); _fnDraw(oSettings) } } function _fnAddOptionsHtml(oSettings) { var nHolding = $('
')[0]; oSettings.nTable.parentNode.insertBefore(nHolding, oSettings.nTable); oSettings.nTableWrapper = $('
')[0]; oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling; var nInsertNode = oSettings.nTableWrapper; var aDom = oSettings.sDom.split(''); var nTmp, iPushFeature, cOption, nNewNode, cNext, sAttr, j; for (var i = 0; i < aDom.length; i++) { iPushFeature = 0; cOption = aDom[i]; if (cOption == '<') { nNewNode = $('
')[0]; cNext = aDom[i + 1]; if (cNext == "'" || cNext == '"') { sAttr = ""; j = 2; while (aDom[i + j] != cNext) { sAttr += aDom[i + j]; j++ } if (sAttr == "H") { sAttr = oSettings.oClasses.sJUIHeader } else if (sAttr == "F") { sAttr = oSettings.oClasses.sJUIFooter } if (sAttr.indexOf('.') != -1) { var aSplit = sAttr.split('.'); nNewNode.id = aSplit[0].substr(1, aSplit[0].length - 1); nNewNode.className = aSplit[1] } else if (sAttr.charAt(0) == "#") { nNewNode.id = sAttr.substr(1, sAttr.length - 1) } else { nNewNode.className = sAttr } i += j } nInsertNode.appendChild(nNewNode); nInsertNode = nNewNode } else if (cOption == '>') { nInsertNode = nInsertNode.parentNode } else if (cOption == 'l' && oSettings.oFeatures.bPaginate && oSettings.oFeatures.bLengthChange) { nTmp = _fnFeatureHtmlLength(oSettings); iPushFeature = 1 //} else if (cOption == 'f' && oSettings.oFeatures.bFilter) { // nTmp = _fnFeatureHtmlFilter(oSettings); // iPushFeature = 1 } else if (cOption == 'r' && oSettings.oFeatures.bProcessing) { nTmp = _fnFeatureHtmlProcessing(oSettings); iPushFeature = 1 } else if (cOption == 't') { nTmp = _fnFeatureHtmlTable(oSettings); iPushFeature = 1 } else if (cOption == 'i' && oSettings.oFeatures.bInfo) { nTmp = _fnFeatureHtmlInfo(oSettings); iPushFeature = 1 } else if (cOption == 'p' && oSettings.oFeatures.bPaginate) { nTmp = _fnFeatureHtmlPaginate(oSettings); iPushFeature = 1 } else if (DataTable.ext.aoFeatures.length !== 0) { var aoFeatures = DataTable.ext.aoFeatures; for (var k = 0, kLen = aoFeatures.length; k < kLen; k++) { if (cOption == aoFeatures[k].cFeature) { nTmp = aoFeatures[k].fnInit(oSettings); if (nTmp) { iPushFeature = 1 } break } } } if (iPushFeature == 1 && nTmp !== null) { if ( typeof oSettings.aanFeatures[cOption] !== 'object') { oSettings.aanFeatures[cOption] = [] } oSettings.aanFeatures[cOption].push(nTmp); nInsertNode.appendChild(nTmp) } } nHolding.parentNode.replaceChild(oSettings.nTableWrapper, nHolding) } function _fnDetectHeader(aLayout, nThead) { var nTrs = $(nThead).children('tr'); var nTr, nCell; var i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan; var bUnique; var fnShiftCol = function(a, i, j) { var k = a[i]; while (k[j]) { j++ } return j }; aLayout.splice(0, aLayout.length); for ( i = 0, iLen = nTrs.length; i < iLen; i++) { aLayout.push([]) } for ( i = 0, iLen = nTrs.length; i < iLen; i++) { nTr = nTrs[i]; iColumn = 0; nCell = nTr.firstChild; while (nCell) { if (nCell.nodeName.toUpperCase() == "TD" || nCell.nodeName.toUpperCase() == "TH") { iColspan = nCell.getAttribute('colspan') * 1; iRowspan = nCell.getAttribute('rowspan') * 1; iColspan = (!iColspan || iColspan === 0 || iColspan === 1) ? 1 : iColspan; iRowspan = (!iRowspan || iRowspan === 0 || iRowspan === 1) ? 1 : iRowspan; iColShifted = fnShiftCol(aLayout, i, iColumn); bUnique = iColspan === 1 ? true : false; for ( l = 0; l < iColspan; l++) { for ( k = 0; k < iRowspan; k++) { aLayout[i+k][iColShifted + l] = { "cell" : nCell, "unique" : bUnique }; aLayout[i + k].nTr = nTr } } } nCell = nCell.nextSibling } } } function _fnGetUniqueThs(oSettings, nHeader, aLayout) { var aReturn = []; if (!aLayout) { aLayout = oSettings.aoHeader; if (nHeader) { aLayout = []; _fnDetectHeader(aLayout, nHeader) } } for (var i = 0, iLen = aLayout.length; i < iLen; i++) { for (var j = 0, jLen = aLayout[i].length; j < jLen; j++) { if (aLayout[i][j].unique && (!aReturn[j] || !oSettings.bSortCellsTop)) { aReturn[j] = aLayout[i][j].cell } } } return aReturn } function _fnAjaxUpdate(oSettings) { if (oSettings.bAjaxDataGet) { oSettings.iDraw++; _fnProcessingDisplay(oSettings, true); var iColumns = oSettings.aoColumns.length; var aoData = _fnAjaxParameters(oSettings); _fnServerParams(oSettings, aoData); oSettings.fnServerData.call(oSettings.oInstance, oSettings.sAjaxSource, aoData, function(json) { _fnAjaxUpdateDraw(oSettings, json) }, oSettings); return false } else { return true } } function _fnAjaxParameters(oSettings) { var iColumns = oSettings.aoColumns.length; var aoData = [], mDataProp, aaSort, aDataSort; var i, j; aoData.push({ "name" : "sEcho", "value" : oSettings.iDraw }); aoData.push({ "name" : "iColumns", "value" : iColumns }); aoData.push({ "name" : "sColumns", "value" : _fnColumnOrdering(oSettings) }); aoData.push({ "name" : "iDisplayStart", "value" : oSettings._iDisplayStart }); aoData.push({ "name" : "iDisplayLength", "value" : oSettings.oFeatures.bPaginate !== false ? oSettings._iDisplayLength : -1 }); for ( i = 0; i < iColumns; i++) { mDataProp = oSettings.aoColumns[i].mData; aoData.push({ "name" : "mDataProp_" + i, "value" : typeof (mDataProp) === "function" ? 'function' : mDataProp }) } if (oSettings.oFeatures.bFilter !== false) { aoData.push({ "name" : "sSearch", "value" : oSettings.oPreviousSearch.sSearch }); aoData.push({ "name" : "bRegex", "value" : oSettings.oPreviousSearch.bRegex }); for ( i = 0; i < iColumns; i++) { aoData.push({ "name" : "sSearch_" + i, "value" : oSettings.aoPreSearchCols[i].sSearch }); aoData.push({ "name" : "bRegex_" + i, "value" : oSettings.aoPreSearchCols[i].bRegex }); aoData.push({ "name" : "bSearchable_" + i, "value" : oSettings.aoColumns[i].bSearchable }) } } if (oSettings.oFeatures.bSort !== false) { var iCounter = 0; aaSort = (oSettings.aaSortingFixed !== null) ? oSettings.aaSortingFixed.concat(oSettings.aaSorting) : oSettings.aaSorting.slice(); for ( i = 0; i < aaSort.length; i++) { aDataSort = oSettings.aoColumns[aaSort[i][0]].aDataSort; for ( j = 0; j < aDataSort.length; j++) { aoData.push({ "name" : "iSortCol_" + iCounter, "value" : aDataSort[j] }); aoData.push({ "name" : "sSortDir_" + iCounter, "value" : aaSort[i][1] }); iCounter++ } } aoData.push({ "name" : "iSortingCols", "value" : iCounter }); for ( i = 0; i < iColumns; i++) { aoData.push({ "name" : "bSortable_" + i, "value" : oSettings.aoColumns[i].bSortable }) } } return aoData } function _fnServerParams(oSettings, aoData) { _fnCallbackFire(oSettings, 'aoServerParams', 'serverParams', [aoData]) } function _fnAjaxUpdateDraw(oSettings, json) { if (json.sEcho !== undefined) { if (json.sEcho * 1 < oSettings.iDraw) { return } else { oSettings.iDraw = json.sEcho * 1 } } if (!oSettings.oScroll.bInfinite || (oSettings.oScroll.bInfinite && (oSettings.bSorted || oSettings.bFiltered))) { _fnClearTable(oSettings) } oSettings._iRecordsTotal = parseInt(json.iTotalRecords, 10); oSettings._iRecordsDisplay = parseInt(json.iTotalDisplayRecords, 10); var sOrdering = _fnColumnOrdering(oSettings); var bReOrder = (json.sColumns !== undefined && sOrdering !== "" && json.sColumns != sOrdering); var aiIndex; if (bReOrder) { aiIndex = _fnReOrderIndex(oSettings, json.sColumns) } var aData = _fnGetObjectDataFn(oSettings.sAjaxDataProp)(json); for (var i = 0, iLen = aData.length; i < iLen; i++) { if (bReOrder) { var aDataSorted = []; for (var j = 0, jLen = oSettings.aoColumns.length; j < jLen; j++) { aDataSorted.push(aData[i][aiIndex[j]]) } _fnAddData(oSettings, aDataSorted) } else { _fnAddData(oSettings, aData[i]) } } oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); oSettings.bAjaxDataGet = false; _fnDraw(oSettings); oSettings.bAjaxDataGet = true; _fnProcessingDisplay(oSettings, false) } function _fnFeatureHtmlFilter(oSettings) { var oPreviousSearch = oSettings.oPreviousSearch; var sSearchStr = oSettings.oLanguage.sSearch; sSearchStr = (sSearchStr.indexOf('_INPUT_') !== -1) ? sSearchStr.replace('_INPUT_', '') : sSearchStr === "" ? '' : sSearchStr + ' '; var nFilter = document.createElement('div'); nFilter.className = oSettings.oClasses.sFilter; nFilter.innerHTML = ''; if (!oSettings.aanFeatures.f) { nFilter.id = oSettings.sTableId + '_filter' } var jqFilter = $('input[type="text"]', nFilter); nFilter._DT_Input = jqFilter[0]; jqFilter.val(oPreviousSearch.sSearch.replace('"', '"')); jqFilter.bind('keyup.DT', function(e) { var n = oSettings.aanFeatures.f; var val = this.value === "" ? "" : this.value; for (var i = 0, iLen = n.length; i < iLen; i++) { if (n[i] != $(this).parents('div.dataTables_filter')[0]) { $(n[i]._DT_Input).val(val) } } if (val != oPreviousSearch.sSearch) { _fnFilterComplete(oSettings, { "sSearch" : val, "bRegex" : oPreviousSearch.bRegex, "bSmart" : oPreviousSearch.bSmart, "bCaseInsensitive" : oPreviousSearch.bCaseInsensitive }) } }); jqFilter.attr('aria-controls', oSettings.sTableId).bind('keypress.DT', function(e) { if (e.keyCode == 13) { return false } }); return nFilter } function _fnFilterComplete(oSettings, oInput, iForce) { var oPrevSearch = oSettings.oPreviousSearch; var aoPrevSearch = oSettings.aoPreSearchCols; var fnSaveFilter = function(oFilter) { oPrevSearch.sSearch = oFilter.sSearch; oPrevSearch.bRegex = oFilter.bRegex; oPrevSearch.bSmart = oFilter.bSmart; oPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive }; if (!oSettings.oFeatures.bServerSide) { _fnFilter(oSettings, oInput.sSearch, iForce, oInput.bRegex, oInput.bSmart, oInput.bCaseInsensitive); fnSaveFilter(oInput); for (var i = 0; i < oSettings.aoPreSearchCols.length; i++) { _fnFilterColumn(oSettings, aoPrevSearch[i].sSearch, i, aoPrevSearch[i].bRegex, aoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive) } _fnFilterCustom(oSettings) } else { fnSaveFilter(oInput) } oSettings.bFiltered = true; $(oSettings.oInstance).trigger('filter', oSettings); oSettings._iDisplayStart = 0; _fnCalculateEnd(oSettings); _fnDraw(oSettings); _fnBuildSearchArray(oSettings, 0) } function _fnFilterCustom(oSettings) { var afnFilters = DataTable.ext.afnFiltering; var aiFilterColumns = _fnGetColumns(oSettings, 'bSearchable'); for (var i = 0, iLen = afnFilters.length; i < iLen; i++) { var iCorrector = 0; for (var j = 0, jLen = oSettings.aiDisplay.length; j < jLen; j++) { var iDisIndex = oSettings.aiDisplay[j - iCorrector]; var bTest = afnFilters[i](oSettings, _fnGetRowData(oSettings, iDisIndex, 'filter', aiFilterColumns), iDisIndex); if (!bTest) { oSettings.aiDisplay.splice(j - iCorrector, 1); iCorrector++ } } } } function _fnFilterColumn(oSettings, sInput, iColumn, bRegex, bSmart, bCaseInsensitive) { if (sInput === "") { return } var iIndexCorrector = 0; var rpSearch = _fnFilterCreateSearch(sInput, bRegex, bSmart, bCaseInsensitive); for (var i = oSettings.aiDisplay.length - 1; i >= 0; i--) { var sData = _fnDataToSearch(_fnGetCellData(oSettings, oSettings.aiDisplay[i], iColumn, 'filter'), oSettings.aoColumns[iColumn].sType); if (!rpSearch.test(sData)) { oSettings.aiDisplay.splice(i, 1); iIndexCorrector++ } } } function _fnFilter(oSettings, sInput, iForce, bRegex, bSmart, bCaseInsensitive) { var i; var rpSearch = _fnFilterCreateSearch(sInput, bRegex, bSmart, bCaseInsensitive); var oPrevSearch = oSettings.oPreviousSearch; if (!iForce) { iForce = 0 } if (DataTable.ext.afnFiltering.length !== 0) { iForce = 1 } if (sInput.length <= 0) { oSettings.aiDisplay.splice(0, oSettings.aiDisplay.length); oSettings.aiDisplay = oSettings.aiDisplayMaster.slice() } else { if (oSettings.aiDisplay.length == oSettings.aiDisplayMaster.length || oPrevSearch.sSearch.length > sInput.length || iForce == 1 || sInput.indexOf(oPrevSearch.sSearch) !== 0) { oSettings.aiDisplay.splice(0, oSettings.aiDisplay.length); _fnBuildSearchArray(oSettings, 1); for ( i = 0; i < oSettings.aiDisplayMaster.length; i++) { if (rpSearch.test(oSettings.asDataSearch[i])) { oSettings.aiDisplay.push(oSettings.aiDisplayMaster[i]) } } } else { var iIndexCorrector = 0; for ( i = 0; i < oSettings.asDataSearch.length; i++) { if (!rpSearch.test(oSettings.asDataSearch[i])) { oSettings.aiDisplay.splice(i - iIndexCorrector, 1); iIndexCorrector++ } } } } } function _fnBuildSearchArray(oSettings, iMaster) { if (!oSettings.oFeatures.bServerSide) { oSettings.asDataSearch = []; var aiFilterColumns = _fnGetColumns(oSettings, 'bSearchable'); var aiIndex = (iMaster === 1) ? oSettings.aiDisplayMaster : oSettings.aiDisplay; for (var i = 0, iLen = aiIndex.length; i < iLen; i++) { oSettings.asDataSearch[i] = _fnBuildSearchRow(oSettings, _fnGetRowData(oSettings, aiIndex[i], 'filter', aiFilterColumns)) } } } function _fnBuildSearchRow(oSettings, aData) { var sSearch = aData.join(' '); if (sSearch.indexOf('&') !== -1) { sSearch = $('
').html(sSearch).text() } return sSearch.replace(/[\n\r]/g, " ") } function _fnFilterCreateSearch(sSearch, bRegex, bSmart, bCaseInsensitive) { var asSearch, sRegExpString; if (bSmart) { asSearch = bRegex ? sSearch.split(' ') : _fnEscapeRegex(sSearch).split(' '); sRegExpString = '^(?=.*?' + asSearch.join(')(?=.*?') + ').*$'; return new RegExp(sRegExpString, bCaseInsensitive ? "i" : "") } else { sSearch = bRegex ? sSearch : _fnEscapeRegex(sSearch); return new RegExp(sSearch, bCaseInsensitive ? "i" : "") } } function _fnDataToSearch(sData, sType) { if ( typeof DataTable.ext.ofnSearch[sType] === "function") { return DataTable.ext.ofnSearch[sType](sData) } else if (sData === null) { return '' } else if (sType == "html") { return sData.replace(/[\r\n]/g, " ").replace(/<.*?>/g, "") } else if ( typeof sData === "string") { return sData.replace(/[\r\n]/g, " ") } return sData } function _fnEscapeRegex(sVal) { var acEscape = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-']; var reReplace = new RegExp('(\\' + acEscape.join('|\\') + ')', 'g'); return sVal.replace(reReplace, '\\$1') } function _fnFeatureHtmlInfo(oSettings) { var nInfo = document.createElement('div'); nInfo.className = oSettings.oClasses.sInfo; if (!oSettings.aanFeatures.i) { oSettings.aoDrawCallback.push({ "fn" : _fnUpdateInfo, "sName" : "information" }); nInfo.id = oSettings.sTableId + '_info' } oSettings.nTable.setAttribute('aria-describedby', oSettings.sTableId + '_info'); return nInfo } function _fnUpdateInfo(oSettings) { if (!oSettings.oFeatures.bInfo || oSettings.aanFeatures.i.length === 0) { return } var oLang = oSettings.oLanguage, iStart = oSettings._iDisplayStart + 1, iEnd = oSettings.fnDisplayEnd(), iMax = oSettings.fnRecordsTotal(), iTotal = oSettings.fnRecordsDisplay(), sOut; if (iTotal === 0) { sOut = oLang.sInfoEmpty } else { sOut = oLang.sInfo } if (iTotal != iMax) { sOut += ' ' + oLang.sInfoFiltered } sOut += oLang.sInfoPostFix; sOut = _fnInfoMacros(oSettings, sOut); if (oLang.fnInfoCallback !== null) { sOut = oLang.fnInfoCallback.call(oSettings.oInstance, oSettings, iStart, iEnd, iMax, iTotal, sOut) } var n = oSettings.aanFeatures.i; for (var i = 0, iLen = n.length; i < iLen; i++) { $(n[i]).html(sOut) } } function _fnInfoMacros(oSettings, str) { var iStart = oSettings._iDisplayStart + 1, sStart = oSettings.fnFormatNumber(iStart), iEnd = oSettings.fnDisplayEnd(), sEnd = oSettings.fnFormatNumber(iEnd), iTotal = oSettings.fnRecordsDisplay(), sTotal = oSettings.fnFormatNumber(iTotal), iMax = oSettings.fnRecordsTotal(), sMax = oSettings.fnFormatNumber(iMax); if (oSettings.oScroll.bInfinite) { sStart = oSettings.fnFormatNumber(1) } return str.replace(/_START_/g, sStart).replace(/_END_/g, sEnd).replace(/_TOTAL_/g, sTotal).replace(/_MAX_/g, sMax) } function _fnInitialise(oSettings) { var i, iLen, iAjaxStart = oSettings.iInitDisplayStart; if (oSettings.bInitialised === false) { setTimeout(function() { _fnInitialise(oSettings) }, 200); return } _fnAddOptionsHtml(oSettings); _fnBuildHead(oSettings); _fnDrawHead(oSettings, oSettings.aoHeader); if (oSettings.nTFoot) { _fnDrawHead(oSettings, oSettings.aoFooter) } _fnProcessingDisplay(oSettings, true); if (oSettings.oFeatures.bAutoWidth) { _fnCalculateColumnWidths(oSettings) } for ( i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { if (oSettings.aoColumns[i].sWidth !== null) { oSettings.aoColumns[i].nTh.style.width = _fnStringToCss(oSettings.aoColumns[i].sWidth) } } if (oSettings.oFeatures.bSort) { _fnSort(oSettings) } else if (oSettings.oFeatures.bFilter) { _fnFilterComplete(oSettings, oSettings.oPreviousSearch) } else { oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); _fnCalculateEnd(oSettings); _fnDraw(oSettings) } if (oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide) { var aoData = []; _fnServerParams(oSettings, aoData); oSettings.fnServerData.call(oSettings.oInstance, oSettings.sAjaxSource, aoData, function(json) { var aData = (oSettings.sAjaxDataProp !== "") ? _fnGetObjectDataFn(oSettings.sAjaxDataProp)(json) : json; for ( i = 0; i < aData.length; i++) { _fnAddData(oSettings, aData[i]) } oSettings.iInitDisplayStart = iAjaxStart; if (oSettings.oFeatures.bSort) { _fnSort(oSettings) } else { oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); _fnCalculateEnd(oSettings); _fnDraw(oSettings) } _fnProcessingDisplay(oSettings, false); _fnInitComplete(oSettings, json) }, oSettings); return } if (!oSettings.oFeatures.bServerSide) { _fnProcessingDisplay(oSettings, false); _fnInitComplete(oSettings) } } function _fnInitComplete(oSettings, json) { oSettings._bInitComplete = true; _fnCallbackFire(oSettings, 'aoInitComplete', 'init', [oSettings, json]) } function _fnLanguageCompat(oLanguage) { var oDefaults = DataTable.defaults.oLanguage; if (!oLanguage.sEmptyTable && oLanguage.sZeroRecords && oDefaults.sEmptyTable === "No data available in table") { _fnMap(oLanguage, oLanguage, 'sZeroRecords', 'sEmptyTable') } if (!oLanguage.sLoadingRecords && oLanguage.sZeroRecords && oDefaults.sLoadingRecords === "Loading...") { _fnMap(oLanguage, oLanguage, 'sZeroRecords', 'sLoadingRecords') } } function _fnFeatureHtmlLength(oSettings) { if (oSettings.oScroll.bInfinite) { return null } var sName = 'name="' + oSettings.sTableId + '_length" id="' + oSettings.sTableId + '_length"'; var sStdMenu = ''; var nLength = document.createElement('div'); if (!oSettings.aanFeatures.l) { nLength.id = oSettings.sTableId + '_length' } nLength.className = oSettings.oClasses.sLength; nLength.innerHTML = ''; $('select option[value="' + oSettings._iDisplayLength + '"]', nLength).attr("selected", true); $('select', nLength).bind('change.DT', function(e) { var iVal = $(this).val(); var n = oSettings.aanFeatures.l; for ( i = 0, iLen = n.length; i < iLen; i++) { if (n[i] != this.parentNode) { $('select', n[i]).val(iVal) } } oSettings._iDisplayLength = parseInt(iVal, 10); _fnCalculateEnd(oSettings); 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 } function _fnCalculateEnd(oSettings) { if (oSettings.oFeatures.bPaginate === false) { oSettings._iDisplayEnd = oSettings.aiDisplay.length } else { if (oSettings._iDisplayStart + oSettings._iDisplayLength > oSettings.aiDisplay.length || oSettings._iDisplayLength == -1) { oSettings._iDisplayEnd = oSettings.aiDisplay.length } else { oSettings._iDisplayEnd = oSettings._iDisplayStart + oSettings._iDisplayLength } } } function _fnFeatureHtmlPaginate(oSettings) { if (oSettings.oScroll.bInfinite) { return null } var nPaginate = document.createElement('div'); nPaginate.className = oSettings.oClasses.sPaging + oSettings.sPaginationType; DataTable.ext.oPagination[oSettings.sPaginationType].fnInit(oSettings, nPaginate, function(oSettings) { _fnCalculateEnd(oSettings); _fnDraw(oSettings) }); if (!oSettings.aanFeatures.p) { oSettings.aoDrawCallback.push({ "fn" : function(oSettings) { DataTable.ext.oPagination[oSettings.sPaginationType].fnUpdate(oSettings, function(oSettings) { _fnCalculateEnd(oSettings); _fnDraw(oSettings) }) }, "sName" : "pagination" }) } return nPaginate } function _fnPageChange(oSettings, mAction) { var iOldStart = oSettings._iDisplayStart; if ( typeof mAction === "number") { oSettings._iDisplayStart = mAction * oSettings._iDisplayLength; if (oSettings._iDisplayStart > oSettings.fnRecordsDisplay()) { oSettings._iDisplayStart = 0 } } else if (mAction == "first") { oSettings._iDisplayStart = 0 } else if (mAction == "previous") { oSettings._iDisplayStart = oSettings._iDisplayLength >= 0 ? oSettings._iDisplayStart - oSettings._iDisplayLength : 0; if (oSettings._iDisplayStart < 0) { oSettings._iDisplayStart = 0 } } else if (mAction == "next") { if (oSettings._iDisplayLength >= 0) { if (oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay()) { oSettings._iDisplayStart += oSettings._iDisplayLength } } else { oSettings._iDisplayStart = 0 } } else if (mAction == "last") { if (oSettings._iDisplayLength >= 0) { var iPages = parseInt((oSettings.fnRecordsDisplay() - 1) / oSettings._iDisplayLength, 10) + 1; oSettings._iDisplayStart = (iPages - 1) * oSettings._iDisplayLength } else { oSettings._iDisplayStart = 0 } } else { _fnLog(oSettings, 0, "Unknown paging action: " + mAction) } $(oSettings.oInstance).trigger('page', oSettings); return iOldStart != oSettings._iDisplayStart } function _fnFeatureHtmlProcessing(oSettings) { var nProcessing = document.createElement('div'); if (!oSettings.aanFeatures.r) { nProcessing.id = oSettings.sTableId + '_processing' } nProcessing.innerHTML = oSettings.oLanguage.sProcessing; nProcessing.className = oSettings.oClasses.sProcessing; oSettings.nTable.parentNode.insertBefore(nProcessing, oSettings.nTable); return nProcessing } function _fnProcessingDisplay(oSettings, bShow) { if (oSettings.oFeatures.bProcessing) { var an = oSettings.aanFeatures.r; for (var i = 0, iLen = an.length; i < iLen; i++) { an[i].style.visibility = bShow ? "visible" : "hidden" } } $(oSettings.oInstance).trigger('processing', [oSettings, bShow]) } function _fnFeatureHtmlTable(oSettings) { if (oSettings.oScroll.sX === "" && oSettings.oScroll.sY === "") { return oSettings.nTable } var nScroller = document.createElement('div'), nScrollHead = document.createElement('div'), nScrollHeadInner = document.createElement('div'), nScrollBody = document.createElement('div'), nScrollFoot = document.createElement('div'), nScrollFootInner = document.createElement('div'), nScrollHeadTable = oSettings.nTable.cloneNode(false), nScrollFootTable = oSettings.nTable.cloneNode(false), nThead = oSettings.nTable.getElementsByTagName('thead')[0], nTfoot = oSettings.nTable.getElementsByTagName('tfoot').length === 0 ? null : oSettings.nTable.getElementsByTagName('tfoot')[0], oClasses = oSettings.oClasses; nScrollHead.appendChild(nScrollHeadInner); nScrollFoot.appendChild(nScrollFootInner); nScrollBody.appendChild(oSettings.nTable); nScroller.appendChild(nScrollHead); nScroller.appendChild(nScrollBody); nScrollHeadInner.appendChild(nScrollHeadTable); nScrollHeadTable.appendChild(nThead); if (nTfoot !== null) { nScroller.appendChild(nScrollFoot); nScrollFootInner.appendChild(nScrollFootTable); nScrollFootTable.appendChild(nTfoot) } nScroller.className = oClasses.sScrollWrapper; nScrollHead.className = oClasses.sScrollHead; nScrollHeadInner.className = oClasses.sScrollHeadInner; nScrollBody.className = oClasses.sScrollBody; nScrollFoot.className = oClasses.sScrollFoot; nScrollFootInner.className = oClasses.sScrollFootInner; if (oSettings.oScroll.bAutoCss) { nScrollHead.style.overflow = "hidden"; nScrollHead.style.position = "relative"; nScrollFoot.style.overflow = "hidden"; nScrollBody.style.overflow = "auto" } nScrollHead.style.border = "0"; nScrollHead.style.width = "100%"; nScrollFoot.style.border = "0"; nScrollHeadInner.style.width = oSettings.oScroll.sXInner !== "" ? oSettings.oScroll.sXInner : "100%"; nScrollHeadTable.removeAttribute('id'); nScrollHeadTable.style.marginLeft = "0"; oSettings.nTable.style.marginLeft = "0"; if (nTfoot !== null) { nScrollFootTable.removeAttribute('id'); nScrollFootTable.style.marginLeft = "0" } var nCaption = $(oSettings.nTable).children('caption'); if (nCaption.length > 0) { nCaption = nCaption[0]; if (nCaption._captionSide === "top") { nScrollHeadTable.appendChild(nCaption) } else if (nCaption._captionSide === "bottom" && nTfoot) { nScrollFootTable.appendChild(nCaption) } } if (oSettings.oScroll.sX !== "") { nScrollHead.style.width = _fnStringToCss(oSettings.oScroll.sX); nScrollBody.style.width = _fnStringToCss(oSettings.oScroll.sX); if (nTfoot !== null) { nScrollFoot.style.width = _fnStringToCss(oSettings.oScroll.sX) } $(nScrollBody).scroll(function(e) { nScrollHead.scrollLeft = this.scrollLeft; if (nTfoot !== null) { nScrollFoot.scrollLeft = this.scrollLeft } }) } if (oSettings.oScroll.sY !== "") { nScrollBody.style.height = _fnStringToCss(oSettings.oScroll.sY) } oSettings.aoDrawCallback.push({ "fn" : _fnScrollDraw, "sName" : "scrolling" }); if (oSettings.oScroll.bInfinite) { $(nScrollBody).scroll(function() { if (!oSettings.bDrawing && $(this).scrollTop() !== 0) { if ($(this).scrollTop() + $(this).height() > $(oSettings.nTable).height() - oSettings.oScroll.iLoadGap) { if (oSettings.fnDisplayEnd() < oSettings.fnRecordsDisplay()) { _fnPageChange(oSettings, 'next'); _fnCalculateEnd(oSettings); _fnDraw(oSettings) } } } }) } oSettings.nScrollHead = nScrollHead; oSettings.nScrollFoot = nScrollFoot; return nScroller } function _fnScrollDraw(o) { var nScrollHeadInner = o.nScrollHead.getElementsByTagName('div')[0], nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0], nScrollBody = o.nTable.parentNode, i, iLen, j, jLen, anHeadToSize, anHeadSizers, anFootSizers, anFootToSize, oStyle, iVis, nTheadSize, nTfootSize, iWidth, aApplied = [], aAppliedFooter = [], iSanityWidth, nScrollFootInner = (o.nTFoot !== null) ? o.nScrollFoot.getElementsByTagName('div')[0] : null, nScrollFootTable = (o.nTFoot !== null) ? nScrollFootInner.getElementsByTagName('table')[0] : null, ie67 = o.oBrowser.bScrollOversize, zeroOut = function(nSizer) { oStyle = nSizer.style; oStyle.paddingTop = "0"; oStyle.paddingBottom = "0"; oStyle.borderTopWidth = "0"; oStyle.borderBottomWidth = "0"; oStyle.height = 0 }; $(o.nTable).children('thead, tfoot').remove(); nTheadSize = $(o.nTHead).clone()[0]; o.nTable.insertBefore(nTheadSize, o.nTable.childNodes[0]); anHeadToSize = o.nTHead.getElementsByTagName('tr'); anHeadSizers = nTheadSize.getElementsByTagName('tr'); if (o.nTFoot !== null) { nTfootSize = $(o.nTFoot).clone()[0]; o.nTable.insertBefore(nTfootSize, o.nTable.childNodes[1]); anFootToSize = o.nTFoot.getElementsByTagName('tr'); anFootSizers = nTfootSize.getElementsByTagName('tr') } if (o.oScroll.sX === "") { nScrollBody.style.width = '100%'; nScrollHeadInner.parentNode.style.width = '100%' } var nThs = _fnGetUniqueThs(o, nTheadSize); for ( i = 0, iLen = nThs.length; i < iLen; i++) { iVis = _fnVisibleToColumnIndex(o, i); nThs[i].style.width = o.aoColumns[iVis].sWidth } if (o.nTFoot !== null) { _fnApplyToChildren(function(n) { n.style.width = "" }, anFootSizers) } if (o.oScroll.bCollapse && o.oScroll.sY !== "") { nScrollBody.style.height = (nScrollBody.offsetHeight + o.nTHead.offsetHeight) + "px" } iSanityWidth = $(o.nTable).outerWidth(); if (o.oScroll.sX === "") { o.nTable.style.width = "100%"; if (ie67 && ($('tbody', nScrollBody).height() > nScrollBody.offsetHeight || $(nScrollBody).css('overflow-y') == "scroll")) { o.nTable.style.width = _fnStringToCss($(o.nTable).outerWidth() - o.oScroll.iBarWidth) } } else { if (o.oScroll.sXInner !== "") { o.nTable.style.width = _fnStringToCss(o.oScroll.sXInner) } else if (iSanityWidth == $(nScrollBody).width() && $(nScrollBody).height() < $(o.nTable).height()) { o.nTable.style.width = _fnStringToCss(iSanityWidth - o.oScroll.iBarWidth); if ($(o.nTable).outerWidth() > iSanityWidth - o.oScroll.iBarWidth) { o.nTable.style.width = _fnStringToCss(iSanityWidth) } } else { o.nTable.style.width = _fnStringToCss(iSanityWidth) } } iSanityWidth = $(o.nTable).outerWidth(); _fnApplyToChildren(zeroOut, anHeadSizers); _fnApplyToChildren(function(nSizer) { aApplied.push(_fnStringToCss($(nSizer).width())) }, anHeadSizers); _fnApplyToChildren(function(nToSize, i) { nToSize.style.width = aApplied[i] }, anHeadToSize); $(anHeadSizers).height(0); if (o.nTFoot !== null) { _fnApplyToChildren(zeroOut, anFootSizers); _fnApplyToChildren(function(nSizer) { aAppliedFooter.push(_fnStringToCss($(nSizer).width())) }, anFootSizers); _fnApplyToChildren(function(nToSize, i) { nToSize.style.width = aAppliedFooter[i] }, anFootToSize); $(anFootSizers).height(0) } _fnApplyToChildren(function(nSizer, i) { nSizer.innerHTML = ""; nSizer.style.width = aApplied[i] }, anHeadSizers); if (o.nTFoot !== null) { _fnApplyToChildren(function(nSizer, i) { nSizer.innerHTML = ""; nSizer.style.width = aAppliedFooter[i] }, anFootSizers) } if ($(o.nTable).outerWidth() < iSanityWidth) { var iCorrection = ((nScrollBody.scrollHeight > nScrollBody.offsetHeight || $(nScrollBody).css('overflow-y') == "scroll")) ? iSanityWidth + o.oScroll.iBarWidth : iSanityWidth; if (ie67 && (nScrollBody.scrollHeight > nScrollBody.offsetHeight || $(nScrollBody).css('overflow-y') == "scroll")) { o.nTable.style.width = _fnStringToCss(iCorrection - o.oScroll.iBarWidth) } nScrollBody.style.width = _fnStringToCss(iCorrection); o.nScrollHead.style.width = _fnStringToCss(iCorrection); if (o.nTFoot !== null) { o.nScrollFoot.style.width = _fnStringToCss(iCorrection) } if (o.oScroll.sX === "") { _fnLog(o, 1, "The table cannot fit into the current element which will cause column" + " misalignment. The table has been drawn at its minimum possible width.") } else if (o.oScroll.sXInner !== "") { _fnLog(o, 1, "The table cannot fit into the current element which will cause column" + " misalignment. Increase the sScrollXInner value or remove it to allow automatic" + " calculation") } } else { nScrollBody.style.width = _fnStringToCss('100%'); o.nScrollHead.style.width = _fnStringToCss('100%'); if (o.nTFoot !== null) { o.nScrollFoot.style.width = _fnStringToCss('100%') } } if (o.oScroll.sY === "") { if (ie67) { nScrollBody.style.height = _fnStringToCss(o.nTable.offsetHeight + o.oScroll.iBarWidth) } } if (o.oScroll.sY !== "" && o.oScroll.bCollapse) { nScrollBody.style.height = _fnStringToCss(o.oScroll.sY); var iExtra = (o.oScroll.sX !== "" && o.nTable.offsetWidth > nScrollBody.offsetWidth) ? o.oScroll.iBarWidth : 0; if (o.nTable.offsetHeight < nScrollBody.offsetHeight) { nScrollBody.style.height = _fnStringToCss(o.nTable.offsetHeight + iExtra) } } var iOuterWidth = $(o.nTable).outerWidth(); nScrollHeadTable.style.width = _fnStringToCss(iOuterWidth); nScrollHeadInner.style.width = _fnStringToCss(iOuterWidth); var bScrolling = $(o.nTable).height() > nScrollBody.clientHeight || $(nScrollBody).css('overflow-y') == "scroll"; nScrollHeadInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth + "px" : "0px"; if (o.nTFoot !== null) { nScrollFootTable.style.width = _fnStringToCss(iOuterWidth); nScrollFootInner.style.width = _fnStringToCss(iOuterWidth); nScrollFootInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth + "px" : "0px" } $(nScrollBody).scroll(); if (o.bSorted || o.bFiltered) { nScrollBody.scrollTop = 0 } } function _fnApplyToChildren(fn, an1, an2) { var index = 0, i = 0, iLen = an1.length; var nNode1, nNode2; while (i < iLen) { nNode1 = an1[i].firstChild; nNode2 = an2 ? an2[i].firstChild : null; while (nNode1) { if (nNode1.nodeType === 1) { if (an2) { fn(nNode1, nNode2, index) } else { fn(nNode1, index) } index++ } nNode1 = nNode1.nextSibling; nNode2 = an2 ? nNode2.nextSibling : null } i++ } } function _fnConvertToWidth(sWidth, nParent) { if (!sWidth || sWidth === null || sWidth === '') { return 0 } if (!nParent) { nParent = document.body } var iWidth; var nTmp = document.createElement("div"); nTmp.style.width = _fnStringToCss(sWidth); nParent.appendChild(nTmp); iWidth = nTmp.offsetWidth; nParent.removeChild(nTmp); return (iWidth) } function _fnCalculateColumnWidths(oSettings) { var iTableWidth = oSettings.nTable.offsetWidth; var iUserInputs = 0; var iTmpWidth; var iVisibleColumns = 0; var iColums = oSettings.aoColumns.length; var i, iIndex, iCorrector, iWidth; var oHeaders = $('th', oSettings.nTHead); var widthAttr = oSettings.nTable.getAttribute('width'); var nWrapper = oSettings.nTable.parentNode; for ( i = 0; i < iColums; i++) { if (oSettings.aoColumns[i].bVisible) { iVisibleColumns++; if (oSettings.aoColumns[i].sWidth !== null) { iTmpWidth = _fnConvertToWidth(oSettings.aoColumns[i].sWidthOrig, nWrapper); if (iTmpWidth !== null) { oSettings.aoColumns[i].sWidth = _fnStringToCss(iTmpWidth) } iUserInputs++ } } } if (iColums == oHeaders.length && iUserInputs === 0 && iVisibleColumns == iColums && oSettings.oScroll.sX === "" && oSettings.oScroll.sY === "") { for ( i = 0; i < oSettings.aoColumns.length; i++) { iTmpWidth = $(oHeaders[i]).width(); if (iTmpWidth !== null) { oSettings.aoColumns[i].sWidth = _fnStringToCss(iTmpWidth) } } } else { var nCalcTmp = oSettings.nTable.cloneNode(false), nTheadClone = oSettings.nTHead.cloneNode(true), nBody = document.createElement('tbody'), nTr = document.createElement('tr'), nDivSizing; nCalcTmp.removeAttribute("id"); nCalcTmp.appendChild(nTheadClone); if (oSettings.nTFoot !== null) { nCalcTmp.appendChild(oSettings.nTFoot.cloneNode(true)); _fnApplyToChildren(function(n) { n.style.width = "" }, nCalcTmp.getElementsByTagName('tr')) } nCalcTmp.appendChild(nBody); nBody.appendChild(nTr); var jqColSizing = $('thead th', nCalcTmp); if (jqColSizing.length === 0) { jqColSizing = $('tbody tr:eq(0)>td', nCalcTmp) } var nThs = _fnGetUniqueThs(oSettings, nTheadClone); iCorrector = 0; for ( i = 0; i < iColums; i++) { var oColumn = oSettings.aoColumns[i]; if (oColumn.bVisible && oColumn.sWidthOrig !== null && oColumn.sWidthOrig !== "") { nThs[i - iCorrector].style.width = _fnStringToCss(oColumn.sWidthOrig) } else if (oColumn.bVisible) { nThs[i - iCorrector].style.width = "" } else { iCorrector++ } } for ( i = 0; i < iColums; i++) { if (oSettings.aoColumns[i].bVisible) { var nTd = _fnGetWidestNode(oSettings, i); if (nTd !== null) { nTd = nTd.cloneNode(true); if (oSettings.aoColumns[i].sContentPadding !== "") { nTd.innerHTML += oSettings.aoColumns[i].sContentPadding } nTr.appendChild(nTd) } } } nWrapper.appendChild(nCalcTmp); if (oSettings.oScroll.sX !== "" && oSettings.oScroll.sXInner !== "") { nCalcTmp.style.width = _fnStringToCss(oSettings.oScroll.sXInner) } else if (oSettings.oScroll.sX !== "") { nCalcTmp.style.width = ""; if ($(nCalcTmp).width() < nWrapper.offsetWidth) { nCalcTmp.style.width = _fnStringToCss(nWrapper.offsetWidth) } } else if (oSettings.oScroll.sY !== "") { nCalcTmp.style.width = _fnStringToCss(nWrapper.offsetWidth) } else if (widthAttr) { nCalcTmp.style.width = _fnStringToCss(widthAttr) } nCalcTmp.style.visibility = "hidden"; _fnScrollingWidthAdjust(oSettings, nCalcTmp); var oNodes = $("tbody tr:eq(0)", nCalcTmp).children(); if (oNodes.length === 0) { oNodes = _fnGetUniqueThs(oSettings, $('thead',nCalcTmp)[0]) } if (oSettings.oScroll.sX !== "") { var iTotal = 0; iCorrector = 0; for ( i = 0; i < oSettings.aoColumns.length; i++) { if (oSettings.aoColumns[i].bVisible) { if (oSettings.aoColumns[i].sWidthOrig === null) { iTotal += $(oNodes[iCorrector]).outerWidth() } else { iTotal += parseInt(oSettings.aoColumns[i].sWidth.replace('px', ''), 10) + ($(oNodes[iCorrector]).outerWidth() - $(oNodes[iCorrector]).width()) } iCorrector++ } } nCalcTmp.style.width = _fnStringToCss(iTotal); oSettings.nTable.style.width = _fnStringToCss(iTotal) } iCorrector = 0; for ( i = 0; i < oSettings.aoColumns.length; i++) { if (oSettings.aoColumns[i].bVisible) { iWidth = $(oNodes[iCorrector]).width(); if (iWidth !== null && iWidth > 0) { oSettings.aoColumns[i].sWidth = _fnStringToCss(iWidth) } iCorrector++ } } var cssWidth = $(nCalcTmp).css('width'); oSettings.nTable.style.width = (cssWidth.indexOf('%') !== -1) ? cssWidth : _fnStringToCss($(nCalcTmp).outerWidth()); nCalcTmp.parentNode.removeChild(nCalcTmp) } if (widthAttr) { oSettings.nTable.style.width = _fnStringToCss(widthAttr) } } function _fnScrollingWidthAdjust(oSettings, n) { if (oSettings.oScroll.sX === "" && oSettings.oScroll.sY !== "") { var iOrigWidth = $(n).width(); n.style.width = _fnStringToCss($(n).outerWidth() - oSettings.oScroll.iBarWidth) } else if (oSettings.oScroll.sX !== "") { n.style.width = _fnStringToCss($(n).outerWidth()) } } function _fnGetWidestNode(oSettings, iCol) { var iMaxIndex = _fnGetMaxLenString(oSettings, iCol); if (iMaxIndex < 0) { return null } if (oSettings.aoData[iMaxIndex].nTr === null) { var n = document.createElement('td'); n.innerHTML = _fnGetCellData(oSettings, iMaxIndex, iCol, ''); return n } return _fnGetTdNodes(oSettings,iMaxIndex)[iCol] } function _fnGetMaxLenString(oSettings, iCol) { var iMax = -1; var iMaxIndex = -1; for (var i = 0; i < oSettings.aoData.length; i++) { var s = _fnGetCellData(oSettings, i, iCol, 'display') + ""; s = s.replace(/<.*?>/g, ""); if (s.length > iMax) { iMax = s.length; iMaxIndex = i } } return iMaxIndex } function _fnStringToCss(s) { if (s === null) { return "0px" } if ( typeof s == 'number') { if (s < 0) { return "0px" } return s + "px" } var c = s.charCodeAt(s.length - 1); if (c < 0x30 || c > 0x39) { return s } return s + "px" } function _fnScrollBarWidth() { var inner = document.createElement('p'); var style = inner.style; style.width = "100%"; style.height = "200px"; style.padding = "0px"; var outer = document.createElement('div'); style = outer.style; style.position = "absolute"; style.top = "0px"; style.left = "0px"; style.visibility = "hidden"; style.width = "200px"; style.height = "150px"; style.padding = "0px"; style.overflow = "hidden"; outer.appendChild(inner); document.body.appendChild(outer); var w1 = inner.offsetWidth; outer.style.overflow = 'scroll'; var w2 = inner.offsetWidth; if (w1 == w2) { w2 = outer.clientWidth } document.body.removeChild(outer); return (w1 - w2) } function _fnSort(oSettings, bApplyClasses) { var i, iLen, j, jLen, k, kLen, sDataType, nTh, aaSort = [], aiOrig = [], oSort = DataTable.ext.oSort, aoData = oSettings.aoData, aoColumns = oSettings.aoColumns, oAria = oSettings.oLanguage.oAria; if (!oSettings.oFeatures.bServerSide && (oSettings.aaSorting.length !== 0 || oSettings.aaSortingFixed !== null)) { aaSort = (oSettings.aaSortingFixed !== null) ? oSettings.aaSortingFixed.concat(oSettings.aaSorting) : oSettings.aaSorting.slice(); for ( i = 0; i < aaSort.length; i++) { var iColumn = aaSort[i][0]; var iVisColumn = _fnColumnIndexToVisible(oSettings, iColumn); sDataType = oSettings.aoColumns[iColumn].sSortDataType; if (DataTable.ext.afnSortData[sDataType]) { var aData = DataTable.ext.afnSortData[sDataType].call(oSettings.oInstance, oSettings, iColumn, iVisColumn); if (aData.length === aoData.length) { for ( j = 0, jLen = aoData.length; j < jLen; j++) { _fnSetCellData(oSettings, j, iColumn, aData[j]) } } else { _fnLog(oSettings, 0, "Returned data sort array (col " + iColumn + ") is the wrong length") } } } for ( i = 0, iLen = oSettings.aiDisplayMaster.length; i < iLen; i++) { aiOrig[oSettings.aiDisplayMaster[i]] = i } var iSortLen = aaSort.length; var fnSortFormat, aDataSort; for ( i = 0, iLen = aoData.length; i < iLen; i++) { for ( j = 0; j < iSortLen; j++) { aDataSort = aoColumns[aaSort[j][0]].aDataSort; for ( k = 0, kLen = aDataSort.length; k < kLen; k++) { sDataType = aoColumns[aDataSort[k]].sType; fnSortFormat = oSort[( sDataType ? sDataType : 'string') + "-pre"]; aoData[i]._aSortData[aDataSort[k]] = fnSortFormat ? fnSortFormat(_fnGetCellData(oSettings, i, aDataSort[k], 'sort')) : _fnGetCellData(oSettings, i, aDataSort[k], 'sort') } } } oSettings.aiDisplayMaster.sort(function(a, b) { var k, l, lLen, iTest, aDataSort, sDataType; for ( k = 0; k < iSortLen; k++) { aDataSort = aoColumns[aaSort[k][0]].aDataSort; for ( l = 0, lLen = aDataSort.length; l < lLen; l++) { sDataType = aoColumns[aDataSort[l]].sType; iTest = oSort[(sDataType?sDataType:'string')+"-"+aaSort[k][1]](aoData[a]._aSortData[aDataSort[l]], aoData[b]._aSortData[aDataSort[l]]); if (iTest !== 0) { return iTest } } } return oSort['numeric-asc'](aiOrig[a], aiOrig[b]) }) } if ((bApplyClasses === undefined || bApplyClasses) && !oSettings.oFeatures.bDeferRender) { _fnSortingClasses(oSettings) } for ( i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { var sTitle = aoColumns[i].sTitle.replace(/<.*?>/g, ""); nTh = aoColumns[i].nTh; nTh.removeAttribute('aria-sort'); nTh.removeAttribute('aria-label'); if (aoColumns[i].bSortable) { if (aaSort.length > 0 && aaSort[0][0] == i) { nTh.setAttribute('aria-sort', aaSort[0][1] == "asc" ? "ascending" : "descending"); var nextSort = (aoColumns[i].asSorting[aaSort[0][2] + 1]) ? aoColumns[i].asSorting[aaSort[0][2] + 1] : aoColumns[i].asSorting[0]; nTh.setAttribute('aria-label', sTitle + (nextSort == "asc" ? oAria.sSortAscending : oAria.sSortDescending)) } else { nTh.setAttribute('aria-label', sTitle + (aoColumns[i].asSorting[0] == "asc" ? oAria.sSortAscending : oAria.sSortDescending)) } } else { nTh.setAttribute('aria-label', sTitle) } } oSettings.bSorted = true; $(oSettings.oInstance).trigger('sort', oSettings); if (oSettings.oFeatures.bFilter) { _fnFilterComplete(oSettings, oSettings.oPreviousSearch, 1) } else { oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); oSettings._iDisplayStart = 0; _fnCalculateEnd(oSettings); _fnDraw(oSettings) } } function _fnSortAttachListener(oSettings, nNode, iDataIndex, fnCallback) { _fnBindAction(nNode, {}, function(e) { if (oSettings.aoColumns[iDataIndex].bSortable === false) { return } var fnInnerSorting = function() { var iColumn, iNextSort; if (e.shiftKey) { var bFound = false; for (var i = 0; i < oSettings.aaSorting.length; i++) { if (oSettings.aaSorting[i][0] == iDataIndex) { bFound = true; iColumn = oSettings.aaSorting[i][0]; iNextSort = oSettings.aaSorting[i][2] + 1; if (!oSettings.aoColumns[iColumn].asSorting[iNextSort]) { oSettings.aaSorting.splice(i, 1) } else { oSettings.aaSorting[i][1] = oSettings.aoColumns[iColumn].asSorting[iNextSort]; oSettings.aaSorting[i][2] = iNextSort } break } } if (bFound === false) { oSettings.aaSorting.push([iDataIndex, oSettings.aoColumns[iDataIndex].asSorting[0], 0]) } } else { if (oSettings.aaSorting.length == 1 && oSettings.aaSorting[0][0] == iDataIndex) { iColumn = oSettings.aaSorting[0][0]; iNextSort = oSettings.aaSorting[0][2] + 1; if (!oSettings.aoColumns[iColumn].asSorting[iNextSort]) { iNextSort = 0 } oSettings.aaSorting[0][1] = oSettings.aoColumns[iColumn].asSorting[iNextSort]; oSettings.aaSorting[0][2] = iNextSort } else { oSettings.aaSorting.splice(0, oSettings.aaSorting.length); oSettings.aaSorting.push([iDataIndex, oSettings.aoColumns[iDataIndex].asSorting[0], 0]) } } _fnSort(oSettings) }; if (!oSettings.oFeatures.bProcessing) { fnInnerSorting() } else { _fnProcessingDisplay(oSettings, true); setTimeout(function() { fnInnerSorting(); if (!oSettings.oFeatures.bServerSide) { _fnProcessingDisplay(oSettings, false) } }, 0) } if ( typeof fnCallback == 'function') { fnCallback(oSettings) } }) } function _fnSortingClasses(oSettings) { var i, iLen, j, jLen, iFound; var aaSort, sClass; var iColumns = oSettings.aoColumns.length; var oClasses = oSettings.oClasses; for ( i = 0; i < iColumns; i++) { if (oSettings.aoColumns[i].bSortable) { $(oSettings.aoColumns[i].nTh).removeClass(oClasses.sSortAsc + " " + oClasses.sSortDesc + " " + oSettings.aoColumns[i].sSortingClass) } } if (oSettings.aaSortingFixed !== null) { aaSort = oSettings.aaSortingFixed.concat(oSettings.aaSorting) } else { aaSort = oSettings.aaSorting.slice() } for ( i = 0; i < oSettings.aoColumns.length; i++) { if (oSettings.aoColumns[i].bSortable) { sClass = oSettings.aoColumns[i].sSortingClass; iFound = -1; for ( j = 0; j < aaSort.length; j++) { if (aaSort[j][0] == i) { sClass = (aaSort[j][1] == "asc") ? oClasses.sSortAsc : oClasses.sSortDesc; iFound = j; break } } $(oSettings.aoColumns[i].nTh).addClass(sClass); if (oSettings.bJUI) { var jqSpan = $("span." + oClasses.sSortIcon, oSettings.aoColumns[i].nTh); jqSpan.removeClass(oClasses.sSortJUIAsc + " " + oClasses.sSortJUIDesc + " " + oClasses.sSortJUI + " " + oClasses.sSortJUIAscAllowed + " " + oClasses.sSortJUIDescAllowed); var sSpanClass; if (iFound == -1) { sSpanClass = oSettings.aoColumns[i].sSortingClassJUI } else if (aaSort[iFound][1] == "asc") { sSpanClass = oClasses.sSortJUIAsc } else { sSpanClass = oClasses.sSortJUIDesc } jqSpan.addClass(sSpanClass) } } else { $(oSettings.aoColumns[i].nTh).addClass(oSettings.aoColumns[i].sSortingClass) } } sClass = oClasses.sSortColumn; if (oSettings.oFeatures.bSort && oSettings.oFeatures.bSortClasses) { var nTds = _fnGetTdNodes(oSettings); var iClass, iTargetCol; var asClasses = []; for ( i = 0; i < iColumns; i++) { asClasses.push("") } for ( i = 0, iClass = 1; i < aaSort.length; i++) { iTargetCol = parseInt(aaSort[i][0], 10); asClasses[iTargetCol] = sClass + iClass; if (iClass < 3) { iClass++ } } var reClass = new RegExp(sClass + "[123]"); var sTmpClass, sCurrentClass, sNewClass; for ( i = 0, iLen = nTds.length; i < iLen; i++) { iTargetCol = i % iColumns; sCurrentClass = nTds[i].className; sNewClass = asClasses[iTargetCol]; sTmpClass = sCurrentClass.replace(reClass, sNewClass); if (sTmpClass != sCurrentClass) { nTds[i].className = $.trim(sTmpClass) } else if (sNewClass.length > 0 && sCurrentClass.indexOf(sNewClass) == -1) { nTds[i].className = sCurrentClass + " " + sNewClass } } } } function _fnSaveState(oSettings) { if (!oSettings.oFeatures.bStateSave || oSettings.bDestroying) { return } var i, iLen, bInfinite = oSettings.oScroll.bInfinite; var oState = { "iCreate" : new Date().getTime(), "iStart" : ( bInfinite ? 0 : oSettings._iDisplayStart), "iEnd" : ( bInfinite ? oSettings._iDisplayLength : oSettings._iDisplayEnd), "iLength" : oSettings._iDisplayLength, "aaSorting" : $.extend(true, [], oSettings.aaSorting), "oSearch" : $.extend(true, {}, oSettings.oPreviousSearch), "aoSearchCols" : $.extend(true, [], oSettings.aoPreSearchCols), "abVisCols" : [] }; for ( i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { oState.abVisCols.push(oSettings.aoColumns[i].bVisible) } _fnCallbackFire(oSettings, "aoStateSaveParams", 'stateSaveParams', [oSettings, oState]); oSettings.fnStateSave.call(oSettings.oInstance, oSettings, oState) } function _fnLoadState(oSettings, oInit) { if (!oSettings.oFeatures.bStateSave) { return } var oData = oSettings.fnStateLoad.call(oSettings.oInstance, oSettings); if (!oData) { return } var abStateLoad = _fnCallbackFire(oSettings, 'aoStateLoadParams', 'stateLoadParams', [oSettings, oData]); if ($.inArray(false, abStateLoad) !== -1) { return } oSettings.oLoadedState = $.extend(true, {}, oData); oSettings._iDisplayStart = oData.iStart; oSettings.iInitDisplayStart = oData.iStart; oSettings._iDisplayEnd = oData.iEnd; oSettings._iDisplayLength = oData.iLength; oSettings.aaSorting = oData.aaSorting.slice(); oSettings.saved_aaSorting = oData.aaSorting.slice(); $.extend(oSettings.oPreviousSearch, oData.oSearch); $.extend(true, oSettings.aoPreSearchCols, oData.aoSearchCols); oInit.saved_aoColumns = []; for (var i = 0; i < oData.abVisCols.length; i++) { oInit.saved_aoColumns[i] = {}; oInit.saved_aoColumns[i].bVisible = oData.abVisCols[i] } _fnCallbackFire(oSettings, 'aoStateLoaded', 'stateLoaded', [oSettings, oData]) } function _fnCreateCookie(sName, sValue, iSecs, sBaseName, fnCallback) { var date = new Date(); date.setTime(date.getTime() + (iSecs * 1000)); var aParts = window.location.pathname.split('/'); var sNameFile = sName + '_' + aParts.pop().replace(/[\/:]/g, "").toLowerCase(); var sFullCookie, oData; if (fnCallback !== null) { oData = ( typeof $.parseJSON === 'function') ? $.parseJSON(sValue) : eval('(' + sValue + ')'); sFullCookie = fnCallback(sNameFile, oData, date.toGMTString(), aParts.join('/') + "/") } else { sFullCookie = sNameFile + "=" + encodeURIComponent(sValue) + "; expires=" + date.toGMTString() + "; path=" + aParts.join('/') + "/" } var aCookies = document.cookie.split(';'), iNewCookieLen = sFullCookie.split(';')[0].length, aOldCookies = []; if (iNewCookieLen + document.cookie.length + 10 > 4096) { for (var i = 0, iLen = aCookies.length; i < iLen; i++) { if (aCookies[i].indexOf(sBaseName) != -1) { var aSplitCookie = aCookies[i].split('='); try { oData = eval('(' + decodeURIComponent(aSplitCookie[1]) + ')'); if (oData && oData.iCreate) { aOldCookies.push({ "name" : aSplitCookie[0], "time" : oData.iCreate }) } } catch(e) { } } } aOldCookies.sort(function(a, b) { return b.time - a.time }); while (iNewCookieLen + document.cookie.length + 10 > 4096) { if (aOldCookies.length === 0) { return } var old = aOldCookies.pop(); document.cookie = old.name + "=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=" + aParts.join('/') + "/" } } document.cookie = sFullCookie } function _fnReadCookie(sName) { var aParts = window.location.pathname.split('/'), sNameEQ = sName + '_' + aParts[aParts.length - 1].replace(/[\/:]/g, "").toLowerCase() + '=', sCookieContents = document.cookie.split(';'); for (var i = 0; i < sCookieContents.length; i++) { var c = sCookieContents[i]; while (c.charAt(0) == ' ') { c = c.substring(1, c.length) } if (c.indexOf(sNameEQ) === 0) { return decodeURIComponent(c.substring(sNameEQ.length, c.length)) } } return null } function _fnSettingsFromNode(nTable) { for (var i = 0; i < DataTable.settings.length; i++) { if (DataTable.settings[i].nTable === nTable) { return DataTable.settings[i] } } return null } function _fnGetTrNodes(oSettings) { var aNodes = []; var aoData = oSettings.aoData; for (var i = 0, iLen = aoData.length; i < iLen; i++) { if (aoData[i].nTr !== null) { aNodes.push(aoData[i].nTr) } } return aNodes } function _fnGetTdNodes(oSettings, iIndividualRow) { var anReturn = []; var iCorrector; var anTds, nTd; var iRow, iRows = oSettings.aoData.length, iColumn, iColumns, oData, sNodeName, iStart = 0, iEnd = iRows; if (iIndividualRow !== undefined) { iStart = iIndividualRow; iEnd = iIndividualRow + 1 } for ( iRow = iStart; iRow < iEnd; iRow++) { oData = oSettings.aoData[iRow]; if (oData.nTr !== null) { anTds = []; nTd = oData.nTr.firstChild; while (nTd) { sNodeName = nTd.nodeName.toLowerCase(); if (sNodeName == 'td' || sNodeName == 'th') { anTds.push(nTd) } nTd = nTd.nextSibling } iCorrector = 0; for ( iColumn = 0, iColumns = oSettings.aoColumns.length; iColumn < iColumns; iColumn++) { if (oSettings.aoColumns[iColumn].bVisible) { anReturn.push(anTds[iColumn - iCorrector]) } else { anReturn.push(oData._anHidden[iColumn]); iCorrector++ } } } } return anReturn } function _fnLog(oSettings, iLevel, sMesg) { var sAlert = (oSettings === null) ? "DataTables warning: " + sMesg : "DataTables warning (table id = '" + oSettings.sTableId + "'): " + sMesg; if (iLevel === 0) { if (DataTable.ext.sErrMode == 'alert') { alert(sAlert) } else { throw new Error(sAlert) } return } else if (window.console && console.log) { console.log(sAlert) } } function _fnMap(oRet, oSrc, sName, sMappedName) { if (sMappedName === undefined) { sMappedName = sName } if (oSrc[sName] !== undefined) { oRet[sMappedName] = oSrc[sName] } } function _fnExtend(oOut, oExtender) { var val; for (var prop in oExtender) { if (oExtender.hasOwnProperty(prop)) { val = oExtender[prop]; if ( typeof oInit[prop] === 'object' && val !== null && $.isArray(val) === false) { $.extend(true, oOut[prop], val) } else { oOut[prop] = val } } } return oOut } function _fnBindAction(n, oData, fn) { $(n).bind('click.DT', oData, function(e) { n.blur(); fn(e) }).bind('keypress.DT', oData, function(e) { if (e.which === 13) { fn(e) } }).bind('selectstart.DT', function() { return false }) } function _fnCallbackReg(oSettings, sStore, fn, sName) { if (fn) { oSettings[sStore].push({ "fn" : fn, "sName" : sName }) } } function _fnCallbackFire(oSettings, sStore, sTrigger, aArgs) { var aoStore = oSettings[sStore]; var aRet = []; for (var i = aoStore.length - 1; i >= 0; i--) { aRet.push(aoStore[i].fn.apply(oSettings.oInstance, aArgs)) } if (sTrigger !== null) { $(oSettings.oInstance).trigger(sTrigger, aArgs) } return aRet } var _fnJsonString = (window.JSON) ? JSON.stringify : function(o) { var sType = typeof o; if (sType !== "object" || o === null) { if (sType === "string") { o = '"' + o + '"' } return o + "" } var sProp, mValue, json = [], bArr = $.isArray(o); for (sProp in o) { mValue = o[sProp]; sType = typeof mValue; if (sType === "string") { mValue = '"' + mValue + '"' } else if (sType === "object" && mValue !== null) { mValue = _fnJsonString(mValue) } json.push(( bArr ? "" : '"' + sProp + '":') + mValue) } return ( bArr ? "[" : "{") + json + ( bArr ? "]" : "}") }; function _fnBrowserDetect(oSettings) { var n = $('
'+'
'+'
'+'
'+'
')[0]; document.body.appendChild(n); oSettings.oBrowser.bScrollOversize = $('#DT_BrowserTest',n)[0].offsetWidth === 100 ? true : false; document.body.removeChild(n) } this.$ = function(sSelector, oOpts) { var i, iLen, a = [], tr; var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); var aoData = oSettings.aoData; var aiDisplay = oSettings.aiDisplay; var aiDisplayMaster = oSettings.aiDisplayMaster; if (!oOpts) { oOpts = {} } oOpts = $.extend({}, { "filter" : "none", "order" : "current", "page" : "all" }, oOpts); if (oOpts.page == 'current') { for ( i = oSettings._iDisplayStart, iLen = oSettings.fnDisplayEnd(); i < iLen; i++) { tr = aoData[aiDisplay[i]].nTr; if (tr) { a.push(tr) } } } else if (oOpts.order == "current" && oOpts.filter == "none") { for ( i = 0, iLen = aiDisplayMaster.length; i < iLen; i++) { tr = aoData[aiDisplayMaster[i]].nTr; if (tr) { a.push(tr) } } } else if (oOpts.order == "current" && oOpts.filter == "applied") { for ( i = 0, iLen = aiDisplay.length; i < iLen; i++) { tr = aoData[aiDisplay[i]].nTr; if (tr) { a.push(tr) } } } else if (oOpts.order == "original" && oOpts.filter == "none") { for ( i = 0, iLen = aoData.length; i < iLen; i++) { tr = aoData[i].nTr; if (tr) { a.push(tr) } } } else if (oOpts.order == "original" && oOpts.filter == "applied") { for ( i = 0, iLen = aoData.length; i < iLen; i++) { tr = aoData[i].nTr; if ($.inArray(i, aiDisplay) !== -1 && tr) { a.push(tr) } } } else { _fnLog(oSettings, 1, "Unknown selection options") } var jqA = $(a); var jqTRs = jqA.filter(sSelector); var jqDescendants = jqA.find(sSelector); return $([].concat($.makeArray(jqTRs), $.makeArray(jqDescendants))) }; this._ = function(sSelector, oOpts) { var aOut = []; var i, iLen, iIndex; var aTrs = this.$(sSelector, oOpts); for ( i = 0, iLen = aTrs.length; i < iLen; i++) { aOut.push(this.fnGetData(aTrs[i])) } return aOut }; this.fnAddData = function(mData, bRedraw) { if (mData.length === 0) { return [] } var aiReturn = []; var iTest; var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); if ( typeof mData[0] === "object" && mData[0] !== null) { for (var i = 0; i < mData.length; i++) { iTest = _fnAddData(oSettings, mData[i]); if (iTest == -1) { return aiReturn } aiReturn.push(iTest) } } else { iTest = _fnAddData(oSettings, mData); if (iTest == -1) { return aiReturn } aiReturn.push(iTest) } oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); if (bRedraw === undefined || bRedraw) { _fnReDraw(oSettings) } return aiReturn }; this.fnAdjustColumnSizing = function(bRedraw) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); _fnAdjustColumnSizing(oSettings); if (bRedraw === undefined || bRedraw) { this.fnDraw(false) } else if (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") { this.oApi._fnScrollDraw(oSettings) } }; this.fnClearTable = function(bRedraw) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); _fnClearTable(oSettings); if (bRedraw === undefined || bRedraw) { _fnDraw(oSettings) } }; this.fnClose = function(nTr) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); for (var i = 0; i < oSettings.aoOpenRows.length; i++) { if (oSettings.aoOpenRows[i].nParent == nTr) { var nTrParent = oSettings.aoOpenRows[i].nTr.parentNode; if (nTrParent) { nTrParent.removeChild(oSettings.aoOpenRows[i].nTr) } oSettings.aoOpenRows.splice(i, 1); return 0 } } return 1 }; this.fnDeleteRow = function(mTarget, fnCallBack, bRedraw) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); var i, iLen, iAODataIndex; iAODataIndex = ( typeof mTarget === 'object') ? _fnNodeToDataIndex(oSettings, mTarget) : mTarget; var oData = oSettings.aoData.splice(iAODataIndex, 1); for ( i = 0, iLen = oSettings.aoData.length; i < iLen; i++) { if (oSettings.aoData[i].nTr !== null) { oSettings.aoData[i].nTr._DT_RowIndex = i } } var iDisplayIndex = $.inArray(iAODataIndex, oSettings.aiDisplay); oSettings.asDataSearch.splice(iDisplayIndex, 1); _fnDeleteIndex(oSettings.aiDisplayMaster, iAODataIndex); _fnDeleteIndex(oSettings.aiDisplay, iAODataIndex); if ( typeof fnCallBack === "function") { fnCallBack.call(this, oSettings, oData) } if (oSettings._iDisplayStart >= oSettings.fnRecordsDisplay()) { oSettings._iDisplayStart -= oSettings._iDisplayLength; if (oSettings._iDisplayStart < 0) { oSettings._iDisplayStart = 0 } } if (bRedraw === undefined || bRedraw) { _fnCalculateEnd(oSettings); _fnDraw(oSettings) } return oData }; this.fnDestroy = function(bRemove) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); var nOrig = oSettings.nTableWrapper.parentNode; var nBody = oSettings.nTBody; var i, iLen; bRemove = (bRemove === undefined) ? false : bRemove; oSettings.bDestroying = true; _fnCallbackFire(oSettings, "aoDestroyCallback", "destroy", [oSettings]); if (!bRemove) { for ( i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { if (oSettings.aoColumns[i].bVisible === false) { this.fnSetColumnVis(i, true) } } } $(oSettings.nTableWrapper).find('*').andSelf().unbind('.DT'); $('tbody>tr>td.' + oSettings.oClasses.sRowEmpty, oSettings.nTable).parent().remove(); if (oSettings.nTable != oSettings.nTHead.parentNode) { $(oSettings.nTable).children('thead').remove(); oSettings.nTable.appendChild(oSettings.nTHead) } if (oSettings.nTFoot && oSettings.nTable != oSettings.nTFoot.parentNode) { $(oSettings.nTable).children('tfoot').remove(); oSettings.nTable.appendChild(oSettings.nTFoot) } oSettings.nTable.parentNode.removeChild(oSettings.nTable); $(oSettings.nTableWrapper).remove(); oSettings.aaSorting = []; oSettings.aaSortingFixed = []; _fnSortingClasses(oSettings); $(_fnGetTrNodes(oSettings)).removeClass(oSettings.asStripeClasses.join(' ')); $('th, td', oSettings.nTHead).removeClass([oSettings.oClasses.sSortable, oSettings.oClasses.sSortableAsc, oSettings.oClasses.sSortableDesc, oSettings.oClasses.sSortableNone].join(' ')); if (oSettings.bJUI) { $('th span.' + oSettings.oClasses.sSortIcon + ', td span.' + oSettings.oClasses.sSortIcon, oSettings.nTHead).remove(); $('th, td', oSettings.nTHead).each(function() { var jqWrapper = $('div.' + oSettings.oClasses.sSortJUIWrapper, this); var kids = jqWrapper.contents(); $(this).append(kids); jqWrapper.remove() }) } if (!bRemove && oSettings.nTableReinsertBefore) { nOrig.insertBefore(oSettings.nTable, oSettings.nTableReinsertBefore) } else if (!bRemove) { nOrig.appendChild(oSettings.nTable) } for ( i = 0, iLen = oSettings.aoData.length; i < iLen; i++) { if (oSettings.aoData[i].nTr !== null) { nBody.appendChild(oSettings.aoData[i].nTr) } } if (oSettings.oFeatures.bAutoWidth === true) { oSettings.nTable.style.width = _fnStringToCss(oSettings.sDestroyWidth) } iLen = oSettings.asDestroyStripes.length; if (iLen) { var anRows = $(nBody).children('tr'); for ( i = 0; i < iLen; i++) { anRows.filter(':nth-child(' + iLen + 'n + ' + i + ')').addClass(oSettings.asDestroyStripes[i]) } } for ( i = 0, iLen = DataTable.settings.length; i < iLen; i++) { if (DataTable.settings[i] == oSettings) { DataTable.settings.splice(i, 1) } } oSettings = null; oInit = null }; this.fnDraw = function(bComplete) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); if (bComplete === false) { _fnCalculateEnd(oSettings); _fnDraw(oSettings) } else { _fnReDraw(oSettings) } }; this.fnFilter = function(sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); if (!oSettings.oFeatures.bFilter) { return } if (bRegex === undefined || bRegex === null) { bRegex = false } if (bSmart === undefined || bSmart === null) { bSmart = true } if (bShowGlobal === undefined || bShowGlobal === null) { bShowGlobal = true } if (bCaseInsensitive === undefined || bCaseInsensitive === null) { bCaseInsensitive = true } if (iColumn === undefined || iColumn === null) { _fnFilterComplete(oSettings, { "sSearch" : sInput + "", "bRegex" : bRegex, "bSmart" : bSmart, "bCaseInsensitive" : bCaseInsensitive }, 1); if (bShowGlobal && oSettings.aanFeatures.f) { var n = oSettings.aanFeatures.f; for (var i = 0, iLen = n.length; i < iLen; i++) { try { if (n[i]._DT_Input != document.activeElement) { $(n[i]._DT_Input).val(sInput) } } catch(e) { $(n[i]._DT_Input).val(sInput) } } } } else { $.extend(oSettings.aoPreSearchCols[iColumn], { "sSearch" : sInput + "", "bRegex" : bRegex, "bSmart" : bSmart, "bCaseInsensitive" : bCaseInsensitive }); _fnFilterComplete(oSettings, oSettings.oPreviousSearch, 1) } }; this.fnGetData = function(mRow, iCol) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); if (mRow !== undefined) { var iRow = mRow; if ( typeof mRow === 'object') { var sNode = mRow.nodeName.toLowerCase(); if (sNode === "tr") { iRow = _fnNodeToDataIndex(oSettings, mRow) } else if (sNode === "td") { iRow = _fnNodeToDataIndex(oSettings, mRow.parentNode); iCol = _fnNodeToColumnIndex(oSettings, iRow, mRow) } } if (iCol !== undefined) { return _fnGetCellData(oSettings, iRow, iCol, '') } return (oSettings.aoData[iRow] !== undefined) ? oSettings.aoData[iRow]._aData : null } return _fnGetDataMaster(oSettings) }; this.fnGetNodes = function(iRow) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); if (iRow !== undefined) { return (oSettings.aoData[iRow] !== undefined) ? oSettings.aoData[iRow].nTr : null } return _fnGetTrNodes(oSettings) }; this.fnGetPosition = function(nNode) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); var sNodeName = nNode.nodeName.toUpperCase(); if (sNodeName == "TR") { return _fnNodeToDataIndex(oSettings, nNode) } else if (sNodeName == "TD" || sNodeName == "TH") { var iDataIndex = _fnNodeToDataIndex(oSettings, nNode.parentNode); var iColumnIndex = _fnNodeToColumnIndex(oSettings, iDataIndex, nNode); return [iDataIndex, _fnColumnIndexToVisible(oSettings, iColumnIndex), iColumnIndex] } return null }; this.fnIsOpen = function(nTr) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); var aoOpenRows = oSettings.aoOpenRows; for (var i = 0; i < oSettings.aoOpenRows.length; i++) { if (oSettings.aoOpenRows[i].nParent == nTr) { return true } } return false }; this.fnOpen = function(nTr, mHtml, sClass) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); var nTableRows = _fnGetTrNodes(oSettings); if ($.inArray(nTr, nTableRows) === -1) { return } this.fnClose(nTr); var nNewRow = document.createElement("tr"); var nNewCell = document.createElement("td"); nNewRow.appendChild(nNewCell); nNewCell.className = sClass; nNewCell.colSpan = _fnVisbleColumns(oSettings); if ( typeof mHtml === "string") { nNewCell.innerHTML = mHtml } else { $(nNewCell).html(mHtml) } var nTrs = $('tr', oSettings.nTBody); if ($.inArray(nTr, nTrs) != -1) { $(nNewRow).insertAfter(nTr) } oSettings.aoOpenRows.push({ "nTr" : nNewRow, "nParent" : nTr }); return nNewRow }; this.fnPageChange = function(mAction, bRedraw) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); _fnPageChange(oSettings, mAction); _fnCalculateEnd(oSettings); if (bRedraw === undefined || bRedraw) { _fnDraw(oSettings) } }; this.fnSetColumnVis = function(iCol, bShow, bRedraw) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); var i, iLen; var aoColumns = oSettings.aoColumns; var aoData = oSettings.aoData; var nTd, bAppend, iBefore; if (aoColumns[iCol].bVisible == bShow) { return } if (bShow) { var iInsert = 0; for ( i = 0; i < iCol; i++) { if (aoColumns[i].bVisible) { iInsert++ } } bAppend = (iInsert >= _fnVisbleColumns(oSettings)); if (!bAppend) { for ( i = iCol; i < aoColumns.length; i++) { if (aoColumns[i].bVisible) { iBefore = i; break } } } for ( i = 0, iLen = aoData.length; i < iLen; i++) { if (aoData[i].nTr !== null) { if (bAppend) { aoData[i].nTr.appendChild(aoData[i]._anHidden[iCol]) } else { aoData[i].nTr.insertBefore(aoData[i]._anHidden[iCol], _fnGetTdNodes(oSettings,i)[iBefore]) } } } } else { for ( i = 0, iLen = aoData.length; i < iLen; i++) { if (aoData[i].nTr !== null) { nTd = _fnGetTdNodes(oSettings,i)[iCol]; aoData[i]._anHidden[iCol] = nTd; nTd.parentNode.removeChild(nTd) } } } aoColumns[iCol].bVisible = bShow; _fnDrawHead(oSettings, oSettings.aoHeader); if (oSettings.nTFoot) { _fnDrawHead(oSettings, oSettings.aoFooter) } for ( i = 0, iLen = oSettings.aoOpenRows.length; i < iLen; i++) { oSettings.aoOpenRows[i].nTr.colSpan = _fnVisbleColumns(oSettings) } if (bRedraw === undefined || bRedraw) { _fnAdjustColumnSizing(oSettings); _fnDraw(oSettings) } _fnSaveState(oSettings) }; this.fnSettings = function() { return _fnSettingsFromNode(this[DataTable.ext.iApiIndex]) }; this.fnSort = function(aaSort) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); oSettings.aaSorting = aaSort; _fnSort(oSettings) }; this.fnSortListener = function(nNode, iColumn, fnCallback) { _fnSortAttachListener(_fnSettingsFromNode(this[DataTable.ext.iApiIndex]), nNode, iColumn, fnCallback) }; this.fnUpdate = function(mData, mRow, iColumn, bRedraw, bAction) { var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); var i, iLen, sDisplay; var iRow = ( typeof mRow === 'object') ? _fnNodeToDataIndex(oSettings, mRow) : mRow; if ($.isArray(mData) && iColumn === undefined) { oSettings.aoData[iRow]._aData = mData.slice(); for ( i = 0; i < oSettings.aoColumns.length; i++) { this.fnUpdate(_fnGetCellData(oSettings, iRow, i), iRow, i, false, false) } } else if ($.isPlainObject(mData) && iColumn === undefined) { oSettings.aoData[iRow]._aData = $.extend(true, {}, mData); for ( i = 0; i < oSettings.aoColumns.length; i++) { this.fnUpdate(_fnGetCellData(oSettings, iRow, i), iRow, i, false, false) } } else { _fnSetCellData(oSettings, iRow, iColumn, mData); sDisplay = _fnGetCellData(oSettings, iRow, iColumn, 'display'); var oCol = oSettings.aoColumns[iColumn]; if (oCol.fnRender !== null) { sDisplay = _fnRender(oSettings, iRow, iColumn); if (oCol.bUseRendered) { _fnSetCellData(oSettings, iRow, iColumn, sDisplay) } } if (oSettings.aoData[iRow].nTr !== null) { _fnGetTdNodes(oSettings,iRow)[iColumn].innerHTML = sDisplay } } var iDisplayIndex = $.inArray(iRow, oSettings.aiDisplay); oSettings.asDataSearch[iDisplayIndex] = _fnBuildSearchRow(oSettings, _fnGetRowData(oSettings, iRow, 'filter', _fnGetColumns(oSettings, 'bSearchable'))); if (bAction === undefined || bAction) { _fnAdjustColumnSizing(oSettings) } if (bRedraw === undefined || bRedraw) { _fnReDraw(oSettings) } return 0 }; this.fnVersionCheck = DataTable.ext.fnVersionCheck; function _fnExternApiFunc(sFunc) { return function() { var aArgs = [_fnSettingsFromNode(this[DataTable.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments)); return DataTable.ext.oApi[sFunc].apply(this, aArgs) } } this.oApi = { "_fnExternApiFunc" : _fnExternApiFunc, "_fnInitialise" : _fnInitialise, "_fnInitComplete" : _fnInitComplete, "_fnLanguageCompat" : _fnLanguageCompat, "_fnAddColumn" : _fnAddColumn, "_fnColumnOptions" : _fnColumnOptions, "_fnAddData" : _fnAddData, "_fnCreateTr" : _fnCreateTr, "_fnGatherData" : _fnGatherData, "_fnBuildHead" : _fnBuildHead, "_fnDrawHead" : _fnDrawHead, "_fnDraw" : _fnDraw, "_fnReDraw" : _fnReDraw, "_fnAjaxUpdate" : _fnAjaxUpdate, "_fnAjaxParameters" : _fnAjaxParameters, "_fnAjaxUpdateDraw" : _fnAjaxUpdateDraw, "_fnServerParams" : _fnServerParams, "_fnAddOptionsHtml" : _fnAddOptionsHtml, "_fnFeatureHtmlTable" : _fnFeatureHtmlTable, "_fnScrollDraw" : _fnScrollDraw, "_fnAdjustColumnSizing" : _fnAdjustColumnSizing, "_fnFeatureHtmlFilter" : _fnFeatureHtmlFilter, "_fnFilterComplete" : _fnFilterComplete, "_fnFilterCustom" : _fnFilterCustom, "_fnFilterColumn" : _fnFilterColumn, "_fnFilter" : _fnFilter, "_fnBuildSearchArray" : _fnBuildSearchArray, "_fnBuildSearchRow" : _fnBuildSearchRow, "_fnFilterCreateSearch" : _fnFilterCreateSearch, "_fnDataToSearch" : _fnDataToSearch, "_fnSort" : _fnSort, "_fnSortAttachListener" : _fnSortAttachListener, "_fnSortingClasses" : _fnSortingClasses, "_fnFeatureHtmlPaginate" : _fnFeatureHtmlPaginate, "_fnPageChange" : _fnPageChange, "_fnFeatureHtmlInfo" : _fnFeatureHtmlInfo, "_fnUpdateInfo" : _fnUpdateInfo, "_fnFeatureHtmlLength" : _fnFeatureHtmlLength, "_fnFeatureHtmlProcessing" : _fnFeatureHtmlProcessing, "_fnProcessingDisplay" : _fnProcessingDisplay, "_fnVisibleToColumnIndex" : _fnVisibleToColumnIndex, "_fnColumnIndexToVisible" : _fnColumnIndexToVisible, "_fnNodeToDataIndex" : _fnNodeToDataIndex, "_fnVisbleColumns" : _fnVisbleColumns, "_fnCalculateEnd" : _fnCalculateEnd, "_fnConvertToWidth" : _fnConvertToWidth, "_fnCalculateColumnWidths" : _fnCalculateColumnWidths, "_fnScrollingWidthAdjust" : _fnScrollingWidthAdjust, "_fnGetWidestNode" : _fnGetWidestNode, "_fnGetMaxLenString" : _fnGetMaxLenString, "_fnStringToCss" : _fnStringToCss, "_fnDetectType" : _fnDetectType, "_fnSettingsFromNode" : _fnSettingsFromNode, "_fnGetDataMaster" : _fnGetDataMaster, "_fnGetTrNodes" : _fnGetTrNodes, "_fnGetTdNodes" : _fnGetTdNodes, "_fnEscapeRegex" : _fnEscapeRegex, "_fnDeleteIndex" : _fnDeleteIndex, "_fnReOrderIndex" : _fnReOrderIndex, "_fnColumnOrdering" : _fnColumnOrdering, "_fnLog" : _fnLog, "_fnClearTable" : _fnClearTable, "_fnSaveState" : _fnSaveState, "_fnLoadState" : _fnLoadState, "_fnCreateCookie" : _fnCreateCookie, "_fnReadCookie" : _fnReadCookie, "_fnDetectHeader" : _fnDetectHeader, "_fnGetUniqueThs" : _fnGetUniqueThs, "_fnScrollBarWidth" : _fnScrollBarWidth, "_fnApplyToChildren" : _fnApplyToChildren, "_fnMap" : _fnMap, "_fnGetRowData" : _fnGetRowData, "_fnGetCellData" : _fnGetCellData, "_fnSetCellData" : _fnSetCellData, "_fnGetObjectDataFn" : _fnGetObjectDataFn, "_fnSetObjectDataFn" : _fnSetObjectDataFn, "_fnApplyColumnDefs" : _fnApplyColumnDefs, "_fnBindAction" : _fnBindAction, "_fnExtend" : _fnExtend, "_fnCallbackReg" : _fnCallbackReg, "_fnCallbackFire" : _fnCallbackFire, "_fnJsonString" : _fnJsonString, "_fnRender" : _fnRender, "_fnNodeToColumnIndex" : _fnNodeToColumnIndex, "_fnInfoMacros" : _fnInfoMacros, "_fnBrowserDetect" : _fnBrowserDetect, "_fnGetColumns" : _fnGetColumns }; $.extend(DataTable.ext.oApi, this.oApi); for (var sFunc in DataTable.ext.oApi) { if (sFunc) { this[sFunc] = _fnExternApiFunc(sFunc) } } var _that = this; this.each(function() { var i = 0, iLen, j, jLen, k, kLen; var sId = this.getAttribute('id'); var bInitHandedOff = false; var bUsePassedData = false; if (this.nodeName.toLowerCase() != 'table') { _fnLog(null, 0, "Attempted to initialise DataTables on a node which is not a " + "table: " + this.nodeName); return } for ( i = 0, iLen = DataTable.settings.length; i < iLen; i++) { 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 { _fnLog(DataTable.settings[i], 0, "Cannot reinitialise DataTable.\n\n" + "To retrieve the DataTables object for this table, pass no arguments or see " + "the docs for bRetrieve and bDestroy"); return } } if (DataTable.settings[i].sTableId == this.id) { DataTable.settings.splice(i, 1); break } } if (sId === null || sId === "") { sId = "DataTables_Table_" + (DataTable.ext._oExternConfig.iNextUnique++); this.id = sId } var oSettings = $.extend(true, {}, DataTable.models.oSettings, { "nTable" : this, "oApi" : _that.oApi, "oInit" : oInit, "sDestroyWidth" : $(this).width(), "sInstance" : sId, "sTableId" : sId }); DataTable.settings.push(oSettings); oSettings.oInstance = (_that.length === 1) ? _that : $(this).dataTable(); if (!oInit) { oInit = {} } if (oInit.oLanguage) { _fnLanguageCompat(oInit.oLanguage) } oInit = _fnExtend($.extend(true, {}, DataTable.defaults), oInit); _fnMap(oSettings.oFeatures, oInit, "bPaginate"); _fnMap(oSettings.oFeatures, oInit, "bLengthChange"); _fnMap(oSettings.oFeatures, oInit, "bFilter"); _fnMap(oSettings.oFeatures, oInit, "bSort"); _fnMap(oSettings.oFeatures, oInit, "bInfo"); _fnMap(oSettings.oFeatures, oInit, "bProcessing"); _fnMap(oSettings.oFeatures, oInit, "bAutoWidth"); _fnMap(oSettings.oFeatures, oInit, "bSortClasses"); _fnMap(oSettings.oFeatures, oInit, "bServerSide"); _fnMap(oSettings.oFeatures, oInit, "bDeferRender"); _fnMap(oSettings.oScroll, oInit, "sScrollX", "sX"); _fnMap(oSettings.oScroll, oInit, "sScrollXInner", "sXInner"); _fnMap(oSettings.oScroll, oInit, "sScrollY", "sY"); _fnMap(oSettings.oScroll, oInit, "bScrollCollapse", "bCollapse"); _fnMap(oSettings.oScroll, oInit, "bScrollInfinite", "bInfinite"); _fnMap(oSettings.oScroll, oInit, "iScrollLoadGap", "iLoadGap"); _fnMap(oSettings.oScroll, oInit, "bScrollAutoCss", "bAutoCss"); _fnMap(oSettings, oInit, "asStripeClasses"); _fnMap(oSettings, oInit, "asStripClasses", "asStripeClasses"); _fnMap(oSettings, oInit, "fnServerData"); _fnMap(oSettings, oInit, "fnFormatNumber"); _fnMap(oSettings, oInit, "sServerMethod"); _fnMap(oSettings, oInit, "aaSorting"); _fnMap(oSettings, oInit, "aaSortingFixed"); _fnMap(oSettings, oInit, "aLengthMenu"); _fnMap(oSettings, oInit, "sPaginationType"); _fnMap(oSettings, oInit, "sAjaxSource"); _fnMap(oSettings, oInit, "sAjaxDataProp"); _fnMap(oSettings, oInit, "iCookieDuration"); _fnMap(oSettings, oInit, "sCookiePrefix"); _fnMap(oSettings, oInit, "sDom"); _fnMap(oSettings, oInit, "bSortCellsTop"); _fnMap(oSettings, oInit, "iTabIndex"); _fnMap(oSettings, oInit, "oSearch", "oPreviousSearch"); _fnMap(oSettings, oInit, "aoSearchCols", "aoPreSearchCols"); _fnMap(oSettings, oInit, "iDisplayLength", "_iDisplayLength"); _fnMap(oSettings, oInit, "bJQueryUI", "bJUI"); _fnMap(oSettings, oInit, "fnCookieCallback"); _fnMap(oSettings, oInit, "fnStateLoad"); _fnMap(oSettings, oInit, "fnStateSave"); _fnMap(oSettings.oLanguage, oInit, "fnInfoCallback"); _fnCallbackReg(oSettings, 'aoDrawCallback', oInit.fnDrawCallback, 'user'); _fnCallbackReg(oSettings, 'aoServerParams', oInit.fnServerParams, 'user'); _fnCallbackReg(oSettings, 'aoStateSaveParams', oInit.fnStateSaveParams, 'user'); _fnCallbackReg(oSettings, 'aoStateLoadParams', oInit.fnStateLoadParams, 'user'); _fnCallbackReg(oSettings, 'aoStateLoaded', oInit.fnStateLoaded, 'user'); _fnCallbackReg(oSettings, 'aoRowCallback', oInit.fnRowCallback, 'user'); _fnCallbackReg(oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow, 'user'); _fnCallbackReg(oSettings, 'aoHeaderCallback', oInit.fnHeaderCallback, 'user'); _fnCallbackReg(oSettings, 'aoFooterCallback', oInit.fnFooterCallback, 'user'); _fnCallbackReg(oSettings, 'aoInitComplete', oInit.fnInitComplete, 'user'); _fnCallbackReg(oSettings, 'aoPreDrawCallback', oInit.fnPreDrawCallback, 'user'); if (oSettings.oFeatures.bServerSide && oSettings.oFeatures.bSort && oSettings.oFeatures.bSortClasses) { _fnCallbackReg(oSettings, 'aoDrawCallback', _fnSortingClasses, 'server_side_sort_classes') } else if (oSettings.oFeatures.bDeferRender) { _fnCallbackReg(oSettings, 'aoDrawCallback', _fnSortingClasses, 'defer_sort_classes') } if (oInit.bJQueryUI) { $.extend(oSettings.oClasses, DataTable.ext.oJUIClasses); if (oInit.sDom === DataTable.defaults.sDom && DataTable.defaults.sDom === "lfrtip") { oSettings.sDom = '<"H"lfr>t<"F"ip>' } } else { $.extend(oSettings.oClasses, DataTable.ext.oStdClasses) } $(this).addClass(oSettings.oClasses.sTable); if (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") { oSettings.oScroll.iBarWidth = _fnScrollBarWidth() } if (oSettings.iInitDisplayStart === undefined) { oSettings.iInitDisplayStart = oInit.iDisplayStart; oSettings._iDisplayStart = oInit.iDisplayStart } if (oInit.bStateSave) { oSettings.oFeatures.bStateSave = true; _fnLoadState(oSettings, oInit); _fnCallbackReg(oSettings, 'aoDrawCallback', _fnSaveState, 'state_save') } if (oInit.iDeferLoading !== null) { oSettings.bDeferLoading = true; var tmp = $.isArray(oInit.iDeferLoading); oSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading; oSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading } if (oInit.aaData !== null) { bUsePassedData = true } if (oInit.oLanguage.sUrl !== "") { oSettings.oLanguage.sUrl = oInit.oLanguage.sUrl; $.getJSON(oSettings.oLanguage.sUrl, null, function(json) { _fnLanguageCompat(json); $.extend(true, oSettings.oLanguage, oInit.oLanguage, json); _fnInitialise(oSettings) }); bInitHandedOff = true } else { $.extend(true, oSettings.oLanguage, oInit.oLanguage) } if (oInit.asStripeClasses === null) { oSettings.asStripeClasses = [oSettings.oClasses.sStripeOdd, oSettings.oClasses.sStripeEven] } iLen = oSettings.asStripeClasses.length; oSettings.asDestroyStripes = []; if (iLen) { var bStripeRemove = false; var anRows = $(this).children('tbody').children('tr:lt(' + iLen + ')'); for ( i = 0; i < iLen; i++) { if (anRows.hasClass(oSettings.asStripeClasses[i])) { bStripeRemove = true; oSettings.asDestroyStripes.push(oSettings.asStripeClasses[i]) } } if (bStripeRemove) { anRows.removeClass(oSettings.asStripeClasses.join(' ')) } } var anThs = []; var aoColumnsInit; var nThead = this.getElementsByTagName('thead'); if (nThead.length !== 0) { _fnDetectHeader(oSettings.aoHeader, nThead[0]); anThs = _fnGetUniqueThs(oSettings) } if (oInit.aoColumns === null) { aoColumnsInit = []; for ( i = 0, iLen = anThs.length; i < iLen; i++) { aoColumnsInit.push(null) } } else { aoColumnsInit = oInit.aoColumns } for ( i = 0, iLen = aoColumnsInit.length; i < iLen; i++) { if (oInit.saved_aoColumns !== undefined && oInit.saved_aoColumns.length == iLen) { if (aoColumnsInit[i] === null) { aoColumnsInit[i] = {} } aoColumnsInit[i].bVisible = oInit.saved_aoColumns[i].bVisible } _fnAddColumn(oSettings, anThs ? anThs[i] : null) } _fnApplyColumnDefs(oSettings, oInit.aoColumnDefs, aoColumnsInit, function(iCol, oDef) { _fnColumnOptions(oSettings, iCol, oDef) }); for ( i = 0, iLen = oSettings.aaSorting.length; i < iLen; i++) { if (oSettings.aaSorting[i][0] >= oSettings.aoColumns.length) { oSettings.aaSorting[i][0] = 0 } var oColumn = oSettings.aoColumns[oSettings.aaSorting[i][0]]; if (oSettings.aaSorting[i][2] === undefined) { oSettings.aaSorting[i][2] = 0 } if (oInit.aaSorting === undefined && oSettings.saved_aaSorting === undefined) { oSettings.aaSorting[i][1] = oColumn.asSorting[0] } for ( j = 0, jLen = oColumn.asSorting.length; j < jLen; j++) { if (oSettings.aaSorting[i][1] == oColumn.asSorting[j]) { oSettings.aaSorting[i][2] = j; break } } } _fnSortingClasses(oSettings); _fnBrowserDetect(oSettings); var captions = $(this).children('caption').each(function() { this._captionSide = $(this).css('caption-side') }); var thead = $(this).children('thead'); if (thead.length === 0) { thead = [document.createElement('thead')]; this.appendChild(thead[0]) } oSettings.nTHead = thead[0]; var tbody = $(this).children('tbody'); if (tbody.length === 0) { tbody = [document.createElement('tbody')]; this.appendChild(tbody[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 === 0 && captions.length > 0 && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "")) { tfoot = [document.createElement('tfoot')]; this.appendChild(tfoot[0]) } if (tfoot.length > 0) { oSettings.nTFoot = tfoot[0]; _fnDetectHeader(oSettings.aoFooter, oSettings.nTFoot) } if (bUsePassedData) { for ( i = 0; i < oInit.aaData.length; i++) { _fnAddData(oSettings, oInit.aaData[i]) } } else { _fnGatherData(oSettings) } oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); oSettings.bInitialised = true; if (bInitHandedOff === false) { _fnInitialise(oSettings) } }); _that = null; return this }; DataTable.fnVersionCheck = function(sVersion) { var fnZPad = function(Zpad, count) { while (Zpad.length < count) { Zpad += '0' } return Zpad }; var aThis = DataTable.ext.sVersion.split('.'); var aThat = sVersion.split('.'); var sThis = '', sThat = ''; for (var i = 0, iLen = aThat.length; i < iLen; i++) { sThis += fnZPad(aThis[i], 3); sThat += fnZPad(aThat[i], 3) } return parseInt(sThis, 10) >= parseInt(sThat, 10) }; DataTable.fnIsDataTable = function(nTable) { var o = DataTable.settings; for (var i = 0; i < o.length; i++) { if (o[i].nTable === nTable || o[i].nScrollHead === nTable || o[i].nScrollFoot === nTable) { return true } } return false }; DataTable.fnTables = function(bVisible) { var out = []; jQuery.each(DataTable.settings, function(i, o) { if (!bVisible || (bVisible === true && $(o.nTable).is(':visible'))) { out.push(o.nTable) } }); return out }; DataTable.version = "1.9.4"; DataTable.settings = []; DataTable.models = {}; DataTable.models.ext = { "afnFiltering" : [], "afnSortData" : [], "aoFeatures" : [], "aTypes" : [], "fnVersionCheck" : DataTable.fnVersionCheck, "iApiIndex" : 0, "ofnSearch" : {}, "oApi" : {}, "oStdClasses" : {}, "oJUIClasses" : {}, "oPagination" : {}, "oSort" : {}, "sVersion" : DataTable.version, "sErrMode" : "alert", "_oExternConfig" : { "iNextUnique" : 0 } }; DataTable.models.oSearch = { "bCaseInsensitive" : true, "sSearch" : "", "bRegex" : false, "bSmart" : true }; DataTable.models.oRow = { "nTr" : null, "_aData" : [], "_aSortData" : [], "_anHidden" : [], "_sRowStripe" : "" }; DataTable.models.oColumn = { "aDataSort" : null, "asSorting" : null, "bSearchable" : null, "bSortable" : null, "bUseRendered" : null, "bVisible" : null, "_bAutoType" : true, "fnCreatedCell" : null, "fnGetData" : null, "fnRender" : null, "fnSetData" : null, "mData" : null, "mRender" : null, "nTh" : null, "nTf" : null, "sClass" : null, "sContentPadding" : null, "sDefaultContent" : null, "sName" : null, "sSortDataType" : 'std', "sSortingClass" : null, "sSortingClassJUI" : null, "sTitle" : null, "sType" : null, "sWidth" : null, "sWidthOrig" : null }; DataTable.defaults = { "aaData" : null, "aaSorting" : [[0, 'asc']], "aaSortingFixed" : null, "aLengthMenu" : [10, 25, 50, 100], "aoColumns" : null, "aoColumnDefs" : null, "aoSearchCols" : [], "asStripeClasses" : null, "bAutoWidth" : true, "bDeferRender" : false, "bDestroy" : false, "bFilter" : true, "bInfo" : true, "bJQueryUI" : false, "bLengthChange" : true, "bPaginate" : true, "bProcessing" : false, "bRetrieve" : false, "bScrollAutoCss" : true, "bScrollCollapse" : false, "bScrollInfinite" : false, "bServerSide" : false, "bSort" : true, "bSortCellsTop" : false, "bSortClasses" : true, "bStateSave" : false, "fnCookieCallback" : null, "fnCreatedRow" : null, "fnDrawCallback" : null, "fnFooterCallback" : null, "fnFormatNumber" : function(iIn) { if (iIn < 1000) { return iIn } var s = (iIn + ""), a = s.split(""), out = "", iLen = s.length; for (var i = 0; i < iLen; i++) { if (i % 3 === 0 && i !== 0) { out = this.oLanguage.sInfoThousands + out } out = a[iLen - i - 1] + out } return out }, "fnHeaderCallback" : null, "fnInfoCallback" : null, "fnInitComplete" : null, "fnPreDrawCallback" : null, "fnRowCallback" : null, "fnServerData" : function(sUrl, aoData, fnCallback, oSettings) { oSettings.jqXHR = $.ajax({ "url" : sUrl, "data" : aoData, "success" : function(json) { if (json.sError) { oSettings.oApi._fnLog(oSettings, 0, json.sError) } $(oSettings.oInstance).trigger('xhr', [oSettings, json]); fnCallback(json) }, "dataType" : "json", "cache" : false, "type" : oSettings.sServerMethod, "error" : function(xhr, error, thrown) { if (error == "parsererror") { oSettings.oApi._fnLog(oSettings, 0, "DataTables warning: JSON data from " + "server could not be parsed. This is caused by a JSON formatting error.") } } }) }, "fnServerParams" : null, "fnStateLoad" : function(oSettings) { var sData = this.oApi._fnReadCookie(oSettings.sCookiePrefix + oSettings.sInstance); var oData; try { oData = ( typeof $.parseJSON === 'function') ? $.parseJSON(sData) : eval('(' + sData + ')') } catch(e) { oData = null } return oData }, "fnStateLoadParams" : null, "fnStateLoaded" : null, "fnStateSave" : function(oSettings, oData) { this.oApi._fnCreateCookie(oSettings.sCookiePrefix + oSettings.sInstance, this.oApi._fnJsonString(oData), oSettings.iCookieDuration, oSettings.sCookiePrefix, oSettings.fnCookieCallback) }, "fnStateSaveParams" : null, "iCookieDuration" : 7200, "iDeferLoading" : null, "iDisplayLength" : 10, "iDisplayStart" : 0, "iScrollLoadGap" : 100, "iTabIndex" : 0, "oLanguage" : { "oAria" : { "sSortAscending" : ": activate to sort column ascending", "sSortDescending" : ": activate to sort column descending" }, "oPaginate" : { "sFirst" : "First", "sLast" : "Last", "sNext" : "Next", "sPrevious" : "Previous" }, "sEmptyTable" : "No data available in table", "sInfo" : "Showing _START_ to _END_ of _TOTAL_ entries", "sInfoEmpty" : "Showing 0 to 0 of 0 entries", "sInfoFiltered" : "(filtered from _MAX_ total entries)", "sInfoPostFix" : "", "sInfoThousands" : ",", "sLengthMenu" : "Show _MENU_ entries", "sLoadingRecords" : "Loading...", "sProcessing" : "Processing...", "sSearch" : "Search:", "sUrl" : "", "sZeroRecords" : "No matching records found" }, "oSearch" : $.extend({}, DataTable.models.oSearch), "sAjaxDataProp" : "aaData", "sAjaxSource" : null, "sCookiePrefix" : "SpryMedia_DataTables_", "sDom" : "lfrtip", "sPaginationType" : "two_button", "sScrollX" : "", "sScrollXInner" : "", "sScrollY" : "", "sServerMethod" : "GET" }; DataTable.defaults.columns = { "aDataSort" : null, "asSorting" : ['asc', 'desc'], "bSearchable" : true, "bSortable" : true, "bUseRendered" : true, "bVisible" : true, "fnCreatedCell" : null, "fnRender" : null, "iDataSort" : -1, "mData" : null, "mRender" : null, "sCellType" : "td", "sClass" : "", "sContentPadding" : "", "sDefaultContent" : null, "sName" : "", "sSortDataType" : "std", "sTitle" : null, "sType" : null, "sWidth" : null }; DataTable.models.oSettings = { "oFeatures" : { "bAutoWidth" : null, "bDeferRender" : null, "bFilter" : null, "bInfo" : null, "bLengthChange" : null, "bPaginate" : null, "bProcessing" : null, "bServerSide" : null, "bSort" : null, "bSortClasses" : null, "bStateSave" : null }, "oScroll" : { "bAutoCss" : null, "bCollapse" : null, "bInfinite" : null, "iBarWidth" : 0, "iLoadGap" : null, "sX" : null, "sXInner" : null, "sY" : null }, "oLanguage" : { "fnInfoCallback" : null }, "oBrowser" : { "bScrollOversize" : false }, "aanFeatures" : [], "aoData" : [], "aiDisplay" : [], "aiDisplayMaster" : [], "aoColumns" : [], "aoHeader" : [], "aoFooter" : [], "asDataSearch" : [], "oPreviousSearch" : {}, "aoPreSearchCols" : [], "aaSorting" : null, "aaSortingFixed" : null, "asStripeClasses" : null, "asDestroyStripes" : [], "sDestroyWidth" : 0, "aoRowCallback" : [], "aoHeaderCallback" : [], "aoFooterCallback" : [], "aoDrawCallback" : [], "aoRowCreatedCallback" : [], "aoPreDrawCallback" : [], "aoInitComplete" : [], "aoStateSaveParams" : [], "aoStateLoadParams" : [], "aoStateLoaded" : [], "sTableId" : "", "nTable" : null, "nTHead" : null, "nTFoot" : null, "nTBody" : null, "nTableWrapper" : null, "bDeferLoading" : false, "bInitialised" : false, "aoOpenRows" : [], "sDom" : null, "sPaginationType" : "two_button", "iCookieDuration" : 0, "sCookiePrefix" : "", "fnCookieCallback" : null, "aoStateSave" : [], "aoStateLoad" : [], "oLoadedState" : null, "sAjaxSource" : null, "sAjaxDataProp" : null, "bAjaxDataGet" : true, "jqXHR" : null, "fnServerData" : null, "aoServerParams" : [], "sServerMethod" : null, "fnFormatNumber" : null, "aLengthMenu" : null, "iDraw" : 0, "bDrawing" : false, "iDrawError" : -1, "_iDisplayLength" : 5, "_iDisplayStart" : 0, "_iDisplayEnd" : 10, "_iRecordsTotal" : 0, "_iRecordsDisplay" : 0, "bJUI" : null, "oClasses" : {}, "bFiltered" : false, "bSorted" : false, "bSortCellsTop" : null, "oInit" : null, "aoDestroyCallback" : [], "fnRecordsTotal" : function() { if (this.oFeatures.bServerSide) { return parseInt(this._iRecordsTotal, 10) } else { return this.aiDisplayMaster.length } }, "fnRecordsDisplay" : function() { if (this.oFeatures.bServerSide) { return parseInt(this._iRecordsDisplay, 10) } else { return this.aiDisplay.length } }, "fnDisplayEnd" : function() { if (this.oFeatures.bServerSide) { if (this.oFeatures.bPaginate === false || this._iDisplayLength == -1) { return this._iDisplayStart + this.aiDisplay.length } else { return Math.min(this._iDisplayStart + this._iDisplayLength, this._iRecordsDisplay) } } else { return this._iDisplayEnd } }, "oInstance" : null, "sInstance" : null, "iTabIndex" : 0, "nScrollHead" : null, "nScrollFoot" : null }; DataTable.ext = $.extend(true, {}, DataTable.models.ext); $.extend(DataTable.ext.oStdClasses, { "sTable" : "dataTable", "sPagePrevEnabled" : "paginate_enabled_previous", "sPagePrevDisabled" : "paginate_disabled_previous", "sPageNextEnabled" : "paginate_enabled_next", "sPageNextDisabled" : "paginate_disabled_next", "sPageJUINext" : "", "sPageJUIPrev" : "", "sPageButton" : "paginate_button", "sPageButtonActive" : "paginate_active", "sPageButtonStaticDisabled" : "paginate_button paginate_button_disabled", "sPageFirst" : "first", "sPagePrevious" : "previous", "sPageNext" : "next", "sPageLast" : "last", "sStripeOdd" : "odd", "sStripeEven" : "even", "sRowEmpty" : "dataTables_empty", "sWrapper" : "dataTables_wrapper", "sFilter" : "dataTables_filter", "sInfo" : "dataTables_info", "sPaging" : "dataTables_paginate paging_", "sLength" : "dataTables_length", "sProcessing" : "dataTables_processing", "sSortAsc" : "sorting_asc", "sSortDesc" : "sorting_desc", "sSortable" : "sorting", "sSortableAsc" : "sorting_asc_disabled", "sSortableDesc" : "sorting_desc_disabled", "sSortableNone" : "sorting_disabled", "sSortColumn" : "sorting_", "sSortJUIAsc" : "", "sSortJUIDesc" : "", "sSortJUI" : "", "sSortJUIAscAllowed" : "", "sSortJUIDescAllowed" : "", "sSortJUIWrapper" : "", "sSortIcon" : "", "sScrollWrapper" : "dataTables_scroll", "sScrollHead" : "dataTables_scrollHead", "sScrollHeadInner" : "dataTables_scrollHeadInner", "sScrollBody" : "dataTables_scrollBody", "sScrollFoot" : "dataTables_scrollFoot", "sScrollFootInner" : "dataTables_scrollFootInner", "sFooterTH" : "", "sJUIHeader" : "", "sJUIFooter" : "" }); $.extend(DataTable.ext.oJUIClasses, DataTable.ext.oStdClasses, { "sPagePrevEnabled" : "fg-button ui-button ui-state-default ui-corner-left", "sPagePrevDisabled" : "fg-button ui-button ui-state-default ui-corner-left ui-state-disabled", "sPageNextEnabled" : "fg-button ui-button ui-state-default ui-corner-right", "sPageNextDisabled" : "fg-button ui-button ui-state-default ui-corner-right ui-state-disabled", "sPageJUINext" : "ui-icon ui-icon-circle-arrow-e", "sPageJUIPrev" : "ui-icon ui-icon-circle-arrow-w", "sPageButton" : "fg-button ui-button ui-state-default", "sPageButtonActive" : "fg-button ui-button ui-state-default ui-state-disabled", "sPageButtonStaticDisabled" : "fg-button ui-button ui-state-default ui-state-disabled", "sPageFirst" : "first ui-corner-tl ui-corner-bl", "sPageLast" : "last ui-corner-tr ui-corner-br", "sPaging" : "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi " + "ui-buttonset-multi paging_", "sSortAsc" : "ui-state-default", "sSortDesc" : "ui-state-default", "sSortable" : "ui-state-default", "sSortableAsc" : "ui-state-default", "sSortableDesc" : "ui-state-default", "sSortableNone" : "ui-state-default", "sSortJUIAsc" : "css_right ui-icon ui-icon-triangle-1-n", "sSortJUIDesc" : "css_right ui-icon ui-icon-triangle-1-s", "sSortJUI" : "css_right ui-icon ui-icon-carat-2-n-s", "sSortJUIAscAllowed" : "css_right ui-icon ui-icon-carat-1-n", "sSortJUIDescAllowed" : "css_right ui-icon ui-icon-carat-1-s", "sSortJUIWrapper" : "DataTables_sort_wrapper", "sSortIcon" : "DataTables_sort_icon", "sScrollHead" : "dataTables_scrollHead ui-state-default", "sScrollFoot" : "dataTables_scrollFoot ui-state-default", "sFooterTH" : "ui-state-default", "sJUIHeader" : "fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix", "sJUIFooter" : "fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix" }); $.extend(DataTable.ext.oPagination, { "two_button" : { "fnInit" : function(oSettings, nPaging, fnCallbackDraw) { var oLang = oSettings.oLanguage.oPaginate; var oClasses = oSettings.oClasses; var fnClickHandler = function(e) { if (oSettings.oApi._fnPageChange(oSettings, e.data.action)) { fnCallbackDraw(oSettings) } }; var sAppend = (!oSettings.bJUI) ? '' + oLang.sPrevious + '' + '' + oLang.sNext + '' : '' + ''; $(nPaging).append(sAppend); var els = $('a', nPaging); var nPrevious = els[0], nNext = els[1]; oSettings.oApi._fnBindAction(nPrevious, { action : "previous" }, fnClickHandler); oSettings.oApi._fnBindAction(nNext, { action : "next" }, fnClickHandler); if (!oSettings.aanFeatures.p) { nPaging.id = oSettings.sTableId + '_paginate'; nPrevious.id = oSettings.sTableId + '_previous'; nNext.id = oSettings.sTableId + '_next'; nPrevious.setAttribute('aria-controls', oSettings.sTableId); nNext.setAttribute('aria-controls', oSettings.sTableId) } }, "fnUpdate" : function(oSettings, fnCallbackDraw) { if (!oSettings.aanFeatures.p) { return } var oClasses = oSettings.oClasses; var an = oSettings.aanFeatures.p; var nNode; for (var i = 0, iLen = an.length; i < iLen; i++) { nNode = an[i].firstChild; if (nNode) { nNode.className = (oSettings._iDisplayStart === 0) ? oClasses.sPagePrevDisabled : oClasses.sPagePrevEnabled; nNode = nNode.nextSibling; nNode.className = (oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay()) ? oClasses.sPageNextDisabled : oClasses.sPageNextEnabled } } } }, "iFullNumbersShowPages" : 5, "full_numbers" : { "fnInit" : function(oSettings, nPaging, fnCallbackDraw) { var oLang = oSettings.oLanguage.oPaginate; var oClasses = oSettings.oClasses; var fnClickHandler = function(e) { if (oSettings.oApi._fnPageChange(oSettings, e.data.action)) { fnCallbackDraw(oSettings) } }; $(nPaging).append('' + oLang.sFirst + '' + '' + oLang.sPrevious + '' + '' + '' + oLang.sNext + '' + '' + oLang.sLast + ''); var els = $('a', nPaging); var nFirst = els[0], nPrev = els[1], nNext = els[2], nLast = els[3]; oSettings.oApi._fnBindAction(nFirst, { action : "first" }, fnClickHandler); oSettings.oApi._fnBindAction(nPrev, { action : "previous" }, fnClickHandler); oSettings.oApi._fnBindAction(nNext, { action : "next" }, fnClickHandler); oSettings.oApi._fnBindAction(nLast, { action : "last" }, fnClickHandler); if (!oSettings.aanFeatures.p) { nPaging.id = oSettings.sTableId + '_paginate'; nFirst.id = oSettings.sTableId + '_first'; nPrev.id = oSettings.sTableId + '_previous'; nNext.id = oSettings.sTableId + '_next'; nLast.id = oSettings.sTableId + '_last' } }, "fnUpdate" : function(oSettings, fnCallbackDraw) { // jQuery(".ui-datepicker-month, .style, .dataTables_length, select").uniform({ // radioClass : 'choice' // }); // jQuery('.hovertip').tooltip(); // jQuery('.tooltips, .table, .icons').tooltip({ // selector : "a[rel=tooltip]" // }) if (!oSettings.aanFeatures.p) { return } var iPageCount = DataTable.ext.oPagination.iFullNumbersShowPages; var iPageCountHalf = Math.floor(iPageCount / 2); var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength); var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1; var sList = ""; var iStartButton, iEndButton, i, iLen; var oClasses = oSettings.oClasses; var anButtons, anStatic, nPaginateList, nNode; var an = oSettings.aanFeatures.p; var fnBind = function(j) { oSettings.oApi._fnBindAction(this, { "page" : j + iStartButton - 1 }, function(e) { oSettings.oApi._fnPageChange(oSettings, e.data.page); fnCallbackDraw(oSettings); e.preventDefault() }) }; if (oSettings._iDisplayLength === -1) { iStartButton = 1; iEndButton = 1; iCurrentPage = 1 } else if (iPages < iPageCount) { iStartButton = 1; iEndButton = iPages } else if (iCurrentPage <= iPageCountHalf) { iStartButton = 1; iEndButton = iPageCount } else if (iCurrentPage >= (iPages - iPageCountHalf)) { iStartButton = iPages - iPageCount + 1; iEndButton = iPages } else { iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1; iEndButton = iStartButton + iPageCount - 1 } for ( i = iStartButton; i <= iEndButton; i++) { sList += (iCurrentPage !== i) ? '' + oSettings.fnFormatNumber(i) + '' : '' + oSettings.fnFormatNumber(i) + '' } for ( i = 0, iLen = an.length; i < iLen; i++) { nNode = an[i]; if (!nNode.hasChildNodes()) { continue } $('span:eq(0)', nNode).html(sList).children('a').each(fnBind); anButtons = nNode.getElementsByTagName('a'); anStatic = [anButtons[0], anButtons[1], anButtons[anButtons.length - 2], anButtons[anButtons.length - 1]]; $(anStatic).removeClass(oClasses.sPageButton + " " + oClasses.sPageButtonActive + " " + oClasses.sPageButtonStaticDisabled); $([anStatic[0], anStatic[1]]).addClass((iCurrentPage == 1) ? oClasses.sPageButtonStaticDisabled : oClasses.sPageButton); $([anStatic[2], anStatic[3]]).addClass((iPages === 0 || iCurrentPage === iPages || oSettings._iDisplayLength === -1) ? oClasses.sPageButtonStaticDisabled : oClasses.sPageButton) } } } }); $.extend(DataTable.ext.oSort, { "string-pre" : function(a) { if ( typeof a != 'string') { a = (a !== null && a.toString) ? a.toString() : '' } return a.toLowerCase() }, "string-asc" : function(x, y) { return ((x < y) ? -1 : ((x > y) ? 1 : 0)) }, "string-desc" : function(x, y) { return ((x < y) ? 1 : ((x > y) ? -1 : 0)) }, "html-pre" : function(a) { return a.replace(/<.*?>/g, "").toLowerCase() }, "html-asc" : function(x, y) { return ((x < y) ? -1 : ((x > y) ? 1 : 0)) }, "html-desc" : function(x, y) { return ((x < y) ? 1 : ((x > y) ? -1 : 0)) }, "date-pre" : function(a) { var x = Date.parse(a); if (isNaN(x) || x === "") { x = Date.parse("01/01/1970 00:00:00") } return x }, "date-asc" : function(x, y) { return x - y }, "date-desc" : function(x, y) { return y - x }, "numeric-pre" : function(a) { return (a == "-" || a === "") ? 0 : a * 1 }, "numeric-asc" : function(x, y) { return x - y }, "numeric-desc" : function(x, y) { return y - x } }); $.extend(DataTable.ext.aTypes, [ function(sData) { if ( typeof sData === 'number') { return 'numeric' } else if ( typeof sData !== 'string') { return null } var sValidFirstChars = "0123456789-"; var sValidChars = "0123456789."; var Char; var bDecimal = false; Char = sData.charAt(0); if (sValidFirstChars.indexOf(Char) == -1) { return null } for (var i = 1; i < sData.length; i++) { Char = sData.charAt(i); if (sValidChars.indexOf(Char) == -1) { return null } if (Char == ".") { if (bDecimal) { return null } bDecimal = true } } return 'numeric' }, function(sData) { var iParse = Date.parse(sData); if ((iParse !== null && !isNaN(iParse)) || ( typeof sData === 'string' && sData.length === 0)) { return 'date' } return null }, function(sData) { if ( typeof sData === 'string' && sData.indexOf('<') != -1 && sData.indexOf('>') != -1) { return 'html' } return null }]); $.fn.DataTable = DataTable; $.fn.dataTable = DataTable; $.fn.dataTableSettings = DataTable.settings; $.fn.dataTableExt = DataTable.ext })) }(window, document));