Christophe (OpenERP) has proposed merging 
lp:~openerp-dev/openerp-web/trunk-sidebar-chs into lp:openerp-web.

Requested reviews:
  OpenERP R&D Web Team (openerp-dev-web)

For more details, see:
https://code.launchpad.net/~openerp-dev/openerp-web/trunk-sidebar-chs/+merge/78830
-- 
https://code.launchpad.net/~openerp-dev/openerp-web/trunk-sidebar-chs/+merge/78830
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openerp-web/trunk-sidebar-chs.
=== modified file 'addons/web/static/src/js/view_form.js'
--- addons/web/static/src/js/view_form.js	2011-10-10 12:28:28 +0000
+++ addons/web/static/src/js/view_form.js	2011-10-10 12:40:39 +0000
@@ -119,7 +119,7 @@
             this.sidebar = new openerp.web.Sidebar(this, this.options.sidebar_id);
             this.sidebar.start();
             this.sidebar.do_unfold();
-            this.sidebar.attachments = new openerp.web.form.SidebarAttachments(this.sidebar, this.sidebar.add_section('attachments', "Attachments"), this);
+            this.sidebar.attachments = new openerp.web.form.SidebarAttachments(this.sidebar, this);
             this.sidebar.add_toolbar(this.fields_view.toolbar);
             this.set_common_sidebar_sections(this.sidebar);
         }
@@ -541,8 +541,12 @@
 openerp.web.form = {};
 
 openerp.web.form.SidebarAttachments = openerp.web.Widget.extend({
-    init: function(parent, element_id, form_view) {
-        this._super(parent, element_id);
+    init: function(parent, form_view) {
+        var $section = parent.add_section('Attachments');
+        this.$div = $('<div class="oe-sidebar-attachments"></div>');
+        $section.append(this.$div);
+
+        this._super(parent, $section.attr('id'));
         this.view = form_view;
     },
     do_update: function() {
@@ -560,7 +564,7 @@
     },
     on_attachments_loaded: function(attachments) {
         this.attachments = attachments;
-        this.$element.html(QWeb.render('FormView.sidebar.attachments', this));
+        this.$div.html(QWeb.render('FormView.sidebar.attachments', this));
         this.$element.find('.oe-binary-file').change(this.on_attachment_changed);
         this.$element.find('.oe-sidebar-attachment-delete').click(this.on_attachment_delete);
     },

=== modified file 'addons/web/static/src/js/views.js'
--- addons/web/static/src/js/views.js	2011-10-10 09:57:54 +0000
+++ addons/web/static/src/js/views.js	2011-10-10 12:40:39 +0000
@@ -512,6 +512,52 @@
             self.do_toggle();
         });
     },
+
+    call_default_on_sidebar: function(item) {
+        var func_name = 'on_sidebar_' + _.underscored(item.label);
+        var fn = this.widget_parent[func_name];
+        if(typeof fn === 'function') {
+            fn(item);
+        }
+    },
+
+    add_default_sections: function() {
+        this.add_items('Customize', [
+            {
+                label: "Manage Views",
+                callback: this.call_default_on_sidebar,
+                title: "Manage views of the current object"
+            }, {
+                label: "Edit Workflow",
+                callback: this.call_default_on_sidebar,
+                title: "Manage views of the current object",
+                classname: 'oe_hide oe_sidebar_edit_workflow'
+            }, {
+                label: "Customize Object",
+                callback: this.call_default_on_sidebar,
+                title: "Manage views of the current object"
+            }
+        ]);
+
+        this.add_items('Other Options', [ 
+            {
+                label: "Import",
+                callback: this.call_default_on_sidebar,
+            }, {
+                label: "Export",
+                callback: this.call_default_on_sidebar,
+            }, {
+                label: "Translate",
+                callback: this.call_default_on_sidebar,
+                classname: 'oe_sidebar_translate oe_hide'
+            }, {
+                label: "View Log",
+                callback: this.call_default_on_sidebar,
+                classname: 'oe_hide oe_sidebar_view_log'
+            }
+        ]);
+    },
+
     add_toolbar: function(toolbar) {
         var self = this;
         _.each([['print', "Reports"], ['action', "Actions"], ['relate', "Links"]], function(type) {
@@ -524,15 +570,29 @@
                         classname: 'oe_sidebar_' + type[0]
                     }
                 }
-                self.add_section(type[0], type[1], items);
+                self.add_items(type[1], items);
             }
         });
     },
-    add_section: function(code, name, items) {
-        // For each section, we pass a name/label and optionally an array of items.
-        // If no items are passed, then the section will be created as a custom section
-        // returning back an element_id to be used by a custom controller.
-        // Else, the section is a standard section with items displayed as links.
+    
+    add_section: function(name) {
+        var code = _.underscored(name),
+            $section = this.sections[code];
+
+        if(!$section) {
+            section_id = _.uniqueId(this.element_id + '_section_' + code + '_');
+            var $section = $(db.web.qweb.render("Sidebar.section", {
+                section_id: section_id,
+                name: name,
+                classname: 'oe_sidebar_' + code,
+            }));
+            $section.appendTo(this.$element.find('div.sidebar-actions'));
+            this.sections[code] = $section;
+        }
+        return $section;
+    },
+
+    add_items: function(section_name, items) {
         // An item is a dictonary : {
         //    label: label to be displayed for the link,
         //    action: action to be launch when the link is clicked,
@@ -541,25 +601,24 @@
         //    title: optional title for the link
         // }
         // Note: The item should have one action or/and a callback
+        //
+
         var self = this,
-            section_id = _.uniqueId(this.element_id + '_section_' + code + '_');
+            $section = this.add_section(section_name),
+            section_id = $section.attr('id');
+
         if (items) {
             for (var i = 0; i < items.length; i++) {
                 items[i].element_id = _.uniqueId(section_id + '_item_');
                 this.items[items[i].element_id] = items[i];
             }
-        }
-        var $section = $(db.web.qweb.render("Sidebar.section", {
-            section_id: section_id,
-            name: name,
-            classname: 'oe_sidebar_' + code,
-            items: items
-        }));
-        if (items) {
-            $section.find('a.oe_sidebar_action_a').click(function() {
+
+            var $items = $(db.web.qweb.render("Sidebar.section.items", {items: items}));
+
+            $items.find('a.oe_sidebar_action_a').click(function() {
                 var item = self.items[$(this).attr('id')];
                 if (item.callback) {
-                    item.callback();
+                    item.callback.apply(self, [item]);
                 }
                 if (item.action) {
                     var ids = self.widget_parent.get_selected_ids();
@@ -589,10 +648,13 @@
                 }
                 return false;
             });
+        
+            var $ul = $section.find('ul');
+            if(!$ul.length) {
+                $ul = $('<ul/>').appendTo($section);
+            }
+            $items.appendTo($ul);
         }
-        $section.appendTo(this.$element.find('div.sidebar-actions'));
-        this.sections[code] = $section;
-        return section_id;
     },
     do_fold: function() {
         this.$element.addClass('closed-sidebar').removeClass('open-sidebar');
@@ -821,42 +883,11 @@
     },
     do_search: function(view) {
     },
+
     set_common_sidebar_sections: function(sidebar) {
-        sidebar.add_section('customize', "Customize", [
-            {
-                label: "Manage Views",
-                callback: this.on_sidebar_manage_view,
-                title: "Manage views of the current object"
-            }, {
-                label: "Edit Workflow",
-                callback: this.on_sidebar_edit_workflow,
-                title: "Manage views of the current object",
-                classname: 'oe_hide oe_sidebar_edit_workflow'
-            }, {
-                label: "Customize Object",
-                callback: this.on_sidebar_customize_object,
-                title: "Manage views of the current object"
-            }
-        ]);
-        sidebar.add_section('other', "Other Options", [
-            {
-                label: "Import",
-                callback: this.on_sidebar_import
-            }, {
-                label: "Export",
-                callback: this.on_sidebar_export
-            }, {
-                label: "Translate",
-                callback: this.on_sidebar_translate,
-                classname: 'oe_sidebar_translate oe_hide'
-            }, {
-                label: "View Log",
-                callback: this.on_sidebar_view_log,
-                classname: 'oe_hide oe_sidebar_view_log'
-            }
-        ]);
+        sidebar.add_default_sections();
     },
-    on_sidebar_manage_view: function() {
+    on_sidebar_manage_views: function() {
         if (this.fields_view && this.fields_view.arch) {
             $('<xmp>' + db.web.json_node_to_xml(this.fields_view.arch, true) + '</xmp>').dialog({ width: '95%', height: 600});
         } else {

=== modified file 'addons/web/static/src/xml/base.xml'
--- addons/web/static/src/xml/base.xml	2011-10-06 11:41:27 +0000
+++ addons/web/static/src/xml/base.xml	2011-10-10 12:40:39 +0000
@@ -467,17 +467,20 @@
     </div>
 </t>
 <t t-name="Sidebar.section">
-    <h2><t t-esc="name"/></h2>
     <div t-att-id="section_id" t-att-class="classname">
-        <ul t-if="items">
+        <h2><t t-esc="name"/></h2>
+    </div>
+</t>
+
+
+<t t-name="Sidebar.section.items">
             <li t-foreach="items" t-as="item" t-att-class="item.classname">
                 <a class="oe_sidebar_action_a" t-att-id="item.element_id" t-att-title="item.title" href="#">
                     <t t-esc="item.label"/>
                 </a>
             </li>
-        </ul>
-    </div>
 </t>
+
 <t t-name="TranslateDialog">
     <ul class="oe_translate_tabs">
         <li><a t-attf-href="##{widget.element_id}_fields">Fields</a></li>

=== modified file 'addons/web_calendar/static/src/js/calendar.js'
--- addons/web_calendar/static/src/js/calendar.js	2011-10-05 08:36:56 +0000
+++ addons/web_calendar/static/src/js/calendar.js	2011-10-10 12:40:39 +0000
@@ -84,8 +84,8 @@
         if (this.options.sidebar && this.options.sidebar_id) {
             this.sidebar = new openerp.web.Sidebar(this, this.options.sidebar_id);
             this.sidebar.start();
-            this.sidebar.navigator = new openerp.web_calendar.SidebarNavigator(this.sidebar, this.sidebar.add_section('navigator', "Navigator"), this);
-            this.sidebar.responsible = new openerp.web_calendar.SidebarResponsible(this.sidebar, this.sidebar.add_section('responsible', "Responsible"), this);
+            this.sidebar.navigator = new openerp.web_calendar.SidebarNavigator(this.sidebar, this);
+            this.sidebar.responsible = new openerp.web_calendar.SidebarResponsible(this.sidebar, this);
             this.sidebar.add_toolbar(this.fields_view.toolbar);
             this.set_common_sidebar_sections(this.sidebar);
             this.sidebar.do_unfold();
@@ -362,13 +362,16 @@
 });
 
 openerp.web_calendar.SidebarResponsible = openerp.web.Widget.extend({
-    init: function(parent, element_id, view) {
-        this._super(parent, element_id);
+    init: function(parent, view) {
+        var $section = parent.add_section('Responsible');
+        this.$div = $('<div></div>');
+        $section.append(this.$div);
+        this._super(parent, $section.attr('id'));
         this.view = view;
         this.$element.delegate('input:checkbox', 'change', this.on_filter_click);
     },
     on_events_loaded: function(filters) {
-        this.$element.html(QWeb.render('CalendarView.sidebar.responsible', { filters: filters }));
+        this.$div.html(QWeb.render('CalendarView.sidebar.responsible', { filters: filters }));
     },
     on_filter_click: function(e) {
         var responsibles = [],
@@ -388,8 +391,9 @@
 });
 
 openerp.web_calendar.SidebarNavigator = openerp.web.Widget.extend({
-    init: function(parent, element_id, view) {
-        this._super(parent, element_id);
+    init: function(parent, view) {
+        var $section = parent.add_section('Navigator');
+        this._super(parent, $section.attr('id'));
         this.view = view;
     },
     on_events_loaded: function(events) {

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to