/* * File: jquery.dataTables.min.js * Version: 1.6.2 * Author: Allan Jardine (www.sprymedia.co.uk) * Info: www.datatables.net * * Copyright 2008-2010 Allan Jardine, all rights reserved. * * This source file is free software, under either the GPL v2 license or a * BSD style license, as supplied with this software. * * This source file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. */ (function($) { $.fn.dataTableSettings = []; var _aoSettings = $.fn.dataTableSettings; $.fn.dataTableExt = {}; var _oExt = $.fn.dataTableExt; _oExt.sVersion = "1.6.2"; _oExt.iApiIndex = 0; _oExt.oApi = {}; _oExt.afnFiltering = []; _oExt.aoFeatures = []; _oExt.ofnSearch = {}; _oExt.afnSortData = []; _oExt.oStdClasses = { 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", sPageFirst : "first", sPagePrevious : "previous", sPageNext : "next", sPageLast : "last", sStripOdd : "odd", sStripEven : "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 : "" }; _oExt.oJUIClasses = { sPagePrevEnabled : "fg-button ui-state-default ui-corner-left", sPagePrevDisabled : "fg-button ui-state-default ui-corner-left ui-state-disabled", sPageNextEnabled : "fg-button ui-state-default ui-corner-right", sPageNextDisabled : "fg-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-state-default", sPageButtonActive : "fg-button ui-state-default ui-state-disabled", sPageButtonStaticDisabled : "fg-button ui-state-default ui-state-disabled", sPageFirst : "first ui-corner-tl ui-corner-bl", sPagePrevious : "previous", sPageNext : "next", sPageLast : "last ui-corner-tr ui-corner-br", sStripOdd : "odd", sStripEven : "even", sRowEmpty : "dataTables_empty", sWrapper : "dataTables_wrapper", sFilter : "dataTables_filter", sInfo : "dataTables_info", sPaging : "dataTables_paginate fg-buttonset fg-buttonset-multi paging_", sLength : "dataTables_length", sProcessing : "dataTables_processing", sSortAsc : "ui-state-default", sSortDesc : "ui-state-default", sSortable : "ui-state-default", sSortableAsc : "ui-state-default", sSortableDesc : "ui-state-default", sSortableNone : "ui-state-default", sSortColumn : "sorting_", 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" }; _oExt.oPagination = { two_button : { fnInit : function(oSettings, nPaging, fnCallbackDraw) { var nPrevious, nNext, nPreviousInner, nNextInner; if (!oSettings.bJUI) { nPrevious = document.createElement("div"); nNext = document.createElement("div") } else { nPrevious = document.createElement("a"); nNext = document.createElement("a"); nNextInner = document.createElement("span"); nNextInner.className = oSettings.oClasses.sPageJUINext; nNext.appendChild(nNextInner); nPreviousInner = document.createElement("span"); nPreviousInner.className = oSettings.oClasses.sPageJUIPrev; nPrevious.appendChild(nPreviousInner) } nPrevious.className = oSettings.oClasses.sPagePrevDisabled; nNext.className = oSettings.oClasses.sPageNextDisabled; nPrevious.title = oSettings.oLanguage.oPaginate.sPrevious; nNext.title = oSettings.oLanguage.oPaginate.sNext; nPaging.appendChild(nPrevious); nPaging.appendChild(nNext); $(nPrevious).click(function() { if (oSettings.oApi._fnPageChange(oSettings, "previous")) { fnCallbackDraw(oSettings) } }); $(nNext).click(function() { if (oSettings.oApi._fnPageChange(oSettings, "next")) { fnCallbackDraw(oSettings) } }); $(nPrevious).bind("selectstart", function() { return false }); $(nNext).bind("selectstart", function() { return false }); if (oSettings.sTableId !== "" && typeof oSettings.aanFeatures.p == "undefined") { nPaging .setAttribute("id", oSettings.sTableId + "_paginate"); nPrevious.setAttribute("id", oSettings.sTableId + "_previous"); nNext.setAttribute("id", oSettings.sTableId + "_next") } }, fnUpdate : function(oSettings, fnCallbackDraw) { if (!oSettings.aanFeatures.p) { return } var an = oSettings.aanFeatures.p; for ( var i = 0, iLen = an.length; i < iLen; i++) { if (an[i].childNodes.length !== 0) { an[i].childNodes[0].className = (oSettings._iDisplayStart === 0) ? oSettings.oClasses.sPagePrevDisabled : oSettings.oClasses.sPagePrevEnabled; an[i].childNodes[1].className = (oSettings .fnDisplayEnd() == oSettings.fnRecordsDisplay()) ? oSettings.oClasses.sPageNextDisabled : oSettings.oClasses.sPageNextEnabled } } } }, iFullNumbersShowPages : 5, full_numbers : { fnInit : function(oSettings, nPaging, fnCallbackDraw) { var nFirst = document.createElement("span"); var nPrevious = document.createElement("span"); var nList = document.createElement("span"); var nNext = document.createElement("span"); var nLast = document.createElement("span"); nFirst.innerHTML = oSettings.oLanguage.oPaginate.sFirst; nPrevious.innerHTML = oSettings.oLanguage.oPaginate.sPrevious; nNext.innerHTML = oSettings.oLanguage.oPaginate.sNext; nLast.innerHTML = oSettings.oLanguage.oPaginate.sLast; var oClasses = oSettings.oClasses; nFirst.className = oClasses.sPageButton + " " + oClasses.sPageFirst; nPrevious.className = oClasses.sPageButton + " " + oClasses.sPagePrevious; nNext.className = oClasses.sPageButton + " " + oClasses.sPageNext; nLast.className = oClasses.sPageButton + " " + oClasses.sPageLast; nPaging.appendChild(nFirst); nPaging.appendChild(nPrevious); nPaging.appendChild(nList); nPaging.appendChild(nNext); nPaging.appendChild(nLast); $(nFirst).click(function() { if (oSettings.oApi._fnPageChange(oSettings, "first")) { fnCallbackDraw(oSettings) } }); $(nPrevious).click(function() { if (oSettings.oApi._fnPageChange(oSettings, "previous")) { fnCallbackDraw(oSettings) } }); $(nNext).click(function() { if (oSettings.oApi._fnPageChange(oSettings, "next")) { fnCallbackDraw(oSettings) } }); $(nLast).click(function() { if (oSettings.oApi._fnPageChange(oSettings, "last")) { fnCallbackDraw(oSettings) } }); $("span", nPaging).bind("mousedown", function() { return false }).bind("selectstart", function() { return false }); if (oSettings.sTableId !== "" && typeof oSettings.aanFeatures.p == "undefined") { nPaging .setAttribute("id", oSettings.sTableId + "_paginate"); nFirst.setAttribute("id", oSettings.sTableId + "_first"); nPrevious.setAttribute("id", oSettings.sTableId + "_previous"); nNext.setAttribute("id", oSettings.sTableId + "_next"); nLast.setAttribute("id", oSettings.sTableId + "_last") } }, fnUpdate : function(oSettings, fnCallbackDraw) { if (!oSettings.aanFeatures.p) { return } var iPageCount = _oExt.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; 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++) { if (iCurrentPage != i) { sList += '' + i + "" } else { sList += '' + i + "" } } var an = oSettings.aanFeatures.p; var anButtons, anStatic, nPaginateList; var fnClick = function() { var iTarget = (this.innerHTML * 1) - 1; oSettings._iDisplayStart = iTarget * oSettings._iDisplayLength; fnCallbackDraw(oSettings); return false }; var fnFalse = function() { return false }; for (i = 0, iLen = an.length; i < iLen; i++) { if (an[i].childNodes.length === 0) { continue } nPaginateList = an[i].childNodes[2]; nPaginateList.innerHTML = sList; $("span", nPaginateList).click(fnClick).bind("mousedown", fnFalse).bind("selectstart", fnFalse); anButtons = an[i].getElementsByTagName("span"); anStatic = [ anButtons[0], anButtons[1], anButtons[anButtons.length - 2], anButtons[anButtons.length - 1] ]; $(anStatic).removeClass( oClasses.sPageButton + " " + oClasses.sPageButtonActive + " " + oClasses.sPageButtonStaticDisabled); if (iCurrentPage == 1) { anStatic[0].className += " " + oClasses.sPageButtonStaticDisabled; anStatic[1].className += " " + oClasses.sPageButtonStaticDisabled } else { anStatic[0].className += " " + oClasses.sPageButton; anStatic[1].className += " " + oClasses.sPageButton } if (iPages === 0 || iCurrentPage == iPages || oSettings._iDisplayLength == -1) { anStatic[2].className += " " + oClasses.sPageButtonStaticDisabled; anStatic[3].className += " " + oClasses.sPageButtonStaticDisabled } else { anStatic[2].className += " " + oClasses.sPageButton; anStatic[3].className += " " + oClasses.sPageButton } } } } }; _oExt.oSort = { "string-asc" : function(a, b) { var x = a.toLowerCase(); var y = b.toLowerCase(); return ((x < y) ? -1 : ((x > y) ? 1 : 0)) }, "string-desc" : function(a, b) { var x = a.toLowerCase(); var y = b.toLowerCase(); return ((x < y) ? 1 : ((x > y) ? -1 : 0)) }, "html-asc" : function(a, b) { var x = a.replace(/<.*?>/g, "").toLowerCase(); var y = b.replace(/<.*?>/g, "").toLowerCase(); return ((x < y) ? -1 : ((x > y) ? 1 : 0)) }, "html-desc" : function(a, b) { var x = a.replace(/<.*?>/g, "").toLowerCase(); var y = b.replace(/<.*?>/g, "").toLowerCase(); return ((x < y) ? 1 : ((x > y) ? -1 : 0)) }, "date-asc" : function(a, b) { var x = Date.parse(a); var y = Date.parse(b); if (isNaN(x)) { x = Date.parse("01/01/1970 00:00:00") } if (isNaN(y)) { y = Date.parse("01/01/1970 00:00:00") } return x - y }, "date-desc" : function(a, b) { var x = Date.parse(a); var y = Date.parse(b); if (isNaN(x)) { x = Date.parse("01/01/1970 00:00:00") } if (isNaN(y)) { y = Date.parse("01/01/1970 00:00:00") } return y - x }, "numeric-asc" : function(a, b) { var x = a == "-" ? 0 : a; var y = b == "-" ? 0 : b; return x - y }, "numeric-desc" : function(a, b) { var x = a == "-" ? 0 : a; var y = b == "-" ? 0 : b; return y - x } }; _oExt.aTypes = [ function(sData) { if (typeof sData == "number") { return "numeric" } else { if (typeof sData.charAt != "function") { 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)) { return "date" } return null } ]; _oExt._oExternConfig = { iNextUnique : 0 }; $.fn.dataTable = function(oInit) { function classSettings() { this.fnRecordsTotal = function() { if (this.oFeatures.bServerSide) { return this._iRecordsTotal } else { return this.aiDisplayMaster.length } }; this.fnRecordsDisplay = function() { if (this.oFeatures.bServerSide) { return this._iRecordsDisplay } else { return this.aiDisplay.length } }; this.fnDisplayEnd = function() { if (this.oFeatures.bServerSide) { return this._iDisplayStart + this.aiDisplay.length } else { return this._iDisplayEnd } }; this.sInstance = null; this.oFeatures = { bPaginate : true, bLengthChange : true, bFilter : true, bSort : true, bInfo : true, bAutoWidth : true, bProcessing : false, bSortClasses : true, bStateSave : false, bServerSide : false }; this.aanFeatures = []; this.oLanguage = { sProcessing : "Processing...", sLengthMenu : "Show _MENU_ entries", sZeroRecords : "No matching records found", sInfo : "Showing _START_ to _END_ of _TOTAL_ entries", sInfoEmpty : "Showing 0 to 0 of 0 entries", sInfoFiltered : "(filtered from _MAX_ total entries)", sInfoPostFix : "", sSearch : "Search:", sUrl : "", oPaginate : { sFirst : "First", sPrevious : "Previous", sNext : "Next", sLast : "Last" } }; this.aoData = []; this.aiDisplay = []; this.aiDisplayMaster = []; this.aoColumns = []; this.iNextId = 0; this.asDataSearch = []; this.oPreviousSearch = { sSearch : "", bEscapeRegex : true }; this.aoPreSearchCols = []; this.aaSorting = [ [ 0, "asc", 0 ] ]; this.aaSortingFixed = null; this.asStripClasses = []; this.fnRowCallback = null; this.fnHeaderCallback = null; this.fnFooterCallback = null; this.aoDrawCallback = []; this.fnInitComplete = null; this.sTableId = ""; this.nTable = null; this.iDefaultSortIndex = 0; this.bInitialised = false; this.aoOpenRows = []; this.sDom = "lfrtip"; this.sPaginationType = "two_button"; this.iCookieDuration = 60 * 60 * 2; this.sAjaxSource = null; this.bAjaxDataGet = true; this.fnServerData = $.getJSON; this.iServerDraw = 0; this._iDisplayLength = 10; this._iDisplayStart = 0; this._iDisplayEnd = 10; this._iRecordsTotal = 0; this._iRecordsDisplay = 0; this.bJUI = false; this.oClasses = _oExt.oStdClasses; this.bFiltered = false; this.bSorted = false } this.oApi = {}; this.fnDraw = function(bComplete) { var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]); if (typeof bComplete != "undefined" && bComplete === false) { _fnCalculateEnd(oSettings); _fnDraw(oSettings) } else { _fnReDraw(oSettings) } }; this.fnFilter = function(sInput, iColumn, bEscapeRegex) { var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]); if (typeof bEscapeRegex == "undefined") { bEscapeRegex = true } if (typeof iColumn == "undefined" || iColumn === null) { _fnFilterComplete(oSettings, { sSearch : sInput, bEscapeRegex : bEscapeRegex }, 1) } else { oSettings.aoPreSearchCols[iColumn].sSearch = sInput; oSettings.aoPreSearchCols[iColumn].bEscapeRegex = bEscapeRegex; _fnFilterComplete(oSettings, oSettings.oPreviousSearch, 1) } }; this.fnSettings = function(nNode) { return _fnSettingsFromNode(this[_oExt.iApiIndex]) }; this.fnVersionCheck = function(sVersion) { var fnZPad = function(Zpad, count) { while (Zpad.length < count) { Zpad += "0" } return Zpad }; var aThis = _oExt.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) }; this.fnSort = function(aaSort) { var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]); oSettings.aaSorting = aaSort; _fnSort(oSettings) }; this.fnSortListener = function(nNode, iColumn, fnCallback) { _fnSortAttachListener(_fnSettingsFromNode(this[_oExt.iApiIndex]), nNode, iColumn, fnCallback) }; this.fnAddData = function(mData, bRedraw) { if (mData.length === 0) { return [] } var aiReturn = []; var iTest; var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]); if (typeof mData[0] == "object") { 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(); _fnBuildSearchArray(oSettings, 1); if (typeof bRedraw == "undefined" || bRedraw) { _fnReDraw(oSettings) } return aiReturn }; this.fnDeleteRow = function(mTarget, fnCallBack, bNullRow) { var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]); var i, iAODataIndex; iAODataIndex = (typeof mTarget == "object") ? _fnNodeToDataIndex( oSettings, mTarget) : mTarget; for (i = 0; i < oSettings.aiDisplayMaster.length; i++) { if (oSettings.aiDisplayMaster[i] == iAODataIndex) { oSettings.aiDisplayMaster.splice(i, 1); break } } for (i = 0; i < oSettings.aiDisplay.length; i++) { if (oSettings.aiDisplay[i] == iAODataIndex) { oSettings.aiDisplay.splice(i, 1); break } } _fnBuildSearchArray(oSettings, 1); if (typeof fnCallBack == "function") { fnCallBack.call(this) } if (oSettings._iDisplayStart >= oSettings.aiDisplay.length) { oSettings._iDisplayStart -= oSettings._iDisplayLength; if (oSettings._iDisplayStart < 0) { oSettings._iDisplayStart = 0 } } _fnCalculateEnd(oSettings); _fnDraw(oSettings); var aData = oSettings.aoData[iAODataIndex]._aData.slice(); if (typeof bNullRow != "undefined" && bNullRow === true) { oSettings.aoData[iAODataIndex] = null } return aData }; this.fnClearTable = function(bRedraw) { var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]); _fnClearTable(oSettings); if (typeof bRedraw == "undefined" || bRedraw) { _fnDraw(oSettings) } }; this.fnOpen = function(nTr, sHtml, sClass) { var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]); this.fnClose(nTr); var nNewRow = document.createElement("tr"); var nNewCell = document.createElement("td"); nNewRow.appendChild(nNewCell); nNewCell.className = sClass; nNewCell.colSpan = _fnVisbleColumns(oSettings); nNewCell.innerHTML = sHtml; var nTrs = $("tbody tr", oSettings.nTable); if ($.inArray(nTr, nTrs) != -1) { $(nNewRow).insertAfter(nTr) } if (!oSettings.oFeatures.bServerSide) { oSettings.aoOpenRows.push( { nTr : nNewRow, nParent : nTr }) } return nNewRow }; this.fnClose = function(nTr) { var oSettings = _fnSettingsFromNode(this[_oExt.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.fnGetData = function(mRow) { var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]); if (typeof mRow != "undefined") { var iRow = (typeof mRow == "object") ? _fnNodeToDataIndex( oSettings, mRow) : mRow; return oSettings.aoData[iRow]._aData } return _fnGetDataMaster(oSettings) }; this.fnGetNodes = function(iRow) { var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]); if (typeof iRow != "undefined") { return oSettings.aoData[iRow].nTr } return _fnGetTrNodes(oSettings) }; this.fnGetPosition = function(nNode) { var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]); var i; if (nNode.nodeName == "TR") { return _fnNodeToDataIndex(oSettings, nNode) } else { if (nNode.nodeName == "TD") { var iDataIndex = _fnNodeToDataIndex(oSettings, nNode.parentNode); var iCorrector = 0; for ( var j = 0; j < oSettings.aoColumns.length; j++) { if (oSettings.aoColumns[j].bVisible) { if (oSettings.aoData[iDataIndex].nTr .getElementsByTagName("td")[j - iCorrector] == nNode) { return [ iDataIndex, j - iCorrector, j ] } } else { iCorrector++ } } } } return null }; this.fnUpdate = function(mData, mRow, iColumn, bRedraw) { var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]); var iVisibleColumn; var sDisplay; var iRow = (typeof mRow == "object") ? _fnNodeToDataIndex( oSettings, mRow) : mRow; if (typeof mData != "object") { sDisplay = mData; oSettings.aoData[iRow]._aData[iColumn] = sDisplay; if (oSettings.aoColumns[iColumn].fnRender !== null) { sDisplay = oSettings.aoColumns[iColumn].fnRender( { iDataRow : iRow, iDataColumn : iColumn, aData : oSettings.aoData[iRow]._aData, oSettings : oSettings }); if (oSettings.aoColumns[iColumn].bUseRendered) { oSettings.aoData[iRow]._aData[iColumn] = sDisplay } } iVisibleColumn = _fnColumnIndexToVisible(oSettings, iColumn); if (iVisibleColumn !== null) { oSettings.aoData[iRow].nTr.getElementsByTagName("td")[iVisibleColumn].innerHTML = sDisplay } } else { if (mData.length != oSettings.aoColumns.length) { alert("DataTables warning: An array passed to fnUpdate must have the same number of columns as the table in question - in this case " + oSettings.aoColumns.length); return 1 } for ( var i = 0; i < mData.length; i++) { sDisplay = mData[i]; oSettings.aoData[iRow]._aData[i] = sDisplay; if (oSettings.aoColumns[i].fnRender !== null) { sDisplay = oSettings.aoColumns[i].fnRender( { iDataRow : iRow, iDataColumn : i, aData : oSettings.aoData[iRow]._aData, oSettings : oSettings }); if (oSettings.aoColumns[i].bUseRendered) { oSettings.aoData[iRow]._aData[i] = sDisplay } } iVisibleColumn = _fnColumnIndexToVisible(oSettings, i); if (iVisibleColumn !== null) { oSettings.aoData[iRow].nTr.getElementsByTagName("td")[iVisibleColumn].innerHTML = sDisplay } } } _fnBuildSearchArray(oSettings, 1); if (typeof bRedraw != "undefined" && bRedraw) { _fnReDraw(oSettings) } return 0 }; this.fnSetColumnVis = function(iCol, bShow) { var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]); var i, iLen; var iColumns = oSettings.aoColumns.length; var nTd, anTds; if (oSettings.aoColumns[iCol].bVisible == bShow) { return } var nTrHead = $("thead:eq(0)>tr", oSettings.nTable)[0]; var nTrFoot = $("tfoot:eq(0)>tr", oSettings.nTable)[0]; var anTheadTh = []; var anTfootTh = []; for (i = 0; i < iColumns; i++) { anTheadTh.push(oSettings.aoColumns[i].nTh); anTfootTh.push(oSettings.aoColumns[i].nTf) } if (bShow) { var iInsert = 0; for (i = 0; i < iCol; i++) { if (oSettings.aoColumns[i].bVisible) { iInsert++ } } if (iInsert >= _fnVisbleColumns(oSettings)) { nTrHead.appendChild(anTheadTh[iCol]); if (nTrFoot) { nTrFoot.appendChild(anTfootTh[iCol]) } for (i = 0, iLen = oSettings.aoData.length; i < iLen; i++) { nTd = oSettings.aoData[i]._anHidden[iCol]; oSettings.aoData[i].nTr.appendChild(nTd) } } else { var iBefore; for (i = iCol; i < iColumns; i++) { iBefore = _fnColumnIndexToVisible(oSettings, i); if (iBefore !== null) { break } } nTrHead.insertBefore(anTheadTh[iCol], nTrHead .getElementsByTagName("th")[iBefore]); if (nTrFoot) { nTrFoot.insertBefore(anTfootTh[iCol], nTrFoot .getElementsByTagName("th")[iBefore]) } anTds = _fnGetTdNodes(oSettings); for (i = 0, iLen = oSettings.aoData.length; i < iLen; i++) { nTd = oSettings.aoData[i]._anHidden[iCol]; oSettings.aoData[i].nTr.insertBefore(nTd, $(">td:eq(" + iBefore + ")", oSettings.aoData[i].nTr)[0]) } } oSettings.aoColumns[iCol].bVisible = true } else { nTrHead.removeChild(anTheadTh[iCol]); if (nTrFoot) { nTrFoot.removeChild(anTfootTh[iCol]) } anTds = _fnGetTdNodes(oSettings); for (i = 0, iLen = oSettings.aoData.length; i < iLen; i++) { nTd = anTds[(i * oSettings.aoColumns.length) + iCol]; oSettings.aoData[i]._anHidden[iCol] = nTd; nTd.parentNode.removeChild(nTd) } oSettings.aoColumns[iCol].bVisible = false } for (i = 0, iLen = oSettings.aoOpenRows.length; i < iLen; i++) { oSettings.aoOpenRows[i].nTr.colSpan = _fnVisbleColumns(oSettings) } _fnSaveState(oSettings) }; this.fnPageChange = function(sAction, bRedraw) { var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]); _fnPageChange(oSettings, sAction); _fnCalculateEnd(oSettings); if (typeof bRedraw == "undefined" || bRedraw) { _fnDraw(oSettings) } }; function _fnExternApiFunc(sFunc) { return function() { var aArgs = [ _fnSettingsFromNode(this[_oExt.iApiIndex]) ] .concat(Array.prototype.slice.call(arguments)); return _oExt.oApi[sFunc].apply(this, aArgs) } } for ( var sFunc in _oExt.oApi) { if (sFunc) { this[sFunc] = _fnExternApiFunc(sFunc) } } function _fnInitalise(oSettings) { if (oSettings.bInitialised === false) { setTimeout(function() { _fnInitalise(oSettings) }, 200); return } _fnAddOptionsHtml(oSettings); _fnDrawHead(oSettings); if (oSettings.oFeatures.bSort) { _fnSort(oSettings, false); _fnSortingClasses(oSettings) } else { oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); _fnCalculateEnd(oSettings); _fnDraw(oSettings) } if (oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide) { _fnProcessingDisplay(oSettings, true); oSettings.fnServerData(oSettings.sAjaxSource, null, function(json) { for ( var i = 0; i < json.aaData.length; i++) { _fnAddData(oSettings, json.aaData[i]) } oSettings.iInitDisplayStart = oSettings._iDisplayStart; if (oSettings.oFeatures.bSort) { _fnSort(oSettings) } else { oSettings.aiDisplay = oSettings.aiDisplayMaster .slice(); _fnCalculateEnd(oSettings); _fnDraw(oSettings) } _fnProcessingDisplay(oSettings, false); if (typeof oSettings.fnInitComplete == "function") { oSettings.fnInitComplete(oSettings, json) } }); return } if (typeof oSettings.fnInitComplete == "function") { oSettings.fnInitComplete(oSettings) } if (!oSettings.oFeatures.bServerSide) { _fnProcessingDisplay(oSettings, false) } } function _fnLanguageProcess(oSettings, oLanguage, bInit) { _fnMap(oSettings.oLanguage, oLanguage, "sProcessing"); _fnMap(oSettings.oLanguage, oLanguage, "sLengthMenu"); _fnMap(oSettings.oLanguage, oLanguage, "sZeroRecords"); _fnMap(oSettings.oLanguage, oLanguage, "sInfo"); _fnMap(oSettings.oLanguage, oLanguage, "sInfoEmpty"); _fnMap(oSettings.oLanguage, oLanguage, "sInfoFiltered"); _fnMap(oSettings.oLanguage, oLanguage, "sInfoPostFix"); _fnMap(oSettings.oLanguage, oLanguage, "sSearch"); if (typeof oLanguage.oPaginate != "undefined") { _fnMap(oSettings.oLanguage.oPaginate, oLanguage.oPaginate, "sFirst"); _fnMap(oSettings.oLanguage.oPaginate, oLanguage.oPaginate, "sPrevious"); _fnMap(oSettings.oLanguage.oPaginate, oLanguage.oPaginate, "sNext"); _fnMap(oSettings.oLanguage.oPaginate, oLanguage.oPaginate, "sLast") } if (bInit) { _fnInitalise(oSettings) } } function _fnAddColumn(oSettings, oOptions, nTh) { oSettings.aoColumns[oSettings.aoColumns.length++] = { sType : null, _bAutoType : true, bVisible : true, bSearchable : true, bSortable : true, asSorting : [ "asc", "desc" ], sSortingClass : oSettings.oClasses.sSortable, sSortingClassJUI : oSettings.oClasses.sSortJUI, sTitle : nTh ? nTh.innerHTML : "", sName : "", sWidth : null, sClass : null, fnRender : null, bUseRendered : true, iDataSort : oSettings.aoColumns.length - 1, sSortDataType : "std", nTh : nTh ? nTh : document.createElement("th"), nTf : null }; var iLength = oSettings.aoColumns.length - 1; var oCol = oSettings.aoColumns[iLength]; if (typeof oOptions != "undefined" && oOptions !== null) { if (typeof oOptions.sType != "undefined") { oCol.sType = oOptions.sType; oCol._bAutoType = false } _fnMap(oCol, oOptions, "bVisible"); _fnMap(oCol, oOptions, "bSearchable"); _fnMap(oCol, oOptions, "bSortable"); _fnMap(oCol, oOptions, "sTitle"); _fnMap(oCol, oOptions, "sName"); _fnMap(oCol, oOptions, "sWidth"); _fnMap(oCol, oOptions, "sClass"); _fnMap(oCol, oOptions, "fnRender"); _fnMap(oCol, oOptions, "bUseRendered"); _fnMap(oCol, oOptions, "iDataSort"); _fnMap(oCol, oOptions, "asSorting"); _fnMap(oCol, oOptions, "sSortDataType") } 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.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 } } } if (typeof oSettings.aoPreSearchCols[iLength] == "undefined" || oSettings.aoPreSearchCols[iLength] === null) { oSettings.aoPreSearchCols[iLength] = { sSearch : "", bEscapeRegex : true } } else { if (typeof oSettings.aoPreSearchCols[iLength].bEscapeRegex == "undefined") { oSettings.aoPreSearchCols[iLength].bEscapeRegex = true } } } function _fnAddData(oSettings, aData) { if (aData.length != oSettings.aoColumns.length) { alert("DataTables warning: Added data does not match known number of columns"); return -1 } var iThisIndex = oSettings.aoData.length; oSettings.aoData.push( { nTr : document.createElement("tr"), _iId : oSettings.iNextId++, _aData : aData.slice(), _anHidden : [], _sRowStripe : "" }); var nTd, sThisType; for ( var i = 0; i < aData.length; i++) { nTd = document.createElement("td"); if (typeof oSettings.aoColumns[i].fnRender == "function") { var sRendered = oSettings.aoColumns[i].fnRender( { iDataRow : iThisIndex, iDataColumn : i, aData : aData, oSettings : oSettings }); nTd.innerHTML = sRendered; if (oSettings.aoColumns[i].bUseRendered) { oSettings.aoData[iThisIndex]._aData[i] = sRendered } } else { nTd.innerHTML = aData[i] } if (oSettings.aoColumns[i].sClass !== null) { nTd.className = oSettings.aoColumns[i].sClass } if (oSettings.aoColumns[i]._bAutoType && oSettings.aoColumns[i].sType != "string") { sThisType = _fnDetectType(oSettings.aoData[iThisIndex]._aData[i]); if (oSettings.aoColumns[i].sType === null) { oSettings.aoColumns[i].sType = sThisType } else { if (oSettings.aoColumns[i].sType != sThisType) { oSettings.aoColumns[i].sType = "string" } } } if (oSettings.aoColumns[i].bVisible) { oSettings.aoData[iThisIndex].nTr.appendChild(nTd) } else { oSettings.aoData[iThisIndex]._anHidden[i] = nTd } } oSettings.aiDisplayMaster.push(iThisIndex); return iThisIndex } function _fnGatherData(oSettings) { var iLoop, i, iLen, j, jLen, jInner, nTds, nTrs, nTd, aLocalData, iThisIndex, iRow, iRows, iColumn, iColumns; if (oSettings.sAjaxSource === null) { nTrs = oSettings.nTable.getElementsByTagName("tbody")[0].childNodes; for (i = 0, iLen = nTrs.length; i < iLen; i++) { if (nTrs[i].nodeName == "TR") { iThisIndex = oSettings.aoData.length; oSettings.aoData.push( { nTr : nTrs[i], _iId : oSettings.iNextId++, _aData : [], _anHidden : [], _sRowStripe : "" }); oSettings.aiDisplayMaster.push(iThisIndex); aLocalData = oSettings.aoData[iThisIndex]._aData; nTds = nTrs[i].childNodes; jInner = 0; for (j = 0, jLen = nTds.length; j < jLen; j++) { if (nTds[j].nodeName == "TD") { aLocalData[jInner] = nTds[j].innerHTML; jInner++ } } } } } nTrs = _fnGetTrNodes(oSettings); nTds = []; for (i = 0, iLen = nTrs.length; i < iLen; i++) { for (j = 0, jLen = nTrs[i].childNodes.length; j < jLen; j++) { nTd = nTrs[i].childNodes[j]; if (nTd.nodeName == "TD") { nTds.push(nTd) } } } if (nTds.length != nTrs.length * oSettings.aoColumns.length) { alert("DataTables warning: Unexpected number of TD elements. Expected " + (nTrs.length * oSettings.aoColumns.length) + " and got " + nTds.length + ". DataTables does not support rowspan / colspan in the table body, and there must be one cell for each row/column combination.") } for (iColumn = 0, iColumns = oSettings.aoColumns.length; iColumn < iColumns; iColumn++) { if (oSettings.aoColumns[iColumn].sTitle === null) { oSettings.aoColumns[iColumn].sTitle = oSettings.aoColumns[iColumn].nTh.innerHTML } var bAutoType = oSettings.aoColumns[iColumn]._bAutoType, bRender = typeof oSettings.aoColumns[iColumn].fnRender == "function", bClass = oSettings.aoColumns[iColumn].sClass !== null, bVisible = oSettings.aoColumns[iColumn].bVisible, nCell, sThisType, sRendered; if (bAutoType || bRender || bClass || !bVisible) { for (iRow = 0, iRows = oSettings.aoData.length; iRow < iRows; iRow++) { nCell = nTds[(iRow * iColumns) + iColumn]; if (bAutoType) { if (oSettings.aoColumns[iColumn].sType != "string") { sThisType = _fnDetectType(oSettings.aoData[iRow]._aData[iColumn]); if (oSettings.aoColumns[iColumn].sType === null) { oSettings.aoColumns[iColumn].sType = sThisType } else { if (oSettings.aoColumns[iColumn].sType != sThisType) { oSettings.aoColumns[iColumn].sType = "string" } } } } if (bRender) { sRendered = oSettings.aoColumns[iColumn].fnRender( { iDataRow : iRow, iDataColumn : iColumn, aData : oSettings.aoData[iRow]._aData, oSettings : oSettings }); nCell.innerHTML = sRendered; if (oSettings.aoColumns[iColumn].bUseRendered) { oSettings.aoData[iRow]._aData[iColumn] = sRendered } } if (bClass) { nCell.className += " " + oSettings.aoColumns[iColumn].sClass } if (!bVisible) { oSettings.aoData[iRow]._anHidden[iColumn] = nCell; nCell.parentNode.removeChild(nCell) } } } } } function _fnDrawHead(oSettings) { var i, nTh, iLen; var iThs = oSettings.nTable.getElementsByTagName("thead")[0] .getElementsByTagName("th").length; var iCorrector = 0; if (iThs !== 0) { for (i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { nTh = oSettings.aoColumns[i].nTh; if (oSettings.aoColumns[i].bVisible) { if (oSettings.aoColumns[i].sWidth !== null) { nTh.style.width = oSettings.aoColumns[i].sWidth } if (oSettings.aoColumns[i].sTitle != nTh.innerHTML) { nTh.innerHTML = oSettings.aoColumns[i].sTitle } } else { nTh.parentNode.removeChild(nTh); iCorrector++ } } } 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; if (oSettings.aoColumns[i].bVisible) { if (oSettings.aoColumns[i].sClass !== null) { nTh.className = oSettings.aoColumns[i].sClass } if (oSettings.aoColumns[i].sWidth !== null) { nTh.style.width = oSettings.aoColumns[i].sWidth } nTr.appendChild(nTh) } } $("thead:eq(0)", oSettings.nTable).html("")[0].appendChild(nTr) } if (oSettings.bJUI) { for (i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) { oSettings.aoColumns[i].nTh.insertBefore(document .createElement("span"), oSettings.aoColumns[i].nTh.firstChild) } } 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) } } $("thead:eq(0) th", oSettings.nTable).mousedown(function(e) { if (e.shiftKey) { this.onselectstart = function() { return false }; return false } }) } var nTfoot = oSettings.nTable.getElementsByTagName("tfoot"); if (nTfoot.length !== 0) { iCorrector = 0; var nTfs = nTfoot[0].getElementsByTagName("th"); for (i = 0, iLen = nTfs.length; i < iLen; i++) { oSettings.aoColumns[i].nTf = nTfs[i - iCorrector]; if (!oSettings.aoColumns[i].bVisible) { nTfs[i - iCorrector].parentNode.removeChild(nTfs[i - iCorrector]); iCorrector++ } } } } function _fnDraw(oSettings) { var i, iLen; var anRows = []; var iRowCount = 0; var bRowError = false; var iStrips = oSettings.asStripClasses.length; var iOpenRows = oSettings.aoOpenRows.length; if (oSettings.oFeatures.bServerSide && !_fnAjaxUpdate(oSettings)) { return } if (typeof oSettings.iInitDisplayStart != "undefined" && oSettings.iInitDisplayStart != -1) { oSettings._iDisplayStart = (oSettings.iInitDisplayStart >= oSettings .fnRecordsDisplay()) ? 0 : oSettings.iInitDisplayStart; oSettings.iInitDisplayStart = -1; _fnCalculateEnd(oSettings) } 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]]; var nRow = aoData.nTr; if (iStrips !== 0) { var sStrip = oSettings.asStripClasses[iRowCount % iStrips]; if (aoData._sRowStripe != sStrip) { $(nRow).removeClass(aoData._sRowStripe).addClass( sStrip); aoData._sRowStripe = sStrip } } if (typeof oSettings.fnRowCallback == "function") { nRow = oSettings.fnRowCallback(nRow, oSettings.aoData[oSettings.aiDisplay[j]]._aData, iRowCount, j); if (!nRow && !bRowError) { alert("DataTables warning: A node was not returned by fnRowCallback"); bRowError = true } } 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) } } } } } else { anRows[0] = document.createElement("tr"); if (typeof oSettings.asStripClasses[0] != "undefined") { anRows[0].className = oSettings.asStripClasses[0] } var nTd = document.createElement("td"); nTd.setAttribute("valign", "top"); nTd.colSpan = oSettings.aoColumns.length; nTd.className = oSettings.oClasses.sRowEmpty; nTd.innerHTML = oSettings.oLanguage.sZeroRecords; anRows[iRowCount].appendChild(nTd) } if (typeof oSettings.fnHeaderCallback == "function") { oSettings.fnHeaderCallback( $("thead:eq(0)>tr", oSettings.nTable)[0], _fnGetDataMaster(oSettings), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay) } if (typeof oSettings.fnFooterCallback == "function") { oSettings.fnFooterCallback( $("tfoot:eq(0)>tr", oSettings.nTable)[0], _fnGetDataMaster(oSettings), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay) } var nBody = oSettings.nTable.getElementsByTagName("tbody"); if (nBody[0]) { var nTrs = nBody[0].childNodes; for (i = nTrs.length - 1; i >= 0; i--) { nTrs[i].parentNode.removeChild(nTrs[i]) } for (i = 0, iLen = anRows.length; i < iLen; i++) { nBody[0].appendChild(anRows[i]) } } for (i = 0, iLen = oSettings.aoDrawCallback.length; i < iLen; i++) { oSettings.aoDrawCallback[i].fn(oSettings) } oSettings.bSorted = false; oSettings.bFiltered = false; if (typeof oSettings._bInitComplete == "undefined") { oSettings._bInitComplete = true; if (oSettings.oFeatures.bAutoWidth && oSettings.nTable.offsetWidth !== 0) { oSettings.nTable.style.width = oSettings.nTable.offsetWidth + "px" } } } 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 _fnAjaxUpdate(oSettings) { if (oSettings.bAjaxDataGet) { _fnProcessingDisplay(oSettings, true); var iColumns = oSettings.aoColumns.length; var aoData = []; var i; oSettings.iServerDraw++; aoData.push( { name : "sEcho", value : oSettings.iServerDraw }); 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 }); if (oSettings.oFeatures.bFilter !== false) { aoData.push( { name : "sSearch", value : oSettings.oPreviousSearch.sSearch }); aoData.push( { name : "bEscapeRegex", value : oSettings.oPreviousSearch.bEscapeRegex }); for (i = 0; i < iColumns; i++) { aoData.push( { name : "sSearch_" + i, value : oSettings.aoPreSearchCols[i].sSearch }); aoData.push( { name : "bEscapeRegex_" + i, value : oSettings.aoPreSearchCols[i].bEscapeRegex }); aoData.push( { name : "bSearchable_" + i, value : oSettings.aoColumns[i].bSearchable }) } } if (oSettings.oFeatures.bSort !== false) { var iFixed = oSettings.aaSortingFixed !== null ? oSettings.aaSortingFixed.length : 0; var iUser = oSettings.aaSorting.length; aoData.push( { name : "iSortingCols", value : iFixed + iUser }); for (i = 0; i < iFixed; i++) { aoData.push( { name : "iSortCol_" + i, value : oSettings.aaSortingFixed[i][0] }); aoData.push( { name : "sSortDir_" + i, value : oSettings.aaSortingFixed[i][1] }) } for (i = 0; i < iUser; i++) { aoData.push( { name : "iSortCol_" + (i + iFixed), value : oSettings.aaSorting[i][0] }); aoData.push( { name : "sSortDir_" + (i + iFixed), value : oSettings.aaSorting[i][1] }) } for (i = 0; i < iColumns; i++) { aoData.push( { name : "bSortable_" + i, value : oSettings.aoColumns[i].bSortable }) } } oSettings.fnServerData(oSettings.sAjaxSource, aoData, function( json) { _fnAjaxUpdateDraw(oSettings, json) }); return false } else { return true } } function _fnAjaxUpdateDraw(oSettings, json) { if (typeof json.sEcho != "undefined") { if (json.sEcho * 1 < oSettings.iServerDraw) { return } else { oSettings.iServerDraw = json.sEcho * 1 } } _fnClearTable(oSettings); oSettings._iRecordsTotal = json.iTotalRecords; oSettings._iRecordsDisplay = json.iTotalDisplayRecords; var sOrdering = _fnColumnOrdering(oSettings); var bReOrder = (typeof json.sColumns != "undefined" && sOrdering !== "" && json.sColumns != sOrdering); if (bReOrder) { var aiIndex = _fnReOrderIndex(oSettings, json.sColumns) } for ( var i = 0, iLen = json.aaData.length; i < iLen; i++) { if (bReOrder) { var aData = []; for ( var j = 0, jLen = oSettings.aoColumns.length; j < jLen; j++) { aData.push(json.aaData[i][aiIndex[j]]) } _fnAddData(oSettings, aData) } else { _fnAddData(oSettings, json.aaData[i]) } } oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); oSettings.bAjaxDataGet = false; _fnDraw(oSettings); oSettings.bAjaxDataGet = true; _fnProcessingDisplay(oSettings, false) } function _fnAddOptionsHtml(oSettings) { var nHolding = document.createElement("div"); oSettings.nTable.parentNode .insertBefore(nHolding, oSettings.nTable); var nWrapper = document.createElement("div"); nWrapper.className = oSettings.oClasses.sWrapper; if (oSettings.sTableId !== "") { nWrapper.setAttribute("id", oSettings.sTableId + "_wrapper") } var nInsertNode = nWrapper; var sDom = oSettings.sDom .replace("H", "fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix"); sDom = sDom .replace("F", "fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix"); var aDom = sDom.split(""); var nTmp, iPushFeature, cOption, nNewNode, cNext, sClass, j; for ( var i = 0; i < aDom.length; i++) { iPushFeature = 0; cOption = aDom[i]; if (cOption == "<") { nNewNode = document.createElement("div"); cNext = aDom[i + 1]; if (cNext == "'" || cNext == '"') { sClass = ""; j = 2; while (aDom[i + j] != cNext) { sClass += aDom[i + j]; j++ } nNewNode.className = sClass; 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 = oSettings.nTable; 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 (_oExt.aoFeatures.length !== 0) { var aoFeatures = _oExt.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) { if (typeof oSettings.aanFeatures[cOption] != "object") { oSettings.aanFeatures[cOption] = [] } oSettings.aanFeatures[cOption].push(nTmp); nInsertNode.appendChild(nTmp) } } nHolding.parentNode.replaceChild(nWrapper, nHolding) } function _fnFeatureHtmlFilter(oSettings) { var nFilter = document.createElement("div"); if (oSettings.sTableId !== "" && typeof oSettings.aanFeatures.f == "undefined") { nFilter.setAttribute("id", oSettings.sTableId + "_filter") } nFilter.className = oSettings.oClasses.sFilter; var sSpace = oSettings.oLanguage.sSearch === "" ? "" : " "; nFilter.innerHTML = oSettings.oLanguage.sSearch + sSpace + ''; var jqFilter = $("input", nFilter); jqFilter.val(oSettings.oPreviousSearch.sSearch.replace('"', """)); jqFilter.keyup(function(e) { var n = oSettings.aanFeatures.f; for ( var i = 0, iLen = n.length; i < iLen; i++) { if (n[i] != this.parentNode) { $("input", n[i]).val(this.value) } } _fnFilterComplete(oSettings, { sSearch : this.value, bEscapeRegex : oSettings.oPreviousSearch.bEscapeRegex }) }); jqFilter.keypress(function(e) { if (e.keyCode == 13) { return false } }); return nFilter } function _fnFilterComplete(oSettings, oInput, iForce) { _fnFilter(oSettings, oInput.sSearch, iForce, oInput.bEscapeRegex); for ( var i = 0; i < oSettings.aoPreSearchCols.length; i++) { _fnFilterColumn(oSettings, oSettings.aoPreSearchCols[i].sSearch, i, oSettings.aoPreSearchCols[i].bEscapeRegex) } if (_oExt.afnFiltering.length !== 0) { _fnFilterCustom(oSettings) } oSettings.bFiltered = true; oSettings._iDisplayStart = 0; _fnCalculateEnd(oSettings); _fnDraw(oSettings); _fnBuildSearchArray(oSettings, 0) } function _fnFilterCustom(oSettings) { var afnFilters = _oExt.afnFiltering; 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]; if (!afnFilters[i](oSettings, oSettings.aoData[iDisIndex]._aData, iDisIndex)) { oSettings.aiDisplay.splice(j - iCorrector, 1); iCorrector++ } } } } function _fnFilterColumn(oSettings, sInput, iColumn, bEscapeRegex) { if (sInput === "") { return } var iIndexCorrector = 0; var sRegexMatch = bEscapeRegex ? _fnEscapeRegex(sInput) : sInput; var rpSearch = new RegExp(sRegexMatch, "i"); for ( var i = oSettings.aiDisplay.length - 1; i >= 0; i--) { var sData = _fnDataToSearch( oSettings.aoData[oSettings.aiDisplay[i]]._aData[iColumn], oSettings.aoColumns[iColumn].sType); if (!rpSearch.test(sData)) { oSettings.aiDisplay.splice(i, 1); iIndexCorrector++ } } } function _fnFilter(oSettings, sInput, iForce, bEscapeRegex) { var i; if (typeof iForce == "undefined" || iForce === null) { iForce = 0 } if (_oExt.afnFiltering.length !== 0) { iForce = 1 } var asSearch = bEscapeRegex ? _fnEscapeRegex(sInput).split(" ") : sInput.split(" "); var sRegExpString = "^(?=.*?" + asSearch.join(")(?=.*?") + ").*$"; var rpSearch = new RegExp(sRegExpString, "i"); if (sInput.length <= 0) { oSettings.aiDisplay.splice(0, oSettings.aiDisplay.length); oSettings.aiDisplay = oSettings.aiDisplayMaster.slice() } else { if (oSettings.aiDisplay.length == oSettings.aiDisplayMaster.length || oSettings.oPreviousSearch.sSearch.length > sInput.length || iForce == 1 || sInput.indexOf(oSettings.oPreviousSearch.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++ } } } } oSettings.oPreviousSearch.sSearch = sInput; oSettings.oPreviousSearch.bEscapeRegex = bEscapeRegex } function _fnBuildSearchArray(oSettings, iMaster) { oSettings.asDataSearch.splice(0, oSettings.asDataSearch.length); var aArray = (typeof iMaster != "undefined" && iMaster == 1) ? oSettings.aiDisplayMaster : oSettings.aiDisplay; for ( var i = 0, iLen = aArray.length; i < iLen; i++) { oSettings.asDataSearch[i] = ""; for ( var j = 0, jLen = oSettings.aoColumns.length; j < jLen; j++) { if (oSettings.aoColumns[j].bSearchable) { var sData = oSettings.aoData[aArray[i]]._aData[j]; oSettings.asDataSearch[i] += _fnDataToSearch(sData, oSettings.aoColumns[j].sType) + " " } } } } function _fnDataToSearch(sData, sType) { if (typeof _oExt.ofnSearch[sType] == "function") { return _oExt.ofnSearch[sType](sData) } else { if (sType == "html") { return sData.replace(/\n/g, " ").replace(/<.*?>/g, "") } else { if (typeof sData == "string") { return sData.replace(/\n/g, " ") } } } return sData } function _fnSort(oSettings, bApplyClasses) { var aaSort = []; var oSort = _oExt.oSort; var aoData = oSettings.aoData; var iDataSort; var iDataType; var i, j, jLen; if (!oSettings.oFeatures.bServerSide && (oSettings.aaSorting.length !== 0 || oSettings.aaSortingFixed !== null)) { if (oSettings.aaSortingFixed !== null) { aaSort = oSettings.aaSortingFixed .concat(oSettings.aaSorting) } else { aaSort = oSettings.aaSorting.slice() } for (i = 0; i < aaSort.length; i++) { var iColumn = aaSort[i][0]; var sDataType = oSettings.aoColumns[iColumn].sSortDataType; if (typeof _oExt.afnSortData[sDataType] != "undefined") { var iCorrector = 0; var aData = _oExt.afnSortData[sDataType](oSettings, iColumn); for (j = 0, jLen = aoData.length; j < jLen; j++) { if (aoData[j] !== null) { aoData[j]._aData[iColumn] = aData[iCorrector]; iCorrector++ } } } } if (!window.runtime) { var fnLocalSorting; var sDynamicSort = "fnLocalSorting = function(a,b){var iTest;"; for (i = 0; i < aaSort.length - 1; i++) { iDataSort = oSettings.aoColumns[aaSort[i][0]].iDataSort; iDataType = oSettings.aoColumns[iDataSort].sType; sDynamicSort += "iTest = oSort['" + iDataType + "-" + aaSort[i][1] + "']( aoData[a]._aData[" + iDataSort + "], aoData[b]._aData[" + iDataSort + "] ); if ( iTest === 0 )" } iDataSort = oSettings.aoColumns[aaSort[aaSort.length - 1][0]].iDataSort; iDataType = oSettings.aoColumns[iDataSort].sType; sDynamicSort += "iTest = oSort['" + iDataType + "-" + aaSort[aaSort.length - 1][1] + "']( aoData[a]._aData[" + iDataSort + "], aoData[b]._aData[" + iDataSort + "] );if (iTest===0) return oSort['numeric-" + aaSort[aaSort.length - 1][1] + "'](a, b); return iTest;}"; eval(sDynamicSort); oSettings.aiDisplayMaster.sort(fnLocalSorting) } else { var aAirSort = []; var iLen = aaSort.length; for (i = 0; i < iLen; i++) { iDataSort = oSettings.aoColumns[aaSort[i][0]].iDataSort; aAirSort.push( [ iDataSort, oSettings.aoColumns[iDataSort].sType + "-" + aaSort[i][1] ]) } oSettings.aiDisplayMaster.sort(function(a, b) { var iTest; for ( var i = 0; i < iLen; i++) { iTest = oSort[aAirSort[i][1]]( aoData[a]._aData[aAirSort[i][0]], aoData[b]._aData[aAirSort[i][0]]); if (iTest !== 0) { return iTest } } return 0 }) } } if (typeof bApplyClasses == "undefined" || bApplyClasses) { _fnSortingClasses(oSettings) } oSettings.bSorted = true; 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) { $(nNode) .click( 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 (typeof oSettings.aoColumns[iColumn].asSorting[iNextSort] == "undefined") { 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 (typeof oSettings.aoColumns[iColumn].asSorting[iNextSort] == "undefined") { 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", 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); if (nTds.length >= iColumns) { for (i = 0; i < iColumns; i++) { if (nTds[i].className.indexOf(sClass + "1") != -1) { for (j = 0, jLen = (nTds.length / iColumns); j < jLen; j++) { nTds[(iColumns * j) + i].className = nTds[(iColumns * j) + i].className.replace(" " + sClass + "1", "") } } else { if (nTds[i].className.indexOf(sClass + "2") != -1) { for (j = 0, jLen = (nTds.length / iColumns); j < jLen; j++) { nTds[(iColumns * j) + i].className = nTds[(iColumns * j) + i].className.replace(" " + sClass + "2", "") } } else { if (nTds[i].className.indexOf(sClass + "3") != -1) { for (j = 0, jLen = (nTds.length / iColumns); j < jLen; j++) { nTds[(iColumns * j) + i].className = nTds[(iColumns * j) + i].className.replace(" " + sClass + "3", "") } } } } } } var iClass = 1, iTargetCol; for (i = 0; i < aaSort.length; i++) { iTargetCol = parseInt(aaSort[i][0], 10); for (j = 0, jLen = (nTds.length / iColumns); j < jLen; j++) { nTds[(iColumns * j) + iTargetCol].className += " " + sClass + iClass } if (iClass < 3) { iClass++ } } } } function _fnFeatureHtmlPaginate(oSettings) { var nPaginate = document.createElement("div"); nPaginate.className = oSettings.oClasses.sPaging + oSettings.sPaginationType; _oExt.oPagination[oSettings.sPaginationType].fnInit(oSettings, nPaginate, function(oSettings) { _fnCalculateEnd(oSettings); _fnDraw(oSettings) }); if (typeof oSettings.aanFeatures.p == "undefined") { oSettings.aoDrawCallback.push( { fn : function(oSettings) { _oExt.oPagination[oSettings.sPaginationType].fnUpdate( oSettings, function(oSettings) { _fnCalculateEnd(oSettings); _fnDraw(oSettings) }) }, sName : "pagination" }) } return nPaginate } function _fnPageChange(oSettings, sAction) { var iOldStart = oSettings._iDisplayStart; if (sAction == "first") { oSettings._iDisplayStart = 0 } else { if (sAction == "previous") { oSettings._iDisplayStart = oSettings._iDisplayLength >= 0 ? oSettings._iDisplayStart - oSettings._iDisplayLength : 0; if (oSettings._iDisplayStart < 0) { oSettings._iDisplayStart = 0 } } else { if (sAction == "next") { if (oSettings._iDisplayLength >= 0) { if (oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings .fnRecordsDisplay()) { oSettings._iDisplayStart += oSettings._iDisplayLength } } else { oSettings._iDisplayStart = 0 } } else { if (sAction == "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 { alert("DataTables warning: unknown paging action: " + sAction) } } } } return iOldStart != oSettings._iDisplayStart } function _fnFeatureHtmlInfo(oSettings) { var nInfo = document.createElement("div"); nInfo.className = oSettings.oClasses.sInfo; if (typeof oSettings.aanFeatures.i == "undefined") { oSettings.aoDrawCallback.push( { fn : _fnUpdateInfo, sName : "information" }); if (oSettings.sTableId !== "") { nInfo.setAttribute("id", oSettings.sTableId + "_info") } } return nInfo } function _fnUpdateInfo(oSettings) { if (!oSettings.oFeatures.bInfo || oSettings.aanFeatures.i.length === 0) { return } var nFirst = oSettings.aanFeatures.i[0]; if (oSettings.fnRecordsDisplay() === 0 && oSettings.fnRecordsDisplay() == oSettings.fnRecordsTotal()) { nFirst.innerHTML = oSettings.oLanguage.sInfoEmpty + oSettings.oLanguage.sInfoPostFix } else { if (oSettings.fnRecordsDisplay() === 0) { nFirst.innerHTML = oSettings.oLanguage.sInfoEmpty + " " + oSettings.oLanguage.sInfoFiltered.replace("_MAX_", oSettings.fnRecordsTotal()) + oSettings.oLanguage.sInfoPostFix } else { if (oSettings.fnRecordsDisplay() == oSettings .fnRecordsTotal()) { nFirst.innerHTML = oSettings.oLanguage.sInfo.replace( "_START_", oSettings._iDisplayStart + 1).replace( "_END_", oSettings.fnDisplayEnd()).replace( "_TOTAL_", oSettings.fnRecordsDisplay()) + oSettings.oLanguage.sInfoPostFix } else { nFirst.innerHTML = oSettings.oLanguage.sInfo.replace( "_START_", oSettings._iDisplayStart + 1).replace( "_END_", oSettings.fnDisplayEnd()).replace( "_TOTAL_", oSettings.fnRecordsDisplay()) + " " + oSettings.oLanguage.sInfoFiltered.replace( "_MAX_", oSettings.fnRecordsTotal()) + oSettings.oLanguage.sInfoPostFix } } } var n = oSettings.aanFeatures.i; if (n.length > 1) { var sInfo = nFirst.innerHTML; for ( var i = 1, iLen = n.length; i < iLen; i++) { n[i].innerHTML = sInfo } } } function _fnFeatureHtmlLength(oSettings) { var sName = (oSettings.sTableId === "") ? "" : 'name="' + oSettings.sTableId + '_length"'; var sStdMenu = ''; var nLength = document.createElement("div"); if (oSettings.sTableId !== "" && typeof oSettings.aanFeatures.l == "undefined") { nLength.setAttribute("id", oSettings.sTableId + "_length") } nLength.className = oSettings.oClasses.sLength; nLength.innerHTML = oSettings.oLanguage.sLengthMenu.replace( "_MENU_", sStdMenu); $('select option[value="' + oSettings._iDisplayLength + '"]', nLength).attr("selected", true); $("select", nLength).change( function(e) { var iVal = $(this).val(); var n = oSettings.aanFeatures.l; for ( var 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._iDisplayEnd == oSettings.aiDisplay.length) { oSettings._iDisplayStart = oSettings._iDisplayEnd - oSettings._iDisplayLength; if (oSettings._iDisplayStart < 0) { oSettings._iDisplayStart = 0 } } if (oSettings._iDisplayLength == -1) { oSettings._iDisplayStart = 0 } _fnDraw(oSettings) }); return nLength } function _fnFeatureHtmlProcessing(oSettings) { var nProcessing = document.createElement("div"); if (oSettings.sTableId !== "" && typeof oSettings.aanFeatures.r == "undefined") { nProcessing.setAttribute("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" } } } function _fnVisibleToColumnIndex(oSettings, iMatch) { var iColumn = -1; for ( var i = 0; i < oSettings.aoColumns.length; i++) { if (oSettings.aoColumns[i].bVisible === true) { iColumn++ } if (iColumn == iMatch) { return i } } return null } function _fnColumnIndexToVisible(oSettings, iMatch) { var iVisible = -1; for ( var i = 0; i < oSettings.aoColumns.length; i++) { if (oSettings.aoColumns[i].bVisible === true) { iVisible++ } if (i == iMatch) { return oSettings.aoColumns[i].bVisible === true ? iVisible : null } } return null } function _fnNodeToDataIndex(s, n) { for ( var i = 0, iLen = s.aoData.length; i < iLen; i++) { if (s.aoData[i] !== null && s.aoData[i].nTr == n) { return i } } return null } function _fnVisbleColumns(oS) { var iVis = 0; for ( var i = 0; i < oS.aoColumns.length; i++) { if (oS.aoColumns[i].bVisible === true) { iVis++ } } return iVis } 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 _fnConvertToWidth(sWidth, nParent) { if (!sWidth || sWidth === null || sWidth === "") { return 0 } if (typeof nParent == "undefined") { nParent = document.getElementsByTagName("body")[0] } var iWidth; var nTmp = document.createElement("div"); nTmp.style.width = sWidth; nParent.appendChild(nTmp); iWidth = nTmp.offsetWidth; nParent.removeChild(nTmp); return (iWidth) } function _fnCalculateColumnWidths(oSettings) { var iTableWidth = oSettings.nTable.offsetWidth; var iTotalUserIpSize = 0; var iTmpWidth; var iVisibleColumns = 0; var iColums = oSettings.aoColumns.length; var i; var oHeaders = $("thead:eq(0)>th", oSettings.nTable); for (i = 0; i < iColums; i++) { if (oSettings.aoColumns[i].bVisible) { iVisibleColumns++; if (oSettings.aoColumns[i].sWidth !== null) { iTmpWidth = _fnConvertToWidth( oSettings.aoColumns[i].sWidth, oSettings.nTable.parentNode); iTotalUserIpSize += iTmpWidth; oSettings.aoColumns[i].sWidth = iTmpWidth + "px" } } } if (iColums == oHeaders.length && iTotalUserIpSize === 0 && iVisibleColumns == iColums) { for (i = 0; i < oSettings.aoColumns.length; i++) { oSettings.aoColumns[i].sWidth = oHeaders[i].offsetWidth + "px" } } else { var nCalcTmp = oSettings.nTable.cloneNode(false); nCalcTmp.setAttribute("id", ""); var sTableTmp = '
" + oSettings.aoColumns[i].sTitle + " | "; if (oSettings.aoColumns[i].sWidth !== null) { var sWidth = ""; if (oSettings.aoColumns[i].sWidth !== null) { sWidth = ' style="width:' + oSettings.aoColumns[i].sWidth + ';"' } sCalcHtml += "' + fnGetMaxLenString(oSettings, i) + " | " } else { sCalcHtml += '' + fnGetMaxLenString(oSettings, i) + " | " } } } sCalcHead += "
---|