Subversion-Projekte lars-tiefland.webanos.zeldi.de

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
4 lars 1
/*
2
 * This plug-in adds another pagination option similar to `full_numbers`, except
3
 * it adds ellipses around the page numbers when applicable. You can set how
4
 * many page numbers should be displayed with the iShowPages option.
5
 *
6
 * This plug- in extends the oStdClasses object with the following properties:
7
 * sPageEllipsis, sPageNumber and sPageNumbers.
8
 *
9
 * It also extends the oSettings object with the following properties:
10
 * _iShowPages, _iShowPagesHalf, _iCurrentPage, _iTotalPages, _iFirstPage and
11
 * _iLastPage.
12
 *
13
 * Note that DataTables 1.10 has this ability built in. As such, this plug-ins
14
 * has been marked as deprecated, but may still be useful for if you are using
15
 * an old version of DataTables.
16
 *
17
 * @name Ellipses
18
 * @summary Show ellipses in the pagination control where there is a gap in numbers
19
 * @deprecated
20
 * @author [Dave Kennedy](http://daveden.wordpress.com/)
21
 * @example
22
 *     $(document).ready(function() {
23
 *         $('#example').dataTable({
24
 *             'sPaginationType': 'ellipses'
25
 *         });
26
 *     });
27
 */
28
 
29
$.extend($.fn.dataTableExt.oStdClasses, {
30
    'sPageEllipsis': 'paginate_ellipsis',
31
    'sPageNumber': 'paginate_number',
32
    'sPageNumbers': 'paginate_numbers'
33
});
34
 
35
$.fn.dataTableExt.oPagination.ellipses = {
36
    'oDefaults': {
37
        'iShowPages': 5
38
    },
39
    'fnClickHandler': function(e) {
40
        var fnCallbackDraw = e.data.fnCallbackDraw,
41
            oSettings = e.data.oSettings,
42
            sPage = e.data.sPage;
43
 
44
        if ($(this).is('[disabled]')) {
45
            return false;
46
        }
47
 
48
        oSettings.oApi._fnPageChange(oSettings, sPage);
49
        fnCallbackDraw(oSettings);
50
 
51
        return true;
52
    },
53
    // fnInit is called once for each instance of pager
54
    'fnInit': function(oSettings, nPager, fnCallbackDraw) {
55
        var oClasses = oSettings.oClasses,
56
            oLang = oSettings.oLanguage.oPaginate,
57
            that = this;
58
 
59
        var iShowPages = oSettings.oInit.iShowPages || this.oDefaults.iShowPages,
60
            iShowPagesHalf = Math.floor(iShowPages / 2);
61
 
62
        $.extend(oSettings, {
63
            _iShowPages: iShowPages,
64
            _iShowPagesHalf: iShowPagesHalf,
65
        });
66
 
67
        var oFirst = $('<a class="' + oClasses.sPageButton + ' ' + oClasses.sPageFirst + '">' + oLang.sFirst + '</a>'),
68
            oPrevious = $('<a class="' + oClasses.sPageButton + ' ' + oClasses.sPagePrevious + '">' + oLang.sPrevious + '</a>'),
69
            oNumbers = $('<span class="' + oClasses.sPageNumbers + '"></span>'),
70
            oNext = $('<a class="' + oClasses.sPageButton + ' ' + oClasses.sPageNext + '">' + oLang.sNext + '</a>'),
71
            oLast = $('<a class="' + oClasses.sPageButton + ' ' + oClasses.sPageLast + '">' + oLang.sLast + '</a>');
72
 
73
        oFirst.click({ 'fnCallbackDraw': fnCallbackDraw, 'oSettings': oSettings, 'sPage': 'first' }, that.fnClickHandler);
74
        oPrevious.click({ 'fnCallbackDraw': fnCallbackDraw, 'oSettings': oSettings, 'sPage': 'previous' }, that.fnClickHandler);
75
        oNext.click({ 'fnCallbackDraw': fnCallbackDraw, 'oSettings': oSettings, 'sPage': 'next' }, that.fnClickHandler);
76
        oLast.click({ 'fnCallbackDraw': fnCallbackDraw, 'oSettings': oSettings, 'sPage': 'last' }, that.fnClickHandler);
77
 
78
        // Draw
79
        $(nPager).append(oFirst, oPrevious, oNumbers, oNext, oLast);
80
    },
81
    // fnUpdate is only called once while table is rendered
82
    'fnUpdate': function(oSettings, fnCallbackDraw) {
83
        var oClasses = oSettings.oClasses,
84
            that = this;
85
 
86
        var tableWrapper = oSettings.nTableWrapper;
87
 
88
        // Update stateful properties
89
        this.fnUpdateState(oSettings);
90
 
91
        if (oSettings._iCurrentPage === 1) {
92
            $('.' + oClasses.sPageFirst, tableWrapper).attr('disabled', true);
93
            $('.' + oClasses.sPagePrevious, tableWrapper).attr('disabled', true);
94
        } else {
95
            $('.' + oClasses.sPageFirst, tableWrapper).removeAttr('disabled');
96
            $('.' + oClasses.sPagePrevious, tableWrapper).removeAttr('disabled');
97
        }
98
 
99
        if (oSettings._iTotalPages === 0 || oSettings._iCurrentPage === oSettings._iTotalPages) {
100
            $('.' + oClasses.sPageNext, tableWrapper).attr('disabled', true);
101
            $('.' + oClasses.sPageLast, tableWrapper).attr('disabled', true);
102
        } else {
103
            $('.' + oClasses.sPageNext, tableWrapper).removeAttr('disabled');
104
            $('.' + oClasses.sPageLast, tableWrapper).removeAttr('disabled');
105
        }
106
 
107
        var i, oNumber, oNumbers = $('.' + oClasses.sPageNumbers, tableWrapper);
108
 
109
        // Erase
110
        oNumbers.html('');
111
 
112
        for (i = oSettings._iFirstPage; i <= oSettings._iLastPage; i++) {
113
            oNumber = $('<a class="' + oClasses.sPageButton + ' ' + oClasses.sPageNumber + '">' + oSettings.fnFormatNumber(i) + '</a>');
114
 
115
            if (oSettings._iCurrentPage === i) {
116
                oNumber.attr('active', true).attr('disabled', true);
117
            } else {
118
                oNumber.click({ 'fnCallbackDraw': fnCallbackDraw, 'oSettings': oSettings, 'sPage': i - 1 }, that.fnClickHandler);
119
            }
120
 
121
            // Draw
122
            oNumbers.append(oNumber);
123
        }
124
 
125
        // Add ellipses
126
        if (1 < oSettings._iFirstPage) {
127
            oNumbers.prepend('<span class="' + oClasses.sPageEllipsis + '">...</span>');
128
        }
129
 
130
        if (oSettings._iLastPage < oSettings._iTotalPages) {
131
            oNumbers.append('<span class="' + oClasses.sPageEllipsis + '">...</span>');
132
        }
133
    },
134
    // fnUpdateState used to be part of fnUpdate
135
    // The reason for moving is so we can access current state info before fnUpdate is called
136
    'fnUpdateState': function(oSettings) {
137
        var iCurrentPage = Math.ceil((oSettings._iDisplayStart + 1) / oSettings._iDisplayLength),
138
            iTotalPages = Math.ceil(oSettings.fnRecordsDisplay() / oSettings._iDisplayLength),
139
            iFirstPage = iCurrentPage - oSettings._iShowPagesHalf,
140
            iLastPage = iCurrentPage + oSettings._iShowPagesHalf;
141
 
142
        if (iTotalPages < oSettings._iShowPages) {
143
            iFirstPage = 1;
144
            iLastPage = iTotalPages;
145
        } else if (iFirstPage < 1) {
146
            iFirstPage = 1;
147
            iLastPage = oSettings._iShowPages;
148
        } else if (iLastPage > iTotalPages) {
149
            iFirstPage = (iTotalPages - oSettings._iShowPages) + 1;
150
            iLastPage = iTotalPages;
151
        }
152
 
153
        $.extend(oSettings, {
154
            _iCurrentPage: iCurrentPage,
155
            _iTotalPages: iTotalPages,
156
            _iFirstPage: iFirstPage,
157
            _iLastPage: iLastPage
158
        });
159
    }
160
};