/* eslint-disable no-var */ /* globals $, svgEditor */ /** * 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 || {}; // eslint-disable-line no-use-before-define (function () { var self = this; if (!svgedit.contextmenu) { svgedit.contextmenu = {}; } self.contextMenuExtensions = {}; var menuItemIsValid = function (menuItem) { return menuItem && menuItem.id && menuItem.label && menuItem.action && typeof menuItem.action === 'function'; }; 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("