//This is a AJAX pager that uses jQuery //should be altered to support templating. function StarmindPager(navTopSelector, navBottomSelector, pagerContainerSelector, pagerItemSelector, pSize, nPC) { this.CurrentPage = 1; this.PageSize = pSize; this.NavigationPageCount = nPC; this.NavTopSelector = navTopSelector; this.NavBottomSelector = navBottomSelector; this.PagerContainerSelector = pagerContainerSelector; this.PagerItemWildcardSelector = pagerItemSelector; this.PagerShowingRangeCallback = null; this.RefreshContext(); this.TogglePage(1); } StarmindPager.prototype.RefreshContext = function() { this.NavTop = jQuery(this.NavTopSelector); this.NavBottom = jQuery(this.NavBottomSelector); this.PagerContainer = jQuery(this.PagerContainerSelector); this.PagerItems = this.PagerContainer.find(this.PagerItemWildcardSelector); } StarmindPager.prototype.BuildNavigation = function() { if(this.NavTop.size() > 0) this.BuildNavigationFor(this.NavTop); if(this.NavBottom.size() > 0) this.BuildNavigationFor(this.NavBottom); } StarmindPager.prototype.BuildNavigationFor = function(navContainer) { navContainer.children().remove(); var table = jQuery("
"); var cells = table.find("td"); /*var first = jQuery("", { href: "#", text: "<< First" });*/ /*var last = jQuery("", { href: "#", text: "Last >>" });*/ var prev = jQuery("", { href: "#", text: "<" }); var next = jQuery("", { href: "#", text: ">" }); var prevImg = jQuery("", { src : PaginationImages.PREV, alt: "Previous", style: "margin-bottom: 1px; cursor: pointer;" }); var nextImg = jQuery("", { src : PaginationImages.NEXT, alt: "Next", style: "margin-bottom: 1px; cursor: pointer;" }); var pageImg = jQuery("", { src : PaginationImages.PAGE, alt: "Page" }); var ofImg = jQuery("", { src : PaginationImages.OF, alt: "Of" }); //first.bind("click", this, function(e) { e.data.TogglePage(1); return false; }); //last.bind("click", this, function(e) { e.data.TogglePage(-1); return false; }); prevImg.bind("click", this, function(e) { e.data.TogglePage(e.data.GetCurrentPageMod(-1)); return false; }); nextImg.bind("click", this, function(e) { e.data.TogglePage(e.data.GetCurrentPageMod(1)); return false; }); //cells.eq(0).append(first); //cells.eq(0).append(" "); cells.eq(2).append(prevImg); cells.eq(2).append(" "); cells.eq(2).append(pageImg); cells.eq(2).append(" "); cells.eq(2).append('Current page'); cells.eq(2).append(" "); cells.eq(2).append(ofImg); cells.eq(2).append(" "); cells.eq(2).append('Total number page'); cells.eq(2).append(" "); cells.eq(2).append(nextImg); var min = ( this.CurrentPage - Math.floor(this.NavigationPageCount / 2) > 0 ? (this.CurrentPage + Math.floor(this.NavigationPageCount / 2) <= this.GetLastPageNumber() ? this.CurrentPage - Math.floor(this.NavigationPageCount / 2) : this.CurrentPage - Math.floor(this.NavigationPageCount / 2) - ((this.CurrentPage + Math.floor(this.NavigationPageCount / 2) - this.GetLastPageNumber())) ) : 1 ); var max = (min + this.NavigationPageCount - 1 <= this.GetLastPageNumber() ? min + this.NavigationPageCount - 1 : this.GetLastPageNumber()); for(var pageNumber = min; pageNumber <= max; pageNumber++) { var pageLink = jQuery((pageNumber == this.CurrentPage ? "" : ""), { href: "#", text: pageNumber }); pageLink.bind("click", { obj: this, pageNumber: pageNumber }, function(e) { e.data.obj.TogglePage(e.data.pageNumber); return false; }); /* if(pageNumber == min && pageNumber != 1) cells.eq(2).append("... ") cells.eq(2).append(pageLink); if(pageNumber < max) cells.eq(2).append(", "); if(pageNumber == max && pageNumber != this.GetLastPageNumber()) cells.eq(2).append(" ...") */ } navContainer.append(table); } StarmindPager.prototype.TogglePage = function(pageNumber) { if(pageNumber == -1) pageNumber = this.GetLastPageNumber(); if(pageNumber > 0 && pageNumber <= this.GetLastPageNumber()) { this.CurrentPage = pageNumber; this.BuildNavigation(); var min = (this.CurrentPage - 1) * this.PageSize; var max = this.CurrentPage * this.PageSize; this.GetItems().hide().filter(function(i) { return (i >= min && i < max); }).show(); if(this.PagerShowingRangeCallback != null) this.PagerShowingRangeCallback(min+1, (this.GetItemCount() < max ? this.GetItemCount() : max)); } } StarmindPager.prototype.ShowAll = function() { this.GetItems().show(); } StarmindPager.prototype.GetCurrentPageMod = function(mod) { var pageNumber = this.CurrentPage + mod; return (pageNumber > 0 ? (pageNumber <= this.GetLastPageNumber() ? pageNumber : this.GetLastPageNumber()) : 1); } StarmindPager.prototype.GetLastPageNumber = function() { return Math.ceil(this.GetItemCount()/this.PageSize); } StarmindPager.prototype.GetItemCount = function() { return this.GetItems().length; } StarmindPager.prototype.GetItems = function() { return this.PagerItems; }