Hello
First of all, thanks for this very useful piece of software. I wanted input pagination and I saw you had it. So I took it and saw few enhancement to make, which I did.
Here is the code now:
However, I still have few question about a part that I did not changed. It is the two tests in the if conditions on lines 35 and 36:
Question 1: Why « oSettings.sTableId !== '' » and not « oSettings.sTableId != '' » ?
Question 2: Why the second test « typeof oSettings.aanFeatures.p == "undefined" » ? What does it means?
First of all, thanks for this very useful piece of software. I wanted input pagination and I saw you had it. So I took it and saw few enhancement to make, which I did.
Here is the code now:
$.fn.dataTableExt.oPagination.input = {
"fnInit" : function(oSettings, nPaging, fnCallbackDraw) {
/* build button controls */
var nFirst = document.createElement('button');
var nPrevious = document.createElement('button');
var nNext = document.createElement('button');
var nLast = document.createElement('button');
nFirst.type = "button";
nPrevious.type = "button";
nNext.type = "button";
nLast.type = "button";
nFirst.className = oSettings.oClasses.sPageFirst + " "
+ oSettings.oClasses.sPageButtonStaticDisabled;
nPrevious.className = oSettings.oClasses.sPagePrevious + " "
+ oSettings.oClasses.sPageButtonStaticDisabled;
nNext.className = oSettings.oClasses.sPageNext + " "
+ oSettings.oClasses.sPageButtonStaticDisabled;
nLast.className = oSettings.oClasses.sPageLast + " "
+ oSettings.oClasses.sPageButtonStaticDisabled;
nFirst.setAttribute("disabled", "disabled");
nPrevious.setAttribute("disabled", "disabled");
nNext.setAttribute("disabled", "disabled");
nLast.setAttribute("disabled", "disabled");
nFirst.innerHTML = oSettings.oLanguage.oPaginate.sFirst;
nPrevious.innerHTML = oSettings.oLanguage.oPaginate.sPrevious;
nNext.innerHTML = oSettings.oLanguage.oPaginate.sNext;
nLast.innerHTML = oSettings.oLanguage.oPaginate.sLast;
if (oSettings.sTableId !== ''
&& typeof oSettings.aanFeatures.p == "undefined") {
nFirst.setAttribute('id', oSettings.sTableId + '_first');
nPrevious.setAttribute('id', oSettings.sTableId + '_previous');
nNext.setAttribute('id', oSettings.sTableId + '_next');
nLast.setAttribute('id', oSettings.sTableId + '_last');
nPaging.setAttribute('id', oSettings.sTableId + '_paginate');
}
$(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);
}
});
/* build other controls */
var nInput = document.createElement('input');
var nPage = document.createElement('span');
var nOf = document.createElement('span');
nInput.type = "number";
nInput.className = "paginate_textInput";
nPage.className = "paginate_page";
nOf.className = "paginate_of";
nPage.innerHTML = oSettings.oLanguage.oPaginate.sPage;
$(nInput).change(
function(e) {
/*
* iFirstPageNumber: computing convention is to start
* counting at 0, non-computing convention at 1
*/
var iFirstPageNumber = 1;
/*
* input must be an integer starting from iFirstPageNumber,
* default to iFirstPageNumber if invalid
*/
var iCurrentPageNumber = +this.value;
if (isNaN(iCurrentPageNumber)
|| iFirstPageNumber > iCurrentPageNumber) {
iCurrentPageNumber = iFirstPageNumber;
}
var iCurrentPageIndex = iCurrentPageNumber
- iFirstPageNumber;
var iItemStartIndex = iCurrentPageIndex
* oSettings._iDisplayLength;
/*
* if iItemStartIndex exceed max limit, default to the item
* start index of the last page
*/
if (iItemStartIndex >= oSettings.fnRecordsDisplay()) {
var iNumberOfPages = Math.ceil(oSettings
.fnRecordsDisplay()
/ oSettings._iDisplayLength);
if (0 < iNumberOfPages) {
iItemStartIndex = (iNumberOfPages - 1)
* oSettings._iDisplayLength;
} else {
iItemStartIndex = 0;
}
}
oSettings._iDisplayStart = iItemStartIndex;
fnCallbackDraw(oSettings);
});
/* add controls */
nPaging.appendChild(nFirst);
nPaging.appendChild(nPrevious);
nPaging.appendChild(nPage);
nPaging.appendChild(nInput);
nPaging.appendChild(nOf);
nPaging.appendChild(nNext);
nPaging.appendChild(nLast);
},
"fnUpdate" : function(oSettings, fnCallbackDraw) {
if (!oSettings.aanFeatures.p) {
return;
}
var iNumberOfPages = Math.ceil(oSettings.fnRecordsDisplay()
/ oSettings._iDisplayLength);
/*
* iFirstPageNumber: computing convention is to start counting at 0,
* non-computing convention at 1
*/
var iFirstPageNumber = 1;
var iLastPageNumber = iFirstPageNumber;
if (0 < iNumberOfPages) {
iLastPageNumber = iFirstPageNumber + iNumberOfPages - 1;
}
var iCurrentPageIndex = Math.ceil(oSettings._iDisplayStart
/ oSettings._iDisplayLength);
var iCurrentPageNumber = iCurrentPageIndex + iFirstPageNumber;
var oClasses = oSettings.oClasses;
/* Loop over each instance of the pager */
var an = oSettings.aanFeatures.p;
for ( var i = 0, iLen = an.length; i < iLen; i++) {
/* pages details */
var inputs = an[i].getElementsByTagName('input');
var nInput = inputs[0];
nInput.value = iCurrentPageNumber;
var spans = an[i].getElementsByTagName('span');
var nOf = spans[1];
nOf.innerHTML = oSettings.oLanguage.oPaginate.sPageOf
+ iNumberOfPages
/* button styles */
var buttons = an[i].getElementsByTagName('button');
var nFirst = buttons[0];
var nPrevious = buttons[1];
var nNext = buttons[2];
var nLast = buttons[3];
$(buttons).removeClass(
oClasses.sPageButton + " " + oClasses.sPageButtonActive
+ " " + oClasses.sPageButtonStaticDisabled);
if (iFirstPageNumber == iCurrentPageNumber) {
nFirst.className += " " + oClasses.sPageButtonStaticDisabled;
nFirst.setAttribute("disabled", "disabled");
nPrevious.className += " " + oClasses.sPageButtonStaticDisabled;
nPrevious.setAttribute("disabled", "disabled");
} else {
nFirst.className += " " + oClasses.sPageButton;
nFirst.disabled = false;
nPrevious.className += " " + oClasses.sPageButton;
nPrevious.disabled = false;
}
if (iLastPageNumber == iCurrentPageNumber) {
nNext.className += " " + oClasses.sPageButtonStaticDisabled;
nNext.setAttribute("disabled", "disabled");
nLast.className += " " + oClasses.sPageButtonStaticDisabled;
nLast.setAttribute("disabled", "disabled");
} else {
nNext.className += " " + oClasses.sPageButton;
nNext.disabled = false;
nLast.className += " " + oClasses.sPageButton;
nLast.disabled = false;
}
}
}
}
However, I still have few question about a part that I did not changed. It is the two tests in the if conditions on lines 35 and 36:
if (oSettings.sTableId !== ''
&& typeof oSettings.aanFeatures.p == "undefined") {
Question 1: Why « oSettings.sTableId !== '' » and not « oSettings.sTableId != '' » ?
Question 2: Why the second test « typeof oSettings.aanFeatures.p == "undefined" » ? What does it means?