Ver Fonte

#985: preserve the displayed sort order when refreshing a table.

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@3442 a333f486-631f-4898-b8df-5754b55c2be0
dflaven há 10 anos atrás
pai
commit
5438478b57
2 ficheiros alterados com 30 adições e 12 exclusões
  1. 11 2
      js/datatable.js
  2. 19 10
      js/utils.js

+ 11 - 2
js/datatable.js

@@ -61,6 +61,7 @@ $(function()
 			oParams.class_aliases = this.options.oClassAliases;
 			oParams.columns = this.options.oColumns;
 			var iSortCol = 0;
+			var aCurrentSort = [];
 			for(var k1 in oParams.columns) //Aliases
 			{
 				for(var k2 in oParams.columns[k1]) //Attribute codes
@@ -69,17 +70,18 @@ $(function()
 					{
 						oParams.sort_col = iSortCol;
 						oParams.sort_order = oParams.columns[k1][k2].sort;
+						aCurrentSort.push([iSortCol, (oParams.columns[k1][k2].sort == 'asc') ? 0 : 1]);
 						break; //TODO make this more generic, Sort on just one column for now
 					}
 					iSortCol++;
 				}
 				break; //TODO: DBObjectSet supports only sorting on the first alias of the set
-			}
-			
+			}			
 			var sId = new String(this.element.attr('id'));
 			var sListId = sId.replace('datatable_', '');
 			oParams.list_id = sListId;
 			var me = this;
+			this.element.block();
 			$.post(this.options.sRenderUrl, oParams, function(data) {
 				// Nasty workaround to clear the pager's state for paginated lists !!!
 				// See jquery.tablesorter.pager.js / saveParams / restoreParams
@@ -90,6 +92,9 @@ $(function()
 				// End of workaround
 
 				me.element.find('.datacontents').html(data);
+				// restore the sort order on columns
+				me.element.find('table.listResults').trigger('fakesorton', [aCurrentSort]);
+				me.element.unblock();
 			}, 'html' );
 			
 		},
@@ -306,6 +311,10 @@ $(function()
 			
 			return (oDlgOpen.length > 0);
 		},
+		DoRefresh: function()
+		{
+			this._refresh();
+		},
 		GetMultipleSelectionParams: function()
 		{
 			var oRes = {};

+ 19 - 10
js/utils.js

@@ -115,22 +115,31 @@ function ReloadBlock(divId, sStyle, sSerializedFilter, sExtraParams)
 	// Check if the user is not editing the list properties right now
 	var bDialogOpen = false;
 	var oDataTable = $('#'+divId+' :itop-datatable');
+	var bIsDataTable = false;
 	if (oDataTable.length > 0)
 	{
 		bDialogOpen = oDataTable.datatable('IsDialogOpen');
+		bIsDataTable = true;
 	}
 	if (!bDialogOpen)
 	{
-		$('#'+divId).block();
-		
-		$.post(GetAbsoluteUrlAppRoot()+'pages/ajax.render.php?style='+sStyle,
-		   { operation: 'ajax', filter: sSerializedFilter, extra_params: sExtraParams },
-		   function(data){
-			 $('#'+divId).empty();
-			 $('#'+divId).append(data);
-			 $('#'+divId).removeClass('loading');
-			}
-		 );
+		if (bIsDataTable)
+		{
+			oDataTable.datatable('DoRefresh');
+		}
+		else
+		{
+			$('#'+divId).block();
+			
+			$.post(GetAbsoluteUrlAppRoot()+'pages/ajax.render.php?style='+sStyle,
+			   { operation: 'ajax', filter: sSerializedFilter, extra_params: sExtraParams },
+			   function(data){
+				 $('#'+divId).empty();
+				 $('#'+divId).append(data);
+				 $('#'+divId).removeClass('loading');
+				}
+			 );
+		}
 	}
 }