import ICONS from './AlignElementsIcons'; import { assign, forEach, } from 'min-dash'; var ALIGNMENT_OPTIONS = [ 'left', 'center', 'right', 'top', 'middle', 'bottom' ]; /** * A provider for align elements popup menu. */ export default function AlignElementsMenuProvider(popupMenu, alignElements, translate, rules) { this._alignElements = alignElements; this._translate = translate; this._popupMenu = popupMenu; this._rules = rules; popupMenu.registerProvider('align-elements', this); } AlignElementsMenuProvider.$inject = [ 'popupMenu', 'alignElements', 'translate', 'rules' ]; AlignElementsMenuProvider.prototype.getPopupMenuEntries = function(elements) { var entries = {}; if (this._isAllowed(elements)) { assign(entries, this._getEntries(elements)); } return entries; }; AlignElementsMenuProvider.prototype._isAllowed = function(elements) { return this._rules.allowed('elements.align', { elements: elements }); }; AlignElementsMenuProvider.prototype._getEntries = function(elements) { var alignElements = this._alignElements, translate = this._translate, popupMenu = this._popupMenu; var entries = {}; forEach(ALIGNMENT_OPTIONS, function(alignment) { entries[ 'align-elements-' + alignment ] = { group: 'align', title: translate('Align elements ' + alignment), className: 'bjs-align-elements-menu-entry', imageUrl: ICONS[alignment], action: function(event, entry) { alignElements.trigger(elements, alignment); popupMenu.close(); } }; }); return entries; };