You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.6 KiB
72 lines
1.6 KiB
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; |
|
};
|
|
|