diff --git a/ChangeLog b/ChangeLog index 5e48f052..125b4d1b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -157,6 +157,8 @@ for reading. * Fixed bug with getting showed menu in firefox. +* Commented e.stopImmediatePropagation() of function layerClick +in contextmenu file, for correct work of context menu. 2012.12.12, Version 0.1.8 diff --git a/lib/client/dom.js b/lib/client/dom.js index 6c198f15..833eb570 100644 --- a/lib/client/dom.js +++ b/lib/client/dom.js @@ -114,7 +114,7 @@ var CloudCommander, Util, lElement.addEventListener( pType, pListener, - pUseCapture || false + pUseCapture ); Listeners.push({ @@ -133,14 +133,13 @@ var CloudCommander, Util, * @param pElement {document by default} */ DOM.addOneTimeListener = function(pType, pListener, pElement, pUseCapture){ - var lRet = this; - - DOM.addListener(pType, - function oneTime(pEvent){ - DOM.removeListener(pType, oneTime, pElement, pUseCapture); + var lRet = this, + lOneTime = function (pEvent){ + DOM.removeListener(pType, lOneTime, pElement, pUseCapture); pListener(pEvent); - }, - pUseCapture, pElement); + }; + + DOM.addListener(pType, lOneTime, pElement, pUseCapture); return lRet; }; @@ -158,7 +157,7 @@ var CloudCommander, Util, (pElement || window).removeEventListener( pType, pListener, - pUseCapture || false + pUseCapture ); return lRet; diff --git a/lib/client/menu.js b/lib/client/menu.js index bac9314f..a85985b7 100644 --- a/lib/client/menu.js +++ b/lib/client/menu.js @@ -179,13 +179,7 @@ var CloudCommander, Util, DOM, $; }, // define the elements of the menu - items: getAllItems(lMenuItems), - events:{ - hide: function(){ - var lLayer = DOM.getById('context-menu-layer'); - DOM.addOneTimeListener('contextmenu', clickProcessing, lLayer); - } - } + items: getAllItems(lMenuItems) }; return lRet; @@ -222,7 +216,7 @@ var CloudCommander, Util, DOM, $; * is not going on. All magic happening in * DOM tree */ - function clickProcessing(pEvent){ + function clickProcessing(pEvent){ /* if clicked on menu item */ var lParent = pEvent.target.parentElement, lClassName = lParent && lParent.className; @@ -268,14 +262,53 @@ var CloudCommander, Util, DOM, $; } } + function __clickProcessing(pEvent){ + var lLayer = DOM.getById('context-menu-layer'); + if(lLayer){ + var lStyle, + lParent; + + if(lLayer) + lStyle = lLayer.style.cssText; + /* hide invisible menu layer */ + if(lStyle) + lLayer.style.cssText = lStyle + .replace('z-index: 1', 'z-index:-1'); + + var lElement; + if(pEvent.$trigger) + lElement = pEvent.$trigger[0]; + else + lElement = document.elementFromPoint(pEvent.x, pEvent.y); + + var lTag = lElement.tagName; + + if(lTag === 'A' || lTag === 'SPAN'){ + if (lElement.tagName === 'A') + lParent = lElement.parentElement.parentElement; + else if(lElement.tagName === 'SPAN') + lParent = lElement.parentElement; + + if(lParent.className === '') + DOM.setCurrentFile(lParent); + } + else + DOM.setCurrentFile(lElement); + + /* show invisible menu layer */ + if(lLayer && lStyle) + lLayer.style.cssText = lStyle; + + KeyBinding.set(); + } + } + function set(){ if(!MenuSeted){ $.contextMenu(getConfig()); - - DOM.addClickListener(clickProcessing); - MenuSeted = true; + DOM.addListener('mousedown', clickProcessing); } } diff --git a/lib/client/menu/contextMenu.js b/lib/client/menu/contextMenu.js index 779c3bee..5109ba4e 100644 --- a/lib/client/menu/contextMenu.js +++ b/lib/client/menu/contextMenu.js @@ -347,19 +347,19 @@ var // currently active contextMenu trigger layerClick: function(e) { var $this = $(this), root = $this.data('contextMenuRoot'), - mouseup = false, + //mouseup = false, button = e.button, x = e.pageX, y = e.pageY, target, - offset, - selectors; + offset; + //selectors; e.preventDefault(); - e.stopImmediatePropagation(); + //e.stopImmediatePropagation(); setTimeout(function() { - var $window, hideshow, possibleTarget; + var $window;//, hideshow, possibleTarget; var triggerAction = ((root.trigger == 'left' && button === 0) || (root.trigger == 'right' && button === 2)); // find the element that would've been clicked, wasn't the layer in the way @@ -787,7 +787,7 @@ var // currently active contextMenu trigger op = { show: function(opt, x, y) { var $trigger = $(this), - offset, + //offset, css = {}; // hide any open menus