diff --git a/README.md b/README.md
index 4b1310fe..20b8a33d 100644
--- a/README.md
+++ b/README.md
@@ -114,15 +114,15 @@ $.contextMenu is published under the [MIT license](http://www.opensource.org/lic
### Unreleased
-* Nothing
+* Item icon can now be a callback to dynamically decide on icon class. - ([Issue #158](https://github.com/swisnl/jQuery-contextMenu/issues/158), [Issue #129](https://github.com/swisnl/jQuery-contextMenu/issues/129), [Issue #151](https://github.com/swisnl/jQuery-contextMenu/issues/151), [Issue #249](https://github.com/swisnl/jQuery-contextMenu/issues/249))
#### 1.7.0 (August 29th 2015) ###
* Touch support optimisations (by kccarter76)
-* changed .text to .html so there are no extra span's fixed #252
+* changed .text to .html so there are no extra span's fixed - ([Issue #252](https://github.com/swisnl/jQuery-contextMenu/issues/252))
* added visibility callback to item definition
* copy the HTML5 icon attribute when creating from HTML5 elements
-* growing menu when opening multiple times fixed #197
+* growing menu when opening multiple times fixed - ([Issue #197](https://github.com/swisnl/jQuery-contextMenu/issues/197))
* fixed failure to run tests
### 1.6.8 (August 18th 2015) ###
diff --git a/demo.html b/demo.html
index bedea2da..43e2d759 100755
--- a/demo.html
+++ b/demo.html
@@ -65,7 +65,9 @@
Example code: Simple Context Menu
"paste": {name: "Paste", icon: "paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){
+ return 'icon icon-quit';
+ }}
}
});
diff --git a/demo/accesskeys.html b/demo/accesskeys.html
index e8f3b9de..6906dc83 100755
--- a/demo/accesskeys.html
+++ b/demo/accesskeys.html
@@ -67,7 +67,7 @@ Example code: Accesskeys
"paste": {name: "Paste", icon: "paste", accesskey: "cool paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
});
});
diff --git a/demo/accesskeys_test.html b/demo/accesskeys_test.html
index 99c55812..0156fd48 100755
--- a/demo/accesskeys_test.html
+++ b/demo/accesskeys_test.html
@@ -67,7 +67,7 @@ Example code: Accesskeys
"paste": {name: "Paste", icon: "paste", accesskey: "cool paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
});
});
diff --git a/demo/callback.html b/demo/callback.html
index 0b822bdc..80b94210 100755
--- a/demo/callback.html
+++ b/demo/callback.html
@@ -73,7 +73,7 @@ Example code: Command's action (callbacks)
"paste": {name: "Paste", icon: "paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
});
});
diff --git a/demo/callback_test.html b/demo/callback_test.html
index e1742e60..24d76c6d 100755
--- a/demo/callback_test.html
+++ b/demo/callback_test.html
@@ -72,7 +72,7 @@ Example code: Command's action (callbacks)
"paste": {name: "Paste", icon: "paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
});
});
diff --git a/demo/disabled-menu.html b/demo/disabled-menu.html
index bc6462ad..13e782de 100755
--- a/demo/disabled-menu.html
+++ b/demo/disabled-menu.html
@@ -66,7 +66,7 @@ Example code: Disabled Context Menu
"paste": {name: "Paste", icon: "paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
});
diff --git a/demo/dynamic-create.html b/demo/dynamic-create.html
index 3b4e3808..5232f659 100755
--- a/demo/dynamic-create.html
+++ b/demo/dynamic-create.html
@@ -70,7 +70,7 @@ Example code: Dynamic on-demand Menu
"paste": {name: "Paste", icon: "paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
};
}
diff --git a/demo/dynamic.html b/demo/dynamic.html
index f775d50c..8d261cf0 100755
--- a/demo/dynamic.html
+++ b/demo/dynamic.html
@@ -76,7 +76,7 @@ Example code: Adding new Context Menu Triggers
"paste": {name: "Paste", icon: "paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
});
});
diff --git a/demo/menu-title.html b/demo/menu-title.html
index f180c8f2..6a070571 100755
--- a/demo/menu-title.html
+++ b/demo/menu-title.html
@@ -113,7 +113,7 @@ Example code: Menu Title
"paste": {name: "Paste", icon: "paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
});
@@ -132,7 +132,7 @@ Example code: Menu Title
"paste": {name: "Paste", icon: "paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
});
@@ -151,7 +151,7 @@ Example code: Menu Title
"paste": {name: "Paste", icon: "paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
});
diff --git a/demo/on-dom-element.html b/demo/on-dom-element.html
index 4f33ae63..784758f4 100755
--- a/demo/on-dom-element.html
+++ b/demo/on-dom-element.html
@@ -89,7 +89,7 @@ Example code: Context Menu on DOM Element
"paste": {name: "Paste", icon: "paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
});
});
diff --git a/demo/trigger-custom.html b/demo/trigger-custom.html
index 9344df44..8f0f53fa 100755
--- a/demo/trigger-custom.html
+++ b/demo/trigger-custom.html
@@ -75,7 +75,7 @@ Example code: Custom Activated Context Menu
"paste": {name: "Paste", icon: "paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
});
});
diff --git a/demo/trigger-hover-autohide.html b/demo/trigger-hover-autohide.html
index 8d05e38a..5f45156b 100755
--- a/demo/trigger-hover-autohide.html
+++ b/demo/trigger-hover-autohide.html
@@ -68,7 +68,7 @@ Example code: Hover Activated Context Menu With Autohide
"paste": {name: "Paste", icon: "paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
});
});
diff --git a/demo/trigger-hover.html b/demo/trigger-hover.html
index 34e07ca9..20599587 100755
--- a/demo/trigger-hover.html
+++ b/demo/trigger-hover.html
@@ -67,7 +67,7 @@ Example code: Hover Activated Context Menu
"paste": {name: "Paste", icon: "paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
});
});
diff --git a/demo/trigger-left-click.html b/demo/trigger-left-click.html
index ecb73d7c..db716b3b 100755
--- a/demo/trigger-left-click.html
+++ b/demo/trigger-left-click.html
@@ -67,7 +67,7 @@ Example code: Left-Click Trigger
"paste": {name: "Paste", icon: "paste"},
"delete": {name: "Delete", icon: "delete"},
"sep1": "---------",
- "quit": {name: "Quit", icon: "quit"}
+ "quit": {name: "Quit", icon: function(){ return 'icon icon-quit'; }}
}
});
});
diff --git a/src/jquery.contextMenu.js b/src/jquery.contextMenu.js
index 1070c222..5c316aba 100755
--- a/src/jquery.contextMenu.js
+++ b/src/jquery.contextMenu.js
@@ -1105,7 +1105,12 @@ var // currently active contextMenu trigger
// add icons
if (item.icon) {
- $t.addClass("icon icon-" + item.icon);
+ if($.isFunction(item.icon)){
+ item._icon = item.icon.call(this, $t, key, item)
+ } else {
+ item._icon = "icon icon-" + item.icon;
+ }
+ $t.addClass(item._icon);
}
}
@@ -1186,6 +1191,12 @@ var // currently active contextMenu trigger
// dis- / enable item
$item[disabled ? 'addClass' : 'removeClass']('disabled');
+
+ if ($.isFunction(item.icon)) {
+ $item.removeClass(item._icon);
+ item._icon = item.icon.call(this, $trigger, key, item);
+ $item.addClass(item._icon);
+ }
if (item.type) {
// dis- / enable input elements