summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/view_list.js
diff options
context:
space:
mode:
authorVidhin Mehta (OpenERP) <vme@tinyerp.com>2011-10-25 16:55:48 +0530
committerVidhin Mehta (OpenERP) <vme@tinyerp.com>2011-10-25 16:55:48 +0530
commitc17c8a0bd10d5c9cedd6c34bc0110c02ecdcd6b2 (patch)
treeb4543c28941307f8ebdd60191f2eb2494139aad2 /addons/web/static/src/js/view_list.js
parent1ee677eadbfa3e4c7d9836c48bea735f41f6a5a7 (diff)
parent55ad46220db83d2f5d6dd86d243d0d9843b74511 (diff)
[IMP]merge with main branch of view editor.
bzr revid: vme@tinyerp.com-20111025112548-eakr7fio6diovn2m
Diffstat (limited to 'addons/web/static/src/js/view_list.js')
-rw-r--r--addons/web/static/src/js/view_list.js72
1 files changed, 60 insertions, 12 deletions
diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js
index 0ea1f7ec944..d09ec1d3035 100644
--- a/addons/web/static/src/js/view_list.js
+++ b/addons/web/static/src/js/view_list.js
@@ -1,4 +1,5 @@
openerp.web.list = function (openerp) {
+var _t = openerp.web._t;
var QWeb = openerp.web.qweb;
openerp.web.views.add('list', 'openerp.web.ListView');
openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# */ {
@@ -10,7 +11,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
// whether the column headers should be displayed
'header': true,
// display addition button, with that label
- 'addable': "New",
+ 'addable': _t("New"),
// whether the list view can be sorted, note that once a view has been
// sorted it can not be reordered anymore
'sortable': true,
@@ -252,7 +253,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
'<option value="100">100</option>' +
'<option value="200">200</option>' +
'<option value="500">500</option>' +
- '<option value="NaN">Unlimited</option>')
+ '<option value="NaN">' + _t("Unlimited") + '</option>')
.change(function () {
var val = parseInt($select.val(), 10);
self._limit = (isNaN(val) ? null : val);
@@ -463,7 +464,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
* @param {Array} ids the ids of the records to delete
*/
do_delete: function (ids) {
- if (!ids.length) {
+ if (!(ids.length && confirm(_t("Are you sure to remove those records ?")))) {
return;
}
var self = this;
@@ -767,24 +768,71 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis
$row = $target.closest('tr'),
record_id = self.row_id($row);
- $(self).trigger('action', [field, record_id, function () {
+ // note: $.data converts data to number if it's composed only
+ // of digits, nice when storing actual numbers, not nice when
+ // storing strings composed only of digits. Force the action
+ // name to be a string
+ $(self).trigger('action', [field.toString(), record_id, function () {
return self.reload_record(self.records.get(record_id));
}]);
})
.delegate('tr', 'click', function (e) {
e.stopPropagation();
- self.dataset.index = self.records.indexOf(
- self.records.get(
- self.row_id(e.currentTarget)));
- self.row_clicked(e);
+ var row_id = self.row_id(e.currentTarget);
+ if (row_id !== undefined) {
+ if (!self.dataset.select_id(row_id)) {
+ throw "Could not find id in dataset"
+ }
+ self.row_clicked(e);
+ }
});
},
row_clicked: function () {
$(this).trigger(
'row_link',
- [this.records.at(this.dataset.index).get('id'),
+ [this.dataset.ids[this.dataset.index],
this.dataset]);
},
+ render_cell: function (record, column) {
+ var value;
+ if(column.type === 'reference') {
+ value = record.get(column.id);
+ var ref_match;
+ // Ensure that value is in a reference "shape", otherwise we're
+ // going to loop on performing name_get after we've resolved (and
+ // set) a human-readable version. m2o does not have this issue
+ // because the non-human-readable is just a number, where the
+ // human-readable version is a pair
+ if (value && (ref_match = /([\w\.]+),(\d+)/.exec(value))) {
+ // reference values are in the shape "$model,$id" (as a
+ // string), we need to split and name_get this pair in order
+ // to get a correctly displayable value in the field
+ var model = ref_match[1],
+ id = parseInt(ref_match[2], 10);
+ new openerp.web.DataSet(this.view, model).name_get([id], function(names) {
+ if (!names.length) { return; }
+ record.set(column.id, names[0][1]);
+ });
+ }
+ } else if (column.type === 'many2one') {
+ value = record.get(column.id);
+ // m2o values are usually name_get formatted, [Number, String]
+ // pairs, but in some cases only the id is provided. In these
+ // cases, we need to perform a name_get call to fetch the actual
+ // displayable value
+ if (typeof value === 'number' || value instanceof Number) {
+ // fetch the name, set it on the record (in the right field)
+ // and let the various registered events handle refreshing the
+ // row
+ new openerp.web.DataSet(this.view, column.relation)
+ .name_get([value], function (names) {
+ if (!names.length) { return; }
+ record.set(column.id, names[0]);
+ });
+ }
+ }
+ return openerp.web.format_cell(record.toForm().data, column);
+ },
render: function () {
if (this.$current) {
this.$current.remove();
@@ -792,7 +840,7 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis
this.$current = this.$_element.clone(true);
this.$current.empty().append(
QWeb.render('ListView.rows', _.extend({
- render_cell: openerp.web.format_cell}, this)));
+ render_cell: $.proxy(this, 'render_cell')}, this)));
this.pad_table_to(5);
},
pad_table_to: function (count) {
@@ -900,7 +948,7 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis
record: record,
row_parity: (index % 2 === 0) ? 'even' : 'odd',
view: this.view,
- render_cell: openerp.web.format_cell
+ render_cell: $.proxy(this, 'render_cell')
});
},
/**
@@ -1075,7 +1123,7 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L
var group_column = _(self.columns).detect(function (column) {
return column.id === group.grouped_on; });
$group_column.html(openerp.web.format_cell(
- row_data, group_column, "Undefined"
+ row_data, group_column, _t("Undefined")
));
if (group.openable) {
// Make openable if not terminal group & group_by_no_leaf