diff --git a/addons/board/static/src/js/dashboard.js b/addons/board/static/src/js/dashboard.js index 5fa7811b5a0..e24770f3b18 100644 --- a/addons/board/static/src/js/dashboard.js +++ b/addons/board/static/src/js/dashboard.js @@ -8,6 +8,16 @@ if (!instance.board) { } instance.web.form.DashBoard = instance.web.form.FormWidget.extend({ + events: { + 'click .oe_dashboard_link_reset': 'on_reset', + 'click .oe_dashboard_link_change_layout': 'on_change_layout', + 'click h2.oe_header span.oe_header_txt': function (ev) { + if(ev.target === ev.currentTarget) + self.on_header_string($(ev.target).parent()); + }, + 'click .oe_dashboard_column .oe_fold': 'on_fold_action', + 'click .oe_dashboard_column .oe_close': 'on_close_action', + }, init: function(view, node) { this._super(view, node); this.form_template = 'DashBoard'; @@ -27,16 +37,7 @@ instance.web.form.DashBoard = instance.web.form.FormWidget.extend({ var old_title = this.__parentedParent.get('title'); this.__parentedParent.on('load_record', self, function(){ self.__parentedParent.set({ 'title': old_title}); - }) - // Events - this.$('.oe_dashboard_link_reset').click(this.on_reset); - this.$('.oe_dashboard_link_change_layout').click(this.on_change_layout); - this.$('h2.oe_header span.oe_header_txt').click(function(ev){ - if(ev.target === ev.currentTarget) - self.on_header_string($(ev.target).parent()); }); - this.$el.delegate('.oe_dashboard_column .oe_fold', 'click', this.on_fold_action); - this.$el.delegate('.oe_dashboard_column .oe_close', 'click', this.on_close_action); // Init actions _.each(this.node.children, function(column, column_index) { @@ -332,10 +333,10 @@ instance.web.search.FavoriteMenu.include({ var self = this; this._super(filters); this.$('.favorites-menu').append(QWeb.render('SearchView.addtodashboard')); - this.$add_to_dashboard = this.$('.add-to-dashboard'); - this.$add_dashboard_btn = this.$add_to_dashboard.eq(2).find('button'); - this.$add_dashboard_input = this.$add_to_dashboard.eq(1).find('input'); - this.$add_dashboard_link = this.$add_to_dashboard.first().find('a'); + var $add_to_dashboard = this.$('.add-to-dashboard'); + this.$add_dashboard_btn = $add_to_dashboard.eq(2).find('button'); + this.$add_dashboard_input = $add_to_dashboard.eq(1).find('input'); + this.$add_dashboard_link = $add_to_dashboard.first().find('a'); var title = this.searchview.getParent().title; this.$add_dashboard_input.val(title); this.$add_dashboard_link.click(function () { @@ -344,12 +345,12 @@ instance.web.search.FavoriteMenu.include({ this.$add_dashboard_btn.click(this.proxy('add_dashboard')); }, toggle_dashboard_menu: function (is_open) { - this.$add_to_dashboard.first() + this.$add_dashboard_link .toggleClass('closed-menu', !is_open) .toggleClass('open-menu', is_open); this.$add_dashboard_btn.toggle(is_open); this.$add_dashboard_input.toggle(is_open); - if (this.$add_to_dashboard.first().hasClass('open-menu')) { + if (this.$add_dashboard_link.hasClass('open-menu')) { this.$add_dashboard_input.focus(); } }, @@ -358,12 +359,10 @@ instance.web.search.FavoriteMenu.include({ this._super(); }, add_dashboard: function () { - var self = this; - var view_manager = this.getParent(); - while (!(view_manager instanceof instance.web.ViewManager) && - view_manager && view_manager.getParent) { - view_manager = view_manager.getParent(); - } + var self = this, + view_manager = this.findAncestor(function (a) { + return a instanceof instance.web.ViewManager + }); if (!view_manager.action) { this.do_warn(_t("Can't find dashboard action")); return; @@ -401,10 +400,10 @@ instance.web.search.FavoriteMenu.include({ name: name, }); }).then(function (r) { - if (r === false) { - self.do_warn(_t("Could not add filter to dashboard")); + if (r) { + self.do_notify(_.str.sprintf(_t("'%s' added to dashboard"), name), ''); } else { - self.do_notify(_t("'"+name + "' added to dashboard"), ''); + self.do_warn(_t("Could not add filter to dashboard")); } }); }, diff --git a/addons/google_spreadsheet/static/src/js/search.js b/addons/google_spreadsheet/static/src/js/search.js index 45759bf3883..650eccdf619 100644 --- a/addons/google_spreadsheet/static/src/js/search.js +++ b/addons/google_spreadsheet/static/src/js/search.js @@ -1,51 +1,50 @@ openerp.google_spreadsheet = function(instance) { var _t = instance.web._t, - QWeb = instance.web.qweb; + QWeb = instance.web.qweb; instance.web.FormView.include({ - on_processed_onchange: function(result, processed) { - var self = this; - var fields = self.fields; - _(result.selection).each(function (selection, fieldname) { - var field = fields[fieldname]; - if (!field) { return; } - field.field.selection = selection; - field.values = selection; - field.renderElement(); - }); - return this._super(result, processed); - }, + on_processed_onchange: function(result, processed) { + var self = this; + var fields = self.fields; + _(result.selection).each(function (selection, fieldname) { + var field = fields[fieldname]; + if (!field) { return; } + field.field.selection = selection; + field.values = selection; + field.renderElement(); + }); + return this._super(result, processed); + }, }); instance.web.search.FavoriteMenu.include({ - prepare_dropdown_menu: function (filters) { - this._super(filters); - this.$('.favorites-menu').append(QWeb.render('SearchView.addtogooglespreadsheet')); - this.$('.add-to-spreadsheet').click(this.add_to_spreadsheet.bind(this)); - }, - add_to_spreadsheet: function () { - var data = this.searchview.build_search_data(), - model = this.searchview.dataset.model, - view_manager = this.searchview.getParent(), - list_view = view_manager.views.list, - list_view_id = list_view ? list_view.view_id : false, - context = this.searchview.dataset.get_context() || [], - domain = this.searchview.dataset.get_domain() || [], - compound_context = new instance.web.CompoundContext(context), - compound_domain = new instance.web.CompoundDomain(context), - groupbys = instance.web.pyeval.eval('groupbys', data.groupbys).join(" "), - ds = new instance.web.DataSet(this, 'google.drive.config'); + prepare_dropdown_menu: function (filters) { + this._super(filters); + this.$('.favorites-menu').append(QWeb.render('SearchView.addtogooglespreadsheet')); + this.$('.add-to-spreadsheet').click(this.add_to_spreadsheet.bind(this)); + }, + add_to_spreadsheet: function () { + var data = this.searchview.build_search_data(), + model = this.searchview.dataset.model, + view_manager = this.searchview.getParent(), + list_view = view_manager.views.list, + list_view_id = list_view ? list_view.view_id : false, + context = this.searchview.dataset.get_context() || [], + domain = this.searchview.dataset.get_domain() || [], + compound_context = new instance.web.CompoundContext(context), + compound_domain = new instance.web.CompoundDomain(context), + groupbys = instance.web.pyeval.eval('groupbys', data.groupbys).join(" "), + ds = new instance.web.DataSet(this, 'google.drive.config'); - _.each(data.contexts, compound_context.add, compound_context); - _.each(data.domains, compound_domain.add, compound_domain); + _.each(data.contexts, compound_context.add, compound_context); + _.each(data.domains, compound_domain.add, compound_domain); - compound_domain = JSON.stringify(compound_domain.eval()); - console.log('add_to_spreadsheet'); + compound_domain = JSON.stringify(compound_domain.eval()); ds.call('set_spreadsheet', [model, compound_domain, groupbys, list_view_id]) - .done(function (res) { - if (res['url']){ - window.open(res['url'], '_blank'); - } - }); - }, + .done(function (res) { + if (res['url']){ + window.open(res['url'], '_blank'); + } + }); + }, }); }; \ No newline at end of file diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index ef5cab96977..6c4d4609a20 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -1968,11 +1968,9 @@ openerp.mail = function (session) { * @param {Object} defaults ?? */ load_searchview: function (defaults) { - var self = this; - var ds_msg = new session.web.DataSetSearch(this, 'mail.message'); - var options = { - $buttons: this.$('.oe-search-options') - }; + var self = this, + ds_msg = new session.web.DataSetSearch(this, 'mail.message'), + options = { $buttons: this.$('.oe-search-options') }; this.searchview = new session.web.SearchView(this, ds_msg, false, defaults || {}, options); this.searchview.on('search_data', this, this.do_searchview_search); this.searchview.appendTo(this.$('.oe-view-manager-search-view')).then(function () { diff --git a/addons/web/static/src/js/openerpframework.js b/addons/web/static/src/js/openerpframework.js index fd13bea49cb..b112783793f 100644 --- a/addons/web/static/src/js/openerpframework.js +++ b/addons/web/static/src/js/openerpframework.js @@ -287,7 +287,17 @@ openerp.ParentedMixin = { }); this.setParent(undefined); this.__parentedDestroyed = true; - } + }, + /** + * Find the closest ancestor matching predicate + */ + findAncestor: function (predicate) { + var ancestor = this; + while (!(predicate(ancestor)) && ancestor && ancestor.getParent) { + ancestor = ancestor.getParent(); + } + return ancestor; + }, }; /** diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index f55f9b4fe93..de839036d06 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -333,9 +333,8 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea }, 'click .oe_searchview_unfold_drawer': function (e) { e.stopImmediatePropagation(); - $(e.target).toggleClass('fa-caret-down') - .toggleClass('fa-caret-up'); - localStorage.visible_search_menu = !(localStorage.visible_search_menu === 'true'); + $(e.target).toggleClass('fa-caret-down fa-caret-up'); + localStorage.visible_search_menu = (localStorage.visible_search_menu !== 'true'); this.toggle_buttons(); }, 'keydown .oe_searchview_input, .oe_searchview_facet': function (e) { @@ -380,7 +379,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea this.search_fields = []; this.filters = []; this.groupbys = []; - this.visible_filters = !!(localStorage.visible_search_menu === 'true'); + this.visible_filters = (localStorage.visible_search_menu === 'true'); this.input_subviews = []; // for user input in searchbar this.defaults = defaults || {}; this.headless = this.options.hidden && _.isEmpty(this.defaults); @@ -410,8 +409,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea this.$('.oe_searchview_unfold_drawer') .toggleClass('fa-caret-down', !this.visible_filters) .toggleClass('fa-caret-up', this.visible_filters); - return $.when(this._super(), this.alive($.when(load_view)) - .then(this.view_loaded.bind(this))); + return this.alive($.when(this._super(), load_view.then(this.view_loaded.bind(this)))); }, view_loaded: function (r) { var self = this; @@ -433,7 +431,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea } return $.when(custom_filters_ready).then(this.proxy('set_default_filters')); }, - set_default_filters: function (a, b) { + set_default_filters: function () { var self = this, default_custom_filter = this.$buttons && this.favorite_menu.get_default_filter(); if (default_custom_filter) { @@ -523,8 +521,8 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea source: this.proxy('complete_global_search'), select: this.proxy('select_completion'), delay: 0, - get_search_string: function () { - return self.$('div.oe_searchview_input').text(); + get_search_string: function () { + return self.$('div.oe_searchview_input').text(); }, }); this.autocomplete.appendTo(this.$el); @@ -632,10 +630,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea this.$el.addClass('active'); }, childBlurred: function () { - var val = this.$el.val(); - this.$el.val(''); - this.$el.removeClass('active') - .trigger('blur'); + this.$el.val('').removeClass('active').trigger('blur'); this.autocomplete.close(); }, /** @@ -789,16 +784,6 @@ instance.web.search.Input = instance.web.Widget.extend( /** @lends instance.web. */ visible: function () { return !this.attrs.modifiers.invisible; - - // var parent = this; - // while ((parent = parent.getParent()) && - // ( (parent instanceof instance.web.search.Group) - // || (parent instanceof instance.web.search.Input))) { - // if (!parent.visible()) { - // return false; - // } - // } - // return true; }, }); instance.web.search.FilterGroup = instance.web.search.Input.extend(/** @lends instance.web.search.FilterGroup# */{ @@ -1449,7 +1434,7 @@ instance.web.search.FilterMenu = instance.web.Widget.extend({ _.each(this.filters, function (group) { if (group.is_visible()) { group.insertBefore(self.$add_filter); - $('
  • ').addClass('divider').insertBefore(self.$add_filter); + $('
  • ').insertBefore(self.$add_filter); } }); this.append_proposition().then(function (prop) { @@ -1477,25 +1462,24 @@ instance.web.search.FilterMenu = instance.web.Widget.extend({ }); }, remove_proposition: function (prop) { - this.propositions = _.reject(this.propositions, function (p) { return p === prop}); + this.propositions = _.without(this.propositions, prop); if (!this.propositions.length) { this.$apply_filter.prop('disabled', true); } prop.destroy(); }, commit_search: function () { - var self = this, - filters = _.invoke(this.propositions, 'get_filter'), + var filters = _.invoke(this.propositions, 'get_filter'), filters_widgets = _.map(filters, function (filter) { - return new my.Filter(filter, self); - }); - var filter_group = new my.FilterGroup(filters_widgets, this.searchview); + return new my.Filter(filter, this); + }), + filter_group = new my.FilterGroup(filters_widgets, this.searchview), + facets = filters_widgets.map(function (filter) { + return filter_group.make_facet([filter_group.make_value(filter)]); + }); filter_group.insertBefore(this.$add_filter); - $('
  • ').addClass('divider').insertBefore(self.$add_filter); - - filters_widgets.forEach(function (filter) { - self.searchview.query.add(filter_group.make_facet([filter_group.make_value(filter)]), {silent: true}); - }); + $('
  • ').insertBefore(this.$add_filter); + this.searchview.query.add(facets, {silent: true}); this.searchview.query.trigger('reset'); _.invoke(this.propositions, 'destroy'); @@ -1608,8 +1592,8 @@ instance.web.search.FavoriteMenu = instance.web.Widget.extend({ this.$inputs = this.$save_name.find('input'); this.$divider = this.$('.divider'); - var $shared_filter = $(this.$inputs[1]), - $default_filter = $(this.$inputs[2]); + var $shared_filter = this.$inputs.eq(1), + $default_filter = this.$inputs.eq(2); $shared_filter.click(function () {$default_filter.prop('checked', false)}); $default_filter.click(function () {$shared_filter.prop('checked', false)}); diff --git a/addons/web/static/src/js/view_pivot.js b/addons/web/static/src/js/view_pivot.js index 48237393a54..9aa294ead55 100644 --- a/addons/web/static/src/js/view_pivot.js +++ b/addons/web/static/src/js/view_pivot.js @@ -6,46 +6,46 @@ 'use strict'; var instance = openerp, - _lt = instance.web._lt, - _t = instance.web._t, - QWeb = instance.web.qweb; + _lt = instance.web._lt, + _t = instance.web._t, + QWeb = instance.web.qweb; instance.web.views.add('pivot', 'instance.web.PivotView'); instance.web.PivotView = instance.web.View.extend({ - template: 'PivotView', + template: 'PivotView', display_name: _lt('Pivot'), view_type: 'pivot', init: function(parent, dataset, view_id, options) { - this._super(parent, dataset, view_id, options); + this._super(parent, dataset, view_id, options); this.model = new instance.web.Model(dataset.model, {group_by_no_leaf: true}); - this.action_manager = parent.action_manager; + this.action_manager = parent.action_manager; - this.$buttons = options.$buttons; - this.fields = {}; - this.measures = {}; - this.groupable_fields = {}; + this.$buttons = options.$buttons; + this.fields = {}; + this.measures = {}; + this.groupable_fields = {}; - this.row_groupbys = []; - this.col_groupbys = []; - this.active_measures = []; - }, - start: function () { - var self = this, - load_fields = this.model.call('fields_get', []) - .then(this.prepare_fields.bind(this)); + this.row_groupbys = []; + this.col_groupbys = []; + this.active_measures = []; + }, + start: function () { + var self = this, + load_fields = this.model.call('fields_get', []) + .then(this.prepare_fields.bind(this)); - return $.when(this._super(), load_fields).then(function () { - var context = {measures: _.pairs(self.measures)}; - self.$buttons.html(QWeb.render('PivotView.buttons', self), context); - }); - }, - view_loading: function (fvg) { - var self = this; - this.do_push_state({}); - fvg.arch.children.forEach(function (field) { - var name = field.attrs.name + (field.attrs.interval || ''); + return $.when(this._super(), load_fields).then(function () { + var context = {measures: _.pairs(self.measures)}; + self.$buttons.html(QWeb.render('PivotView.buttons', self), context); + }); + }, + view_loading: function (fvg) { + var self = this; + this.do_push_state({}); + fvg.arch.children.forEach(function (field) { + var name = field.attrs.name + (field.attrs.interval || ''); //noinspection FallThroughInSwitchStatementJS switch (field.attrs.type) { case 'measure': @@ -62,28 +62,25 @@ instance.web.PivotView = instance.web.View.extend({ case 'row': self.row_groupbys.push(name); } - }); - }, + }); + }, prepare_fields: function (fields) { - var self = this, + var self = this, groupable_types = ['many2one', 'char', 'boolean', - 'selection', 'date', 'datetime']; - this.fields = fields; - _.each(fields, function (field, name) { - if ((name !== 'id') && (field.store === true)) { - if (field.type === 'integer' || field.type === 'float') { - self.measures[name] = field; - } - if (_.contains(groupable_types, field.type)) { - self.groupable_fields[name] = field; - } - } - }); + 'selection', 'date', 'datetime']; + this.fields = fields; + _.each(fields, function (field, name) { + if ((name !== 'id') && (field.store === true)) { + if (field.type === 'integer' || field.type === 'float') { + self.measures[name] = field; + } + if (_.contains(groupable_types, field.type)) { + self.groupable_fields[name] = field; + } + } + }); }, do_search: function (domain, context, group_by) { - console.log('do_search', domain, context, group_by); - debugger; - context.measure = "lol"; }, }); diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index ef71f19729a..4fe276a8b5b 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -119,19 +119,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.inner_widget = null; } }, - add_breadcrumb_url: function (url, label) { - // Add a pseudo breadcrumb that will redirect to an url - // this.push_breadcrumb({ - // show: function() { - // instance.web.redirect(url); - // }, - // hide: function() {}, - // destroy: function() {}, - // get_title: function() { - // return label; - // } - // }); - }, do_push_state: function(state) { if (!this.webclient || !this.webclient.do_push_state || this.dialog) { return; @@ -179,12 +166,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ do_load_state: function(state, warm) { var self = this, action_loaded; - if (!warm && 'return_label' in state) { - var return_url = state.return_url || document.referrer; - if (return_url) { - this.add_breadcrumb_url(return_url, state.return_label); - } - } if (state.action) { if (_.isString(state.action) && instance.web.client_actions.contains(state.action)) { var action_client = { @@ -517,7 +498,7 @@ instance.web.ViewManager = instance.web.Widget.extend({ var self = this; this._super(parent); - this.flags = flags; + this.flags = flags || {}; this.dataset = dataset; this.view_order = []; this.url_states = {}; @@ -785,16 +766,13 @@ instance.web.ViewManager = instance.web.Widget.extend({ }, do_load_state: function(state, warm) { var self = this, - defs = []; + def = this.active_view.created; if (state.view_type && state.view_type !== this.active_view.type) { - defs.push( - this.active_view.created.then(function() { - return self.switch_mode(state.view_type, true); - }) - ); - } - - $.when(this.active_view ? this.active_view.created : null, defs).done(function() { + def = def.then(function() { + return self.switch_mode(state.view_type, true); + }); + } + def.done(function() { self.active_view.controller.do_load_state(state, warm); }); }, diff --git a/addons/web_graph/static/src/js/graph_widget.js b/addons/web_graph/static/src/js/graph_widget.js index 3731d301b2b..23d97dac59a 100644 --- a/addons/web_graph/static/src/js/graph_widget.js +++ b/addons/web_graph/static/src/js/graph_widget.js @@ -122,7 +122,11 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({ // this method gets the fields that appear in the search view, under the // 'Groupby' heading get_search_fields: function () { - return []; + // this method is disabled for now. This requires extensive changes because the + // search view works quite differently: But the graph view is going to be split + // soon in pivot view and graph view. The pivot view will then properly handle + // groupbys. + return []; var self = this; var groupbygroups = _(this.search_view.drawer.inputs).select(function (g) { diff --git a/addons/web_view_editor/static/src/js/view_editor.js b/addons/web_view_editor/static/src/js/view_editor.js index 98a135a4472..64c43065a8c 100644 --- a/addons/web_view_editor/static/src/js/view_editor.js +++ b/addons/web_view_editor/static/src/js/view_editor.js @@ -3,7 +3,7 @@ var _t = instance.web._t; var QWeb = instance.web.qweb; instance.web.ViewManagerAction.include({ on_debug_changed:function(evt){ - var val = $(evt.target).data().action, + var val = $(evt.target).data('action'), current_view = this.active_view.controller; if(val === "manage_views"){ if (current_view.fields_view && current_view.fields_view.arch) {