summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorFabien Meghazi <fme@openerp.com>2011-09-20 12:23:50 +0200
committerFabien Meghazi <fme@openerp.com>2011-09-20 12:23:50 +0200
commite61618897111ee6184afb3625d79cedd9e072b07 (patch)
treef4f2e03bb8da1c805af5f4009bfc00a39c4a616c /addons/web/static/src
parent9a8013e1cf5369de2c450f87b85545f1634ba4b0 (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.js89
-rw-r--r--addons/web/static/src/xml/base.xml4
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"/>