12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /**
- * 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;
- })();
|