/** * Module generic file * * @category Administration * @author bt-consulting * @copyright 2017 BT Consulting * @version 1.0.0 * @license bt-consulting.io * @since File available since Release 1.0 */ (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 === "" ? '' : ' '; var nFilter = document.createElement('div'); nFilter.className = oSettings.oClasses.sFilter; nFilter.innerHTML = '
' + sSearchStr + '
'; 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"'; 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": "POST" }; 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": 10, "_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) { 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));