- added code to handle cascading menus, drag handles (DIV separators) and a debugging log window;

Monotone-Parent: 71f5497685935ad02acaf78a809e3fbb32e91905
Monotone-Revision: 4b71e3eef15cd1ab9ca89e11d3ac734a8d821243

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2006-07-13T19:13:18
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau
2006-07-13 19:13:18 +00:00
parent 5c4a239224
commit 082212d13f
6 changed files with 266 additions and 13 deletions
+147 -7
View File
@@ -24,6 +24,18 @@
/* generic stuff */
logWindow = window.open('', 'logWindow',
'directories = no; location = no; menubar = no; resizable = no;'
+ 'scrollbars = yes; status = no; toolbar = no; width = 80em; height = 25em;');
logWindow.document.write('<html><head><title>JavaScript log</title></head>'
+ '<body style="font-family: monospace;'
+ 'font-size: 10pt;">'
+ '<div class="log" id="logArea"></div></body>'
+'</html>');
logWindow.resizeTo(640,480);
logArea = logWindow.document.getElementById('logArea');
logArea.innerHTML = '';
function ml_stripActionInURL(url) {
if (url[url.length - 1] != '/') {
var i;
@@ -282,9 +294,10 @@ function onRowClick(node, event) {
/* popup menus */
bodyOnClick = "";
acceptClick = false;
menuClickNode = null;
var bodyOnClick = "";
var acceptClick = false;
var menuClickNode = null;
var currentSubmenu = null;
function onMenuClick(node, event, menuId)
{
@@ -295,9 +308,11 @@ function onMenuClick(node, event, menuId)
acceptClick = false;
bodyOnClick = "" + document.body.getAttribute("onclick");
document.body.setAttribute("onclick", "onBodyClick('" + menuId + "'); return false;");
popup = document.getElementById(menuId);
popup.setAttribute("style", "visibility: visible; top: " + event.pageY
+ "px; left: " + event.pageX + "px;" );
var popup = document.getElementById(menuId);
hideMenu(popup);
popup.style.top = event.pageY + "px";
popup.style.left = event.pageX + "px";
popup.style.visibility = "visible";
menuClickNode = node;
return false;
@@ -310,13 +325,25 @@ function onBodyClick(menuId)
else
{
popup = document.getElementById(menuId);
popup.setAttribute("style", "visibility: hidden");
hideMenu(popup);
document.body.setAttribute("onclick", bodyOnClick);
}
return false;
}
function hideMenu(menuNode)
{
// log('hiding menu "' + menuNode.getAttribute('id') + '"');
if (menuNode.submenu)
{
hideMenu(menuNode.submenu);
menuNode.submenu = null;
}
menuNode.style.visibility = "hidden";
}
function onMenuEntryClick(node, event, menuId)
{
id = node.getAttribute("id");
@@ -325,3 +352,116 @@ function onMenuEntryClick(node, event, menuId)
return false;
}
function log(message) {
if (logArea)
logArea.innerHTML = logArea.innerHTML + message + '<br />' + "\n";
}
function dropDownSubmenu(event)
{
var node = event.target;
var submenu = node.getAttribute("submenu");
if (submenu && submenu != "") {
if (node.parentNode.parentNode.submenu)
hideMenu(node.parentNode.parentNode.submenu);
var submenuNode = document.getElementById(submenu);
node.parentNode.parentNode.submenu = submenuNode;
var menuTop = (node.parentNode.parentNode.offsetTop
+ node.offsetTop - 1);
var menuLeft = (node.parentNode.parentNode.offsetLeft
+ node.parentNode.parentNode.offsetWidth
- 2);
submenuNode.style.top = menuTop + "px";
submenuNode.style.left = menuLeft + "px";
submenuNode.style.visibility = "visible";
}
}
/* drag handle */
var dragHandle;
var dragHandleOrigX;
var dragHandleOrigLeft;
var dragHandleOrigRight;
function startHandleDragging(event) {
if (event.button == 0) {
var leftBlock = event.target.getAttribute('leftblock');
var rightBlock = event.target.getAttribute('rightblock');
dragHandle = event.target;
dragHandleOrigX = dragHandle.offsetLeft;
dragHandleOrigLeft = document.getElementById(leftBlock).offsetWidth;
dragHandleOrigRight = document.getElementById(rightBlock).offsetLeft;
document.body.setAttribute('onmouseup', 'stopHandleDragging(event);');
document.body.setAttribute('onmousemove', 'dragHandleMove(event, "'
+ leftBlock
+ '", "'
+ rightBlock
+ '");');
document.body.style.cursor = "e-resize";
dragHandleMove(event, leftBlock, rightBlock);
event.cancelBubble = true;
}
return false;
}
function stopHandleDragging(event) {
var diffX = (event.clientX - dragHandleOrigX
- (dragHandle.offsetWidth / 2));
var lBlock
= document.getElementById(dragHandle.getAttribute('leftblock'));
var rBlock
= document.getElementById(dragHandle.getAttribute('rightblock'));
lBlock.style.width = (dragHandleOrigLeft + diffX) + 'px';
rBlock.style.left = (dragHandleOrigRight + diffX) + 'px';
document.body.setAttribute('onmousemove', '');
document.body.setAttribute('onmouseup', '');
document.body.setAttribute('style', '');
event.cancelBubble = true;
return false;
}
function dragHandleMove(event, leftBlock, rightBlock) {
if (typeof(dragHandle) == undefined
|| !dragHandle)
stopHandling(event);
else {
var width = dragHandle.offsetWidth;
var hX = event.clientX;
if (hX > -1) {
var newLeft = hX - (width / 2);
dragHandle.style.left = newLeft + 'px';
event.cancelBubble = true;
return false;
}
}
}
function dragHandleDoubleClick(event) {
dragHandle = event.target;
var lBlock
= document.getElementById(dragHandle.getAttribute('leftblock'));
var lLeft = lBlock.offsetLeft;
if (dragHandle.offsetLeft > lLeft) {
var rBlock
= document.getElementById(dragHandle.getAttribute('rightblock'));
var leftDiff = rBlock.offsetLeft - dragHandle.offsetLeft;
dragHandle.style.left = lLeft + 'px';
lBlock.style.width = '0px';
rBlock.style.left = (lLeft + leftDiff) + 'px';
}
}