1 /**
2 * This file is part of the equanda project.
3 *
4 * The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at http://www.mozilla.org/MPL/
7 *
8 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
9 * ANY KIND, either express or implied. See the License for the specific language governing rights and
10 * limitations under the License.
11 *
12 * Alternatively, the contents of this file may be used under the terms of
13 * either the GNU General Public License Version 2 or later (the "GPL"), or
14 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
15 * in which case the provisions of the GPL or the LGPL are applicable instead
16 * of those above. If you wish to allow use of your version of this file only
17 * under the terms of either the GPL or the LGPL, and not to allow others to
18 * use your version of this file under the terms of the MPL, indicate your
19 * decision by deleting the provisions above and replace them with the notice
20 * and other provisions required by the GPL or the LGPL. If you do not delete
21 * the provisions above, a recipient may use your version of this file under
22 * the terms of any one of the MPL, the GPL or the LGPL.
23 */
24
25 package org.equanda.tapestry5.components;
26
27 import org.apache.tapestry5.MarkupWriter;
28 import org.apache.tapestry5.RenderSupport;
29 import org.apache.tapestry5.annotations.*;
30 import org.apache.tapestry5.ioc.annotations.Inject;
31 import org.apache.tapestry5.json.JSONObject;
32 import org.apache.tapestry5.services.Environment;
33
34 import java.util.List;
35
36 /**
37 * Equanda modification of {@link org.apache.tapestry5.corelib.components.GridPager}
38 *
39 * @author <a href="mailto:vladimir.tkachenko@gmail.com">Vladimir Tkachenko</a>
40 */
41 @IncludeStylesheet( value = { "classpath:/org/equanda/tapestry5/resources/jspager.css" } )
42 @IncludeJavaScriptLibrary( value = { "classpath:/org/equanda/tapestry5/resources/jspager.js" } )
43 public class JSPager
44 {
45 /**
46 * The source of the data displayed by the JSPagedLoop
47 */
48 @Parameter
49 private List<Object> source;
50
51 /**
52 * The number of rows displayed per page.
53 */
54 @Parameter
55 private int rowsPerPage;
56
57 /**
58 * Number of pages before and after the current page in the range. The pager always displays links for 2 * range + 1
59 * pages, unless that's more than the total number of available pages.
60 */
61 @Parameter( "5" )
62 private int range;
63
64 // private int maxPages;
65
66 @Environmental
67 private RenderSupport renderSupport;
68
69 @Inject
70 private Environment environment;
71
72 @BeginRender
73 void render( MarkupWriter writer )
74 {
75 JSPagedLoop pagedLoop = environment.peek( JSPagedLoop.class );
76
77 if ( pagedLoop != null )
78 {
79 /*int availableRows = source.size() - pagedLoop.getAddedRowCount();
80
81 maxPages = ( ( availableRows - 1 ) / rowsPerPage ) + 1;
82
83 if ( maxPages < 2 )
84 {
85 return;
86 }*/
87 String clientId = pagedLoop.getClientId().toLowerCase();
88
89 writer.element( "div", "class", "equanda_paged_loop_pager jspagedloop_pager_" + clientId );
90 writer.end();
91
92 JSONObject object = new JSONObject();
93 object.put( "range", range );
94 // object.put( "maxPages", maxPages );
95 object.put( "rowsPerPage", rowsPerPage );
96 object.put( "lastIndex", 0 );
97 object.put( "currentPage", pagedLoop.getCurrentPage() );
98 object.put( "rowCount", source.size() );
99 object.put( "addedRowCount", pagedLoop.getAddedRowCount() );
100 object.put( "additionalRowCount", pagedLoop.getAdditionalRowCount() );
101 object.put( "currentPageFieldName", pagedLoop.getCurrentPageFieldName() );
102 object.put( "addedRowFieldName", pagedLoop.getAddedRowFieldName() );
103 object.put( "containerClass", "jspagedloop_pager_" + clientId );
104 object.put( "rowClass", "jspagedlooprow_" + clientId );
105 object.put( "addLinkClass", "jspagedloop_addlink_" + clientId );
106 object.put( "addBlockClass", "jspagedloop_addblock_" + clientId );
107 object.put( "name", clientId );
108 renderSupport.addScript( "JSPagerConfigs.%s = %s;", clientId, object );
109 renderSupport.addScript( "eqShowPage( %s, JSPagerConfigs.%s );", pagedLoop.getCurrentPage(), clientId );
110 renderSupport.addScript( "checkAddLinks( JSPagerConfigs.%s );", clientId );
111 // logger.info( String.format( "Config Object. %s = %s ", clientId, object ) );
112 }
113 }
114 }