[ADD] list-level pagination on list views

bzr revid: xmo@openerp.com-20110623124641-kzvkmx7fxe0xwn6w
This commit is contained in:
Xavier Morel 2011-06-23 14:46:41 +02:00
parent d530b966c9
commit 52a6119cb4
2 changed files with 63 additions and 13 deletions

View File

@ -167,8 +167,54 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
self.reload_view();
});
this.$element.find('.oe-list-pager')
.delegate('button', 'click', function () {
var $this = $(this);
switch ($this.data('pager-action')) {
case 'first':
self.page = 0; break;
case 'last':
self.page = Math.floor(
self.dataset.ids.length / self.limit());
break;
case 'next':
self.page += 1; break;
case 'previous':
self.page -= 1; break;
}
self.reload_content();
}).find('.oe-pager-state')
.click(function (e) {
e.stopPropagation();
// TODO: pagination setup thingie
});
this.view_manager.sidebar.set_toolbar(data.fields_view.toolbar);
},
/**
* Configures the ListView pager based on the provided dataset's information
*
* Horrifying side-effect: sets the dataset's data on this.dataset?
*
* @param {openerp.base.DataSet} dataset
*/
configure_pager: function (dataset) {
this.dataset.ids = dataset.ids;
var limit = this.limit(),
total = dataset.ids.length,
first = (this.page * limit),
last = ((total - first) < limit) ? total : first + limit;
this.$element.find('span.oe-pager-state').text(_.sprintf(
"[%d to %d] of %d", first + 1, last, total));
this.$element
.find('button[data-pager-action=first], button[data-pager-action=previous]')
.attr('disabled', this.page === 0)
.end()
.find('button[data-pager-action=last], button[data-pager-action=next]')
.attr('disabled', last === total);
},
/**
* Sets up the listview's columns: merges view and fields data, move
* grouped-by columns to the front of the columns list and make them all
@ -282,10 +328,8 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
*/
reload_view: function (grouped) {
var self = this;
this.dataset.offset = 0;
this.dataset.limit = false;
var callback = function (field_view_get) {
self.on_loaded(field_view_get, grouped);
self.on_loaded(field_view_get, grouped);
};
if (this.embedded_view) {
return $.Deferred().then(callback).resolve({fields_view: this.embedded_view});
@ -882,12 +926,15 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr
});
this.bind_child_events(list);
var limit = this.view.limit(),
d = new $.Deferred();
var view = this.view,
limit = view.limit(),
d = new $.Deferred();
dataset.read_slice(
_.filter(_.pluck(this.columns, 'name'), _.identity),
this.view.page * limit, limit,
view.page * limit, limit,
function (records) {
view.configure_pager(dataset);
var form_records = _(records).map(
$.proxy(list, 'transform_record'));

View File

@ -268,16 +268,19 @@
<th t-att-colspan="columns_count - actions_span"
class="oe-list-pager">
<t t-if="flags.pager !== false">
<button type="button" data-pager-action="first">First</button>
<button type="button" data-pager-action="previous"
<button type="button" disabled="disabled"
data-pager-action="first">First</button>
<button type="button" disabled="disabled"
data-pager-action="previous"
>&lt;&lt;</button>
<span class="oe-pager-first">1</span>
to <span class="oe-pager-last">1</span>
of <span class="oe-pager-total">1</span>
<span class="oe-pager-state">
</span>
<button type="button" data-pager-action="next">&gt;&gt;</button>
<button type="button" data-pager-action="last">Last</button>
<button type="button" disabled="disabled"
data-pager-action="next">&gt;&gt;</button>
<button type="button" disabled="disabled"
data-pager-action="last">Last</button>
</t>
</th>
</tr>