improvements to AutoGrid
authorGalen Charlton <gmc@esilibrary.com>
Thu, 19 May 2011 16:51:00 +0000 (12:51 -0400)
committerGalen Charlton <gmc@esilibrary.com>
Wed, 25 May 2011 14:33:02 +0000 (10:33 -0400)
* Added Limit links
* Tweaked pager
* show current page #
* Do work in store and then setStore when complete.
* Tweaked the filter so applying an empty filter resets the grid contents.
* adjust circ matrix matchpoint and billing type pages to use
  improvements

Author: Bob Wicksall <bwicksall@pls-net.org>
Signed-off-by: Bob Wicksall <bwicksall@pls-net.org>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Open-ILS/web/js/dojo/openils/widget/AutoGrid.js
Open-ILS/web/js/ui/default/conify/global/config/billing_type.js
Open-ILS/web/templates/default/conify/global/config/circ_matrix_matchpoint.tt2

index ecbdf95..7ae3896 100644 (file)
@@ -44,9 +44,12 @@ if(!dojo._hasResource['openils.widget.AutoGrid']) {
                 this.inherited(arguments);
                 this.initAutoEnv();
                 this.attr('structure', this._compileStructure());
-                this.setStore(this.buildAutoStore());
+                this.store = this.buildAutoStore();
                 this.cachedQueryOpts = {};
                 this._showing_create_pane = false;
+                this.pageNum = 1;
+                this.origLimit = this.displayLimit;
+
 
                 if(this.showColumnPicker) {
                     if(!this.columnPickerPrefix) {
@@ -91,13 +94,17 @@ if(!dojo._hasResource['openils.widget.AutoGrid']) {
                         href : 'javascript:void(0);', 
                         onclick : function() { 
                             self.cachedQueryOpts.offset = self.displayOffset -= self.displayLimit;
-                            if(self.displayOffset < 0)
+                            if(self.displayOffset < 0) {
                                 self.cachedQueryOpts.offset = self.displayOffset = 0;
+                                self.pageNum = 1;
+                            } else {
+                                self.pageNum--;
+                            }
                             self.refresh();
                         }
                     });
 
-                    var forw = dojo.create('a', {
+                    this.forw = dojo.create('a', {
                         innerHTML : 'Next',  // TODO i18n
                         style : 'padding-right:6px;',
                         href : 'javascript:void(0);', 
@@ -108,8 +115,9 @@ if(!dojo._hasResource['openils.widget.AutoGrid']) {
                     });
 
                     dojo.place(this.paginator.domNode, this.domNode, 'before');
+                            self.pageNum++;
                     dojo.place(back, this.paginator.domNode);
-                    dojo.place(forw, this.paginator.domNode);
+                    dojo.place(this.forw, this.paginator.domNode);
 
                     if(this.showLoadFilter) {
                         dojo.require('openils.widget.PCrudFilterDialog');
@@ -122,7 +130,12 @@ if(!dojo._hasResource['openils.widget.AutoGrid']) {
                                     var dialog = new openils.widget.PCrudFilterDialog({fmClass:self.fmClass})
                                     dialog.onApply = function(filter) {
                                         self.resetStore();
-                                        self.loadAll(self.cachedQueryOpts, filter);
+                                        self.pageNum = 1;
+                                        self.cachedQueryOpts.offset = self.displayOffset = 0;
+                                        if (filter.toSource() != "({})") 
+                                            self.loadAll(self.cachedQueryOpts, filter)
+                                        else
+                                            self.loadAll(self.cachedQueryOpts, self.query);
                                     };
                                     dialog.startup();
                                     dialog.show();
@@ -138,6 +151,50 @@ if(!dojo._hasResource['openils.widget.AutoGrid']) {
                         style:'height:16px;width:16px;'
                     });
                     dojo.place(this.loadProgressIndicator, this.paginator.domNode);
+
+                    // Limit Selector
+                    this.limitSelect = dojo.create('div', {
+                        innerHTML : "Limit ("+self.displayLimit+"): ",  // TODO i18n
+                        style : 'padding-left:60px;display:inline;',
+                    });
+                    dojo.place(this.limitSelect, this.paginator.domNode);
+
+                    this.limit = dojo.create('a', {
+                        innerHTML : this.origLimit, 
+                        style : 'padding-right:6px;',
+                        href : 'javascript:void(0);', 
+                        onclick : function() { 
+                            self.changeLimit(1);
+                        }
+                    });
+                    dojo.place(this.limit, this.paginator.domNode);
+
+                    this.limit2 = dojo.create('a', {
+                        innerHTML : this.origLimit*2,  
+                        style : 'padding-right:6px;',
+                        href : 'javascript:void(0);', 
+                        onclick : function() { 
+                            self.changeLimit(2);
+                        }
+                    });
+                    dojo.place(this.limit2, this.paginator.domNode);
+
+                    this.limit20 = dojo.create('a', {
+                        innerHTML : this.origLimit*20,  
+                        style : 'padding-right:6px;',
+                        href : 'javascript:void(0);', 
+                        onclick : function() { 
+                            self.changeLimit(20);
+                        }
+                    });
+                    dojo.place(this.limit20, this.paginator.domNode);
+
+                    // page number
+                    this.page = dojo.create('div', {
+                        innerHTML : 'Page: 0',  // TODO i18n
+                        style : 'padding-left:60px;display:inline;',
+                    });
+                    dojo.place(this.page, this.paginator.domNode);
                 }
             },
 
@@ -560,7 +617,7 @@ if(!dojo._hasResource['openils.widget.AutoGrid']) {
             },
             
             resetStore : function() {
-                this.setStore(this.buildAutoStore());
+                this.store = this.buildAutoStore();
             },
 
             refresh : function() {
@@ -582,6 +639,13 @@ if(!dojo._hasResource['openils.widget.AutoGrid']) {
                 );
                 opts = dojo.mixin(opts, {
                     async : true,
+                        self.setStore(self.store);
+                        if (self.rowCount < self.displayLimit) 
+                            dojo.style(self.forw, 'visibility', 'hidden');
+                        else
+                            dojo.style(self.forw, 'visibility', 'visible');
+
+                        dojo.attr(self.page, "innerHTML",  "Page: "+self.pageNum);
                     streaming : true,
                     onresponse : function(r) {
                         var item = openils.Util.readResponse(r);
@@ -591,6 +655,19 @@ if(!dojo._hasResource['openils.widget.AutoGrid']) {
                         if(self.loadProgressIndicator) 
                             dojo.style(self.loadProgressIndicator, 'visibility', 'hidden');
                     }
+            },
+
+            changeLimit : function(multiplier) { 
+                var self = this;
+                self.resetStore();
+                self.cachedQueryOpts.offset = self.displayOffset = 0;
+                self.cachedQueryOpts.limit = self.displayLimit = self.origLimit*multiplier;
+                if(self.dataLoader)
+                    self.dataLoader()
+                else
+                    self.loadAll(self.cachedQueryOpts, self.cachedQuerySearch);
+                self.pageNum=1;
+                dojo.attr(self.limitSelect, "innerHTML",  "Limit ("+self.displayLimit+"): ");
                 });
 
                 this.cachedQuerySearch = search;
index de27506..a0bd9c7 100644 (file)
@@ -55,6 +55,7 @@ function buildBTGrid() {
                                      btGrid.store.newItem(cbt.toStoreItem(e));
                                  }
                                 );
+                    btGrid.setStore(btGrid.store);
                 }
             }
         }
index bd19e7e..a35282e 100644 (file)
@@ -7,7 +7,8 @@
 </div>
 <div dojoType="dijit.layout.ContentPane" layoutAlign="client">
     <table  jsId="cmGrid"
-            style="height: 600px;"
+            autoHeight='true'
+            autoWidth='true'
             dojoType="openils.widget.AutoGrid"
             fieldOrder="['id', 'active', 'grp', 'org_unit', 'copy_circ_lib', 'copy_owning_lib', 'user_home_ou', 'is_renewal', 'juvenile_flag', 'circ_modifier', 'marc_type', 'marc_form', 'marc_bib_level', 'marc_vr_format', 'ref_flag', 'usr_age_lower_bound', 'usr_age_upper_bound', 'circulate', 'duration_rule', 'renewals', 'hard_due_date', 'recurring_fine_rule', 'grace_period', 'max_fine_rule', 'available_copy_hold_ratio', 'total_copy_hold_ratio', 'script_test']"
             defaultCellWidth='"auto"'
@@ -16,6 +17,7 @@
             editStyle='pane'
             editOnEnter='true'
             showColumnPicker='true'
+            showLoadFilter='true'
             columnPickerPrefix='"conify.config.circ_matrix_matchpoint"'>
             <thead>
                 <tr>