[FIX] correct fix for the scrolling problem in graph view: the view now saves its scrolling position before redrawing itself (addon web_graph)

bzr revid: ged@openerp.com-20140422150316-m51u750732re8qib
This commit is contained in:
Gery Debongnie 2014-04-22 17:03:16 +02:00
parent 8c001acda0
commit f584b030bc
3 changed files with 21 additions and 16 deletions

View File

@ -29,8 +29,8 @@ my.Facet = B.Model.extend({
B.Model.prototype.initialize.apply(this, arguments);
this.values = new my.FacetValues(values || []);
this.values.on('add remove change reset', function () {
this.trigger('change', this);
this.values.on('add remove change reset', function (_, options) {
this.trigger('change', this, options);
}, this);
},
get: function (key) {
@ -399,7 +399,8 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
this.setup_global_completion();
this.query = new my.SearchQuery()
.on('add change reset remove', this.proxy('do_search'))
.on('add change reset remove', this.proxy('renderFacets'));
.on('change', this.proxy('renderChangedFacets'))
.on('add reset remove', this.proxy('renderFacets'));
if (this.options.hidden) {
this.$el.hide();
@ -578,14 +579,20 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
.trigger('blur');
},
/**
*
* @param {openerp.web.search.SearchQuery | openerp.web.search.Facet} _1
* @param {openerp.web.search.Facet} [_2]
* Call the renderFacets method with the correct arguments.
* This is due to the fact that change events are called with two arguments
* (model, options) while add, reset and remove events are called with
* (collection, model, options) as arguments
*/
renderChangedFacets: function (model, options) {
this.renderFacets(undefined, model, options);
},
/**
* @param {openerp.web.search.SearchQuery | undefined} Undefined if event is change
* @param {openerp.web.search.Facet}
* @param {Object} [options]
*/
renderFacets: function (_1, _2, options) {
// _1: model if event=change, otherwise collection
// _2: undefined if event=change, otherwise model
renderFacets: function (collection, model, options) {
var self = this;
var started = [];
var $e = this.$('div.oe_searchview_facets');
@ -610,6 +617,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
});
$.when.apply(null, started).then(function () {
if (options && options.focus_input === false) return;
var input_to_focus;
// options.at: facet inserted at given index, focus next input
// otherwise just focus last input
@ -618,7 +626,6 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
} else {
input_to_focus = self.input_subviews[(options.at + 1) * 2];
}
input_to_focus.$el.focus();
});
},

View File

@ -167,7 +167,7 @@ instance.web_graph.GraphView = instance.web.View.extend({
row_search_facet = query.findWhere({category:'GroupBy'});
if (row_search_facet) {
row_search_facet.values.reset(row_facet.values);
row_search_facet.values.reset(row_facet.values, {focus_input:false});
} else {
if (row_groupby.length) {
query.add(row_facet);
@ -181,7 +181,7 @@ instance.web_graph.GraphView = instance.web.View.extend({
col_search_facet = query.findWhere({category:'ColGroupBy'});
if (col_search_facet) {
col_search_facet.values.reset(col_facet.values);
col_search_facet.values.reset(col_facet.values, {focus_input:false});
} else {
if (col_groupby.length) {
query.add(col_facet);

View File

@ -26,8 +26,6 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
this.graph_view = options.graph_view || null;
this.pivot_options = options;
this.title = options.title || 'Data';
this.scroll = 0;
},
start: function() {
@ -356,7 +354,6 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
groupby = groupby || header.root.groupby[header.path.length];
this.pivot.expand(header_id, groupby).then(function () {
self.scroll = $(window).scrollTop();
if (update_groupby && self.graph_view) {
self.graph_view.register_groupby(self.pivot.rows.groupby, self.pivot.cols.groupby);
}
@ -501,6 +498,7 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
// Main display method
// ----------------------------------------------------------------------
display_data: function () {
var scroll = $(window).scrollTop();
this.$('.graph_main_content svg').remove();
this.$('.graph_main_content div').remove();
this.table.empty();
@ -515,7 +513,7 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
} else {
if (this.mode === 'pivot') {
this.draw_table();
$(window).scrollTop(this.scroll);
$(window).scrollTop(scroll);
} else {
this.$('.graph_main_content').append($('<div><svg>'));
this.svg = this.$('.graph_main_content svg')[0];