From 673a0683e825f0e257b831e94d464deaee011de4 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 18:07:54 +0200 Subject: [PATCH 01/12] [IMP] CalendarView: Fitler events using sidebar 'Responsibles' option bzr revid: fme@openerp.com-20110811160754-jfexopgrrqnfg9df --- .../base_calendar/static/src/js/calendar.js | 102 ++++++++++-------- .../static/src/xml/base_calendar.xml | 6 +- 2 files changed, 63 insertions(+), 45 deletions(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index 8107f88fb2c..9204695b663 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -17,6 +17,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ this.context = this.dataset.context || {}; this.has_been_loaded = $.Deferred(); this.creating_event_id = null; + this.dataset_events = []; if (this.options.action_views_ids.form) { this.form_dialog = new openerp.base_calendar.CalendarFormDialog(this, {}, this.options.action_views_ids.form, dataset); this.form_dialog.start(); @@ -130,25 +131,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ reload_event: function(id) { this.dataset.read_ids([id], _.keys(this.fields), this.on_events_loaded); }, - load_scheduler: function() { - var self = this; - this.dataset.read_slice({ - fields: _.keys(self.fields_view.fields) - }, function(events) { - if (self.session.locale_code) { - // TODO: replace $LAB - $LAB.setOptions({AlwaysPreserveOrder: true}).script([ - '/base_calendar/static/lib/dhtmlxScheduler/sources/locale_' + self.session.locale_code + '.js', - '/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_' + self.session.locale_code + '.js' - ]).wait(function() { - self.on_events_loaded(events); - }); - } else { - self.on_events_loaded(events); - } - }); - }, - on_events_loaded: function(events) { + on_events_loaded: function(events, fn_filter, no_filter_reload) { var self = this; //To parse Events we have to convert date Format @@ -162,32 +145,41 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ break; } - if (this.fields[this.date_start]['type'] == 'date') { + if (this.color_field) { + var filter = evt[this.color_field]; + if (filter) { + //evt.color = '#dddddd'; + var filter_item = { + value: (typeof filter === 'object') ? filter[0] : filter, + label: (typeof filter === 'object') ? filter[1] : filter, + color: evt.color + } + if (fn_filter && !fn_filter(filter_item.value)) { + continue; + } + if (_.indexOf(sidebar_ids, filter_item.value) === -1) { + sidebar_items.push(filter_item); + sidebar_ids.push(filter_item.value); + } + } + } + + /* + * TODO: check dates of type date + * if (this.fields[this.date_start]['type'] == 'date') { evt[this.date_start] = openerp.base.parse_date(evt[this.date_start]).set({hour: 9}).toString('yyyy-MM-dd HH:mm:ss'); } if (this.date_stop && evt[this.date_stop] && this.fields[this.date_stop]['type'] == 'date') { evt[this.date_stop] = openerp.base.parse_date(evt[this.date_stop]).set({hour: 17}).toString('yyyy-MM-dd HH:mm:ss'); - } - if (this.color_field) { - var user = evt[this.color_field]; - if (user) { - if (_.indexOf(sidebar_ids, user[0]) === -1) { - sidebar_items.push({ - id: user[0], - name: user[1], - // TODO: use color table - color: '#dddddd' - }); - sidebar_ids.push(user[0]); - } - } - } + }*/ res_events.push(this.convert_event(evt)); } scheduler.parse(res_events, 'json'); this.refresh_scheduler(); this.refresh_minical(); - this.sidebar.responsible.on_events_loaded(sidebar_items); + if (!no_filter_reload) { + this.sidebar.responsible.on_events_loaded(sidebar_items); + } }, convert_event: function(evt) { var date_start = openerp.base.parse_datetime(evt[this.date_start]), @@ -213,13 +205,20 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ if (!date_stop && date_delay) { date_stop = date_start.clone().addHours(date_delay); } - return { + var r = { 'start_date': date_start.toString('yyyy-MM-dd HH:mm:ss'), 'end_date': date_stop.toString('yyyy-MM-dd HH:mm:ss'), 'text': res_text, 'id': evt.id, 'title': res_description.join() } + if (evt.color) { + r.color = evt.color; + } + if (evt.textColor) { + r.textColor = evt.textColor; + } + return r; }, do_create_event: function(event_id, event_obj) { var self = this, @@ -280,6 +279,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ }, do_search: function(domains, contexts, groupbys) { var self = this; + scheduler.clearAll(); $.when(this.has_been_loaded).then(function() { self.rpc('/base/session/eval_domain_and_context', { domains: domains, @@ -293,7 +293,11 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ fields: _.keys(self.fields), offset:0, limit: self.limit - }, self.on_events_loaded); + }, function(events) { + self.dataset_events = events; + self.on_events_loaded(events); + } + ); }); }); }, @@ -352,10 +356,25 @@ openerp.base_calendar.SidebarResponsible = openerp.base.Widget.extend({ init: function(parent, element_id, view) { this._super(parent, element_id); this.view = view; + this.$element.delegate('input:checkbox', 'change', this.on_filter_click); }, - on_events_loaded: function(users) { - this.$element.html(QWeb.render('CalendarView.sidebar.responsible', { users : users })); - // TODO: bind checkboxes reload sheduler + on_events_loaded: function(filters) { + this.$element.html(QWeb.render('CalendarView.sidebar.responsible', { filters: filters })); + }, + on_filter_click: function(e) { + var responsibles = [], + $e = $(e.target); + this.$element.find('div.oe_calendar_responsible input:checked').each(function() { + responsibles.push($(this).val()); + }); + scheduler.clearAll(); + if (responsibles.length) { + this.view.on_events_loaded(this.view.dataset_events, function(filter_value) { + return _.indexOf(responsibles, filter_value.toString()) > -1; + }, true); + } else { + this.view.on_events_loaded(this.view.dataset_events, false, true); + } } }); @@ -367,7 +386,6 @@ openerp.base_calendar.SidebarNavigator = openerp.base.Widget.extend({ on_events_loaded: function(events) { } }); - }; // DEBUG_RPC:rpc.request:('execute', 'addons-dsh-l10n_us', 1, '*', ('ir.filters', 'get_filters', u'res.partner')) diff --git a/addons/base_calendar/static/src/xml/base_calendar.xml b/addons/base_calendar/static/src/xml/base_calendar.xml index d5350ec9046..299f3ba0f3c 100644 --- a/addons/base_calendar/static/src/xml/base_calendar.xml +++ b/addons/base_calendar/static/src/xml/base_calendar.xml @@ -18,9 +18,9 @@ -
- - +
+ +
From c1401ef8f04fbabbf23089c9e222c000528979cb Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 18:19:27 +0200 Subject: [PATCH 02/12] [FIX] Fixed css problem with reauired fields bzr revid: fme@openerp.com-20110811161927-ot5p552djlb1iigw --- addons/base/static/src/css/base.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css index a629e559d4c..13294819f6b 100644 --- a/addons/base/static/src/css/base.css +++ b/addons/base/static/src/css/base.css @@ -923,7 +923,7 @@ label.error { height: 15px; } .openerp td.required input, .openerp td.required select { - background-color: #D2D2FF; + background-color: #D2D2FF !important; } .openerp td.invalid input, .openerp td.invalid select, .openerp td.invalid textarea { background-color: #F66 !important; From 9df84d52ed480d2e3ae8312e16c75197d612a473 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 18:21:04 +0200 Subject: [PATCH 03/12] [IMP] CalendarView: bind openerp form view to 'open details' icon bzr revid: fme@openerp.com-20110811162104-2pueyflxtpf7oqpf --- addons/base_calendar/static/src/js/calendar.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index 9204695b663..9640f600b55 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -112,6 +112,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ scheduler.attachEvent('onEventDeleted', this.do_delete_event); scheduler.attachEvent('onEventChanged', this.do_save_event); scheduler.attachEvent('onDblClick', this.do_edit_event); + scheduler.attachEvent('onBeforeLightbox', this.do_edit_event); this.mini_calendar = scheduler.renderCalendar({ container: this.sidebar.navigator.element_id, @@ -259,9 +260,9 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ this.dataset.index = index; this.form_dialog.form.do_show(); this.form_dialog.open(); - } else { - this.notification.warn("Edit event", "Could not find event #" + event_id); + return false; } + return true; }, get_event_data: function(event_obj) { var data = { From 4df61cba6930f14e6a54fccfea52949b875f3a7d Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 18:22:10 +0200 Subject: [PATCH 04/12] [FIX] CalendarView: extra argument type check bzr revid: fme@openerp.com-20110811162210-suf52n8k1abgu2az --- addons/base_calendar/static/src/js/calendar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index 9640f600b55..c3331ca6c06 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -155,7 +155,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ label: (typeof filter === 'object') ? filter[1] : filter, color: evt.color } - if (fn_filter && !fn_filter(filter_item.value)) { + if (typeof(fn_filter) === 'function') { continue; } if (_.indexOf(sidebar_ids, filter_item.value) === -1) { From 1ce53f9425af367f3af6182af4a0d6814afb3ff0 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 18:26:09 +0200 Subject: [PATCH 05/12] [FIX] Bug in previous revision bzr revid: fme@openerp.com-20110811162609-k112p5t0bewnaj42 --- addons/base_calendar/static/src/js/calendar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index c3331ca6c06..8cefd40193a 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -155,7 +155,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ label: (typeof filter === 'object') ? filter[1] : filter, color: evt.color } - if (typeof(fn_filter) === 'function') { + if (typeof(fn_filter) === 'function' && !fn_filter(filter_item.value)) { continue; } if (_.indexOf(sidebar_ids, filter_item.value) === -1) { From a94ac45ed761c632f4f8ecd4c6b8fdbf7549efcf Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 19:13:37 +0200 Subject: [PATCH 06/12] [IMP] CalendarView: Added colors to events bzr revid: fme@openerp.com-20110811171337-ebal9w5qwsjfbq2c --- .../base_calendar/static/src/js/calendar.js | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index 8cefd40193a..22088493e16 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -22,6 +22,10 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ this.form_dialog = new openerp.base_calendar.CalendarFormDialog(this, {}, this.options.action_views_ids.form, dataset); this.form_dialog.start(); } + this.COLOR_PALETTE = ['#f57900', '#cc0000', '#d400a8', '#75507b', '#3465a4', '#73d216', '#c17d11', '#edd400', + '#fcaf3e', '#ef2929', '#ff00c9', '#ad7fa8', '#729fcf', '#8ae234', '#e9b96e', '#fce94f', + '#ff8e00', '#ff0000', '#b0008c', '#9000ff', '#0078ff', '#00ff00', '#e6ff00', '#ffff00', + '#905000', '#9b0000', '#840067', '#510090', '#0000c9', '#009b00', '#9abe00', '#ffc900' ]; }, start: function() { this.rpc("/base_calendar/calendarview/load", {"model": this.model, "view_id": this.view_id, 'toolbar': true}, this.on_loaded); @@ -132,6 +136,10 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ reload_event: function(id) { this.dataset.read_ids([id], _.keys(this.fields), this.on_events_loaded); }, + get_color: function(index) { + index = index % this.COLOR_PALETTE.length; + return this.COLOR_PALETTE[index]; + }, on_events_loaded: function(events, fn_filter, no_filter_reload) { var self = this; @@ -149,30 +157,31 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ if (this.color_field) { var filter = evt[this.color_field]; if (filter) { - //evt.color = '#dddddd'; var filter_item = { value: (typeof filter === 'object') ? filter[0] : filter, - label: (typeof filter === 'object') ? filter[1] : filter, - color: evt.color + label: (typeof filter === 'object') ? filter[1] : filter } if (typeof(fn_filter) === 'function' && !fn_filter(filter_item.value)) { continue; } - if (_.indexOf(sidebar_ids, filter_item.value) === -1) { + var filter_index = _.indexOf(sidebar_ids, filter_item.value); + if (filter_index === -1) { + evt.color = filter_item.color = this.get_color(sidebar_ids.length); sidebar_items.push(filter_item); sidebar_ids.push(filter_item.value); + } else { + evt.color = this.get_color(filter_index); } + evt.textColor = '#ffffff'; } } - /* - * TODO: check dates of type date - * if (this.fields[this.date_start]['type'] == 'date') { + if (this.fields[this.date_start]['type'] == 'date') { evt[this.date_start] = openerp.base.parse_date(evt[this.date_start]).set({hour: 9}).toString('yyyy-MM-dd HH:mm:ss'); } if (this.date_stop && evt[this.date_stop] && this.fields[this.date_stop]['type'] == 'date') { evt[this.date_stop] = openerp.base.parse_date(evt[this.date_stop]).set({hour: 17}).toString('yyyy-MM-dd HH:mm:ss'); - }*/ + } res_events.push(this.convert_event(evt)); } scheduler.parse(res_events, 'json'); From 2f9f557e185af4d0f72da7d194f12e48b2b1ed44 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 11 Aug 2011 20:12:17 +0200 Subject: [PATCH 07/12] [FIX] get rid of unsued menus and submenu bzr revid: al@openerp.com-20110811181217-y2yxdz34uswijwza --- openerp/addons/base/ir/ir.xml | 1 - openerp/addons/base/ir/ir_actions.py | 1 - openerp/osv/orm.py | 10 +--------- 3 files changed, 1 insertion(+), 11 deletions(-) diff --git a/openerp/addons/base/ir/ir.xml b/openerp/addons/base/ir/ir.xml index 868e405e93c..c537d265dd2 100644 --- a/openerp/addons/base/ir/ir.xml +++ b/openerp/addons/base/ir/ir.xml @@ -535,7 +535,6 @@ - diff --git a/openerp/addons/base/ir/ir_actions.py b/openerp/addons/base/ir/ir_actions.py index ea3b21807fe..7b1cb937c3d 100644 --- a/openerp/addons/base/ir/ir_actions.py +++ b/openerp/addons/base/ir/ir_actions.py @@ -284,7 +284,6 @@ class act_window(osv.osv): 'filter': fields.boolean('Filter'), 'auto_search':fields.boolean('Auto Search'), 'search_view' : fields.function(_search_view, type='text', method=True, string='Search View'), - 'menus': fields.char('Menus', size=4096), 'help': fields.text('Action description', help='Optional help text for the users with a description of the target view, such as its usage and purpose.', translate=True), diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index c93467c6052..d4a5d808990 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -1767,7 +1767,7 @@ class orm_template(object): :param view_type: type of the view to return if view_id is None ('form', tree', ...) :param context: context arguments, like lang, time zone :param toolbar: true to include contextual actions - :param submenu: example (portal_project module) + :param submenu: deprecated :return: dictionary describing the composition of the requested view (including inherited views and extensions) :raise AttributeError: * if the inherited view has unknown position to work with other than 'before', 'after', 'inside', 'replace' @@ -1999,14 +1999,6 @@ class orm_template(object): result['arch'] = xarch result['fields'] = xfields - if submenu: - if context and context.get('active_id', False): - data_menu = self.pool.get('ir.ui.menu').browse(cr, user, context['active_id'], context).action - if data_menu: - act_id = data_menu.id - if act_id: - data_action = self.pool.get('ir.actions.act_window').browse(cr, user, [act_id], context)[0] - result['submenu'] = getattr(data_action, 'menus', False) if toolbar: def clean(x): x = x[2] From 18de9c065a33e6cb0e32195be0d374ec93a3e763 Mon Sep 17 00:00:00 2001 From: Jigar Amin - OpenERP Date: Fri, 12 Aug 2011 13:10:21 +0530 Subject: [PATCH 08/12] [FIX] typo fied name lp bug: https://launchpad.net/bugs/825008 fixed bzr revid: jam@tinyerp.com-20110812074021-7cbge6mgfamim32w --- addons/project_issue/project_issue_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml index 23f12b3907f..86e232e91b5 100644 --- a/addons/project_issue/project_issue_view.xml +++ b/addons/project_issue/project_issue_view.xml @@ -153,7 +153,7 @@ - + From 3278222800fc084b5cafea8cd1fe2d4de79eafcd Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 12 Aug 2011 10:00:51 +0200 Subject: [PATCH 09/12] [FIX] project_scrum: filters in field in override to project search view bzr revid: xmo@openerp.com-20110812080051-ozhrap5afiqunt1f --- addons/project_scrum/project_scrum_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/project_scrum/project_scrum_view.xml b/addons/project_scrum/project_scrum_view.xml index 99b74157466..aa16a62c0b9 100644 --- a/addons/project_scrum/project_scrum_view.xml +++ b/addons/project_scrum/project_scrum_view.xml @@ -573,8 +573,8 @@ - - + + From 61e9552f6dcf29003dfbb842336c752d5f94a4dd Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 12 Aug 2011 10:36:10 +0200 Subject: [PATCH 10/12] [FIX] reintroduce o2m search field, aliases to CharField. Also make m2m search field an actual alias to CharField bzr revid: xmo@openerp.com-20110812083610-utduagt0np0h7rib --- addons/base/static/src/js/search.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index e88e31ebba0..4b746832a65 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -362,7 +362,8 @@ openerp.base.search.fields = new openerp.base.Registry({ 'datetime': 'openerp.base.search.DateTimeField', 'date': 'openerp.base.search.DateField', 'many2one': 'openerp.base.search.ManyToOneField', - 'many2many': 'openerp.base.search.ManyToManyField' + 'many2many': 'openerp.base.search.CharField', + 'one2many': 'openerp.base.search.CharField' }); openerp.base.search.Invalid = openerp.base.Class.extend( /** @lends openerp.base.search.Invalid# */{ /** @@ -723,11 +724,8 @@ openerp.base.search.DateField = openerp.base.search.Field.extend( /** @lends ope } }); openerp.base.search.DateTimeField = openerp.base.search.DateField.extend({ - // TODO: time? }); openerp.base.search.ManyToOneField = openerp.base.search.CharField.extend({ - // TODO: @widget - // TODO: .selection, .context, .domain init: function (view_section, field, view) { this._super(view_section, field, view); var self = this; @@ -795,12 +793,6 @@ openerp.base.search.ManyToOneField = openerp.base.search.CharField.extend({ return this._super(); } }); -/** - * m2m search field behaves pretty much exactly like a char field - * - * @class - */ -openerp.base.search.ManyToManyField = openerp.base.search.CharField.extend({}); openerp.base.search.ExtendedSearch = openerp.base.OldWidget.extend({ template: 'SearchView.extended_search', From 86a5de431bc6c59569cef680fc41ed712caa0f31 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 12 Aug 2011 10:38:20 +0200 Subject: [PATCH 11/12] [FIX] don't use @string on filters inside fields in search view, use @help bzr revid: xmo@openerp.com-20110812083820-tnk2yv7kkuylg9aw --- openerp/addons/base/res/partner/partner_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/partner/partner_view.xml b/openerp/addons/base/res/partner/partner_view.xml index 763147fb47e..7dc4a595adf 100644 --- a/openerp/addons/base/res/partner/partner_view.xml +++ b/openerp/addons/base/res/partner/partner_view.xml @@ -344,7 +344,7 @@ - + From 4e5f4bd565bbaff2a8f89117c791de9299015e08 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 12 Aug 2011 11:45:41 +0200 Subject: [PATCH 12/12] [IMP] simple style fixes bzr revid: xmo@openerp.com-20110812094541-zeb5lz6nk0jgq21y --- addons/base/static/src/js/search.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index 4b746832a65..63ccec088a6 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -875,11 +875,10 @@ openerp.base.search.ExtendedSearchGroup = openerp.base.OldWidget.extend({ this._super(); var _this = this; this.add_prop(); - this.$element.find('.searchview_extended_add_proposition').click(function (e) { + this.$element.find('.searchview_extended_add_proposition').click(function () { _this.add_prop(); }); - var delete_btn = this.$element.find('.searchview_extended_delete_group'); - delete_btn.click(function (e) { + this.$element.find('.searchview_extended_delete_group').click(function () { _this.stop(); }); }, @@ -889,7 +888,7 @@ openerp.base.search.ExtendedSearchGroup = openerp.base.OldWidget.extend({ }).compact().value(); var choice = this.$element.find(".searchview_extended_group_choice").val(); var op = choice == "all" ? "&" : "|"; - return [].concat(choice == "none" ? ['!'] : [], + return choice == "none" ? ['!'] : [].concat( _.map(_.range(_.max([0,props.length - 1])), function() { return op; }), props); }, @@ -901,10 +900,7 @@ openerp.base.search.ExtendedSearchGroup = openerp.base.OldWidget.extend({ parent.check_last_element(); }, set_last_group: function(is_last) { - if(is_last) - this.$element.addClass("last_group"); - else - this.$element.removeClass("last_group"); + this.$element.toggleClass('last_group', is_last); } }); @@ -927,8 +923,7 @@ openerp.base.search.ExtendedSearchProposition = openerp.base.OldWidget.extend({ this.$element.find(".searchview_extended_prop_field").change(function() { _this.changed(); }); - var delete_btn = this.$element.find('.searchview_extended_delete_prop'); - delete_btn.click(function (e) { + this.$element.find('.searchview_extended_delete_prop').click(function () { _this.stop(); }); },