lila/app/templating/PaginatorHelper.scala
2017-12-29 10:05:11 -05:00

39 lines
1.1 KiB
Scala

package lila.app
package templating
import scala.collection.breakOut
import lila.common.paginator.Paginator
trait PaginatorHelper {
implicit def toRichPager[A](pager: Paginator[A]) = new {
def sliding(length: Int, showPost: Boolean = true): List[Option[Int]] = {
val fromPage = 1 max (pager.currentPage - length)
val toPage = pager.nbPages min (pager.currentPage + length)
val pre = fromPage match {
case 1 => Nil
case 2 => List(1.some)
case x => List(1.some, none)
}
val post = toPage match {
case x if x == pager.nbPages => Nil
case x if x == pager.nbPages - 1 => List(pager.nbPages.some)
case x if showPost => List(none, pager.nbPages.some)
case _ => List(none)
}
pre ::: ((fromPage to toPage).map(some)(breakOut): List[Option[Int]]) ::: post
}
def firstIndex: Int =
(pager.maxPerPage.value * (pager.currentPage - 1) + 1) min pager.nbResults
def lastIndex: Int =
(firstIndex + pageNbResults - 1) max 0
def pageNbResults =
pager.currentPageResults.size
}
}