Mercurial Hosting > nabble
view src/nabble/view/web/template/PagingNamespace.java @ 62:4674ed7d56df default tip
remove n2
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 30 Sep 2023 20:25:29 -0600 |
parents | 7ecd1a4ef557 |
children |
line wrap: on
line source
package nabble.view.web.template; import nabble.naml.compiler.Command; import nabble.naml.compiler.IPrintWriter; import nabble.naml.namespaces.IntegerNamespace; import nabble.naml.compiler.Interpreter; import nabble.naml.compiler.ScopedInterpreter; import nabble.naml.compiler.CommandSpec; import nabble.naml.compiler.Namespace; @Namespace ( name = "paging", global = true ) public final class PagingNamespace { private final int totalRows; private final int rowsPerPage; private final int currentPage; private final int lastPage; private final int before; private final int after; PagingNamespace(int totalRows,int currentRow,int rowsPerPage,int neighborPages) { this.totalRows = totalRows; this.rowsPerPage = rowsPerPage; this.currentPage = (currentRow / rowsPerPage) + 1; this.lastPage = (totalRows + rowsPerPage - 1) / rowsPerPage; neighborPages++; int before = currentPage - neighborPages; if( before > 1 ) before++; this.before = before; int after = currentPage + neighborPages; if( after < lastPage ) after--; this.after = after; } @Command public void rows_per_page(IPrintWriter out,Interpreter interp) { out.print( rowsPerPage ); } /* Prints the number of rows the current page is meant to display */ @Command public void current_page_rows(IPrintWriter out,Interpreter interp) { boolean hasNextPage = currentPage < lastPage; out.print( hasNextPage? rowsPerPage : totalRows % rowsPerPage); } @Command public void current_page_number(IPrintWriter out,Interpreter interp) { out.print( currentPage ); } @Command public void has_paging(IPrintWriter out,Interpreter interp) { out.print( totalRows > rowsPerPage ); } @Command public void is_at_beginning(IPrintWriter out,Interpreter interp) { out.print( before <= 1 ); } @Command public void is_at_end(IPrintWriter out,Interpreter interp) { out.print( after >= lastPage ); } public static final CommandSpec neighboring_pages = CommandSpec.DO; @Command public void neighboring_pages(IPrintWriter out,ScopedInterpreter<Page> interp) { final int start = Math.max(1,before); final int limit = Math.min(after,lastPage); for( int i = start; i <= limit; i++ ) { out.print( interp.getArg(page(i),"do") ); } } public static final CommandSpec current_page = CommandSpec.DO; @Command public void current_page(IPrintWriter out,ScopedInterpreter<Page> interp) { out.print( interp.getArg(page(currentPage),"do") ); } public static final CommandSpec first_page = CommandSpec.DO; @Command public void first_page(IPrintWriter out,ScopedInterpreter<Page> interp) { out.print( interp.getArg(page(1),"do") ); } public static final CommandSpec last_page = CommandSpec.DO; @Command public void last_page(IPrintWriter out,ScopedInterpreter<Page> interp) { out.print( interp.getArg(page(lastPage),"do") ); } @Command public void has_previous_page(IPrintWriter out,Interpreter interp) { out.print( currentPage > 1 ); } public static final CommandSpec previous_page = CommandSpec.DO; @Command public void previous_page(IPrintWriter out,ScopedInterpreter<Page> interp) { out.print( interp.getArg(page(currentPage-1),"do") ); } @Command public void has_next_page(IPrintWriter out,Interpreter interp) { out.print( currentPage < lastPage ); } public static final CommandSpec next_page = CommandSpec.DO; @Command public void next_page(IPrintWriter out,ScopedInterpreter<Page> interp) { out.print( interp.getArg(page(currentPage+1),"do") ); } private Page page(int number) { return new Page( number, number==currentPage, (number-1) * rowsPerPage ); } @Namespace ( name = "paging_page", global = true, transparent = true ) public static final class Page { private final int number; private final boolean isCurrent; private final int row; private Page(int number,boolean isCurrent,int row) { this.number = number; this.isCurrent = isCurrent; this.row = row; } @Command public void page_number(IPrintWriter out,Interpreter interp) { out.print( number ); } @Command public void is_current_page(IPrintWriter out,Interpreter interp) { out.print( isCurrent ); } public static final CommandSpec page_row = CommandSpec.DO; @Command public void page_row(IPrintWriter out,ScopedInterpreter<IntegerNamespace> interp) { out.print( interp.getArg(new IntegerNamespace(row),"do") ); } } }