Skip to main content

PathEditor

JointJS+ provides a PathEditor plugin that enables the ability to edit <path> elements via an editing overlay.

Installation​

Access PathEditor via the ui namespace, and create an instance. A <path> SVGPathElement reference on the page is needed.

import { ui } from '@joint/plus';

new ui.PathEditor({
pathElement: document.querySelector('path')
});
There is also a UMD version available

Include joint.ui.pathEditor.js and joint.ui.pathEditor.css in your HTML:

index.html
<link rel="stylesheet" type="text/css" href="joint.ui.pathEditor.css">
<script src="joint.ui.pathEditor.js"></script>

Access PathEditor through the joint.ui namespace:

index.js
new joint.ui.PathEditor({
pathElement: document.querySelector('path')
});

How does PathEditor work?​

PathEditor provides the possibility to edit <path> elements via an editing overlay. Users can interact with the path's segments, anchor points and curve control points.

Create a PathEditor​

The following example creates an instance of path editor. Users can interact move segments and control points. Double-click to create or remove an anchor point, or lock a control point.

PathEditor interaction​

Users can interact with PathEditor objects by clicking/touching editor overlay elements:

mousedown / touchstart​

mousedown .anchor-point / touchstart .anchor-point​

Call onAnchorPointPointerDown(event), which calls startMoving() followed by delegateDocumentEvents() by default.

mousedown .control-point / touchstart .control-point​

Calls onControlPointPointerDown(event), which calls startMoving() followed by delegateDocumentEvents() by default.

mousedown .segment-path / touchstart .segment-path​

Calls onSegmentPathPointerDown(event), which calls startMoving() followed by delegateDocumentEvents() by default.

Double-clicking editor overlay elements triggers additional actions:

dblclick​

dblclick .anchor-point​

Calls onAnchorPointDoubleClick(event), which calls removeAnchorPoint() by default.

dblclick .control-point​

Calls onControlPointDoubleClick(event), which calls lockControlPoint() by default.

dblclick .segment-path​

Calls onSegmentPathDoubleClick(event), which calls createAnchorPoint() by default.

Respond to user interaction events​

Various methods are provided to respond to user interaction events (e.g. click, touch, dblclick). Some of them are bound with user interactions by default, but others are not. Those may be called upon by delegated events from your application. For example:

pathEditor.delegate('contextmenu', '.segment-path', function(event) {
event.stopPropagation();
event.preventDefault();

this.convertSegmentPath(event);
}.bind(pathEditor));

Reacting to PathEditor events​

You can react to path editor events by using the on() method:

pathEditor.on({
'path:control-point:select': console.log('started moving control point'),
'path:control-point:adjusting': console.log('moving control point'),
'path:control-point:adjust': console.log('stopped moving control point')
});

It is also possible to specify a custom context for the on() method. This is useful when you need to handle user interaction on your path editor from within another mvc object, for instance:

pathEditor.on({
'path:edit': this.onPathEdit.bind(this),
}, this);