pages.js 5.6 KB

123456789101112131415161718
  1. (function($){function pageurl(id){var urlSearch=location.href;var unformatStr=changeURLArg(urlSearch,"page",id);if(!!(window.history&&history.pushState)){history.replaceState(null,"",unformatStr);}}
  2. function changeURLArg(url,arg,arg_val){var pattern=arg+'=([^&]*)';var replaceText=arg+'='+arg_val;if(url.match(pattern)){var tmp='/('+arg+'=)([^&]*)/gi';tmp=url.replace(eval(tmp),replaceText);return tmp;}else{if(url.match('[\?]')){return url+'&'+replaceText;}else{return url+'?'+replaceText;}}}
  3. function getUrlParms(name){var reg=new RegExp("(^|&)"+name+"=([^&]*)(&|$)");var r=window.location.search.substr(1).match(reg);if(r!=null)
  4. return unescape(r[2]);return "1";}
  5. var getid=getUrlParms("page");var methods={init:function(options){var o=$.extend({items:1,itemsOnPage:1,pages:0,displayedPages:5,edges:'',currentPage:getid,prevText:'上一页',nextText:'下一页',ellipseText:'…',cssStyle:'',labelMap:[],selectOnClick:true,onPageClick:function(pageNumber,event){},onInit:function(getid){}},options||{});var self=this;o.pages=o.pages?o.pages:Math.ceil(o.items/o.itemsOnPage)?Math.ceil(o.items/o.itemsOnPage):1;o.currentPage=o.currentPage-1;o.halfDisplayed=o.displayedPages/2;this.each(function(){self.addClass(o.cssStyle+' simple-pagination').data('pagination',o);methods._draw.call(self);});o.onInit(getid);return this;},selectPage:function(page){methods._selectPage.call(this,page-1);return this;},prevPage:function(){var o=this.data('pagination');if(o.currentPage>0){methods._selectPage.call(this,o.currentPage-1);}
  6. return this;},nextPage:function(){var o=this.data('pagination');if(o.currentPage<o.pages-1){methods._selectPage.call(this,o.currentPage+1);}
  7. return this;},getPagesCount:function(){return this.data('pagination').pages;},getCurrentPage:function(){return this.data('pagination').currentPage+1;},destroy:function(){this.empty();return this;},drawPage:function(page){var o=this.data('pagination');o.currentPage=page-1;this.data('pagination',o);methods._draw.call(this);return this;},redraw:function(){methods._draw.call(this);return this;},disable:function(){var o=this.data('pagination');o.disabled=true;this.data('pagination',o);methods._draw.call(this);return this;},enable:function(){var o=this.data('pagination');o.disabled=false;this.data('pagination',o);methods._draw.call(this);return this;},updateItems:function(newItems){var o=this.data('pagination');o.items=newItems;o.pages=methods._getPages(o);this.data('pagination',o);methods._draw.call(this);},updateItemsOnPage:function(itemsOnPage){var o=this.data('pagination');o.itemsOnPage=itemsOnPage;o.pages=methods._getPages(o);this.data('pagination',o);methods._selectPage.call(this,0);return this;},_draw:function(){var o=this.data('pagination'),interval=methods._getInterval(o),i,tagName;methods.destroy.call(this);tagName=(typeof this.prop==='function')?this.prop('tagName'):this.attr('tagName');var $panel=tagName==='UL'?this:$('<ul class="pagination"></ul>').appendTo(this);if(o.prevText){methods._appendItem.call(this,o.currentPage-1,{text:o.prevText,classes:'prev'});}
  8. if(interval.start>0&&o.edges>0){var end=Math.min(o.edges,interval.start);for(i=0;i<end;i++){methods._appendItem.call(this,i);}
  9. if(o.edges<interval.start&&(interval.start-o.edges!=1)){$panel.append('<li class="page-item disabled"><span class="page-link">'+o.ellipseText+'</span></li>');}else if(interval.start-o.edges==1){methods._appendItem.call(this,o.edges);}}
  10. for(i=interval.start;i<interval.end;i++){methods._appendItem.call(this,i);}
  11. if(interval.end<o.pages&&o.edges>0){if(o.pages-o.edges>interval.end&&(o.pages-o.edges-interval.end!=1)){$panel.append('<li class="page-item disabled"><span class="page-link">'+o.ellipseText+'</span></li>');}else if(o.pages-o.edges-interval.end==1){methods._appendItem.call(this,interval.end++);}
  12. var begin=Math.max(o.pages-o.edges,interval.end);for(i=begin;i<o.pages;i++){methods._appendItem.call(this,i);}}
  13. if(o.nextText){methods._appendItem.call(this,o.currentPage+1,{text:o.nextText,classes:'next'});}},_getPages:function(o){var pages=Math.ceil(o.items/o.itemsOnPage);return pages||1;},_getInterval:function(o){return{start:Math.ceil(o.currentPage>o.halfDisplayed?Math.max(Math.min(o.currentPage-o.halfDisplayed,(o.pages-o.displayedPages)),0):0),end:Math.ceil(o.currentPage>o.halfDisplayed?Math.min(o.currentPage+o.halfDisplayed,o.pages):Math.min(o.displayedPages,o.pages))};},_appendItem:function(pageIndex,opts){var self=this,options,$link,o=self.data('pagination'),$linkWrapper=$('<li class="page-item"></li>'),$ul=self.find('ul');pageIndex=pageIndex<0?0:(pageIndex<o.pages?pageIndex:o.pages-1);options={text:pageIndex+1,classes:''};if(o.labelMap.length&&o.labelMap[pageIndex]){options.text=o.labelMap[pageIndex];}
  14. options=$.extend(options,opts||{});if(pageIndex==o.currentPage||o.disabled){if(o.disabled){$linkWrapper.addClass('disabled');}else{$linkWrapper.addClass('active');}
  15. $link=$('<span class="page-link">'+(options.text)+'</span>');}else{$link=$('<span class="page-link">'+(options.text)+'</span>');$link.click(function(event){return methods._selectPage.call(self,pageIndex,event);});}
  16. if(options.classes){$link.addClass(options.classes);}
  17. $linkWrapper.append($link);if($ul.length){$ul.append($linkWrapper);}else{self.append($linkWrapper);}},_selectPage:function(pageIndex,event){var o=this.data('pagination');o.currentPage=pageIndex;if(o.selectOnClick){methods._draw.call(this);}
  18. pageurl(pageIndex+1);return o.onPageClick(pageIndex+1,event);}};$.fn.pagination=function(method){if(methods[method]&&method.charAt(0)!='_'){return methods[method].apply(this,Array.prototype.slice.call(arguments,1));}else if(typeof method==='object'||!method){return methods.init.apply(this,arguments);}else{$.error('Method '+method+' does not exist on jQuery.pagination');}};})(jQuery);