DistributeElementsMenuProvider.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import ICONS from './DistributeElementsIcons';
  2. import { assign } from 'min-dash';
  3. /**
  4. * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').default} PopupMenu
  5. * @typedef {import('./BpmnDistributeElements').default} DistributeElements
  6. * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate
  7. * @typedef {import('diagram-js/lib/features/rules/Rules').default} Rules
  8. *
  9. * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').PopupMenuEntries} PopupMenuEntries
  10. * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').default} PopupMenuProvider
  11. * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').PopupMenuTarget} PopupMenuTarget
  12. */
  13. var LOW_PRIORITY = 900;
  14. /**
  15. * A provider for the distribute elements popup menu.
  16. *
  17. * @implements {PopupMenuProvider}
  18. *
  19. * @param {PopupMenu} popupMenu
  20. * @param {DistributeElements} distributeElements
  21. * @param {Translate} translate
  22. * @param {Rules} rules
  23. */
  24. export default function DistributeElementsMenuProvider(
  25. popupMenu, distributeElements, translate, rules) {
  26. this._distributeElements = distributeElements;
  27. this._translate = translate;
  28. this._popupMenu = popupMenu;
  29. this._rules = rules;
  30. popupMenu.registerProvider('align-elements', LOW_PRIORITY, this);
  31. }
  32. DistributeElementsMenuProvider.$inject = [
  33. 'popupMenu',
  34. 'distributeElements',
  35. 'translate',
  36. 'rules'
  37. ];
  38. /**
  39. * @param {PopupMenuTarget} target
  40. *
  41. * @return {PopupMenuEntries}
  42. */
  43. DistributeElementsMenuProvider.prototype.getPopupMenuEntries = function(target) {
  44. var entries = {};
  45. if (this._isAllowed(target)) {
  46. assign(entries, this._getEntries(target));
  47. }
  48. return entries;
  49. };
  50. DistributeElementsMenuProvider.prototype._isAllowed = function(elements) {
  51. return this._rules.allowed('elements.distribute', { elements: elements });
  52. };
  53. DistributeElementsMenuProvider.prototype._getEntries = function(elements) {
  54. var distributeElements = this._distributeElements,
  55. translate = this._translate,
  56. popupMenu = this._popupMenu;
  57. var entries = {
  58. 'distribute-elements-horizontal': {
  59. group: 'distribute',
  60. title: translate('Distribute elements horizontally'),
  61. className: 'bjs-align-elements-menu-entry',
  62. imageHtml: ICONS['horizontal'],
  63. action: function(event, entry) {
  64. distributeElements.trigger(elements, 'horizontal');
  65. popupMenu.close();
  66. }
  67. },
  68. 'distribute-elements-vertical': {
  69. group: 'distribute',
  70. title: translate('Distribute elements vertically'),
  71. imageHtml: ICONS['vertical'],
  72. action: function(event, entry) {
  73. distributeElements.trigger(elements, 'vertical');
  74. popupMenu.close();
  75. }
  76. },
  77. };
  78. return entries;
  79. };