/** * This jQuery plugin displays pagination links inside the selected elements. * * @author Gabriel Birke (birke *at* d-scribe *dot* de) * @version 1.1 * @param {int} maxentries Number of entries to paginate * @param {Object} opts Several options (see README for documentation) * @return {Object} jQuery Object */ jQuery.fn.pagination = function(maxentries, opts){ opts = jQuery.extend({ first_text:"首页", prev_text:"< 上一页", next_text:"下一页 >", last_text:"末页", ellipse_text:"...", perpage_text: '每页显示', total_text: '总共:', items_per_page:10, num_display_entries:5, num_edge_entries: 0, current_page:0, link_to:"#", prev_show_always:true, next_show_always:true, callback:function(){return false;} },opts||{}); return this.each(function() { /** * Calculate the maximum number of pages */ function numPages() { return Math.ceil(maxentries/opts.items_per_page); } /** * Calculate start and end point of pagination links depending on * current_page and num_display_entries. * @return {Array} */ function getInterval() { var ne_half = Math.ceil(opts.num_display_entries/2); var np = numPages(); var upper_limit = np-opts.num_display_entries; var start = current_page>ne_half?Math.max(Math.min(current_page-ne_half, upper_limit), 0):0; var end = current_page>ne_half?Math.min(current_page+ne_half, np):Math.min(opts.num_display_entries, np); return [start,end]; } /** * This is the event handling function for the pagination links. * @param {int} page_id The new page number */ function pageSelected(page_id, evt){ current_page = page_id; drawLinks(); var continuePropagation = opts.callback(page_id, panel); if (!continuePropagation) { if (evt.stopPropagation) { evt.stopPropagation(); } else { evt.cancelBubble = true; } } return continuePropagation; } /** * This function inserts the pagination links into the container element */ function drawLinks() { panel.empty(); var interval = getInterval(); var np = numPages(); // This helper function returns a handler function that calls pageSelected with the right page_id var getClickHandler = function(page_id) { return function(evt){ pageSelected(page_id,evt);return false; } } // Helper function for generating a single link (or a span tag if it'S the current page) var appendItem = function(page_id, appendopts){ page_id = page_id<0?0:(page_id"+(appendopts.text)+""); } else { var lnk = $(""+(appendopts.text)+"") .bind("click", getClickHandler(page_id)) .attr('href', opts.link_to.replace(/__id__/,page_id)); } if(appendopts.classes){lnk.addClass(appendopts.classes);} panel.append(lnk); } // Radys Add // Generate "First"-Link if(opts.first_text && (current_page > 0 || opts.prev_show_always)){ appendItem(0,{text:opts.first_text, classes:"prev"}); } // Generate "Previous"-Link if(opts.prev_text && (current_page > 0 || opts.prev_show_always)){ appendItem(current_page-1,{text:opts.prev_text, classes:"prev"}); } // Generate starting points if (interval[0] > 0 && opts.num_edge_entries > 0) { var end = Math.min(opts.num_edge_entries, interval[0]); for(var i=0; i"+opts.ellipse_text+"").appendTo(panel); } } // Generate interval links for(var i=interval[0]; i 0) { if(np-opts.num_edge_entries > interval[1]&& opts.ellipse_text) { jQuery(""+opts.ellipse_text+"").appendTo(panel); } var begin = Math.max(np-opts.num_edge_entries, interval[1]); for(var i=begin; i=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105))) { event.returnValue=false; return false; } } }; var pageSizeStr = '
'; jQuery(total).appendTo(panel); } // Extract current_page from options var current_page = opts.current_page; // Create a sane value for maxentries and items_per_page maxentries = (!maxentries || maxentries < 0)?0:maxentries; opts.items_per_page = (!opts.items_per_page || opts.items_per_page < 0)?1:opts.items_per_page; // Store DOM element for easy access from all inner functions var panel = jQuery(this); // Attach control functions to the DOM element this.selectPage = function(page_id){ pageSelected(page_id);} this.prevPage = function(){ if (current_page > 0) { pageSelected(current_page - 1); return true; } else { return false; } }; this.nextPage = function(){ if(current_page < numPages()-1) { pageSelected(current_page+1); return true; } else { return false; } }; // When all initialisation is done, draw the links drawLinks(); }); }; function pageselectCallback(page_id, jq) { paginationCurrentPage = page_id+1; initData(page_id); } function changePageSize(obj){ paginationPageSize = $(obj).val(); $('#pageSizes').val($(obj).val()); if(paginationPageSize <= 0){ paginationPageSize = 20; } if(paginationTotal||paginationTotal<=0){ var paginationTotal = $('.pagination').attr('totalcount'); } if(Math.ceil(paginationTotal/paginationPageSize) <= paginationCurrentPage){ var paginationCurrentPage = Math.ceil(paginationTotal/paginationPageSize); } if(paginationCurrentPage == 0){ paginationCurrentPage = 1; } var ajaxfun=$('.pagination').attr('ajaxfun'); if(ajaxfun!='' && ajaxfun!=undefined){ var total = $('.pagination').attr('totalcount'); var opt={ current_page:'1', items_per_page:paginationPageSize } $(".pagination").pagination(total,opt); do_search(); }else{ $('#pagerForm').submit(); } } function initData(pageIndex) { // loading(); var curPage=pageIndex; if(typeof(paginationTotal)!='undefined'){ if(Math.ceil(paginationTotal/paginationPageSize) <= paginationCurrentPage){ paginationCurrentPage = Math.ceil(paginationTotal/paginationPageSize); pageIndex = paginationCurrentPage - 1; } }else{ // closeLoading(); $(".pagination").html(''); paginationPageSize=0; } if(curPage<1)pageIndex=0; //loadData(pageIndex + 1,paginationPageSize); // closeLoading(); if(paginationTotal<1){ $(".pagination").html(''); return ; } if(pageIndex <0){pageIndex = 0;} $(".pagination").pagination(paginationTotal, { callback: pageselectCallback, items_per_page: paginationPageSize, num_display_entries: 6, current_page: pageIndex, num_edge_entries: 2 }); }