Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / static / im / js / jquery.tablesorter.pager.js @ bb74d166

History | View | Annotate | Download (6.4 kB)

1
(function($) {
2
    $.extend({
3
        tablesorterPager: new function() {
4

    
5

    
6
            // this function renders upon initialization
7
            function updatePageDisplay(c,table) {
8
                checkDisabled(table);
9
                /*
10
                The following line has been added to provide page display
11
                info on non input form elements
12
                */
13
                $(c.cssPageDisplay).html((c.page+1) + c.seperator + c.totalPages);
14
                var s = $(c.cssPageDisplay,c.container).val((c.page+1) + c.seperator + c.totalPages);
15

    
16
            }
17

    
18
            function setPageSize(table,size) {
19
                var c = table.config;
20
                c.size = size;
21
                c.totalPages = Math.ceil(c.totalRows / c.size);
22
                c.pagerPositionSet = false;
23
                moveToPage(table);
24
                fixPosition(table);
25
            }
26

    
27
            function fixPosition(table) {
28
                var c = table.config;
29
                if(!c.pagerPositionSet && c.positionFixed) {
30
                    var c = table.config, o = $(table);
31
                    if(o.offset) {
32
                        c.container.css({
33
                            top: o.offset().top + o.height() + 'px',
34
                            position: 'absolute'
35
                        });
36
                    }
37
                    c.pagerPositionSet = true;
38
                }
39
            }
40

    
41
            function checkDisabled(table) {
42

    
43
                var c = table.config;
44
                if (c.page == (c.totalPages-1)) {
45
                    $(config.cssNext).addClass('disabled');
46
                } else {
47
                    $(config.cssNext).removeClass('disabled');
48
                }
49
                if (c.page == 0) {
50
                    $(config.cssPrev).addClass('disabled');
51
                } else {
52
                    $(config.cssPrev).removeClass('disabled');
53
                }
54

    
55

    
56
            }
57

    
58

    
59
            function moveToFirstPage(table) {
60
                var c = table.config;
61
                c.page = 0;
62
                moveToPage(table);
63
            }
64

    
65
            function moveToLastPage(table) {
66
                var c = table.config;
67
                c.page = (c.totalPages-1);
68
                moveToPage(table);
69
            }
70

    
71
            function moveToNextPage(table) {
72
                var c = table.config;
73
                c.page++;
74
                if(c.page >= (c.totalPages-1)) {
75
                    c.page = (c.totalPages-1);
76
                }
77
                moveToPage(table);
78
            }
79

    
80
            function moveToPrevPage(table) {
81
                var c = table.config;
82
                c.page--;
83
                if(c.page <= 0) {
84
                    c.page = 0;
85
                }
86
                moveToPage(table);
87
            }
88

    
89

    
90
            function moveToPage(table) {
91
                var c = table.config;
92
                if(c.page < 0 || c.page > (c.totalPages-1)) {
93
                    c.page = 0;
94
                }
95
                renderTable(table,c.rowsCopy);
96
            }
97

    
98
            function renderTable(table,rows) {
99

    
100
                var c = table.config;
101
                var l = rows.length;
102
                var s = (c.page * c.size);
103
                var e = (s + c.size);
104
                if(e > rows.length ) {
105
                    e = rows.length;
106
                }
107

    
108

    
109
                var tableBody = $(table.tBodies[0]);
110

    
111
                // clear the table body
112

    
113
                $.tablesorter.clearTableBody(table);
114

    
115
                for(var i = s; i < e; i++) {
116

    
117
                    //tableBody.append(rows[i]);
118

    
119
                    var o = rows[i];
120
                    var l = o.length;
121
                    for(var j=0; j < l; j++) {
122

    
123
                        tableBody[0].appendChild(o[j]);
124

    
125
                    }
126
                }
127

    
128
                fixPosition(table,tableBody);
129

    
130
                $(table).trigger("applyWidgets");
131

    
132
                if( c.page >= c.totalPages ) {
133
                    moveToLastPage(table);
134
                }
135

    
136
                updatePageDisplay(c,table);
137
            }
138

    
139
            this.appender = function(table,rows) {
140

    
141
                var c = table.config;
142

    
143
                c.rowsCopy = rows;
144
                c.totalRows = rows.length;
145
                c.totalPages = Math.ceil(c.totalRows / c.size);
146

    
147
                renderTable(table,rows);
148
            };
149

    
150
            this.defaults = {
151
                size: 10,
152
                offset: 0,
153
                page: 0,
154
                totalRows: 0,
155
                totalPages: 0,
156
                container: null,
157
                cssNext: '.next',
158
                cssPrev: '.prev',
159
                cssFirst: '.first',
160
                cssLast: '.last',
161
                cssPageDisplay: '.pagedisplay',
162
                cssPageSize: '.pagesize',
163
                seperator: "/",
164
                positionFixed: true,
165
                appender: this.appender
166
            };
167

    
168
            this.construct = function(settings) {
169

    
170
                return this.each(function() {
171

    
172
                    config = $.extend(this.config, $.tablesorterPager.defaults, settings);
173

    
174
                    var table = this, pager = config.container;
175

    
176
                    $(this).trigger("appendCache");
177

    
178

    
179
                    /*
180

181
                    If uncommented the plugin does not function properly
182
                    when page size select is not present on the page.
183

184
                    */
185
                    //config.size = parseInt($(".pagesize",pager).val());
186

    
187
                    $(config.cssFirst,pager).click(function() {
188
                        moveToFirstPage(table);
189
                        return false;
190
                    });
191
                    $(config.cssNext,pager).click(function() {
192
                        moveToNextPage(table);
193
                        return false;
194
                    });
195
                    $(config.cssPrev,pager).click(function() {
196
                        moveToPrevPage(table);
197
                        return false;
198
                    });
199
                    $(config.cssLast,pager).click(function() {
200
                        moveToLastPage(table);
201
                        return false;
202
                    });
203
                    $(config.cssPageSize,pager).change(function() {
204
                        setPageSize(table,parseInt($(this).val()));
205
                        return false;
206
                    });
207
                });
208
            };
209

    
210
        }
211
    });
212
    // extend plugin scope
213
    $.fn.extend({
214
        tablesorterPager: $.tablesorterPager.construct
215
    });
216

    
217
})(jQuery);