Skip to content

Commit 0f3e243

Browse files
authored
Merge pull request #619 from swisnl/3.x-issue-612
The contextmenu now checks `visible` on items once instead of twice.
2 parents 27a57e0 + 55c2e42 commit 0f3e243

File tree

9 files changed

+96
-59
lines changed

9 files changed

+96
-59
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
## Changelog ##
22

3+
### Unreleased
4+
5+
#### Fixed
6+
7+
- The contextmenu now checks `visible` on items once instead of twice. Fixes [issue 612](https://github.com/swisnl/jQuery-contextMenu/issues/612).
8+
39
### 3.0.0-beta.1
410

511
#### Migrating

dist/jquery.contextMenu.css

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/jquery.contextMenu.js

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* Licensed under
1414
* MIT License http://www.opensource.org/licenses/mit-license
1515
*
16-
* Date: 2018-02-20T13:33:22.652Z
16+
* Date: 2018-03-16T10:54:38.560Z
1717
*
1818
*
1919
*/(function webpackUniversalModuleDefinition(root, factory) {
@@ -649,7 +649,12 @@ var ContextMenuOperations = function () {
649649
return;
650650
}
651651

652-
menuData.manager.operations.update.call($trigger, e, menuData);
652+
var hasVisibleItems = menuData.manager.operations.update.call($trigger, e, menuData);
653+
654+
if (hasVisibleItems === false) {
655+
menuData.manager.handler.$currentTrigger = null;
656+
return;
657+
}
653658

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

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

1017+
var hasVisibleItems = false;
1018+
10121019
currentMenuData.$menu.children().each(function (index, element) {
10131020
var $item = $(element);
10141021
var key = $item.data('contextMenuKey');
@@ -1024,6 +1031,11 @@ var ContextMenuOperations = function () {
10241031
} else {
10251032
visible = true;
10261033
}
1034+
1035+
if (visible) {
1036+
hasVisibleItems = true;
1037+
}
1038+
10271039
$item[visible ? 'show' : 'hide']();
10281040

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

10571069
if (item.$menu) {
1058-
rootMenuData.manager.operations.update.call($trigger, e, item, rootMenuData);
1070+
var subMenuHasVisibleItems = rootMenuData.manager.operations.update.call($trigger, e, item, rootMenuData);
1071+
if (subMenuHasVisibleItems) {
1072+
hasVisibleItems = true;
1073+
}
10591074
}
10601075
});
1076+
1077+
return hasVisibleItems;
10611078
}
10621079
}, {
10631080
key: 'layer',
@@ -1592,25 +1609,8 @@ var ContextMenuEventHandler = function () {
15921609

15931610
e.data.manager.operations.create(e, e.data);
15941611
}
1595-
var showMenu = false;
1596-
1597-
Object.keys(e.data.items).forEach(function (key) {
1598-
var visible = void 0;
1599-
if (typeof e.data.items[key].visible === 'function') {
1600-
visible = e.data.items[key].visible.call($this, e, key, e.data, e.data);
1601-
} else if (typeof e.data.items[key].visible !== 'undefined') {
1602-
visible = e.data.items[key].visible === true;
1603-
} else {
1604-
visible = true;
1605-
}
1606-
if (visible) {
1607-
showMenu = true;
1608-
}
1609-
});
16101612

1611-
if (showMenu) {
1612-
e.data.manager.operations.show.call($this, e, e.data, e.pageX, e.pageY);
1613-
}
1613+
e.data.manager.operations.show.call($this, e, e.data, e.pageX, e.pageY);
16141614
}
16151615
}
16161616
}, {
@@ -1626,7 +1626,10 @@ var ContextMenuEventHandler = function () {
16261626
var $this = $(this);
16271627

16281628
if (e.data.manager.handler.$currentTrigger && e.data.manager.handler.$currentTrigger.length && !e.data.manager.handler.$currentTrigger.is($this)) {
1629-
e.data.manager.handler.$currentTrigger.data('contextMenu').$menu.trigger($.Event('contextmenu', { data: e.data, originalEvent: e }));
1629+
e.data.manager.handler.$currentTrigger.data('contextMenu').$menu.trigger($.Event('contextmenu', {
1630+
data: e.data,
1631+
originalEvent: e
1632+
}));
16301633
}
16311634

16321635
if (e.button === 2) {
@@ -1941,7 +1944,10 @@ var ContextMenuEventHandler = function () {
19411944
default:
19421945
var k = String.fromCharCode(e.keyCode).toUpperCase();
19431946
if (rootMenuData.accesskeys && rootMenuData.accesskeys[k]) {
1944-
rootMenuData.accesskeys[k].$node.trigger(rootMenuData.accesskeys[k].$menu ? 'contextmenu:focus' : 'mouseup', { data: rootMenuData, originalEvent: e });
1947+
rootMenuData.accesskeys[k].$node.trigger(rootMenuData.accesskeys[k].$menu ? 'contextmenu:focus' : 'mouseup', {
1948+
data: rootMenuData,
1949+
originalEvent: e
1950+
});
19451951
return;
19461952
}
19471953
break;
@@ -2082,7 +2088,10 @@ var ContextMenuEventHandler = function () {
20822088
}
20832089

20842090
var targetMenu = currentMenuData.$menu ? currentMenuData : rootMenuData;
2085-
targetMenu.$menu.children('.' + rootMenuData.classNames.hover).trigger('contextmenu:blur', { data: targetMenu, originalEvent: e }).children('.hover').trigger('contextmenu:blur', { data: targetMenu, originalEvent: e });
2091+
targetMenu.$menu.children('.' + rootMenuData.classNames.hover).trigger('contextmenu:blur', {
2092+
data: targetMenu,
2093+
originalEvent: e
2094+
}).children('.hover').trigger('contextmenu:blur', { data: targetMenu, originalEvent: e });
20862095

20872096
if ($this.hasClass(rootMenuData.classNames.disabled) || $this.hasClass(rootMenuData.classNames.notSelectable)) {
20882097
currentMenuData.$selected = null;

0 commit comments

Comments
 (0)