/**
*
* @author ZhangHuihua@msn.com
* @param {Object} opts Several options
*/
(function($){
$.fn.extend({
pagination: function(opts){
var setting = {
first$:"li.j-first", prev$:"li.j-prev", next$:"li.j-next", last$:"li.j-last", nums$:"li.j-num>a", jumpto$:"li.jumpto",
pageNumFrag:'
#pageNum#'
};
return this.each(function(){
var $this = $(this);
var pc = new Pagination(opts);
var interval = pc.getInterval();
var pageNumFrag = '';
for (var i=interval.start; ispan").hide();
_bindEvent($prev, pc.getCurrentPage()-1, pc.targetType(), pc.rel());
_bindEvent($first, 1, pc.targetType(), pc.rel());
} else {
$first.add($prev).addClass("disabled").find(">a").hide();
}
if (pc.hasNext()) {
$next.add($last).find(">span").hide();
_bindEvent($next, pc.getCurrentPage()+1, pc.targetType(), pc.rel());
_bindEvent($last, pc.numPages(), pc.targetType(), pc.rel());
} else {
$next.add($last).addClass("disabled").find(">a").hide();
}
$this.find(setting.nums$).each(function(i){
_bindEvent($(this), i+interval.start, pc.targetType(), pc.rel());
});
$this.find(setting.jumpto$).each(function(){
var $this = $(this);
var $inputBox = $this.find(":text");
var $button = $this.find(":button");
$button.click(function(event){
var pageNum = $inputBox.val();
if (pageNum && pageNum.isPositiveInteger()) {
dwzPageBreak({targetType:pc.targetType(), rel:pc.rel(), data: {pageNum:pageNum}});
}
});
$inputBox.keyup(function(event){
if (event.keyCode == DWZ.keyCode.ENTER) $button.click();
});
});
});
function _bindEvent($target, pageNum, targetType, rel){
$target.bind("click", {pageNum:pageNum}, function(event){
dwzPageBreak({targetType:targetType, rel:rel, data:{pageNum:event.data.pageNum}});
event.preventDefault();
});
}
},
orderBy: function(options){
var op = $.extend({ targetType:"navTab", rel:"", asc:"asc", desc:"desc"}, options);
return this.each(function(){
var $this = $(this).css({cursor:"pointer"}).click(function(){
var orderField = $this.attr("orderField");
var orderDirection = $this.hasClass(op.asc) ? op.desc : op.asc;
dwzPageBreak({targetType:op.targetType, rel:op.rel, data:{orderField: orderField, orderDirection: orderDirection}});
});
});
},
pagerForm: function(options){
var op = $.extend({pagerForm$:"#pagerForm", parentBox:document}, options);
var frag = '';
return this.each(function(){
var $searchForm = $(this), $pagerForm = $(op.pagerForm$, op.parentBox);
var actionUrl = $pagerForm.attr("action").replaceAll("#rel#", $searchForm.attr("action"));
$pagerForm.attr("action", actionUrl);
$searchForm.find(":input").each(function(){
var $input = $(this), name = $input.attr("name");
if (name && (!$input.is(":checkbox,:radio") || $input.is(":checked"))){
if ($pagerForm.find(":input[name='"+name+"']").length == 0) {
var inputFrag = frag.replaceAll("#name#", name).replaceAll("#value#", $input.val());
$pagerForm.append(inputFrag);
}
}
});
});
}
});
var Pagination = function(opts) {
this.opts = $.extend({
targetType:"navTab", // navTab, dialog
rel:"", //用于局部刷新div id号
totalCount:0,
numPerPage:10,
pageNumShown:10,
currentPage:1,
callback:function(){return false;}
}, opts);
}
$.extend(Pagination.prototype, {
targetType:function(){return this.opts.targetType},
rel:function(){return this.opts.rel},
numPages:function() {
return Math.ceil(this.opts.totalCount/this.opts.numPerPage);
},
getInterval:function(){
var ne_half = Math.ceil(this.opts.pageNumShown/2);
var np = this.numPages();
var upper_limit = np - this.opts.pageNumShown;
var start = this.getCurrentPage() > ne_half ? Math.max( Math.min(this.getCurrentPage() - ne_half, upper_limit), 0 ) : 0;
var end = this.getCurrentPage() > ne_half ? Math.min(this.getCurrentPage()+ne_half, np) : Math.min(this.opts.pageNumShown, np);
return {start:start+1, end:end+1};
},
getCurrentPage:function(){
var currentPage = parseInt(this.opts.currentPage);
if (isNaN(currentPage)) return 1;
return currentPage;
},
hasPrev:function(){
return this.getCurrentPage() > 1;
},
hasNext:function(){
return this.getCurrentPage() < this.numPages();
}
});
})(jQuery);