Files
sentcms/web/static/js/footable.paginate.js
2018-03-01 11:08:47 +08:00

20 lines
6.9 KiB
JavaScript

(function($,w,undefined){if(w.footable===undefined||w.footable===null)
throw new Error('Please check and make sure footable.js is included in the page and is loaded prior to this script.');var defaults={paginate:true,pageSize:10,pageNavigation:'.pagination',firstText:'«',previousText:'‹',nextText:'›',lastText:'»',limitNavigation:0,limitPreviousText:'...',limitNextText:'...'};function pageInfo(ft){var $table=$(ft.table),data=$table.data();this.pageNavigation=data.pageNavigation||ft.options.pageNavigation;this.pageSize=data.pageSize||ft.options.pageSize;this.firstText=data.firstText||ft.options.firstText;this.previousText=data.previousText||ft.options.previousText;this.nextText=data.nextText||ft.options.nextText;this.lastText=data.lastText||ft.options.lastText;this.limitNavigation=parseInt(data.limitNavigation||ft.options.limitNavigation||defaults.limitNavigation,10);this.limitPreviousText=data.limitPreviousText||ft.options.limitPreviousText;this.limitNextText=data.limitNextText||ft.options.limitNextText;this.limit=this.limitNavigation>0;this.currentPage=data.currentPage||0;this.pages=[];this.control=false;}
function Paginate(){var p=this;p.name='Footable Paginate';p.init=function(ft){if(ft.options.paginate===true){if($(ft.table).data('page')===false)return;p.footable=ft;$(ft.table).unbind('.paging').bind({'footable_initialized.paging footable_row_removed.paging footable_redrawn.paging footable_sorted.paging footable_filtered.paging':function(){p.setupPaging();}}).data('footable-paging',p);}};p.setupPaging=function(){var ft=p.footable,$tbody=$(ft.table).find('> tbody');ft.pageInfo=new pageInfo(ft);p.createPages(ft,$tbody);p.createNavigation(ft,$tbody);p.fillPage(ft,$tbody,ft.pageInfo.currentPage);};p.createPages=function(ft,tbody){var pages=1;var info=ft.pageInfo;var pageCount=pages*info.pageSize;var page=[];var lastPage=[];info.pages=[];var rows=tbody.find('> tr:not(.footable-filtered,.footable-row-detail)');rows.each(function(i,row){page.push(row);if(i===pageCount- 1){info.pages.push(page);pages++;pageCount=pages*info.pageSize;page=[];}else if(i>=rows.length-(rows.length%info.pageSize)){lastPage.push(row);}});if(lastPage.length>0)info.pages.push(lastPage);if(info.currentPage>=info.pages.length)info.currentPage=info.pages.length- 1;if(info.currentPage<0)info.currentPage=0;if(info.pages.length===1){$(ft.table).addClass('no-paging');}else{$(ft.table).removeClass('no-paging');}};p.createNavigation=function(ft,tbody){var $nav=$(ft.table).find(ft.pageInfo.pageNavigation);if($nav.length===0){$nav=$(ft.pageInfo.pageNavigation);if($nav.parents('table:first').length>0&&$nav.parents('table:first')!==$(ft.table))return;if($nav.length>1&&ft.options.debug===true)console.error('More than one pagination control was found!');}
if($nav.length===0)return;if(!$nav.is('ul')){if($nav.find('ul:first').length===0){$nav.append('<ul />');}
$nav=$nav.find('ul');}
$nav.find('li').remove();var info=ft.pageInfo;info.control=$nav;if(info.pages.length>0){$nav.append('<li class="footable-page-arrow"><a data-page="first" href="#first">'+ ft.pageInfo.firstText+'</a>');$nav.append('<li class="footable-page-arrow"><a data-page="prev" href="#prev">'+ ft.pageInfo.previousText+'</a></li>');if(info.limit){$nav.append('<li class="footable-page-arrow"><a data-page="limit-prev" href="#limit-prev">'+ ft.pageInfo.limitPreviousText+'</a></li>');}
if(!info.limit){$.each(info.pages,function(i,page){if(page.length>0){$nav.append('<li class="footable-page"><a data-page="'+ i+'" href="#">'+(i+ 1)+'</a></li>');}});}
if(info.limit){$nav.append('<li class="footable-page-arrow"><a data-page="limit-next" href="#limit-next">'+ ft.pageInfo.limitNextText+'</a></li>');p.createLimited($nav,info,0);}
$nav.append('<li class="footable-page-arrow"><a data-page="next" href="#next">'+ ft.pageInfo.nextText+'</a></li>');$nav.append('<li class="footable-page-arrow"><a data-page="last" href="#last">'+ ft.pageInfo.lastText+'</a></li>');}
$nav.off('click','a[data-page]').on('click','a[data-page]',function(e){e.preventDefault();var page=$(this).data('page');var newPage=info.currentPage;if(page==='first'){newPage=0;}else if(page==='prev'){if(newPage>0)newPage--;}else if(page==='next'){if(newPage<info.pages.length- 1)newPage++;}else if(page==='last'){newPage=info.pages.length- 1;}else if(page==='limit-prev'){newPage=-1;var first=$nav.find('.footable-page:first a').data('page');p.createLimited($nav,info,first- info.limitNavigation);p.setPagingClasses($nav,info.currentPage,info.pages.length);}else if(page==='limit-next'){newPage=-1;var last=$nav.find('.footable-page:last a').data('page');p.createLimited($nav,info,last+ 1);p.setPagingClasses($nav,info.currentPage,info.pages.length);}else{newPage=page;}
if(newPage>=0){if(info.limit&&info.currentPage!=newPage){var start=newPage;while(start%info.limitNavigation!==0){start-=1;}
p.createLimited($nav,info,start);}
p.paginate(ft,newPage);}});p.setPagingClasses($nav,info.currentPage,info.pages.length);};p.createLimited=function(nav,info,start){start=start||0;nav.find('li.footable-page').remove();var i,page,$prev=nav.find('li.footable-page-arrow > a[data-page="limit-prev"]').parent(),$next=nav.find('li.footable-page-arrow > a[data-page="limit-next"]').parent();for(i=info.pages.length- 1;i>=0;i--){page=info.pages[i];if(i>=start&&i<start+ info.limitNavigation&&page.length>0){$prev.after('<li class="footable-page"><a data-page="'+ i+'" href="#">'+(i+ 1)+'</a></li>');}}
if(start===0){$prev.hide();}
else{$prev.show();}
if(start+ info.limitNavigation>=info.pages.length){$next.hide();}
else{$next.show();}};p.paginate=function(ft,newPage){var info=ft.pageInfo;if(info.currentPage!==newPage){var $tbody=$(ft.table).find('> tbody');var event=ft.raise('footable_paging',{page:newPage,size:info.pageSize});if(event&&event.result===false)return;p.fillPage(ft,$tbody,newPage);info.control.find('li').removeClass('active disabled');p.setPagingClasses(info.control,info.currentPage,info.pages.length);}};p.setPagingClasses=function(nav,currentPage,pageCount){nav.find('li.footable-page > a[data-page='+ currentPage+']').parent().addClass('active');if(currentPage>=pageCount- 1){nav.find('li.footable-page-arrow > a[data-page="next"]').parent().addClass('disabled');nav.find('li.footable-page-arrow > a[data-page="last"]').parent().addClass('disabled');}
if(currentPage<1){nav.find('li.footable-page-arrow > a[data-page="first"]').parent().addClass('disabled');nav.find('li.footable-page-arrow > a[data-page="prev"]').parent().addClass('disabled');}};p.fillPage=function(ft,tbody,pageNumber){ft.pageInfo.currentPage=pageNumber;$(ft.table).data('currentPage',pageNumber);tbody.find('> tr').hide();$(ft.pageInfo.pages[pageNumber]).each(function(){p.showRow(this,ft);});ft.raise('footable_page_filled');};p.showRow=function(row,ft){var $row=$(row),$next=$row.next(),$table=$(ft.table);if($table.hasClass('breakpoint')&&$row.hasClass('footable-detail-show')&&$next.hasClass('footable-row-detail')){$row.add($next).show();ft.createOrUpdateDetailRow(row);}
else $row.show();};}
w.footable.plugins.register(Paginate,defaults);})(jQuery,window);