From 592b3eaef75cc849c41590451c7347a3b6880428 Mon Sep 17 00:00:00 2001 From: shayanelhami Date: Wed, 17 Jul 2013 10:07:16 +0100 Subject: [PATCH 1/6] Add feature: dynamic icons --- src/jquery.contextMenu.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/jquery.contextMenu.js b/src/jquery.contextMenu.js index 103a5858..c8c8c472 100755 --- a/src/jquery.contextMenu.js +++ b/src/jquery.contextMenu.js @@ -1076,7 +1076,8 @@ var // currently active contextMenu trigger // add icons if (item.icon) { - $t.addClass("icon icon-" + item.icon); + var icon = ($.isFunction(item.icon)) ? item.icon.call(this, $t, key, item) : item.icon; + $t.addClass("icon icon-" + icon); } } From 4cce9ea4f06f41c270b22391ea22101f33e955d2 Mon Sep 17 00:00:00 2001 From: shayanelhami Date: Wed, 17 Jul 2013 10:20:37 +0100 Subject: [PATCH 2/6] Add feature: dynamic icons --- src/jquery.contextMenu.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/jquery.contextMenu.js b/src/jquery.contextMenu.js index c8c8c472..10d1bbad 100755 --- a/src/jquery.contextMenu.js +++ b/src/jquery.contextMenu.js @@ -1076,8 +1076,8 @@ var // currently active contextMenu trigger // add icons if (item.icon) { - var icon = ($.isFunction(item.icon)) ? item.icon.call(this, $t, key, item) : item.icon; - $t.addClass("icon icon-" + icon); + item._icon = ($.isFunction(item.icon)) ? item.icon.call(this, $t, key, item) : item.icon; + $t.addClass("icon icon-" + item._icon); } } @@ -1150,6 +1150,11 @@ var // currently active contextMenu trigger // dis- / enable item $item[disabled ? 'addClass' : 'removeClass']('disabled'); + + if ($.isFunction(item.icon)) { + $item.removeClass("icon-" + item._icon); + $item.addClass("icon-" + item.icon.call(this, $trigger, key, item)); + } if (item.type) { // dis- / enable input elements From 8b685ce0588efc3957ae99b321bf56d2f1aa520f Mon Sep 17 00:00:00 2001 From: shayanelhami Date: Wed, 17 Jul 2013 11:26:14 +0100 Subject: [PATCH 3/6] Fix: remember _icon on every update --- src/jquery.contextMenu.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/jquery.contextMenu.js b/src/jquery.contextMenu.js index 10d1bbad..1d2a99e8 100755 --- a/src/jquery.contextMenu.js +++ b/src/jquery.contextMenu.js @@ -1153,7 +1153,8 @@ var // currently active contextMenu trigger if ($.isFunction(item.icon)) { $item.removeClass("icon-" + item._icon); - $item.addClass("icon-" + item.icon.call(this, $trigger, key, item)); + item._icon = item.icon.call(this, $trigger, key, item); + $item.addClass("icon-" + item._icon); } if (item.type) { From 1f68618d1fa50105d400a236cb935d569995ad86 Mon Sep 17 00:00:00 2001 From: Bjorn Brala Date: Sun, 30 Aug 2015 03:01:47 -0700 Subject: [PATCH 4/6] make full icon class configurable --- src/jquery.contextMenu.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/jquery.contextMenu.js b/src/jquery.contextMenu.js index 5d6ed9be..5c316aba 100755 --- a/src/jquery.contextMenu.js +++ b/src/jquery.contextMenu.js @@ -1105,8 +1105,12 @@ var // currently active contextMenu trigger // add icons if (item.icon) { - item._icon = ($.isFunction(item.icon)) ? item.icon.call(this, $t, key, item) : 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); } } @@ -1189,9 +1193,9 @@ var // currently active contextMenu trigger $item[disabled ? 'addClass' : 'removeClass']('disabled'); if ($.isFunction(item.icon)) { - $item.removeClass("icon-" + item._icon); + $item.removeClass(item._icon); item._icon = item.icon.call(this, $trigger, key, item); - $item.addClass("icon-" + item._icon); + $item.addClass(item._icon); } if (item.type) { From 45bea2947ee79070f3f7a952885384b51e29b720 Mon Sep 17 00:00:00 2001 From: Bjorn Brala Date: Sun, 30 Aug 2015 03:18:10 -0700 Subject: [PATCH 5/6] Adjust demo's to show callback function for icons. References: PR#158 Issue #158 Issue #129 Issue #151 Issue #249 --- demo.html | 4 +++- demo/accesskeys.html | 2 +- demo/accesskeys_test.html | 2 +- demo/callback.html | 2 +- demo/callback_test.html | 2 +- demo/disabled-menu.html | 2 +- demo/dynamic-create.html | 2 +- demo/dynamic.html | 2 +- demo/menu-title.html | 6 +++--- demo/on-dom-element.html | 2 +- demo/trigger-custom.html | 2 +- demo/trigger-hover-autohide.html | 2 +- demo/trigger-hover.html | 2 +- demo/trigger-left-click.html | 2 +- 14 files changed, 18 insertions(+), 16 deletions(-) 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'; }} } }); }); From 6d73e2f4bd1818339126b2c62431036b1976ea36 Mon Sep 17 00:00:00 2001 From: Bjorn Brala Date: Sun, 30 Aug 2015 03:25:57 -0700 Subject: [PATCH 6/6] Update readme.md with unreleased change --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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) ###