UNPKG

trinte-creator

Version:
64 lines (49 loc) 2.47 kB
/** * Simple pager plugin. */ var qs = require('querystring'); /** * Plugin version */ exports.version = '0.0.4'; function pageLink(path, skip, limit, page, querystring) { return '<li><a href="' + path + '/' + skip + '-' + limit + querystring + '">' + page + '</a></li>'; } function pageSpan(page, cur) { var cssclass = (cur) ? 'active' : 'disabled'; return '<li class="' + cssclass + '"><a href="#">' + page + '</a></li>'; } exports.render = function (skip, limit, total, path, data) { var querystring = qs.stringify(data); var totalPages = Math.ceil(total / limit) + 1; var currentPage = skip / limit + 1; var toShow = (skip + limit) > total ? total : (skip + limit); var result = '', start; var visiblePages = 5; // Remember how many we have querystring = querystring.length ? '?' + querystring : ''; result += pageSpan(currentPage, true); var additionalForward = currentPage < visiblePages ? visiblePages - currentPage : 0; for (var i = currentPage + 1; (i < currentPage + visiblePages + additionalForward) && (i < totalPages); i++) { start = (i - 1) * limit + 1; result += pageLink(path, start, limit, i, querystring); } if (currentPage < totalPages - 1) { result += pageLink(path, skip + limit + 1, limit, '>', querystring); var lastPageStart = (totalPages - 2) * limit + 1; result += pageLink(path, lastPageStart, limit, '>>', querystring); } var additionalBackward = (totalPages - currentPage) < visiblePages ? visiblePages - (totalPages - currentPage) : 0; for (var s = currentPage - 1; (s > currentPage - visiblePages - additionalBackward) && (s > 0); s--) { start = (s - 1) * limit + 1; result = pageLink(path, start, limit, s, querystring) + result; } if (currentPage > 1) { result = pageLink(path, (skip - limit + 1), limit, '<', querystring) + result; result = pageLink(path, 1, limit, '<<', querystring) + result; } // result += "<li style='margin-left:10px;'>&nbsp;Go To: <input id='pagerGoto' type='text' name='skip' value='' class='input-mini pager-page' title='Go to a specific start point, type and enter ...' /></li>"; result += '</ul>'; result += '<span class="pull-right" style="font-size:14px;margin-top:22px">' + (skip + 1) + ' to ' + (toShow) + ' of ' + (total) + '</span>'; return '<div><ul class="pagination pagination-sm">' + result + '</div>'; };