diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DataTables-1.9.4/media/src/core/core.length.js	Tue Jul 01 11:42:23 2014 -0400
@@ -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;
+		}
+	}
+}
+