diagram-js
Advanced tools
Comparing version 8.6.0 to 8.7.0
@@ -9,2 +9,7 @@ # Changelog | ||
## 8.7.0 | ||
* `FEAT`: use rules to determine which elements should be aligned and distributed ([#656](https://github.com/bpmn-io/diagram-js/pull/656)) | ||
* `FIX`: distribute elements regardless their relative size ([#656](https://github.com/bpmn-io/diagram-js/pull/656)) | ||
## 8.6.0 | ||
@@ -11,0 +16,0 @@ |
import { | ||
filter, | ||
forEach, | ||
isArray, | ||
sortBy | ||
@@ -40,7 +41,8 @@ } from 'min-dash'; | ||
export default function AlignElements(modeling) { | ||
export default function AlignElements(modeling, rules) { | ||
this._modeling = modeling; | ||
this._rules = rules; | ||
} | ||
AlignElements.$inject = [ 'modeling' ]; | ||
AlignElements.$inject = [ 'modeling', 'rules' ]; | ||
@@ -158,4 +160,6 @@ | ||
AlignElements.prototype.trigger = function(elements, type) { | ||
var modeling = this._modeling; | ||
var modeling = this._modeling, | ||
allowed; | ||
// filter out elements which cannot be aligned | ||
var filteredElements = filter(elements, function(element) { | ||
@@ -165,3 +169,9 @@ return !(element.waypoints || element.host || element.labelTarget); | ||
if (filteredElements.length < 2) { | ||
// filter out elements via rules | ||
allowed = this._rules.allowed('elements.align', { elements: filteredElements }); | ||
if (isArray(allowed)) { | ||
filteredElements = allowed; | ||
} | ||
if (filteredElements.length < 2 || !allowed) { | ||
return; | ||
@@ -168,0 +178,0 @@ } |
import { | ||
sortBy, | ||
forEach, | ||
filter | ||
isArray | ||
} from 'min-dash'; | ||
@@ -18,3 +18,3 @@ | ||
*/ | ||
export default function DistributeElements(modeling) { | ||
export default function DistributeElements(modeling, rules) { | ||
this._modeling = modeling; | ||
@@ -24,28 +24,14 @@ | ||
// register filter for filtering big elements | ||
this.registerFilter(function(elements, axis, dimension) { | ||
var elementsSize = 0, | ||
numOfShapes = 0, | ||
avgDimension; | ||
this.registerFilter(function(elements) { | ||
var allowed = rules.allowed('elements.distribute', { elements: elements }); | ||
forEach(elements, function(element) { | ||
if (element.waypoints || element.labelTarget) { | ||
return; | ||
} | ||
if (isArray(allowed)) { | ||
return allowed; | ||
} | ||
elementsSize += element[dimension]; | ||
numOfShapes += 1; | ||
}); | ||
avgDimension = Math.round(elementsSize / numOfShapes); | ||
return filter(elements, function(element) { | ||
return element[dimension] < (avgDimension + 50); | ||
}); | ||
return allowed ? elements : []; | ||
}); | ||
} | ||
DistributeElements.$inject = [ 'modeling' ]; | ||
DistributeElements.$inject = [ 'modeling', 'rules' ]; | ||
@@ -52,0 +38,0 @@ |
{ | ||
"name": "diagram-js", | ||
"version": "8.6.0", | ||
"version": "8.7.0", | ||
"description": "A toolbox for displaying and modifying diagrams on the web", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
682291
22284