UNPKG

golfnet-editor

Version:
132 lines (102 loc) 3.01 kB
import { forEach } from 'min-dash'; /** * This module is an element agnostic replace menu provider for the popup menu. */ export default function ReplaceMenuProvider( popupMenu, modeling, moddle, postitReplace, rules, translate) { this._popupMenu = popupMenu; this._modeling = modeling; this._moddle = moddle; this._postitReplace = postitReplace; this._rules = rules; this._translate = translate; this.register(); } ReplaceMenuProvider.$inject = [ 'popupMenu', 'modeling', 'moddle', 'postitReplace', 'rules', 'translate' ]; /** * Register replace menu provider in the popup menu */ ReplaceMenuProvider.prototype.register = function() { this._popupMenu.registerProvider('postit-replace', this); }; /** * Get all entries from replaceOptions for the given element and apply filters * on them. Get for example only elements, which are different from the current one. * * @param {djs.model.Base} element * * @return {Array<Object>} a list of menu entry items */ ReplaceMenuProvider.prototype.getEntries = function(element) { var rules = this._rules; var entries = []; if (!rules.allowed('shape.replace', { element: element })) { return []; } return entries; }; /** * Get a list of header items for the given element. This includes buttons * for multi instance markers and for the ad hoc marker. * * @param {djs.model.Base} element * * @return {Array<Object>} a list of menu entry items */ ReplaceMenuProvider.prototype.getHeaderEntries = function(element) { var headerEntries = []; return headerEntries; }; /** * Creates an array of menu entry objects for a given element and filters the replaceOptions * according to a filter function. * * @param {djs.model.Base} element * @param {Object} replaceOptions * * @return {Array<Object>} a list of menu items */ ReplaceMenuProvider.prototype._createEntries = function(element, replaceOptions) { var menuEntries = []; var self = this; forEach(replaceOptions, function(definition) { var entry = self._createMenuEntry(definition, element); menuEntries.push(entry); }); return menuEntries; }; /** * Creates and returns a single menu entry item. * * @param {Object} definition a single replace options definition object * @param {djs.model.Base} element * @param {Function} [action] an action callback function which gets called when * the menu entry is being triggered. * * @return {Object} menu entry item */ ReplaceMenuProvider.prototype._createMenuEntry = function(definition, element, action) { var translate = this._translate; var replaceElement = this._postitReplace.replaceElement; var replaceAction = function() { return replaceElement(element, definition.target); }; action = action || replaceAction; var menuEntry = { label: translate(definition.label), className: definition.className, id: definition.actionName, action: action }; return menuEntry; };