diff options
| author | Fabien Meghazi <fme@openerp.com> | 2011-09-20 12:23:50 +0200 |
|---|---|---|
| committer | Fabien Meghazi <fme@openerp.com> | 2011-09-20 12:23:50 +0200 |
| commit | e61618897111ee6184afb3625d79cedd9e072b07 (patch) | |
| tree | f4f2e03bb8da1c805af5f4009bfc00a39c4a616c /addons/web/static/src | |
| parent | 9a8013e1cf5369de2c450f87b85545f1634ba4b0 (diff) | |
[IMP] Menu is now working ok in folded mode
bzr revid: fme@openerp.com-20110920102350-je1313hpdtnvg1yp
Diffstat (limited to 'addons/web/static/src')
| -rw-r--r-- | addons/web/static/src/js/chrome.js | 89 | ||||
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 4 |
2 files changed, 54 insertions, 39 deletions
diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 63af76c2a4f..7fec16eda08 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -807,30 +807,13 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ localStorage.setItem('oe_menu_folded', this.folded.toString()); } }, - do_show_secondary: function($sub_menu, $main_menu) { - if (this.folded) { - var css = $main_menu.position(), - fold_width = this.$secondary_menu.width() + 2, - window_width = $(window).width(); - css.top += 33; - css.left -= Math.round(($sub_menu.width() - $main_menu.width()) / 2); - css.left = css.left < fold_width ? fold_width : css.left; - if ((css.left + $sub_menu.width()) > window_width) { - delete(css.left); - css.right = 1; - } - $sub_menu.css(css); - } - $sub_menu.show(); - }, on_menu_click: function(ev, id) { id = id || 0; - var $clicked_menu, $main_menu, $sub_menu, - manual = main_clicked = leaf_clicked = false; + var $clicked_menu, manual = false; if (id) { // We can manually activate a menu with it's id (for hash url mapping) - manual = true; + manudal = true; $clicked_menu = this.$element.find('a[data-menu=' + id + ']'); if (!$clicked_menu.length) { $clicked_menu = this.$secondary_menu.find('a[data-menu=' + id + ']'); @@ -839,7 +822,20 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ $clicked_menu = $(ev.currentTarget); id = $clicked_menu.data('menu'); } - this.leaf_clicked = $clicked_menu.is(".leaf"); + + //if (launch_actionid && !(this.folded && main_clicked)) { + if (this.do_menu_click($clicked_menu, manual)) { + this.session.active_id = id; + this.rpc('/web/menu/action', {'menu_id': id}, this.on_menu_action_loaded); + return true; + } else { + return false; + } + }, + do_menu_click: function($clicked_menu, manual) { + var $sub_menu, $main_menu, + active = $clicked_menu.is('.active'), + sub_menu_visible = false; if (this.$secondary_menu.has($clicked_menu).length) { $sub_menu = $clicked_menu.parents('.oe_secondary_menu'); @@ -847,36 +843,55 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ } else { $sub_menu = this.$secondary_menu.find('.oe_secondary_menu[data-menu-parent=' + $clicked_menu.attr('data-menu') + ']'); $main_menu = $clicked_menu; - main_clicked = true; } - this.$secondary_menu.find('.oe_secondary_menu').hide().removeClass('active'); - - if (id && !(this.folded && main_clicked)) { - this.session.active_id = id; - this.rpc('/web/menu/action', {'menu_id': id}, - this.on_menu_action_loaded); - } + sub_menu_visible = $sub_menu.is(':visible'); + this.$secondary_menu.find('.oe_secondary_menu').hide(); $('.active', this.$element.add(this.$secondary_menu.show())).removeClass('active'); - $main_menu.addClass('active'); - $clicked_menu.addClass('active'); - $sub_menu.addClass('active'); + $main_menu.add($clicked_menu).add($sub_menu).addClass('active'); if (!(this.folded && manual)) { - this.do_show_secondary($sub_menu, $main_menu, manual); + this.do_show_secondary($sub_menu, $main_menu); } - if (this.$secondary_menu.has($clicked_menu).length) { + if ($main_menu != $clicked_menu) { if ($clicked_menu.is('.submenu')) { - //this.$secondary_menu.find('.submenu').removeClass('opened').next().hide(); + $sub_menu.find('.submenu.opened').each(function() { + if (!$(this).next().has($clicked_menu).length) { + $(this).removeClass('opened').next().hide(); + } + }); $clicked_menu.toggleClass('opened').next().toggle(); - return false; + } else if ($clicked_menu.is('.leaf')) { + $sub_menu.toggle(!this.folded); + return true; + } + } else if (this.folded) { + if (active && sub_menu_visible) { + $sub_menu.hide(); + return true; } - return !this.leaf_clicked; } else { - return false; + return true; } + return false; + }, + do_show_secondary: function($sub_menu, $main_menu) { + if (this.folded) { + var css = $main_menu.position(), + fold_width = this.$secondary_menu.width() + 2, + window_width = $(window).width(); + css.top += 33; + css.left -= Math.round(($sub_menu.width() - $main_menu.width()) / 2); + css.left = css.left < fold_width ? fold_width : css.left; + if ((css.left + $sub_menu.width()) > window_width) { + delete(css.left); + css.right = 1; + } + $sub_menu.css(css); + } + $sub_menu.show(); }, on_menu_action_loaded: function(data) { var self = this; diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 1ff156d8c4d..aa0c0286e9c 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -404,10 +404,10 @@ </t> <t t-name="Menu.secondary.children"> <t t-set="level" t-value="level + 1"/> - <a href="#" t-att-class="classname + (menu.children.length ? ' submenu' : ' leaf') + ' oe_menu_level_#{level}'" t-att-data-menu="menu.children.length ? undefined : menu.id"> + <a href="#" t-att-class="classname + (menu.children.length ? ' submenu' : ' leaf') + (menu_first and level == 1 ? ' opened' : '')" t-att-data-menu="menu.children.length ? undefined : menu.id"> <span t-attf-style="padding-left: #{(level - 2) * 20}px"> <t t-esc="menu.name"/></span> </a> - <div t-attf-class="oe_secondary_submenu oe_secondary_submenu_level_#{level}" t-if="menu.children.length" t-att-style="menu_first ? undefined : 'display: none'"> + <div t-attf-class="oe_secondary_submenu" t-if="menu.children.length" t-att-style="menu_first and level == 1 ? undefined : 'display: none'"> <t t-foreach="menu.children" t-as="menu"> <t t-set="classname">oe_secondary_submenu_item</t> <t t-call="Menu.secondary.children"/> |
