Releases: clientIO/joint
Release v3.2.0
CHANGELOG
- add Sequence Diagram demo
- add HTML Elements demo
- upgrade jQuery dependency (
~3.5.0) - dia.Paper - add
beforeRenderandafterRenderoptions, addhasScheduledUpdates(), triggerrender:donein sync mode - dia.Paper - fix missing initial
render:doneevent - dia.Paper - prevent the prototype options modification, persist functions passed as options
details
new joint.dia.Paper({
// e.g. fixes `defaultConnector` option defined as a function
defaultConnector: (sourcePoint, targetPoint, route) => {
const polyline = new g.Polyline([sourcePoint, ...route, targetPoint]);
return `M ${polyline.serialize()}`;
}
});- dia.Paper -
scaleContentToFit()optionpaddingaccepts an object
details
paper.scaleContentToFit({ padding: { top: 50, bottom: 10, horizontal: 10 }});- dia.Paper - fix
isMountedargument ofviewport()option
details
new joint.dia.Paper({
viewport: function(view, isMounted) {
if (isMounted) {
// the view was already mounted
// it's visible in the paper
} else {
// the view was just created or was detached by this function in the previous run
// it's not visible in the paper (it's not in the DOM)
}
// return `true` to mount the view
// return `false` to detach the view
}
});- dia.Paper - dynamic link update priorities (fix for "link connected to other two links" update bug)
- dia.Element - port removal runs in batch
- dia.Element - add
getGroupPorts() - dia.Element - prevent exception in
getPointFromConnectedLink()when port does not exist - dia.LinkView - fix never ending batch for legacy link tools
- dia.LinkView - add
requestConnectionUpdate() - dia.LinkView - trigger
link:snap:connectandlink:snap:disconnectevents
- dia.LinkView - prevent exception when labels and connection require update
- dia.LinkView - measure snap distance for links from magnet's boundary
- dia.LinkView - add
getEndConnectionPoint() - mvc.View - add
DETACHABLEproperty to ignore viewport matching,FLAG_INSERT&FLAG_REMOVEdefined on per view basis - linkTools.Anchor: add
resetAnchoroption - linkTools.Segments: add
stopPropagationoption - connectionPoints.anchor - add
alignandalignOffsetoptions - attributes.textWrap: add
maxLineCountoption - util.breakText - retain new line characters, add
maxLineCountoption - util.sanitizeHTML: sanitize attribute values with "data:" and "vbscript:"
- Geometry - add
parallel()to Line, addserialize()to Point and Line
Release v3.1.1
CHANGELOG
- dia.CellView - prevent DOM exceptions when invalid attrs provided
- dia.ToolView - prevent
contextmenuevent (uses paper.options.guard now)
Release v3.1.0
CHANGELOG
- add RoughJS demo
- add dia.elementTools: Button, Remove, Boundary
- improve low-level performance for large graphs
- fix ES5 dependencies
- dia.Paper - validateMagnet() callback has
evtargument - dia.Paper - ignore viewport when removing views, register unmounted views on render
- dia.Graph - fix bfs() stop condition
- dia.Element - make sure only elements are taken into account in fitEmbeds()
- dia.LinkView - fix label rendering after multiple changes made to model
- dia.LinkView - fix missing
pointerupevent for non-interactive labels - linkTools.Boundary - padding can be defined separately for each side
- dia.ToolView - support reusable tools
- connectors.jumpover - add
radiusoption to make corners rounded - layout.DirectedGraph - remove unnecessary vertices
- dia.attributes - add
stubsoption toconnectionattribute
- dia.attributes - add
displayEmptyfor text elements - Vectorizer - fix e2c() overflowing the stack in normalizePathData()
- Geometry - add simplify() to Polyline (remove redundant points)
Release v3.0.4
CHANGELOG
package.json- add a browser key to point to dist (fix Webpack build in IE11)- dia.Paper - pass Backbone model options to view update (cell removal &
zchange) - dia.CellView - fix
mouseleaveevent in async mode - linkTools.Vertices - fix
vertexAddingoption
Release v3.0.3
CHANGELOG
- allow for automatic patch upgrades for dependencies
- changes to config options are respected
- dia.Paper - ensure SVG document has id
- dia.Paper - fix viewport matching for links
- dia.Graph - make
hasActiveBatches()use the same logic for various signatures - dia.CellView - properly separate elements and ports CSS selectors
Release v3.0.2
CHANGELOG
- layout.DirectedGraph - allow injecting
dagreandgraphlibas an option property - routers.Manhattan - use fallback when source and target are exactly the same
- fix markup TypeScript definition
Release v3.0.1
CHANGELOG
- remove all global variables
- dia.LinkView - fix
cell:pointerupevent
Release v3.0.0
CHANGELOG
Compatibilty warnings
- dia.CellView - support for asynchronous updates and freezing
details
A major breaking change of the release.
When a view needs an update, it requests the update from the paper first. The paper confirms the update immediately (sync mode) or in the next animation frame (async mode). The updates may be also held by the paper as long as the paper is frozen and released when the paper changes its state to unfrozen.
A CellView is no longer listening for a specific attribute change (e.g change:size). It listens to the change event, which is fired after all attributes have changed.
model.set({ a: 1, b: 2 }); // will trigger `change:a`, `change:b` and `change`.// PREVIOUSLY
joint.dia.ElementView.extend({
initialize(...args) {
joint.dia.ElementView.prototype.initialize.apply(this, ..args);
this.listenTo(this.model, 'change:faded', this.toggleFade);
},
toggleFade() {
this.el.style.opacity = this.model.get('faded') ? 0.5 : 1;
}
});
// NOW 1. a quick backwards compatible fix which works in `sync` mode
joint.dia.ElementView.extend({
initialize(...args) {
joint.dia.ElementView.prototype.initialize.call(this, ...args);
this.listenTo(this.model, 'change', this.onModelChange);
},
onModelChange() {
if (this.model.hasChanged('faded')) this.toggleFade();
},
toggleFade() {
this.el.style.opacity = this.model.get('faded') ? 0.5 : 1;
}
});In order to support async mode the following changes are necessary. The update requests are sent to the paper via flags (a flag is an arbitrary string or array of strings) and later received back all at once. The paper accumulates flags received and confirms the updates when the right time has come.
// NOW 2. a fix which supports both `sync` and `async` mode and freezing/unfreezing feature
joint.dia.ElementView.extend({
// `addPresentationAttribute()` makes sure that all super class presentation attributes are preserved
presentationAttributes: joint.dia.ElementView.addPresentationAttributes({
// mapping the model attributes to flags
faded: 'flag:opacity'
}),
// this method receives all scheduled flags and based on them updates the view
confirmUpdate(flags, ...args) {
joint.dia.ElementView.prototype.confirmUpdate.call(this, flags, ...args);
if (this.hasFlag(flags, 'flag:opacity')) this.toggleFade();
},
toggleFade() {
this.el.style.opacity = this.model.get('faded') ? 0.5 : 1;
}
});- dia.CellView - remove deprecated
getStrokeBBox()
details
The implementation of the method above was naive and didn't work in the majority of cases.
// read the actual stroke-width
const strokeWidth = elementView.model.attr('body/strokeWidth');
// add the half of the stroke width to all the sides of the bounding box
const strokeBBox = elementView.getBBox().inflate(strokeWidth / 2);- dia.Paper - async mode revamped (viewport matching, rendering progress)
details
render:done event is triggered anytime scheduled updates are done (rendered/updated).
// PREVIOUSLY
paper.on('render:done', () => { /* all rendered */ });
graph.resetCells([el1, el2, l1]);
// NOW 1.
paper.once('render:done', () => { /* all rendered and this callback is removed */ })
graph.resetCells([el1, el2, l1]);
// NOW 2.
paper.freeze();
graph.resetCells(arrayOfCells);
paper.unfreeze({
batchSize: 100,
progress: (done, current, total) => {
if (done) {
paper.unfreeze(); // remove the progress callback
// hide a progress bar
} else {
// update a progress bar (current / total * 100)%
}
}
}) ;batchSize in the paper async option is ignored.
// PREVIOUSLY
const paper = new joint.dia.Paper({ async: { batchSize: 200 }});
// NOW
const paper = new joint.dia.Paper({ frozen: true, async: true });
paper.unfreeze({ batchSize: 200 });- dia.Paper - cells are rendered into the
paper.cells(previously calledpaper.viewport), transformations are applied topaper.layers(parent ofpaper.cells)
details
A minor change which will allow us to implement other features in the future without breaking changes (layers for cells, labels on top of all other cells)
paper.viewport is now deprecated and refers to the same node as paper.cells
// PREVIOUSLY
// 1. transforming the paper
V(paper.viewport).scale(2,2);
// 2. reading transformation matrix of the paper
const transformationString = paper.viewport.getAttribute('transformation');
// 3. adding custom nodes to the viewport
const rect = V('rect', { x: 10, y: 10, width: 100, height: 100 });
V(paper.viewport).append(rect);
// NOW
// 1.
paper.scale(2,2);
// 2.
const transformationString = V.matrixToTransformString(paper.matrix());
// 3.
const myLayer = V('g');
V(paper.layers).prepend(myLayer);
/*
All my nodes will be under the elements and links
Alternatively call `V(paper.layers).append(myLayer)` so the nodes will be above the cells
*/
const rect = V('rect', { x: 10, y: 10, width: 100, height: 100 });
myLayer.append(rect);
myLayer.empty() // remove all custom nodes- dia.Graph -
getBBox()accepts no parameters and returns the bounding box of the entire graph
details
To retrieve the bounding box of multiple cells use getCellsBBox() instead
// PREVIOUSLY
const cellsBBox = graph.getBBox([el1, el2, el3]);
// NOW
const cellsBBox = graph.getCellsBBox([el1, el2, el2]);- dia.Graph -
getCellsBBox(cells)does not ignore links passed viacellsparameter
details
// PREVIOUSLY
const cellsBBox = graph.getCellsBBox([el1, el2, l1, l2]);
// NOW
// Passing links could lead into a different result (vertices position can affect the resulting bounding box)
const cellsBBox = graph.getCellsBBox([el1, el2]);- Vectorizer - fix
attr()for attributes inxmlnsnamespace
details
Will not affect you unless you use the namespace below directly.
// `xmlns:link` is now defined with the correct namespace
V(el).attr('xmlns:link', 'http://www.w3.org/1999/xlink');
// PREVIOUSLY
V.namespace.xmlns = 'http://www.w3.org/2000/svg';
// NOW
V.namespace.xmlns = 'http://www.w3.org/2000/xmlns/';
V.namespace.svg = 'http://www.w3.org/2000/svg';- remove deprecated
PortsModelInterfaceandPortsViewInterfacefromjoint.shapes.basic
Notable changes
- upgrade dependencies (Backbone
v1.4.0, Dagrev0.8.4, Graphlibv2.1.6, jQueryv3.4.1) - full support for ES Modules
- support for Link to Link connections
- add Mix Bus demo
- dia.Paper - implement viewport matching (remove views from the DOM when not in the viewport) via
viewportoption andcheckViewport() - dia.Paper - add
freeze(),unfreeze(),isFrozen()and optionfrozento stop/start views updates - dia.Paper - add
requireView(),dumpViews(),updateViews()to force views to update - dia.Paper - add sorting options (none, approximate, exact)
- dia.Paper - add
anchorNamespace,linkAnchorNamespace,connectionPointNamespace,defaultLinkAnchoroptions - dia.Paper - add
useModelGeometryforscaleContentToFit(),fitToContent(),getContentBBox(),getContentArea() - dia.Paper - add
contentAreaforscaleContentToFit(),fitToContent() - dia.Paper -
fitToContent()returns area (g.Rect) of the content - dia.Graph - add
indirectoption forgetNeighbors(),getConnectedLinks(),isNeighbor()for link-link connections - dia.Link - add
priorityattribute for anchors - dia.Link - add
getSourceCell(),getTargetCell(),getPolyline(),getSourcePoint(),getTargetPoint(),getBBox() - dia.Link -
getSourceElement()andgetTargetElement()finds also indirect elements - dia.Link - add
angle,keepGradientandensureLegibilityoptions for labels - dia.ElementView - add
findPortNode() - dia.LinkView - properly revert
pointer-eventsattribute after a link interaction - dia.LinkView - add root node selector for string markup
- dia.CellView - keep a dragged view always under the pointer (esp. when
restrictTranslatein use) - dia.CellView - make sure
cell:mouseleaveandcell:mouseenterevents are always called when the mouse leaves/enters a cell - dia.CellView - fix referenced bounding box for nodes outside the rotatable group
- dia.Cell - add
generateId(),generatePortId() - anchors -
modelCenteranchor acceptsdx,dyoptions - linkAnchors - add anchors for link-link connection (ratio, length, perpendicular...
Release v2.2.1
CHANGELOG
- utils - fix breakText() definition in Typescript
- dia.CellView - findAttribute() docs
- grunt - wrapper files use file extension .js.partial
- demos - improvements
Release v2.2.0
CHANGELOG
- update insecure dependencies (mainly Lodash v4.17.11)
- use Karma+Istanbul to run tests
- dia.Graph - getCellsBBox() takes cells' rotation into account
- dia.Graph - fix cell removal after dry flag passed
- dia.Paper - support relative dimensions (e.g. width='100%')
- dia.Paper - add stopDelegation interactive option
- dia.Paper - add magnetThreshold option (create a link when the pointer leaves the magnet)
- dia.Paper - allow to stop propagation of paper events
- dia.Element - add removePorts()
- dia.ElementView - add element:magnet:pointerclick, element:magnet:dblpointerclick, element:magnet:contextmenu events
- dia.ElementView - fix embeddingMode for Lodash v4+
- dia.ElementView - fix cell:pointerclick in Chrome after DOM change
- dia.LinkView - prevent multiple validate connections for already snapped magnets
- dia.LinkView - fix label rendering in IE
- dia.Cell - JSON Markup accepts textContent and groupSelector properties
- dia.CellView - presentaion attributes (attrs) are now applied in the order given
- mvc.View - prevent multiple onRender() calls
- mvc.View - add findAttribute()
- mvc.View - prevent className undefined
- dia.attributes - add ellipsis option for textWrap
- dia.atributes - add refWidth2 and refHeight2
- shapes.standard - add background to BorderedImage
- shapes.standard - add InscribedImage shape
- shapes.pn - fix PlaceView
- connectionPoints.Boundary - fix for non-graphical elements
- routers.manhattan - prevent rounding errors, add padding option
- routers.orthogonal - add padding option
- linkTools - fix touch interactions
- utils - normalize event.target in normalizeEvent() for <use> tag in IE
- utils - improve parseCssNumeric() for restrictUnit parameter
- Vectorizer - add isSVGGraphicsElement()
- fix legacy PortsViewInterface






