Last active
August 29, 2015 14:20
-
-
Save maese/03529710e6972158d288 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Construye paginador | |
* Pad: pag. seleccionada + items alrededor de ella. | |
* En el caso de un número grande de páginas: | |
* y pag. seleccionada en posición central: aparece rodeada de puntitos. | |
* " izquierda: aparecen puntitos solo a la derecha | |
* " derecha: aparecen puntitos solo a la izquierda | |
* En el caso de un número pequeño de páginas: | |
* no aparecen puntitos | |
* | |
* @param {number} actualPag | |
* @param {number} maxPag | |
* @returns {string} html del paginador | |
*/ | |
function paginator(actualPag, maxPag) { | |
var resultadosPaginador = []; // Array donde se van almacenando los nodos que se pintaran | |
var numSideElems = 2; // Número de items a mostrar en cada lado del seleccionado | |
var numCentralElems = numSideElems*2 + 1; // Número de items a los lados del seleccionado + seleccionado. | |
var prev = actualPag - 1; | |
var next = actualPag + 1; | |
var leftLimitPad = actualPag - numSideElems; | |
var rightLimitPad = actualPag + numSideElems; | |
// i para bucle = limite izquierdo del pad. | |
// ejem: < 1 .. 5 6 x 8 9 .. 20 > limite izquierdo del pad es 5 | |
var i = leftLimitPad; | |
if (leftLimitPad <= 1) { | |
i = 1; // i del bucle = 1 | |
} else if (rightLimitPad > maxPag) { | |
i = leftLimitPad; // i del bucle = maxPag-numSideElems | |
if (i<=0) i=1; // i del bucle = 1 ya que el total de... | |
} | |
// Pinta enlace de anterior. Se desactiva si la página actual es la primera | |
var prev_active = (actualPag > 1) ? '' : ' inactive'; | |
resultadosPaginador.push('<a href="#" class="pag-prev' + prev_active + '" data-page="'+prev+'">Anterior</a>'); | |
if (leftLimitPad > 1) resultadosPaginador.push('<a href="#">1</a>'); // 1 siempre debe aparecer. Si no lo pinta el bucle entonces pintarlo manualmente | |
if (leftLimitPad > 2) resultadosPaginador.push('<span>...</span>'); // Lo puntos se pintan entre 1 y leftLimitPad cuando leftLimitPad es mayor que 2 | |
// Pinta items. Empieza limite izquierdo hasta limite derecho o limite derecho sea menor o igual a maxPag | |
for (; i <= rightLimitPad && i <= maxPag; i++) { | |
var aux = (actualPag == i) ? ' class="on"' : ''; | |
resultadosPaginador.push('<a href="#"' + aux + '>' + i + '</a>'); | |
}; | |
if (rightLimitPad+1 < maxPag) resultadosPaginador.push('<span>...</span>'); | |
if (rightLimitPad < maxPag) resultadosPaginador.push('<a href="#">'+ maxPag +'</a>'); | |
// Pinta enlace de siguiente. Se desactiva si la página actual es la última | |
var next_active = (actualPag < maxPag) ? '' : ' inactive'; | |
resultadosPaginador.push('<a href="#" class="pag-next' + next_active + '" data-page="'+next+'">Siguiente</a>'); | |
// return string con todos los nodos almacenados en el array | |
return resultadosPaginador.join(''); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment