[IMP] various code improvements
authorGéry Debongnie <ged@odoo.com>
Tue, 14 Oct 2014 12:48:31 +0000 (14:48 +0200)
committerGéry Debongnie <ged@odoo.com>
Tue, 21 Oct 2014 07:33:52 +0000 (09:33 +0200)
mostly styling, and related micro-changes

addons/board/static/src/js/dashboard.js
addons/google_spreadsheet/static/src/js/search.js
addons/mail/static/src/js/mail.js
addons/web/static/src/js/openerpframework.js
addons/web/static/src/js/search.js
addons/web/static/src/js/view_pivot.js
addons/web/static/src/js/views.js
addons/web_graph/static/src/js/graph_widget.js
addons/web_view_editor/static/src/js/view_editor.js

index 5fa7811..e24770f 100644 (file)
@@ -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"));
                 }
             });
     },
index 45759bf..650eccd 100644 (file)
@@ -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
index ef5cab9..6c4d460 100644 (file)
@@ -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 () {
index fd13bea..b112783 100644 (file)
@@ -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;
+    },
 };
 
 /**
index f55f9b4..de83903 100644 (file)
@@ -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);
-                $('<li>').addClass('divider').insertBefore(self.$add_filter);
+                $('<li class="divider">').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);
-        $('<li>').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});
-        });
+        $('<li class="divider">').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)});
 
index 4823739..9aa294e 100644 (file)
@@ -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";
     },
 });
 
index ef71f19..4fe276a 100644 (file)
@@ -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);
         });
     },
index 3731d30..23d97da 100644 (file)
@@ -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) {
index 98a135a..64c4306 100644 (file)
@@ -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) {