diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 602033051b3..049f7f48c03 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -77,7 +77,6 @@ openerp.web.FormView = openerp.web.View.extend({ this.rendering_engine.render_to($dest); this.$sidebar = this.options.$sidebar || this.$element.find('.oe_form_sidebar'); - this.$pager = this.options.$pager || this.$element.find('.oe_form_pager'); var buttons_html = QWeb.render("FormView.buttons", {'widget':self}); this.$buttons = $(_.str.isBlank(buttons_html) ? '
' : buttons_html); @@ -94,8 +93,14 @@ openerp.web.FormView = openerp.web.View.extend({ .on('click','button.oe_form_button_duplicate',this.on_button_duplicate) .on('click','button.oe_form_button_delete',this.on_button_delete); - this.$pager.html(QWeb.render("FormView.pager", {'widget':self})); - this.$pager.on('click','.oe_form_pager a[data-pager-action]',function(event) { + var pager_html = QWeb.render("FormView.pager", {'widget':self}); + this.$pager = $(_.str.isBlank(pager_html) ? '
' : pager_html); + if (this.options.$pager) { + this.$buttons.appendTo(this.options.$pager); + } else { + this.$element.find('.oe_form_pager').replaceWith(this.$buttons); + } + this.$pager.on('click','a[data-pager-action]',function() { var action = $(this).data('pager-action'); self.on_pager_action(action); }); @@ -139,7 +144,7 @@ openerp.web.FormView = openerp.web.View.extend({ this.$buttons.find('.oe_form_button_save').removeClass('oe_form_button_save_dirty'); } if (this.$pager) { - this.$pager.find('.oe_form_pager').show(); + this.$pager.show(); } this.$element.show().css('visibility', 'hidden'); this.$element.removeClass('oe_form_dirty'); @@ -167,7 +172,7 @@ openerp.web.FormView = openerp.web.View.extend({ this.$buttons.hide(); } if (this.$pager) { - this.$pager.find('.oe_form_pager').hide(); + this.$pager.hide(); } this._super(); }, @@ -248,11 +253,10 @@ openerp.web.FormView = openerp.web.View.extend({ } }, do_update_pager: function(hide_index) { - var $pager = this.$pager.find('div.oe_form_pager'); var index = hide_index ? '-' : this.dataset.index + 1; - $pager.find('button').prop('disabled', this.dataset.ids.length < 2); - $pager.find('span.oe_pager_index').html(index); - $pager.find('span.oe_pager_count').html(this.dataset.ids.length); + this.$pager.find('button').prop('disabled', this.dataset.ids.length < 2).end() + .find('span.oe_pager_index').html(index).end() + .find('span.oe_pager_count').html(this.dataset.ids.length); }, parse_on_change: function (on_change, widget) { var self = this; diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 5bcc1518d20..f137bd6c211 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -236,8 +236,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# if (this.options.$buttons) { this.$buttons.appendTo(this.options.$buttons); } else { - this.$element.find('.oe_list_buttons').replaceWith( - this.options.$buttons); + this.$element.find('.oe_list_buttons').replaceWith(this.$buttons); } this.$buttons.find('.oe_list_add') .click(this.proxy('do_add_record')) @@ -249,45 +248,57 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# } // Pager - this.$pager = this.options.$pager || this.$element.find('.oe_list_pager'); - this.$pager.html(QWeb.render("FormView.pager", {'widget':self})); - this.$pager.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.size() / 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(); - var $this = $(this); + if (!this.$pager) { + this.$pager = $(QWeb.render("ListView.pager", {'widget':self})); + if (this.options.$buttons) { + this.$pager.appendTo(this.options.$pager); + } else { + this.$element.find('.oe_list_pager').replaceWith(this.$pager); + } - var $select = $('') + .appendTo($this.empty()) + .click(function (e) {e.stopPropagation();}) + .append('' + + '' + + '' + + '' + + '') + .change(function () { + var val = parseInt($select.val(), 10); + self._limit = (isNaN(val) ? null : val); + self.page = 0; + self.reload_content(); + }) + .val(self._limit || 'NaN'); + }); + } // Sidebar if (!this.sidebar && this.options.sidebar && this.options.$sidebar) { @@ -311,12 +322,10 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# } var page = this.page + 1, - total = Math.floor(dataset.size() / this.limit()); - if (total === 0) { total = 1; } + total = Math.floor(dataset.size() / this.limit()) + 1; - this.$pager - .find('.oe_pager_index').text(page).end() - .find('.oe_pager_count').text(total).end(); + this.$pager.find('.oe-pager-state').text(isNaN(total) + ? '-' : _.str.sprintf('%d / %d', page, total)); }, /** * Sets up the listview's columns: merges view and fields data, move @@ -421,7 +430,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# this.$buttons.show(); } if (this.$pager) { - this.$pager.find('.oe_list_pager').show(); + this.$pager.show(); } }, do_hide: function () { @@ -432,7 +441,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# this.$buttons.hide(); } if (this.$pager) { - this.$pager.find('.oe_list_pager').hide(); + this.$pager.hide(); } this._super(); }, diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 1153a65852f..8131ddb4195 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -610,7 +610,7 @@
- +