Skip to content

Commit f11a0c3

Browse files
committed
add hidden attribute, change attributes to functions
Add the hidden attribute which adds display: none to the menu option. Allow selected,disabled,hidden to be functions instead of true|false
1 parent 0f72e8d commit f11a0c3

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

src/jquery.contextMenu.css

+3
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@
6666
.context-menu-item.disabled {
6767
color: #666;
6868
}
69+
.context-menu-item.hidden {
70+
display: none;
71+
}
6972

7073
.context-menu-input.hover,
7174
.context-menu-item.disabled.hover {

src/jquery.contextMenu.js

+12-9
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ var // currently active contextMenu trigger
505505
return;
506506
} else {
507507
(opt.$selected && opt.$selected.parent() || opt.$menu)
508-
.children(':not(.disabled, .not-selectable)')[e.keyCode == 36 ? 'first' : 'last']()
508+
.children(':not(.hidden, .disabled, .not-selectable)')[e.keyCode == 36 ? 'first' : 'last']()
509509
.trigger('contextmenu:focus');
510510
e.preventDefault();
511511
return;
@@ -571,7 +571,7 @@ var // currently active contextMenu trigger
571571
$round = $prev;
572572

573573
// skip disabled
574-
while ($prev.hasClass('disabled') || $prev.hasClass('not-selectable')) {
574+
while ($prev.hasClass('hidden') || $prev.hasClass('disabled') || $prev.hasClass('not-selectable')) {
575575
if ($prev.prev().length) {
576576
$prev = $prev.prev();
577577
} else {
@@ -614,7 +614,7 @@ var // currently active contextMenu trigger
614614
$round = $next;
615615

616616
// skip disabled
617-
while ($next.hasClass('disabled') || $next.hasClass('not-selectable')) {
617+
while ($prev.hasClass('hidden') || $next.hasClass('disabled') || $next.hasClass('not-selectable')) {
618618
if ($next.next().length) {
619619
$next = $next.next();
620620
} else {
@@ -693,7 +693,7 @@ var // currently active contextMenu trigger
693693
(opt.$menu ? opt : root).$menu
694694
.children('.hover').trigger('contextmenu:blur');
695695

696-
if ($this.hasClass('disabled') || $this.hasClass('not-selectable')) {
696+
if ($prev.hasClass('hidden') || $this.hasClass('disabled') || $this.hasClass('not-selectable')) {
697697
opt.$selected = null;
698698
return;
699699
}
@@ -727,7 +727,7 @@ var // currently active contextMenu trigger
727727
callback;
728728

729729
// abort if the key is unknown or disabled or is a menu
730-
if (!opt.items[key] || $this.is('.disabled, .context-menu-submenu, .context-menu-separator, .not-selectable')) {
730+
if (!opt.items[key] || $this.is('.hidden, .disabled, .context-menu-submenu, .context-menu-separator, .not-selectable')) {
731731
return;
732732
}
733733

@@ -1151,10 +1151,13 @@ var // currently active contextMenu trigger
11511151
var $item = $(this),
11521152
key = $item.data('contextMenuKey'),
11531153
item = opt.items[key],
1154-
disabled = ($.isFunction(item.disabled) && item.disabled.call($trigger, key, root)) || item.disabled === true;
1155-
1154+
disabled = ($.isFunction(item.disabled) && item.disabled.call($trigger, key, root)) || item.disabled === true,
1155+
hidden = ($.isFunction(item.hidden) && item.hidden.call($trigger, key, root)) || item.hidden === true,
1156+
selected = ($.isFunction(item.selected) ? item.selected.call($trigger, key, root)) : item.selected);
1157+
11561158
// dis- / enable item
11571159
$item[disabled ? 'addClass' : 'removeClass']('disabled');
1160+
$item[hidden ? 'addClass' : 'removeClass']('hidden');
11581161

11591162
if (item.type) {
11601163
// dis- / enable input elements
@@ -1169,11 +1172,11 @@ var // currently active contextMenu trigger
11691172

11701173
case 'checkbox':
11711174
case 'radio':
1172-
item.$input.val(item.value || "").prop('checked', !!item.selected);
1175+
item.$input.val(item.value || "").prop('checked', !!selected);
11731176
break;
11741177

11751178
case 'select':
1176-
item.$input.val(item.selected || "");
1179+
item.$input.val(selected || "");
11771180
break;
11781181
}
11791182
}

0 commit comments

Comments
 (0)