summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/view_tree.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js/view_tree.js')
-rw-r--r--addons/web/static/src/js/view_tree.js270
1 files changed, 0 insertions, 270 deletions
diff --git a/addons/web/static/src/js/view_tree.js b/addons/web/static/src/js/view_tree.js
deleted file mode 100644
index 45cc183511a..00000000000
--- a/addons/web/static/src/js/view_tree.js
+++ /dev/null
@@ -1,270 +0,0 @@
-/*---------------------------------------------------------
- * OpenERP web library
- *---------------------------------------------------------*/
-
-(function() {
-
-var instance = openerp;
-openerp.web.view_tree = {};
-var QWeb = instance.web.qweb,
- _lt = instance.web._lt;
-
-instance.web.views.add('tree', 'instance.web.TreeView');
-instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeView# */{
- display_name: _lt('Tree'),
- view_type: 'tree',
- /**
- * Indicates that this view is not searchable, and thus that no search
- * view should be displayed (if there is one active).
- */
- searchable : false,
- /**
- * Genuine tree view (the one displayed as a tree, not the list)
- *
- * @constructs instance.web.TreeView
- * @extends instance.web.View
- *
- * @param parent
- * @param dataset
- * @param view_id
- * @param options
- */
- init: function(parent, dataset, view_id, options) {
- this._super(parent);
- this.dataset = dataset;
- this.model = dataset.model;
- this.view_id = view_id;
-
- this.records = {};
-
- this.options = _.extend({}, this.defaults, options || {});
-
- _.bindAll(this, 'color_for');
- },
-
- view_loading: function(r) {
- return this.load_tree(r);
- },
-
- /**
- * Returns the list of fields needed to correctly read objects.
- *
- * Gathers the names of all fields in fields_view_get, and adds the
- * field_parent (children_field in the tree view) if it's not already one
- * of the fields to fetch
- *
- * @returns {Array} an array of fields which can be provided to DataSet.read_slice and others
- */
- fields_list: function () {
- var fields = _.keys(this.fields);
- if (!_(fields).contains(this.children_field)) {
- fields.push(this.children_field);
- }
- return fields;
- },
- load_tree: function (fields_view) {
- var self = this;
- var has_toolbar = !!fields_view.arch.attrs.toolbar;
- // field name in OpenERP is kinda stupid: this is the name of the field
- // holding the ids to the children of the current node, why call it
- // field_parent?
- this.children_field = fields_view['field_parent'];
- this.fields_view = fields_view;
- _(this.fields_view.arch.children).each(function (field) {
- if (field.attrs.modifiers) {
- field.attrs.modifiers = JSON.parse(field.attrs.modifiers);
- }
- });
- this.fields = fields_view.fields;
- this.hook_row_click();
- this.$el.html(QWeb.render('TreeView', {
- 'title': this.fields_view.arch.attrs.string,
- 'fields_view': this.fields_view.arch.children,
- 'fields': this.fields,
- 'toolbar': has_toolbar
- }));
- this.$el.addClass(this.fields_view.arch.attrs['class']);
-
- this.dataset.read_slice(this.fields_list()).done(function(records) {
- if (!has_toolbar) {
- // WARNING: will do a second read on the same ids, but only on
- // first load so not very important
- self.getdata(null, _(records).pluck('id'));
- return;
- }
-
- var $select = self.$el.find('select')
- .change(function () {
- var $option = $(this).find(':selected');
- self.getdata($option.val(), $option.data('children'));
- });
- _(records).each(function (record) {
- self.records[record.id] = record;
- $('<option>')
- .val(record.id)
- .text(record.name)
- .data('children', record[self.children_field])
- .appendTo($select);
- });
-
- if (!_.isEmpty(records)) {
- $select.change();
- }
- });
-
- // TODO store open nodes in url ?...
- this.do_push_state({});
-
- if (!this.fields_view.arch.attrs.colors) {
- return;
- }
- this.colors = _(this.fields_view.arch.attrs.colors.split(';')).chain()
- .compact()
- .map(function(color_pair) {
- var pair = color_pair.split(':'),
- color = pair[0],
- expr = pair[1];
- return [color, py.parse(py.tokenize(expr)), expr];
- }).value();
- },
- /**
- * Returns the color for the provided record in the current view (from the
- * ``@colors`` attribute)
- *
- * @param {Object} record record for the current row
- * @returns {String} CSS color declaration
- */
- color_for: function (record) {
- if (!this.colors) { return ''; }
- var context = _.extend({}, record, {
- uid: this.session.uid,
- current_date: moment().format('YYYY-MM-DD')
- // TODO: time, datetime, relativedelta
- });
- for(var i=0, len=this.colors.length; i<len; ++i) {
- var pair = this.colors[i],
- color = pair[0],
- expression = pair[1];
- if (py.PY_isTrue(py.evaluate(expression, context))) {
- return 'color: ' + color + ';';
- }
- // TODO: handle evaluation errors
- }
- return '';
- },
- /**
- * Sets up opening a row
- */
- hook_row_click: function () {
- var self = this;
- this.$el.delegate('.treeview-td span, .treeview-tr span', 'click', function (e) {
- e.stopImmediatePropagation();
- self.activate($(this).closest('tr').data('id'));
- });
-
- this.$el.delegate('.treeview-tr', 'click', function () {
- var is_loaded = 0,
- $this = $(this),
- record_id = $this.data('id'),
- row_parent_id = $this.data('row-parent-id'),
- record = self.records[record_id],
- children_ids = record[self.children_field];
-
- _(children_ids).each(function(childid) {
- if (self.$el.find('[id=treerow_' + childid + '][data-row-parent-id='+ record_id +']').length ) {
- if (self.$el.find('[id=treerow_' + childid + '][data-row-parent-id='+ record_id +']').is(':hidden')) {
- is_loaded = -1;
- } else {
- is_loaded++;
- }
- }
- });
- if (is_loaded === 0) {
- if (!$this.parent().hasClass('oe_open')) {
- self.getdata(record_id, children_ids);
- }
- } else {
- self.showcontent($this, record_id, is_loaded < 0);
- }
- });
- },
- // get child data of selected value
- getdata: function (id, children_ids) {
- var self = this;
-
- self.dataset.read_ids(children_ids, this.fields_list()).done(function(records) {
- _(records).each(function (record) {
- self.records[record.id] = record;
- });
- var $curr_node = self.$el.find('#treerow_' + id);
- var children_rows = QWeb.render('TreeView.rows', {
- 'records': records,
- 'children_field': self.children_field,
- 'fields_view': self.fields_view.arch.children,
- 'fields': self.fields,
- 'level': $curr_node.data('level') || 0,
- 'render': instance.web.format_value,
- 'color_for': self.color_for,
- 'row_parent_id': id
- });
- if ($curr_node.length) {
- $curr_node.addClass('oe_open');
- $curr_node.after(children_rows);
- } else {
- self.$el.find('tbody').html(children_rows);
- }
- });
- },
-
- // Get details in listview
- activate: function(id) {
- var self = this;
- var local_context = {
- active_model: self.dataset.model,
- active_id: id,
- active_ids: [id]
- };
- var ctx = instance.web.pyeval.eval(
- 'context', new instance.web.CompoundContext(
- this.dataset.get_context(), local_context));
- return this.rpc('/web/treeview/action', {
- id: id,
- model: this.dataset.model,
- context: ctx
- }).then(function (actions) {
- if (!actions.length) { return; }
- var action = actions[0][2];
- var c = new instance.web.CompoundContext(local_context).set_eval_context(ctx);
- if (action.context) {
- c.add(action.context);
- }
- action.context = c;
- return self.do_action(action);
- });
- },
-
- // show & hide the contents
- showcontent: function (curnode,record_id, show) {
- curnode.parent('tr').toggleClass('oe_open', show);
- _(this.records[record_id][this.children_field]).each(function (child_id) {
- var $child_row = this.$el.find('[id=treerow_' + child_id + '][data-row-parent-id='+ curnode.data('id') +']');
- if ($child_row.hasClass('oe_open')) {
- $child_row.toggleClass('oe_open',show);
- this.showcontent($child_row, child_id, false);
- }
- $child_row.toggle(show);
- }, this);
- },
-
- do_show: function () {
- this.$el.show();
- this._super();
- },
-
- do_hide: function () {
- this.$el.hide();
- this.hidden = true;
- this._super();
- }
-});
-})();