diff --git a/scm-webapp/src/main/webapp/index.mustache b/scm-webapp/src/main/webapp/index.mustache
index ade05f14ba..ac61f77610 100644
--- a/scm-webapp/src/main/webapp/index.mustache
+++ b/scm-webapp/src/main/webapp/index.mustache
@@ -79,6 +79,7 @@
+
diff --git a/scm-webapp/src/main/webapp/resources/js/override/ext.grid.gridpanel.js b/scm-webapp/src/main/webapp/resources/js/override/ext.grid.gridpanel.js
index b8b7c28909..8784954eba 100644
--- a/scm-webapp/src/main/webapp/resources/js/override/ext.grid.gridpanel.js
+++ b/scm-webapp/src/main/webapp/resources/js/override/ext.grid.gridpanel.js
@@ -29,8 +29,13 @@
*
*/
+Ext.grid.GridPanel.prototype.applyStateExt = Ext.grid.GridPanel.prototype.applyState;
+Ext.grid.GridPanel.prototype.getStateExt = Ext.grid.GridPanel.prototype.getState;
+
Ext.override(Ext.grid.GridPanel,{
+ stateEvents : ['columnmove', 'columnresize', 'sortchange', 'groupchange', 'toggleGroup'],
+
addColumn: function(field, column, colIndex){
if(!column){
if(field.dataIndex){
@@ -52,6 +57,26 @@ Ext.override(Ext.grid.GridPanel,{
if(colIndex >= 0){
this.colModel.removeColumn(colIndex);
}
+ },
+
+ applyState: function(state){
+ var view = this.getView();
+ if (view && view.applyState){
+ var groups = state.groups;
+ if (groups){
+ view.applyState(groups);
+ }
+ }
+ this.applyStateExt(state);
+ },
+
+ getState: function(){
+ var state = this.getStateExt();
+ var view = this.getView();
+ if (view && view.getState){
+ state.groups = view.getState();
+ }
+ return state;
}
});
diff --git a/scm-webapp/src/main/webapp/resources/js/override/ext.grid.groupingview.js b/scm-webapp/src/main/webapp/resources/js/override/ext.grid.groupingview.js
new file mode 100644
index 0000000000..080e0d2d2f
--- /dev/null
+++ b/scm-webapp/src/main/webapp/resources/js/override/ext.grid.groupingview.js
@@ -0,0 +1,73 @@
+/* *
+ * Copyright (c) 2010, Sebastian Sdorra
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of SCM-Manager; nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * http://bitbucket.org/sdorra/scm-manager
+ *
+ */
+
+Ext.grid.GroupingView.prototype.initTemplatesExt = Ext.grid.GroupingView.prototype.initTemplates;
+Ext.grid.GroupingView.prototype.toggleGroupExt = Ext.grid.GroupingView.prototype.toggleGroup;
+
+Ext.override(Ext.grid.GroupingView,{
+
+ storedState: null,
+ idPrefix: '{grid.el.id}',
+
+ initTemplates : function(){
+ this.initTemplatesExt();
+ if (this.storedState){
+ this.state = this.storedState;
+ }
+ },
+
+ toggleGroup : function(group, expanded){
+ this.toggleGroupExt(group, expanded);
+ this.grid.fireEvent('toggleGroup', group, expanded);
+ },
+
+ getState: function(){
+ return this.state;
+ },
+
+ applyState: function(state){
+ this.storedState = state;
+ },
+
+ getPrefix: function(field){
+ var prefix;
+ if ( this.idPrefix == '{grid.id}' ){
+ prefix = this.grid.getId();
+ } else if (this.idPrefix == '{grid.el.id}') {
+ prefix = this.grid.getGridEl().id;
+ } else {
+ prefix = this.idPrefix;
+ }
+ prefix += '-gp-' + field + '-';
+ return prefix;
+ }
+
+});
\ No newline at end of file
diff --git a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.grid.js b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.grid.js
index b4ddf8ff7d..2cfbb6f9c4 100644
--- a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.grid.js
+++ b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.grid.js
@@ -200,6 +200,7 @@ Sonia.repository.Grid = Ext.extend(Sonia.rest.Grid, {
}
},
view: new Ext.grid.GroupingView({
+ idPrefix: '{grid.id}',
enableGrouping: ! state.clientConfig.disableGroupingGrid,
enableNoGroups: false,
forceFit: true,