Skip to content

Commit

Permalink
[MERGE] this commit contains a fix for a crash when the graph view do…
Browse files Browse the repository at this point in the history
…es not have any data (wrong check for 0 data) and a quite good optimization of the javascript code in graph view when loading large tables. (addon graph view)

bzr revid: ged@openerp.com-20140410142419-vphlbb2diw21jih3
  • Loading branch information
Gery Debongnie committed Apr 10, 2014
2 parents d67e631 + e52841a commit 60f74ff
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 11 deletions.
17 changes: 15 additions & 2 deletions addons/web_graph/static/src/js/graph_widget.js
Original file line number Diff line number Diff line change
Expand Up @@ -453,12 +453,25 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
build_rows: function (raw) {
var self = this,
pivot = this.pivot,
m, cell;
m, i, cell;

return _.map(pivot.rows.headers, function (row) {
var cells = [];
var pivot_cells = [];
for (i = 0; i < pivot.cells.length; i++) {
if (pivot.cells[i].x == row.id || pivot.cells[i].y == row.id) {
pivot_cells.push(pivot.cells[i]);
}
}
_.each(pivot.get_cols_leaves(), function (col) {
var values = pivot.get_values(row.id,col.id);
var values;
for (i = 0; i < pivot_cells.length; i++) {
if (pivot_cells[i].x == col.id || pivot_cells[i].y == col.id) {
values = pivot_cells[i].values;
break;
}
}
if (!values) { values = new Array(pivot.measures.length);}
for (m = 0; m < pivot.measures.length; m++) {
cells.push(self.make_cell(row,col,values[m], m, raw));
}
Expand Down
35 changes: 26 additions & 9 deletions addons/web_graph/static/src/js/pivot_table.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,15 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({
},

get_values: function (id1, id2, default_values) {
var cell = _.findWhere(this.cells, {x: Math.min(id1, id2), y: Math.max(id1, id2)});
return (cell !== undefined) ?
cell.values :
(default_values || new Array(this.measures.length));
var cells = this.cells,
x = Math.min(id1, id2),
y = Math.max(id1, id2);
for (var i = 0; i < cells.length; i++) {
if (cells[i].x == x && cells[i].y == y) {
return cells[i].values;
}
}
return (default_values || new Array(this.measures.length));
},

// ----------------------------------------------------------------------
Expand Down Expand Up @@ -248,7 +253,7 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({
var self = this;
return this.perform_requests().then (function () {
var data = Array.prototype.slice.call(arguments);
self.no_data = !data[0][0].attributes.length;
self.no_data = !data[0].length;
if (self.no_data) {
return;
}
Expand Down Expand Up @@ -276,7 +281,7 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({
var row_value = (prefix || []).concat(data_pt.attributes.value.slice(0,index));
var col_value = data_pt.attributes.value.slice(index);

if (expand && !_.find(col_headers, function (hdr) {return _.isEqual(col_value, hdr.path);})) {
if (expand && !_.find(col_headers, function (hdr) {return self.isEqual(col_value, hdr.path);})) {
return;
}
var row = self.find_or_create_header(row_headers, row_value, data_pt);
Expand Down Expand Up @@ -306,8 +311,9 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({
},

find_or_create_header: function (headers, path, data_pt) {
var self = this;
var hdr = _.find(headers, function (header) {
return _.isEqual(path, header.path);
return self.isEqual(path, header.path);
});
if (hdr) {
return hdr;
Expand All @@ -323,7 +329,7 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({
title: _t(_.last(path))
});
var parent = _.find(headers, function (header) {
return _.isEqual(header.path, _.initial(path, 1));
return self.isEqual(header.path, _.initial(path, 1));
});

var previous = parent.children.length ? _.last(parent.children) : parent;
Expand Down Expand Up @@ -355,10 +361,11 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({

// set the 'expanded' status of new_headers more or less like root.headers, with root as root
set_headers: function(new_headers, root) {
var self = this;
if (root.headers) {
_.each(root.headers, function (header) {
var corresponding_header = _.find(new_headers, function (h) {
return _.isEqual(h.path, header.path);
return self.isEqual(h.path, header.path);
});
if (corresponding_header && header.expanded) {
corresponding_header.expanded = true;
Expand Down Expand Up @@ -426,6 +433,16 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({
return field.split(':')[0];
},

isEqual: function (path1, path2) {
if (path1.length !== path2.length) { return false; }
for (var i = 0; i < path1.length; i++) {
if (path1[i] !== path2[i]) {
return false;
}
}
return true;
},

});

})();
Expand Down

0 comments on commit 60f74ff

Please sign in to comment.