parent
b22fe72778
commit
6d1f0aadc4
@ -0,0 +1,67 @@ |
||||
/** |
||||
* Package: svgedit.contextmenu |
||||
*
|
||||
* Licensed under the Apache License, Version 2 |
||||
*
|
||||
* Author: Adam Bender |
||||
*/ |
||||
// Dependencies:
|
||||
// 1) jQuery (for dom injection of context menus)
|
||||
var svgedit = svgedit || {}; |
||||
(function() { |
||||
var self = this; |
||||
if (!svgedit.contextmenu) { |
||||
svgedit.contextmenu = {}; |
||||
} |
||||
self.contextMenuExtensions = {} |
||||
var addContextMenuItem = function(menuItem) { |
||||
// menuItem: {id, label, shortcut, action}
|
||||
if (!menuItemIsValid(menuItem)) { |
||||
console |
||||
.error("Menu items must be defined and have at least properties: id, label, action, where action must be a function"); |
||||
return; |
||||
} |
||||
if (menuItem.id in self.contextMenuExtensions) { |
||||
console.error('Cannot add extension "' + menuItem.id |
||||
+ '", an extension by that name already exists"'); |
||||
return; |
||||
} |
||||
// Register menuItem action, see below for deferred menu dom injection
|
||||
console.log("Registed contextmenu item: {id:"+ menuItem.id+", label:"+menuItem.label+"}"); |
||||
self.contextMenuExtensions[menuItem.id] = menuItem; |
||||
//TODO: Need to consider how to handle custom enable/disable behavior
|
||||
} |
||||
var hasCustomHandler = function(handlerKey) { |
||||
return self.contextMenuExtensions[handlerKey] && true; |
||||
} |
||||
var getCustomHandler = function(handlerKey) { |
||||
return self.contextMenuExtensions[handlerKey].action; |
||||
} |
||||
var injectExtendedContextMenuItemIntoDom = function(menuItem) { |
||||
if (Object.keys(self.contextMenuExtensions).length == 0) { |
||||
// all menuItems appear at the bottom of the menu in their own container.
|
||||
// if this is the first extension menu we need to add the separator.
|
||||
$("#cmenu_canvas").append("<li class='separator'>"); |
||||
} |
||||
var shortcut = menuItem.shortcut || ""; |
||||
$("#cmenu_canvas").append("<li class='disabled'><a href='#" + menuItem.id + "'>"
|
||||
+ menuItem.label + "<span class='shortcut'>" |
||||
+ shortcut + "</span></a></li>"); |
||||
} |
||||
|
||||
var menuItemIsValid = function(menuItem) { |
||||
return menuItem && menuItem.id && menuItem.label && menuItem.action && typeof menuItem.action == 'function'; |
||||
} |
||||
|
||||
// Defer injection to wait out initial menu processing. This probably goes away once all context
|
||||
// menu behavior is brought here.
|
||||
svgEditor.ready(function() { |
||||
for (menuItem in contextMenuExtensions) { |
||||
injectExtendedContextMenuItemIntoDom(contextMenuExtensions[menuItem]); |
||||
} |
||||
}); |
||||
svgedit.contextmenu.resetCustomMenus = function(){self.contextMenuExtensions = {}} |
||||
svgedit.contextmenu.add = addContextMenuItem; |
||||
svgedit.contextmenu.hasCustomHandler = hasCustomHandler; |
||||
svgedit.contextmenu.getCustomHandler = getCustomHandler; |
||||
})(); |
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue