Merge branch 'master' into PROT-9-webservice
[proteocache.git] / webapp / resources / datatables-1.9.4 / media / src / core / core.length.js
diff --git a/webapp/resources/datatables-1.9.4/media/src/core/core.length.js b/webapp/resources/datatables-1.9.4/media/src/core/core.length.js
new file mode 100644 (file)
index 0000000..60c5804
--- /dev/null
@@ -0,0 +1,122 @@
+
+
+/**
+ * Generate the node required for user display length changing
+ *  @param {object} oSettings dataTables settings object
+ *  @returns {node} Display length feature node
+ *  @memberof DataTable#oApi
+ */
+function _fnFeatureHtmlLength ( oSettings )
+{
+       if ( oSettings.oScroll.bInfinite )
+       {
+               return null;
+       }
+       
+       /* This can be overruled by not using the _MENU_ var/macro in the language variable */
+       var sName = 'name="'+oSettings.sTableId+'_length"';
+       var sStdMenu = '<select size="1" '+sName+'>';
+       var i, iLen;
+       var aLengthMenu = oSettings.aLengthMenu;
+       
+       if ( aLengthMenu.length == 2 && typeof aLengthMenu[0] === 'object' && 
+                       typeof aLengthMenu[1] === 'object' )
+       {
+               for ( i=0, iLen=aLengthMenu[0].length ; i<iLen ; i++ )
+               {
+                       sStdMenu += '<option value="'+aLengthMenu[0][i]+'">'+aLengthMenu[1][i]+'</option>';
+               }
+       }
+       else
+       {
+               for ( i=0, iLen=aLengthMenu.length ; i<iLen ; i++ )
+               {
+                       sStdMenu += '<option value="'+aLengthMenu[i]+'">'+aLengthMenu[i]+'</option>';
+               }
+       }
+       sStdMenu += '</select>';
+       
+       var nLength = document.createElement( 'div' );
+       if ( !oSettings.aanFeatures.l )
+       {
+               nLength.id = oSettings.sTableId+'_length';
+       }
+       nLength.className = oSettings.oClasses.sLength;
+       nLength.innerHTML = '<label>'+oSettings.oLanguage.sLengthMenu.replace( '_MENU_', sStdMenu )+'</label>';
+       
+       /*
+        * Set the length to the current display length - thanks to Andrea Pavlovic for this fix,
+        * and Stefan Skopnik for fixing the fix!
+        */
+       $('select option[value="'+oSettings._iDisplayLength+'"]', nLength).attr("selected", true);
+       
+       $('select', nLength).bind( 'change.DT', function(e) {
+               var iVal = $(this).val();
+               
+               /* Update all other length options for the new display */
+               var n = oSettings.aanFeatures.l;
+               for ( i=0, iLen=n.length ; i<iLen ; i++ )
+               {
+                       if ( n[i] != this.parentNode )
+                       {
+                               $('select', n[i]).val( iVal );
+                       }
+               }
+               
+               /* Redraw the table */
+               oSettings._iDisplayLength = parseInt(iVal, 10);
+               _fnCalculateEnd( oSettings );
+               
+               /* If we have space to show extra rows (backing up from the end point - then do so */
+               if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() )
+               {
+                       oSettings._iDisplayStart = oSettings.fnDisplayEnd() - oSettings._iDisplayLength;
+                       if ( oSettings._iDisplayStart < 0 )
+                       {
+                               oSettings._iDisplayStart = 0;
+                       }
+               }
+               
+               if ( oSettings._iDisplayLength == -1 )
+               {
+                       oSettings._iDisplayStart = 0;
+               }
+               
+               _fnDraw( oSettings );
+       } );
+
+
+       $('select', nLength).attr('aria-controls', oSettings.sTableId);
+       
+       return nLength;
+}
+
+
+/**
+ * Recalculate the end point based on the start point
+ *  @param {object} oSettings dataTables settings object
+ *  @memberof DataTable#oApi
+ */
+function _fnCalculateEnd( oSettings )
+{
+       if ( oSettings.oFeatures.bPaginate === false )
+       {
+               oSettings._iDisplayEnd = oSettings.aiDisplay.length;
+       }
+       else
+       {
+               /* Set the end point of the display - based on how many elements there are
+                * still to display
+                */
+               if ( oSettings._iDisplayStart + oSettings._iDisplayLength > oSettings.aiDisplay.length ||
+                          oSettings._iDisplayLength == -1 )
+               {
+                       oSettings._iDisplayEnd = oSettings.aiDisplay.length;
+               }
+               else
+               {
+                       oSettings._iDisplayEnd = oSettings._iDisplayStart + oSettings._iDisplayLength;
+               }
+       }
+}
+