|
import * as math from '../../math'; |
|
|
|
const ifEdge = (ele, getValue) => { |
|
if( ele.isEdge() ){ |
|
return getValue( ele ); |
|
} |
|
}; |
|
|
|
const ifEdgeRenderedPosition = (ele, getPoint) => { |
|
if( ele.isEdge() ){ |
|
let cy = ele.cy(); |
|
|
|
return math.modelToRenderedPosition( getPoint( ele ), cy.zoom(), cy.pan() ); |
|
} |
|
}; |
|
|
|
const ifEdgeRenderedPositions = (ele, getPoints) => { |
|
if( ele.isEdge() ){ |
|
let cy = ele.cy(); |
|
let pan = cy.pan(); |
|
let zoom = cy.zoom(); |
|
|
|
return getPoints( ele ).map( p => math.modelToRenderedPosition( p, zoom, pan ) ); |
|
} |
|
}; |
|
|
|
const controlPoints = ele => ele.renderer().getControlPoints( ele ); |
|
const segmentPoints = ele => ele.renderer().getSegmentPoints( ele ); |
|
const sourceEndpoint = ele => ele.renderer().getSourceEndpoint( ele ); |
|
const targetEndpoint = ele => ele.renderer().getTargetEndpoint( ele ); |
|
const midpoint = ele => ele.renderer().getEdgeMidpoint( ele ); |
|
|
|
const pts = { |
|
controlPoints: { get: controlPoints, mult: true }, |
|
segmentPoints: { get: segmentPoints, mult: true }, |
|
sourceEndpoint: { get: sourceEndpoint }, |
|
targetEndpoint: { get: targetEndpoint }, |
|
midpoint: { get: midpoint } |
|
}; |
|
|
|
const renderedName = name => 'rendered' + name[0].toUpperCase() + name.substr(1); |
|
|
|
export default Object.keys( pts ).reduce( ( obj, name ) => { |
|
let spec = pts[ name ]; |
|
let rName = renderedName( name ); |
|
|
|
obj[ name ] = function(){ return ifEdge( this, spec.get ); }; |
|
|
|
if( spec.mult ){ |
|
obj[ rName ] = function(){ return ifEdgeRenderedPositions( this, spec.get ); }; |
|
} else { |
|
obj[ rName ] = function(){ return ifEdgeRenderedPosition( this, spec.get ); }; |
|
} |
|
|
|
return obj; |
|
}, {} ); |
|
|