From 066f81089dfcd43092b405e95d81ffc5f2ef6e43 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Fri, 3 Jun 2011 16:05:25 +0000 Subject: [PATCH] See ChangeLog Monotone-Parent: eb98680a91c477e61143b911e53baa32fc0a1132 Monotone-Revision: 9aa2e2439f6636863018e6b98de93e587d01e89d Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2011-06-03T16:05:25 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 9 +++++++++ UI/WebServerResources/MailerUI.js | 1 + UI/WebServerResources/generic.js | 23 +++++++++++------------ 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index d8ca2f025..5c4360e7a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2011-06-03 Francis Lachapelle + + * UI/WebServerResources/generic.js (initMenu): the wrong callbacks + were associated to menu entries when the menu was splitted in + multiple ULs. + (popupSubmenu): fixed the position so it stays beside the menu + entry when the main menu is splitted in multiple ULs. The submenu + will no longer be displayed outside the window viewport. + 2011-06-02 Francis Lachapelle * UI/WebServerResources/generic.js (hideMenu): now fires a custom diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index 5b211ac17..d3a6de192 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -2147,6 +2147,7 @@ function generateMenuForMailbox(mailbox, prefix, callback) { var newNode; for (var i = 0; i < mailbox.children.length; i++) { if (menu.offsetHeight > windowHeight-offset) { + // Split menu to fit screen var menuWidth = (parseInt(menu.offsetWidth) + 15) + "px"; menu.style.width = menuWidth; menu = document.createElement("ul"); diff --git a/UI/WebServerResources/generic.js b/UI/WebServerResources/generic.js index 617b16424..c803eea32 100644 --- a/UI/WebServerResources/generic.js +++ b/UI/WebServerResources/generic.js @@ -889,10 +889,13 @@ function popupSubmenu(event) { menuTop = 0; } - var menuLeft = (parentNode.offsetLeft + parentNode.offsetWidth - 3); - if (window.width() - < (menuLeft + submenuNode.offsetWidth)) - menuLeft = parentNode.offsetLeft - submenuNode.offsetWidth + 3; + var menuLeft = this.offsetLeft + this.offsetWidth; + menuLeft = $(this.parentNode.parentNode).positionedOffset()[0] + + $(this.parentNode).positionedOffset()[0] + + $(this).getWidth(); + if (menuLeft + submenuNode.getWidth() > window.width()) + // Keep the submenu inside the viewport + menuLeft = window.width() - submenuNode.getWidth(); this.mouseInside = true; this.observe("mouseover", onMouseEnteredSubmenu); @@ -1346,16 +1349,12 @@ function initMenus() { function initMenu(menuDIV, callbacks) { var uls = menuDIV.childNodesWithTag("ul"); - for (var i = 0; i < uls.length; i++) { + for (var i = 0, j = 0; i < uls.length; i++) { var lis = $(uls[i]).childNodesWithTag("li"); - for (var j = 0; j < lis.length; j++) { - var node = $(lis[j]); + for (var k = 0; k < lis.length; k++, j++) { + var node = $(lis[k]); node.on("mousedown", listRowMouseDownHandler); - var callback; - if (i > 0) - callback = callbacks[i+j+1]; - else - callback = callbacks[i+j]; + var callback = callback = callbacks[j]; if (callback) { if (typeof(callback) == "string") { if (callback == "-")