1 | (function() {
|
2 | 'use strict';
|
3 |
|
4 | window.Ractive.controller('pl-pagination', function(component, data, el, config, done) {
|
5 |
|
6 | var refs = {
|
7 | totalPages: 'total-pages',
|
8 | pageSelected: 'page-selected',
|
9 | displayPagesCount: 'display-pages-count',
|
10 | displayFirstButton: 'display-first-button',
|
11 | displayLastButton: 'display-last-button',
|
12 | displayPreviousButton: 'display-previous-button',
|
13 | displayNextButton: 'display-next-button'
|
14 | };
|
15 |
|
16 | $.each(refs, function(key, value) {
|
17 | data[key] = data[value] && data[value] == 'false' ? false : true;
|
18 | });
|
19 |
|
20 | data.totalPages = data['total-pages'] ? parseInt(data['total-pages'], 10) : 20;
|
21 | data.pageSelected = data['page-selected'] ? parseInt(data['page-selected'], 10) : 1;
|
22 | data.displayPagesCount = data['display-pages-count'] ? parseInt(data['display-pages-count'], 10) : 7;
|
23 |
|
24 | var Pagination = component({
|
25 | plName: 'pl-pagination',
|
26 | data: data
|
27 | });
|
28 |
|
29 | function _updatePages() {
|
30 | var pages = [],
|
31 | totalPages = parseInt(Pagination.get('totalPages'), 10),
|
32 | pageSelected = parseInt(Pagination.get('pageSelected'), 10),
|
33 | displayPagesCount = parseInt(Pagination.get('displayPagesCount'), 10),
|
34 | selectIndex = Math.round(displayPagesCount / 2) - 1,
|
35 | start = Math.max(1, pageSelected - selectIndex),
|
36 | stop = Math.min(totalPages + 1, start + displayPagesCount);
|
37 |
|
38 | if (stop - start < displayPagesCount && start > 1) {
|
39 | start = Math.max(1, start - (displayPagesCount - (stop - start)));
|
40 | }
|
41 |
|
42 | for (var i = start; i < stop; i++) {
|
43 | pages.push(i.toString());
|
44 | }
|
45 |
|
46 | Pagination.set('pages', pages);
|
47 | }
|
48 |
|
49 | $.each(refs, function(key, value) {
|
50 | Pagination.observe(value, function(newValue) {
|
51 | newValue = typeof newValue == 'undefined' ? true : newValue;
|
52 |
|
53 | Pagination.set(key,
|
54 | newValue == 'false' ? false : (
|
55 | newValue == 'true' ? true : newValue
|
56 | ));
|
57 | });
|
58 | });
|
59 |
|
60 | Pagination.observe('pageSelected', function(newValue) {
|
61 | var value = Math.max(1, Math.min(parseInt(Pagination.get('totalPages'), 10), newValue)).toString();
|
62 | if (value !== newValue) {
|
63 | setTimeout(function() {
|
64 | Pagination.set('pageSelected', value);
|
65 | });
|
66 |
|
67 | return false;
|
68 | }
|
69 |
|
70 | var onpagselected = Pagination.get('onpagselected');
|
71 | if (onpagselected) {
|
72 | onpagselected(parseInt(value, 10));
|
73 | }
|
74 |
|
75 | _updatePages();
|
76 | });
|
77 |
|
78 | Pagination.observe('totalPages displayPagesCount', function() {
|
79 | _updatePages();
|
80 | Pagination.set('hasActionButtons', parseInt(data.totalPages, 10) > parseInt(data.displayPagesCount, 10));
|
81 | });
|
82 |
|
83 | _updatePages();
|
84 |
|
85 | Pagination.on('selectPage', function(event) {
|
86 | Pagination.set('pageSelected', event.context);
|
87 | });
|
88 |
|
89 | Pagination.on('previousPage', function() {
|
90 | Pagination.set('pageSelected', parseInt(Pagination.get('pageSelected'), 10) - 1);
|
91 | });
|
92 |
|
93 | Pagination.on('nextPage', function() {
|
94 | Pagination.set('pageSelected', parseInt(Pagination.get('pageSelected'), 10) + 1);
|
95 | });
|
96 |
|
97 | Pagination.on('firstPage', function() {
|
98 | Pagination.set('pageSelected', '1');
|
99 | });
|
100 |
|
101 | Pagination.on('lastPage', function() {
|
102 | Pagination.set('pageSelected', Pagination.get('totalPages'));
|
103 | });
|
104 |
|
105 | done();
|
106 | });
|
107 | })();
|