Skip to content

Commit

Permalink
Merge pull request #619 from swisnl/3.x-issue-612
Browse files Browse the repository at this point in the history
The contextmenu now checks `visible` on items once instead of twice.
  • Loading branch information
bbrala authored Mar 16, 2018
2 parents 27a57e0 + 55c2e42 commit 0f3e243
Show file tree
Hide file tree
Showing 9 changed files with 96 additions and 59 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
## Changelog ##

### Unreleased

#### Fixed

- The contextmenu now checks `visible` on items once instead of twice. Fixes [issue 612](https://github.com/swisnl/jQuery-contextMenu/issues/612).

### 3.0.0-beta.1

#### Migrating
Expand Down
4 changes: 2 additions & 2 deletions dist/jquery.contextMenu.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

57 changes: 33 additions & 24 deletions dist/jquery.contextMenu.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* Licensed under
* MIT License http://www.opensource.org/licenses/mit-license
*
* Date: 2018-02-20T13:33:22.652Z
* Date: 2018-03-16T10:54:38.560Z
*
*
*/(function webpackUniversalModuleDefinition(root, factory) {
Expand Down Expand Up @@ -649,7 +649,12 @@ var ContextMenuOperations = function () {
return;
}

menuData.manager.operations.update.call($trigger, e, menuData);
var hasVisibleItems = menuData.manager.operations.update.call($trigger, e, menuData);

if (hasVisibleItems === false) {
menuData.manager.handler.$currentTrigger = null;
return;
}

menuData.position.call($trigger, e, menuData, x, y);

Expand Down Expand Up @@ -1009,6 +1014,8 @@ var ContextMenuOperations = function () {
rootMenuData.manager.operations.resize(e, currentMenuData.$menu);
}

var hasVisibleItems = false;

currentMenuData.$menu.children().each(function (index, element) {
var $item = $(element);
var key = $item.data('contextMenuKey');
Expand All @@ -1024,6 +1031,11 @@ var ContextMenuOperations = function () {
} else {
visible = true;
}

if (visible) {
hasVisibleItems = true;
}

$item[visible ? 'show' : 'hide']();

$item[disabled ? 'addClass' : 'removeClass'](rootMenuData.classNames.disabled);
Expand Down Expand Up @@ -1055,9 +1067,14 @@ var ContextMenuOperations = function () {
}

if (item.$menu) {
rootMenuData.manager.operations.update.call($trigger, e, item, rootMenuData);
var subMenuHasVisibleItems = rootMenuData.manager.operations.update.call($trigger, e, item, rootMenuData);
if (subMenuHasVisibleItems) {
hasVisibleItems = true;
}
}
});

return hasVisibleItems;
}
}, {
key: 'layer',
Expand Down Expand Up @@ -1592,25 +1609,8 @@ var ContextMenuEventHandler = function () {

e.data.manager.operations.create(e, e.data);
}
var showMenu = false;

Object.keys(e.data.items).forEach(function (key) {
var visible = void 0;
if (typeof e.data.items[key].visible === 'function') {
visible = e.data.items[key].visible.call($this, e, key, e.data, e.data);
} else if (typeof e.data.items[key].visible !== 'undefined') {
visible = e.data.items[key].visible === true;
} else {
visible = true;
}
if (visible) {
showMenu = true;
}
});

if (showMenu) {
e.data.manager.operations.show.call($this, e, e.data, e.pageX, e.pageY);
}
e.data.manager.operations.show.call($this, e, e.data, e.pageX, e.pageY);
}
}
}, {
Expand All @@ -1626,7 +1626,10 @@ var ContextMenuEventHandler = function () {
var $this = $(this);

if (e.data.manager.handler.$currentTrigger && e.data.manager.handler.$currentTrigger.length && !e.data.manager.handler.$currentTrigger.is($this)) {
e.data.manager.handler.$currentTrigger.data('contextMenu').$menu.trigger($.Event('contextmenu', { data: e.data, originalEvent: e }));
e.data.manager.handler.$currentTrigger.data('contextMenu').$menu.trigger($.Event('contextmenu', {
data: e.data,
originalEvent: e
}));
}

if (e.button === 2) {
Expand Down Expand Up @@ -1941,7 +1944,10 @@ var ContextMenuEventHandler = function () {
default:
var k = String.fromCharCode(e.keyCode).toUpperCase();
if (rootMenuData.accesskeys && rootMenuData.accesskeys[k]) {
rootMenuData.accesskeys[k].$node.trigger(rootMenuData.accesskeys[k].$menu ? 'contextmenu:focus' : 'mouseup', { data: rootMenuData, originalEvent: e });
rootMenuData.accesskeys[k].$node.trigger(rootMenuData.accesskeys[k].$menu ? 'contextmenu:focus' : 'mouseup', {
data: rootMenuData,
originalEvent: e
});
return;
}
break;
Expand Down Expand Up @@ -2082,7 +2088,10 @@ var ContextMenuEventHandler = function () {
}

var targetMenu = currentMenuData.$menu ? currentMenuData : rootMenuData;
targetMenu.$menu.children('.' + rootMenuData.classNames.hover).trigger('contextmenu:blur', { data: targetMenu, originalEvent: e }).children('.hover').trigger('contextmenu:blur', { data: targetMenu, originalEvent: e });
targetMenu.$menu.children('.' + rootMenuData.classNames.hover).trigger('contextmenu:blur', {
data: targetMenu,
originalEvent: e
}).children('.hover').trigger('contextmenu:blur', { data: targetMenu, originalEvent: e });

if ($this.hasClass(rootMenuData.classNames.disabled) || $this.hasClass(rootMenuData.classNames.notSelectable)) {
currentMenuData.$selected = null;
Expand Down
Loading

0 comments on commit 0f3e243

Please sign in to comment.