From 4402288f6a308bcf576c068bf93a04acbdd551b8 Mon Sep 17 00:00:00 2001 From: erickson Date: Thu, 13 Aug 2009 21:11:53 +0000 Subject: [PATCH] backporting 13830:13834. initial pagination support. when enabled, back/prev links appear in a small nav pane just above the grid, added support for limit/offset to pcrud search and retrieveall calls, turn on pagination in the provider list page, fixed some bugs in creating new picklists by name git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_6@13835 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/web/js/dojo/openils/PermaCrud.js | 4 ++ Open-ILS/web/js/dojo/openils/widget/AutoGrid.js | 55 +++++++++++++++++++++- .../web/js/ui/default/acq/picklist/view_list.js | 6 ++- .../default/conify/global/acq/provider.tt2 | 1 + 4 files changed, 63 insertions(+), 3 deletions(-) diff --git a/Open-ILS/web/js/dojo/openils/PermaCrud.js b/Open-ILS/web/js/dojo/openils/PermaCrud.js index 5e4f49be4f..0d5ab77b48 100644 --- a/Open-ILS/web/js/dojo/openils/PermaCrud.js +++ b/Open-ILS/web/js/dojo/openils/PermaCrud.js @@ -109,6 +109,8 @@ if(!dojo._hasResource["openils.PermaCrud"]) { var order_by = {}; if (opts.order_by) order_by.order_by = opts.order_by; if (opts.select) order_by.select = opts.select; + if (opts.limit) order_by.limit = opts.limit; + if (opts.offset) order_by.offset = opts.offset; var method = 'open-ils.pcrud.search.' + fm_class; if(!opts.streaming) method += '.atomic'; @@ -153,6 +155,8 @@ if(!dojo._hasResource["openils.PermaCrud"]) { var order_by = {}; if (opts.order_by) order_by.order_by = opts.order_by; if (opts.select) order_by.select = opts.select; + if (opts.limit) order_by.limit = opts.limit; + if (opts.offset) order_by.offset = opts.offset; var method = 'open-ils.pcrud.search.' + fm_class; if(!opts.streaming) method += '.atomic'; diff --git a/Open-ILS/web/js/dojo/openils/widget/AutoGrid.js b/Open-ILS/web/js/dojo/openils/widget/AutoGrid.js index 9666dc89d3..3e845056ba 100644 --- a/Open-ILS/web/js/dojo/openils/widget/AutoGrid.js +++ b/Open-ILS/web/js/dojo/openils/widget/AutoGrid.js @@ -1,6 +1,7 @@ if(!dojo._hasResource['openils.widget.AutoGrid']) { dojo.provide('openils.widget.AutoGrid'); dojo.require('dojox.grid.DataGrid'); + dojo.require('dijit.layout.ContentPane'); dojo.require('openils.widget.AutoWidget'); dojo.require('openils.widget.AutoFieldWidget'); dojo.require('openils.widget.EditPane'); @@ -22,6 +23,9 @@ if(!dojo._hasResource['openils.widget.AutoGrid']) { selectorWidth : '1.5', showColumnPicker : false, columnPickerPrefix : null, + displayLimit : 15, + displayOffset : 0, + showPaginator : false, /* by default, don't show auto-generated (sequence) fields */ showSequenceFields : false, @@ -65,6 +69,43 @@ if(!dojo._hasResource['openils.widget.AutoGrid']) { } ); } + + if(this.showPaginator) { + var self = this; + this.paginator = new dijit.layout.ContentPane(); + + + var back = dojo.create('a', { + innerHTML : 'Back', + style : 'padding-right:6px;', + href : 'javascript:void(0);', + onclick : function() { + self.resetStore(); + self.cachedQueryOpts.offset = self.displayOffset -= self.displayLimit; + self.loadAll(self.cachedQueryOpts, self.cachedQuerySearch); + } + }); + + var forw = dojo.create('a', { + innerHTML : 'Next', + style : 'padding-right:6px;', + href : 'javascript:void(0);', + onclick : function() { + self.resetStore(); + self.cachedQueryOpts.offset = self.displayOffset += self.displayLimit; + self.loadAll(self.cachedQueryOpts, self.cachedQuerySearch); + } + }); + + dojo.place(this.paginator.domNode, this.domNode, 'before'); + dojo.place(back, this.paginator.domNode); + dojo.place(forw, this.paginator.domNode); + this.loadProgressIndicator = dojo.create('img', { + src:'/opac/images/progressbar_green.gif', + style:'height:16px;width:16px;' + }); + dojo.place(this.loadProgressIndicator, this.paginator.domNode); + } }, /* Don't allow sorting on the selector column */ @@ -439,16 +480,28 @@ if(!dojo._hasResource['openils.widget.AutoGrid']) { loadAll : function(opts, search) { dojo.require('openils.PermaCrud'); - if(!opts) opts = {}; + if(this.loadProgressIndicator) + dojo.style(this.loadProgressIndicator, 'visibility', 'visible'); var self = this; + opts = dojo.mixin( + {limit : this.displayLimit, offset : this.displayOffset}, + opts || {} + ); opts = dojo.mixin(opts, { async : true, streaming : true, onresponse : function(r) { var item = openils.Util.readResponse(r); self.store.newItem(item.toStoreItem()); + }, + oncomplete : function() { + if(self.loadProgressIndicator) + dojo.style(self.loadProgressIndicator, 'visibility', 'hidden'); } }); + + this.cachedQuerySearch = search; + this.cachedQueryOpts = opts; if(search) new openils.PermaCrud().search(this.fmClass, search, opts); else diff --git a/Open-ILS/web/js/ui/default/acq/picklist/view_list.js b/Open-ILS/web/js/ui/default/acq/picklist/view_list.js index 8e7ba88dc4..740f2334d6 100644 --- a/Open-ILS/web/js/ui/default/acq/picklist/view_list.js +++ b/Open-ILS/web/js/ui/default/acq/picklist/view_list.js @@ -53,11 +53,13 @@ function createPL(fields) { ['open-ils.acq', 'open-ils.acq.picklist.retrieve'], { async: true, params: [openils.User.authtoken, plId, - {flesh_lineitem_count:1, flesh_username:1}], + {flesh_lineitem_count:1, flesh_owner:1}], oncomplete: function(r) { - if(pl = openils.Util.readResponse(r)) + if(pl = openils.Util.readResponse(r)) { + plCache[pl.id()] = pl; plListGrid.store.newItem(acqpl.toStoreData([pl]).items[0]); + } } } ); diff --git a/Open-ILS/web/templates/default/conify/global/acq/provider.tt2 b/Open-ILS/web/templates/default/conify/global/acq/provider.tt2 index da429196af..b5892eb04b 100644 --- a/Open-ILS/web/templates/default/conify/global/acq/provider.tt2 +++ b/Open-ILS/web/templates/default/conify/global/acq/provider.tt2 @@ -78,6 +78,7 @@ function formatName(value) { defaultCellWidth='"auto"' autoHeight='true' fmClass='acqpro' + showPaginator='true' editOnEnter='true'> -- 2.11.0