(function () {
'use strict';
var SIZE_OPTIONS = [10, 20, 50, 100];
function pagesCount(total, size) {
return Math.max(1, Math.ceil((total || 0) / (size || 20)));
}
function html(opts) {
opts = opts || {};
var page = opts.page || 1;
var size = opts.size || 20;
var total = opts.total || 0;
var pages = pagesCount(total, size);
var sizes = opts.sizeOptions || SIZE_OPTIONS;
if (total === 0) {
return '
';
}
var sizeOpts = sizes.map(function (n) {
return '';
}).join('');
return '';
}
function bind(container, state, onChange) {
if (!container) return;
var page = state.page || 1;
var size = state.size || 20;
var total = state.total || 0;
var pages = pagesCount(total, size);
function go(p) {
p = Math.max(1, Math.min(pages, p));
if (p !== page) onChange({ page: p });
}
var first = container.querySelector('.soon-pager-first');
var prev = container.querySelector('.soon-pager-prev');
var next = container.querySelector('.soon-pager-next');
var last = container.querySelector('.soon-pager-last');
var sizeSel = container.querySelector('.soon-pager-size');
var jump = container.querySelector('.soon-pager-jump');
var goBtn = container.querySelector('.soon-pager-go');
if (first && !first.disabled) first.onclick = function () { go(1); };
if (prev && !prev.disabled) prev.onclick = function () { go(page - 1); };
if (next && !next.disabled) next.onclick = function () { go(page + 1); };
if (last && !last.disabled) last.onclick = function () { go(pages); };
if (sizeSel) {
sizeSel.onchange = function () {
onChange({ page: 1, size: parseInt(sizeSel.value, 10) || size });
};
}
if (goBtn && jump) {
goBtn.onclick = function () {
go(parseInt(jump.value, 10) || page);
};
jump.onkeydown = function (e) {
if (e.key === 'Enter') go(parseInt(jump.value, 10) || page);
};
}
}
window.AdminPager = { html: html, bind: bind, pagesCount: pagesCount };
})();