123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- /**
- *
- * @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:'<li class="#liClass#"><a href="javascript:;">#pageNum#</a></li>'
- };
- return this.each(function(){
- var $this = $(this);
- var pc = new Pagination(opts);
- var interval = pc.getInterval();
-
- var pageNumFrag = '';
- for (var i=interval.start; i<interval.end;i++){
- pageNumFrag += setting.pageNumFrag.replaceAll("#pageNum#", i).replaceAll("#liClass#", i==pc.getCurrentPage() ? 'selected j-num' : 'j-num');
- }
- $this.html(DWZ.frag["pagination"].replaceAll("#pageNumFrag#", pageNumFrag).replaceAll("#currentPage#", pc.getCurrentPage())).find("li").hoverClass();
-
- var $first = $this.find(setting.first$);
- var $prev = $this.find(setting.prev$);
- var $next = $this.find(setting.next$);
- var $last = $this.find(setting.last$);
-
- if (pc.hasPrev()){
- $first.add($prev).find(">span").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 = '<input type="hidden" name="#name#" value="#value#" />';
- 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);
|