annotate DataTables-1.9.4/media/src/core/core.length.js @ 0:ac5f9272033b draft

first upload
author saskia-hiltemann
date Tue, 01 Jul 2014 11:42:23 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
1
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
2
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
3 /**
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
4 * Generate the node required for user display length changing
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
5 * @param {object} oSettings dataTables settings object
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
6 * @returns {node} Display length feature node
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
7 * @memberof DataTable#oApi
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
8 */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
9 function _fnFeatureHtmlLength ( oSettings )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
10 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
11 if ( oSettings.oScroll.bInfinite )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
12 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
13 return null;
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
14 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
15
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
16 /* This can be overruled by not using the _MENU_ var/macro in the language variable */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
17 var sName = 'name="'+oSettings.sTableId+'_length"';
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
18 var sStdMenu = '<select size="1" '+sName+'>';
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
19 var i, iLen;
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
20 var aLengthMenu = oSettings.aLengthMenu;
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
21
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
22 if ( aLengthMenu.length == 2 && typeof aLengthMenu[0] === 'object' &&
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
23 typeof aLengthMenu[1] === 'object' )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
24 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
25 for ( i=0, iLen=aLengthMenu[0].length ; i<iLen ; i++ )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
26 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
27 sStdMenu += '<option value="'+aLengthMenu[0][i]+'">'+aLengthMenu[1][i]+'</option>';
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
28 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
29 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
30 else
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
31 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
32 for ( i=0, iLen=aLengthMenu.length ; i<iLen ; i++ )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
33 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
34 sStdMenu += '<option value="'+aLengthMenu[i]+'">'+aLengthMenu[i]+'</option>';
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
35 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
36 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
37 sStdMenu += '</select>';
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
38
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
39 var nLength = document.createElement( 'div' );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
40 if ( !oSettings.aanFeatures.l )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
41 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
42 nLength.id = oSettings.sTableId+'_length';
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
43 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
44 nLength.className = oSettings.oClasses.sLength;
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
45 nLength.innerHTML = '<label>'+oSettings.oLanguage.sLengthMenu.replace( '_MENU_', sStdMenu )+'</label>';
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
46
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
47 /*
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
48 * Set the length to the current display length - thanks to Andrea Pavlovic for this fix,
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
49 * and Stefan Skopnik for fixing the fix!
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
50 */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
51 $('select option[value="'+oSettings._iDisplayLength+'"]', nLength).attr("selected", true);
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
52
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
53 $('select', nLength).bind( 'change.DT', function(e) {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
54 var iVal = $(this).val();
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
55
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
56 /* Update all other length options for the new display */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
57 var n = oSettings.aanFeatures.l;
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
58 for ( i=0, iLen=n.length ; i<iLen ; i++ )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
59 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
60 if ( n[i] != this.parentNode )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
61 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
62 $('select', n[i]).val( iVal );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
63 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
64 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
65
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
66 /* Redraw the table */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
67 oSettings._iDisplayLength = parseInt(iVal, 10);
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
68 _fnCalculateEnd( oSettings );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
69
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
70 /* If we have space to show extra rows (backing up from the end point - then do so */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
71 if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
72 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
73 oSettings._iDisplayStart = oSettings.fnDisplayEnd() - oSettings._iDisplayLength;
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
74 if ( oSettings._iDisplayStart < 0 )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
75 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
76 oSettings._iDisplayStart = 0;
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
77 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
78 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
79
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
80 if ( oSettings._iDisplayLength == -1 )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
81 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
82 oSettings._iDisplayStart = 0;
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
83 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
84
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
85 _fnDraw( oSettings );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
86 } );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
87
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
88
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
89 $('select', nLength).attr('aria-controls', oSettings.sTableId);
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
90
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
91 return nLength;
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
92 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
93
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
94
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
95 /**
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
96 * Recalculate the end point based on the start point
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
97 * @param {object} oSettings dataTables settings object
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
98 * @memberof DataTable#oApi
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
99 */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
100 function _fnCalculateEnd( oSettings )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
101 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
102 if ( oSettings.oFeatures.bPaginate === false )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
103 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
104 oSettings._iDisplayEnd = oSettings.aiDisplay.length;
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
105 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
106 else
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
107 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
108 /* Set the end point of the display - based on how many elements there are
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
109 * still to display
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
110 */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
111 if ( oSettings._iDisplayStart + oSettings._iDisplayLength > oSettings.aiDisplay.length ||
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
112 oSettings._iDisplayLength == -1 )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
113 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
114 oSettings._iDisplayEnd = oSettings.aiDisplay.length;
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
115 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
116 else
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
117 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
118 oSettings._iDisplayEnd = oSettings._iDisplayStart + oSettings._iDisplayLength;
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
119 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
120 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
121 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
122