gojs
Version:
Interactive diagrams, charts, and graphs, such as trees, flowcharts, orgcharts, UML, BPMN, or business diagrams
980 lines (931 loc) • 145 kB
HTML
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="GoJS changelog." />
<meta http-equiv="cache-control" content="no-cache">
<title>GoJS Change Log</title>
<!-- Copyright 1998-2016 by Northwoods Software Corporation. -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-1506307-5', 'auto');
ga('send', 'pageview');
</script>
<link rel="stylesheet" href="../assets/css/bootstrap.min.css">
<!-- custom CSS after bootstrap -->
<link href="../assets/css/main.css" rel="stylesheet" type="text/css"/>
</head>
<style type="text/css">
#container {
max-width: 60em;
}
</style>
<script src="../release/go.js"></script>
<script src="../assets/js/goDoc.js"></script>
</head>
<body onload="goDoc()">
<div class="container">
<!-- Fixed navbar -->
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!--<a class="navbar-brand" href="#">GoJS</a>-->
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li class="active"><a href="../index.html">Home</a></li>
<li><a href="../learn/index.html">Learn</a></li>
<li><a href="../samples/index.html">Samples</a></li>
<li><a href="../intro/index.html">Intro</a></li>
<li><a href="../api/index.html">API</a></li>
<li><a href="https://www.nwoods.com/components/evalform.htm">Register</a></li>
<li><a href="../doc/download.html">Download</a></li>
<li><a href="https://forum.nwoods.com/c/gojs">Forum</a></li>
<li><a href="https://www.nwoods.com/support/query.htm">Contact</a></li>
<li class="buy"><a href="https://www.nwoods.com/sales/ordering.htm">Buy</a></li>
<li class="activate"><a href="https://www.nwoods.com/app/activate.aspx?sku=gojs">Activate</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
</div>
<div class="container-fluid mt30" id="container">
<div class="row mt30">
<h2>GoJS Change Log</h2>
<script>
if (go && go.version) {
document.write("Version: " + go.version);
}
</script>
</div>
<h4>Changes for 1.6.10</h4>
<ul>
<li>Fixed an SVG rendering bug that was introduced in 1.6.8.</li>
<li><a>Shape.geometryString</a> setter no longer offsets the position, instead it sets it, always overwriting the old position.</li>
<li>Extended/fixed <a>Diagram.updateAllRelationshipsFromData</a> to handle added node data in the <a>Model.nodeDataArray</a> and link data in the <a>GraphLinksModel.linkDataArray</a>.</li>
<li>Extended <a>Tool.standardMouseClick</a> to return a boolean, true if <a>InputEvent.handled</a> had been set to true by an event handler.</li>
<li>Fixed <a>ContextMenuTool</a> not to show a context menu <a>Adornment</a> if a <a>GraphObject.contextClick</a> or <a>Diagram.contextClick</a> event handler set <a>InputEvent.handled</a> to true.</li>
<li>Fixed mouse move events on IE9.</li>
<li>Fixed an infrequent scrolling issue sometimes seen at the edges of a Diagram.</li>
</ul>
<h4>Changes for 1.6.9</h4>
<ul>
<li>Fixes and improvements to samples.</li>
</ul>
<h4>Changes for 1.6.8</h4>
<ul>
<li>Fixed how <a>Diagram.findNodesByExample</a> and <a>Diagram.findLinksByExample</a> compared Arrays</li>
<li>Fixed link routing in some cases where there was a TwoWay <a>Binding</a> on <a>Link.points</a> with non-trivial conversions.</li>
<li>Improved link routing when <a>Link.adjusting</a> is <a>Link.Scale</a> after the route is computed to be less than one unit long.</li>
<li>Fixed unintended modification of model data involving TwoWay <a>Binding</a>s upon an undo after calling or causing <a>Diagram.rebuildParts</a>.</li>
<li>Fixed rare cases of wrong link routes after undo of a drag.</li>
</ul>
<h4>Changes for 1.6.7</h4>
<ul>
<li>Extended the <a>ContextMenuTool</a> to work on a right-mouse-down event if the tool is in the <a>ToolManager.mouseDownTools</a> list.</li>
<li>Changed how the main <a>Shape</a>s of <a>Link</a>s are measured to be more accurate. This may cause Links to have different position and location values than before.</li>
<li>Fixed a collapse animation bug when rolling back transactions.</li>
</ul>
<h4>Changes for 1.6.6</h4>
<ul>
<li>Fixed a bug with text measurement when using <a>TextBlock.OverflowEllipsis</a>.</li>
<li>Fixed a bug with Link geometry construction when switching templates.</li>
<li>Groups no longer try to update their own bounds when containing links are modified, so long as <a>Group.computesBoundsIncludingLinks</a> is set to false.</li>
</ul>
<h4>Changes for 1.6.5</h4>
<ul>
<li>Fixed updating of a link geometry when modifying <a>Link.curve</a> or <a>Link.curviness</a>.</li>
<li>MouseMove events now bubble by default, unless a tool other than the <a>ToolManager</a> is the <a>Diagram.currentTool</a>.</li>
<li>Fixed the invalidation of custom geometries of <a>Shape</a>s.</li>
<li>Reduced the shifting of <a>Group</a>s that have a <a>LayeredDigraphLayout</a> as the <a>Group.layout</a> upon repeated collapse/expand.</li>
</ul>
<h4>Changes for 1.6.4</h4>
<ul>
<li>Wheel scrolling now respects <a>Diagram.allowHorizontalScroll</a> and <a>Diagram.allowVerticalScroll</a> in all code paths.</li>
</ul>
<h4>Changes for 1.6.3</h4>
<ul>
<li>Fixed an exception in <a>CommandHandler.showContextMenu</a> when passed an argument.</li>
<li>Fixed adornment invalidation when a Part switches from a visible layer to an invisible one.</li>
<li>Smoothed <a>Diagram.scale</a> animations.</li>
<li>On Mac Trackpads, users can now scroll horizontally as well as vertically.</li>
<li>Improved some samples.</li>
</ul>
<h4>Changes for 1.6.2</h4>
<ul>
<li>Added the <a href="../extensions/DataInspector.html" target="_blank">Data Inspector</a> sample, a simple drop-in for inspecting and editing Part data.</li>
<li>Fixed some cases of testing for points being within quadratic bezier curve geometries.</li>
<li>The <a>ContextMenuTool</a> now supports tooltips for all objects in a context menu <a>Adornment</a>.</li>
</ul>
<h4>Changes for 1.6.1</h4>
<ul>
<li>Fixed an exception in <code>go-debug.js</code> involving a name conflict caused by minification.</li>
</ul>
<h4>Changes for 1.6 since 1.5.*</h4>
<div style="border: 2px solid #1F4963; padding: 6px; margin-bottom: 30px;">
<p>GoJS version 1.6 brings several new features and samples. Here are some highlights:</p>
<ul>
<li>Z-ordering within <a>Layer</a>s by setting or binding the new <a>Part.zOrder</a> property.</li>
<li>Animations for tree and <a>Group</a> collapse, and animation of <a>Diagram.position</a> with <a>CommandHandler.scrollToPart</a>.</li>
<li><a>Link</a>s can now have automatically determined keys if you set the <a>GraphLinksModel.linkKeyProperty</a>.</li>
<li>You can now send and receive incremental changes to a database instead of sending the whole model,
with <a>Model.toIncrementalJson</a> and <a>Model.applyIncrementalJson</a>.</li>
<li>Tooltips are now shown on touch devices when the user clicks on an object with a <a>GraphObject.toolTip</a>
or in the diagram background when <a>Diagram.toolTip</a> is an <a>Adornment</a>.</li>
</ul>
</div>
<p>Complete list of updates:</p>
<ul>
<li>
<b>Samples and documentation:</b>
<ul>
<li>
Changed the <a href="../extensions/CheckBoxes.html" target="_blank">CheckBoxes</a> sample to make use of the
newly predefined "CheckBox" panel. Note the renaming from the old sample's "CheckBoxPanel" to the predefined "CheckBox".
Another change is that "CheckBox" now respects <a>Diagram.isReadOnly</a> and <a>Model.isReadOnly</a>.
</li>
<li>
Added the <a href="../samples/leaflet.html" target="_blank">Leaflet and GoJS</a> sample,
demonstrating how to integrate GoJS Diagrams with a mapping library (LeafletJS). The sample shows nodes placed at latitude and longitude locations, depicting train stations and connections on the map.
</li>
<li>
Added the <a href="../samples/absolute.html" target="_blank">Absolute Positioning</a> sample,
demonstrating how a diagram can be made <em>not</em> to scroll or pan or zoom,
and to disallow dragging parts outside of a fixed area.
</li>
<li>
Added the <a href="../samples/adornmentButtons.html" target="_blank">Adornment Buttons</a> sample,
demonstrating showing buttons when a node is selected.
The buttons can invoke commands with clicks or start tools with drags.
</li>
<li>
Added the <a href="../samples/doubleCircle.html" target="_blank">Double Circle</a> sample,
demonstrating how to use repeated <a>CircularLayout</a>s to arrange any number of concentric circles of nodes.
</li>
<li>
Added the <a href="../samples/dragUnoccupied.html" target="_blank">Drag Unoccupied</a> sample,
demonstrating how to customize the <a>Part.dragComputation</a> property so that the user cannot
drag nodes to overlap any stationary nodes.
</li>
<li>
Added the <a href="../samples/faultTree.html" target="_blank">Fault Tree</a> sample.
</li>
<li>
Added the <a href="../samples/pathAnimation.html" target="_blank">Path Animation</a> sample,
demonstrating how to animate the traversal of some number of Parts along straight Links.
</li>
<li>
Added the <a href="../samples/radialPartition.html" target="_blank">Radial Partition</a> sample,
demonstrating how to arrange nodes in segmented rings about a central node.
</li>
<li>
Added the <a href="../samples/relationships.html" target="_blank">Relationships</a> sample,
demonstrating how to define custom link renderings by using <a>Shape.pathPattern</a> as a repeating pattern along a Shape stroke path.
</li>
<li>
Added the <a href="../samples/stateChartIncremental.html" target="_blank">State Chart Incremental</a> sample,
demonstrating how to save and replay incremental changes when <a>ChangedEvent.isTransactionFinished</a>
rather than sending or receiving a whole <a>Model</a>.
</li>
<li>
Added the <a href="../samples/systemDynamics.html" target="_blank">System Dynamics</a> sample,
demonstrating a modal editing interface, draggable labels, and multiple node and link templates.
</li>
<li>
Added the <a href="../samples/treeMapper.html" target="_blank">Tree Mapper</a> sample,
demonstrating how to show and allow the user to edit the relationships between nodes in two different trees.
</li>
<li>
Added the <a href="../extensions/CurvedLinkReshaping.html" target="_blank">Simple Curved Link Reshaping Tool</a> sample,
demonstrating a custom <a>LinkReshapingTool</a> having Bezier curve links be reshaped using only a single reshape handle at the middle
rather than two reshape handles, one at each control point.
The CurvedLinkReshapingTool is defined in the <a href="../extensions/CurvedLinkReshapingTool.js">CurvedLinkReshapingTool.js</a>
file in the Extensions directory.
</li>
<li>
Added the <a href="../extensions/Dimensioning.html" target="_blank">Dimensioning</a> sample,
demonstrating a custom <a>Link</a> that shows the distance between two spots on the connected nodes.
The DimensioningLink class is defined in the <a href="../extensions/DimensioningLink.js">DimensioningLink.js</a>
file in the Extensions directory.
</li>
<li>
Added the <a href="../extensions/LocalStorageCommandHandler.js" target="_blank">LocalStorageCommandHandler.js</a> file,
implementing the <a>CommandHandler</a>'s clipboard in HTML <code>localStorage</code>.
</li>
<li>
Added the <a href="../extensions/SnapLinkReshaping.html" target="_blank">Snap Link Reshaping Tool</a> sample,
demonstrating a custom <a>LinkReshapingTool</a> that snaps link route points to grid points.
The SnapLinkReshapingTool defined in the <a href="../extensions/SnapLinkReshapingTool.js">SnapLinkReshapingTool.js</a>
file in the Extensions directory.
</li>
</ul>
</li>
<li>
<b>Diagram and Layer:</b>
<ul>
<li>
Added <a>Diagram.addModelChangedListener</a> and <a>Diagram.removeModelChangedListener</a>,
for declaring <a>Model</a> <a>ChangedEvent</a> listeners on the Diagram.
The Diagram automatically passes these listeners in calls to <a>Model.removeChangedListener</a> (on the old model)
and <a>Model.addChangedListener</a> (on the new model) when the <a>Diagram.model</a> is replaced,
which can be important to avoid retaining references to objects that should be garbage collected.
A Model Changed event listener can also be established when initializing a Diagram:
<pre>
$(go.Diagram, "myDiagram",
{
. . .,
"ModelChanged": function(e) { if (e.isTransactionFinished) saveModel(); },
. . .
});
</pre>
The listener will be called even if the <a>Diagram.model</a> has been replaced.
</li>
<li>
Added "document" as a new kind of unit argument to <a>Diagram.scroll</a>, called by the <a>CommandHandler</a>
when handling the <code>Home</code> and <code>End</code> keys.
</li>
</ul>
</li>
<li>
<b>Animation:</b>
<ul>
<li>
Collapsing Groups and trees now animate. Specifically, these four commands animate:
<a>CommandHandler.collapseTree</a>, <a>CommandHandler.expandTree</a>,
<a>CommandHandler.collapseSubGraph</a>, <a>CommandHandler.expandSubGraph</a>.
</li>
<li>
Scrolling will animate when using <a>CommandHandler.scrollToPart</a>.
</li>
<li>
Added <a>AnimationManager.isInitial</a>, which determines whether an animation is performed on an initial layout.
</li>
</ul>
</li>
<li>
<b>Parts:</b>
<ul>
<li>
Added the <a>Part.zOrder</a> property, which defaults to NaN and controls the the Z-ordering position
of Parts when set to a real number.
</li>
<li>
Documented several methods that have been present in previous versions but had not been documented.
These methods are now overridable to customize the routing of links:
<ul>
<li><a>Link.computePoints</a></li>
<li><a>Link.computeOtherPoint</a></li>
<li><a>Link.computeEndSegmentLength</a></li>
<li><a>Link.computeSpot</a></li>
<li><a>Link.computeCurve</a></li>
<li><a>Link.hasCurviness</a></li>
<li><a>Link.computeCurviness</a></li>
<li><a>Link.computeSpacing</a></li>
<li><a>Link.computeThickness</a></li>
<li><a>Link.makeGeometry</a></li>
</ul>
These methods may be called within an override of <a>Link.computePoints</a> in order to build the desired route:
<ul>
<li><a>Link.clearPoints</a></li>
<li><a>Link.addPoint</a></li>
<li><a>Link.insertPoint</a></li>
<li><a>Link.removePoint</a></li>
<li><a>Link.setPoint</a></li>
</ul>
These methods may be called in unusual situations:
<ul>
<li><a>Link.invalidateRoute</a>, to cause link routes to be recomputed via a call to <a>Link.updateRoute</a></li>
<li><a>Link.updateRoute</a>, to call <a>Link.computePoints</a> if the link route is invalid</li>
<li><a>Part.ensureBounds</a>, to measure and arrange the part's visual tree and
make sure that the width and height are real numbers</li>
</ul>
Search the samples for example uses of these methods.
</li>
<li>
<b>Minor change:</b> Multiple links between the same pair of ports now route with a bit more space between them,
and possibly in a different order than before.
The routing now accounts for a mid-label object, if present, to reduce their overlap.
Setting or binding the <a>Link.curviness</a> to a real number results in routes that
are unaffected by this change or by other links.
</li>
<li>
Extended the functionality of the <a>Node.linkConnected</a> event handler to support access to a new <a>Link</a>'s data.
</li>
<li>
Extended <a>GraphObject.alignmentFocus</a> to permit the value of <a>Spot.None</a> when the object is a <a>Node</a>.
This may be set on link label nodes to indicate to the node's <a>Node.labeledLink</a> that it should use the node's
<a>Node.location</a> as the alignment point in the node instead of the normal <a>GraphObject.alignmentFocus</a>.
</li>
</ul>
</li>
<li>
<b>GraphObjects and Geometry:</b>
<ul>
<li>
Added <a>GraphObject.shadowVisible</a> to control on a per-GraphObject basis whether or not a shadow will be drawn.
</li>
<li>
Added the "CheckBox" and "CheckBoxButton" predefined Panels.
The "CheckBox" panel is composed of a "CheckBoxButton" and whatever you want to use as a label.
The definitions are shown in the <a href="../extensions/Buttons.js">Buttons.js</a> file in the Extensions directory.
Various configurations of CheckBoxes are shown in the
<a href="../extensions/CheckBoxes.html" target="_blank">CheckBoxes</a> sample.
</li>
<li>
Added the <a>Panel.findItemPanelForData</a> method,
to efficiently find the <a>Panel</a> created for an Object in the <a>Panel.itemArray</a>.
</li>
<li>
Fixed the predefined "PanelExpanderButton" to respect the <a>Diagram.isReadOnly</a> property.
</li>
</ul>
</li>
<li>
<b>Models:</b>
<ul>
<li>
Added optional support for automatically maintaining unique identifiers on link data.
Added the <a>GraphLinksModel.linkKeyProperty</a> property, which defaults to the empty string,
meaning do <i>NOT</i> assign unique ids to links, which is compatible with previous non-behavior.
</li>
<li>
Added the following methods:
<a>GraphLinksModel.getKeyForLinkData</a>, <a>GraphLinksModel.setKeyForLinkData</a>,
<a>GraphLinksModel.findLinkDataForKey</a>, <a>GraphLinksModel.makeLinkDataKeyUnique</a>.
Added the <a>GraphLinksModel.makeUniqueLinkKeyFunction</a> property,
for customizing the assignment of unique identifiers.
</li>
<li>
Added <a>Model.toIncrementalJson</a> and <a>Model.applyIncrementalJson</a> methods,
to make it easier to send incremental changes to a database instead of sending a whole model.
Their use for a <a>GraphLinksModel</a> requires the assignment of unique identifiers to link data,
so you will need to set <a>GraphLinksModel.linkKeyProperty</a> to the name of a link data property.
</li>
<li>
Added the <a>Model.copy</a> method, which makes an <em>empty</em> copy of a model.
Model properties are copied but data and Change listeners are not copied.
Also added the <a>Model.cloneProtected</a> overridable method so that properties that
are added to custom models can be automatically copied.
</li>
<li>
<a>Model.copyNodeData</a> and <a>GraphLinksModel.copyLinkData</a> now copy property values that are
of type <a>Point</a>, <a>Size</a>, <a>Rect</a>, <a>Margin</a>, or <a>Spot</a>.
If you had supplied a custom <a>Model.copyNodeDataFunction</a> or <a>GraphLinksModel.copyLinkDataFunction</a>,
its behavior is unaffected.
</li>
<li>
Models now read and write property values that are predefined enumerated values,
such as <a>Link.Orthogonal</a> or <a>TextBlock.WrapDesiredSize</a>.
The Binding conversion functions <a>Binding.parseEnum</a> and <a>Binding.toString</a>
are no longer necessary for converting EnumValues to and from strings,
but they are still suggested in order to reduce the size of the corresponding JSON-formatted text renderings,
just as using <a>Point.parse</a> and <a>Point.stringify</a> are suggested for binding
conversions of <a>Point</a> values when you expect to use <a>Model.toJson</a> and <a>Model.fromJson</a>.
</li>
</ul>
</li>
<li>
<b>Layouts:</b>
<ul>
<li>
Added the overridable method <a>Layout.cloneProtected</a>,
to support the automatic copying of properties that are added in custom <a>Layout</a> classes.
</li>
<li>
When there are multiple roots, <a>TreeLayout</a> now arranges the trees respecting
<a>TreeLayout.sorting</a> and <a>TreeLayout.comparer</a>.
</li>
<li>
Improved <a>LayeredDigraphLayout</a> to better support routing of links from/to the sides of nodes.
Just set <a>LayeredDigraphLayout.setsPortSpots</a> to false and set the nodes' <a>GraphObject.fromSpot</a>
to be <code>Spot.RightSide</code> and their <a>GraphObject.toSpot</a> to be <code>Spot.LeftSide</code>
(assuming the <a>LayeredDigraphLayout.direction</a> is zero).
If you do not want the "backwards" cycle-producing links to be routed "around" nodes,
set <a>LayeredDigraphLayout.setsPortSpots</a> to false and set both the <a>GraphObject.fromSpot</a>
and <a>GraphObject.toSpot</a> on the nodes to be <code>Spot.TopBottomSides</code>
(assuming the <a>LayeredDigraphLayout.direction</a> is 90).
</li>
</ul>
</li>
<li>
<b>Tools and Commands:</b>
<ul>
<li>
Added the ScrollToPart command, <a>CommandHandler.scrollToPart</a> and <a>CommandHandler.canScrollToPart</a>.
This can be invoked with the Space key to scroll the diagram to show the first Part in the highlighteds or selection collection.
Call it repeatedly to cycle through the collection, scrolling to each in turn.
<a>CommandHandler.scrollToPart</a> can also be called with any Part in the Diagram in order to scroll it into view.
</li>
<li>
Added the <a>CommandHandler.deletesConnectedLinks</a> property, to control whether deleting a <a>Node</a>
automatically deletes all <a>Link</a>s that are connected with that Node.
The default value is true.
</li>
<li>
Added <a>ToolManager.toolTipDuration</a>, to control how long to show a tool tip <a>Adornment</a> for
a GraphObject or the Diagram after being motionless.
<b style="color:red;">Change:</b> ToolTips now hide themselves by default after 5000 milliseconds,
whereas they had remained visible forever as long as the mouse remained stationary.
</li>
<li>
Tool Tips are now shown on touch devices when the user clicks on an object with a <a>GraphObject.toolTip</a>
or in the diagram background when <a>Diagram.toolTip</a> is an Adornment.
</li>
<li>
Fixed the <a>DraggingTool</a> to provide an empty <a>Set</a> as the <a>DiagramEvent.subject</a>
when an external drag-and-drop is cancelled during a drop.
</li>
<li>
Fixed <a>DraggingTool.canStart</a> to return false for diagrams that are <a>Diagram.isReadOnly</a>
unless <a>Diagram.allowDragOut</a> is true. This prevents the tool from running within read-only diagrams,
other than in <a>Palette</a>s and other diagrams where users will be dragging out of the diagram.
</li>
<li>
When <a>ContextMenuTool</a> handles a second click that is also a context click,
it may show another context menu if it is over another valid target.
</li>
<li>
The default values of <a>ToolManager.hoverDelay</a> and <a>ToolManager.holdDelay</a> have both been reduced from 1000 to 850 milliseconds.
</li>
<li>
<a>Tool.standardWaitAfter</a> now has a second, optional argument. When it exists it is the <a>InputEvent</a> that caused standardWaitAfter.
This event is passed on to <a>Tool.doWaitAfter</a>. The override, <a>ToolManager.doWaitAfter</a>, is now what handles long taps on mobile devices and emits a simulated right-click.
Long-taps simulating a right click has been part of GoJS for some time, but can now be overridden.
</li>
</ul>
</li>
</ul>
<hr />
<h4>Changes for 1.5.23</h4>
<ul>
<li>
Fixed changing <a>GraphObject.segmentOrientation</a> of a Link label back to <a>Link.None</a>
not resetting the <a>GraphObject.angle</a> back to zero.
</li>
<li>
Fixed <a>Tool.findToolHandleAt</a> to support tool handles that are <a>Panel</a>s, not only simple <a>Shape</a>s.
All tool handles are elements of <a>Adornment</a>s.
</li>
<li>
Fixed <a>LinkReshapingTool</a> not to cause an exception if for some reason it is unable
to <a>Tool.findToolHandleAt</a> the new handle created by dragging a resegmenting tool handle.
</li>
<li>
DOM Input Events to the <a>TextEditingTool</a>'s default tool now check if the TextEditingTool is still running.
</li>
</ul>
<h4>Changes for 1.5.22</h4>
<ul>
<li>
Fixed a zoom bug introduced in 1.5.21.
</li>
</ul>
<h4>Changes for 1.5.21</h4>
<ul>
<li>
Fixed changing <a>Diagram.scale</a> causing an error for some values of <a>Diagram.contentAlignment</a>.
</li>
<li>
Improved the <a>TextEditingTool</a> to scroll the edited <a>TextBlock</a> into view, not the whole <a>Part</a> holding the TextBlock.
</li>
<li>
Fixed <a>Model.setKeyForNodeData</a> to update link data references (regression) in <a>GraphLinksModel</a>s.
</li>
<li>
Fixed an aspect-ratio issue when using <a>Diagram.makeSVG</a> with <a>Picture</a>s.
Fixed a related issue when using <a>Picture.sourcerect</a> with <a>Diagram.makeSVG</a>.
</li>
</ul>
<h4>Changes for 1.5.20</h4>
<ul>
<li>
Fixed <a>TextBlock.OverflowEllipsis</a> sometimes not displaying ellipses when a height was set on the TextBlock.
</li>
<li>
Fixed routing of links with <a>Link.adjusting</a> being <a>Link.Scale</a> or <a>Link.Stretch</a> sometimes resulting in straight lines.
</li>
<li>
Fixed <a>TreeLayout</a> not respecting <a>Part.isLayoutPositioned</a> set to false on Comment Nodes (Nodes with the category "Comment").
</li>
<li>
Text rendering improvements.
</li>
</ul>
<h4>Changes for 1.5.19</h4>
<ul>
<li>
Fixed error when operating in PhantomJS environment.
</li>
<li>
Fixed handling of control characters in text strings by <a>Model.toJson</a>.
</li>
</ul>
<h4>Changes for 1.5.18</h4>
<ul>
<li>
Fixed <a>Diagram.alignDocument</a> when scrolling the current screen out of view.
</li>
<li>
Fixed round-off errors in <a>GridLayout</a> positioning of nodes when <a>GridLayout.alignment</a> is <a>GridLayout.Location</a>.
</li>
</ul>
<h4>Changes for 1.5.16 and 1.5.17</h4>
<ul>
<li>
In CommonJS environments, set <code>module.exports</code> as well as <code>window.module.exports</code>, in case they are different objects.
</li>
</ul>
<h4>Changes for 1.5.15</h4>
<ul>
<li>
Fixed zero-sized Arc <a>PathSegment</a>s.
</li>
<li>
Ensured Groups with Placeholders always recalculate their bounds when collapsed or expanded.
</li>
</ul>
<h4>Changes for 1.5.14</h4>
<ul>
<li>
Fixed <a>Picture.element</a> property setter to allow null.
</li>
</ul>
<h4>Changes for 1.5.13</h4>
<ul>
<li>
Fixed <a>GraphObject.isActionable</a> items being erroneously clickable through other non-actionable Parts.
</li>
<li>
<a>Diagram.makeSvg</a> now uses globally unique identifiers for its elements so that SVG from makeSvg can be used multiple times in the same page.
</li>
<li>
Fixed <a>DraggingTool</a> movement of a <a>Node</a> with a half-connected <a>Link</a> when <a>DraggingTool.isGridSnapEnabled</a> is true.
</li>
</ul>
<h4>Changes for 1.5.12</h4>
<ul>
<li>
The <a>TextEditingTool.selectsTextOnActivate</a> now selects text on iOS Safari.
</li>
<li>
Fixed the <a>Part.containingGroup</a> of reflexive member <a>Link</a>s.
</li>
<li>
Fixed the loading of <a>Link</a> routes via a <a>Binding</a> on <a>Link.points</a> when the Links were connected with a <a>Group</a>.
</li>
</ul>
<h4>Changes for 1.5.11</h4>
<ul>
<li>
Fixes for location data binding when animation is enabled.
</li>
<li>
Provisional fix for OSX scrollbars when invisible by default. Functionality may change in future releases.
</li>
<li>
Fixed <a>ResizingTool</a> when resizing a Group with reflexive links.
</li>
<li>
The <a>TextEditingTool</a> more accurately predicts the editable area for text.
</li>
</ul>
<h4>Changes for 1.5.10</h4>
<ul>
<li>
Fixed the way <a>PathSegment.Arc</a>s are calculated and approximated.
This will change computed bounds and hit-testing, which now correctly reflect drawn arcs,
but the bounds changes may cause incompatibilities in apps that depend on the old approximations.
</li>
</ul>
<h4>Changes for 1.5.9</h4>
<ul>
<li>
Fixed an undo/redo bug with <a>Part.location</a> and <a>GraphObject.position</a>.
</li>
<li>
Fixed Picture optimizations to work with <a>Picture.sourceRect</a>
</li>
<li>
Fixed the <a>TextEditingTool</a> inserting newlines into TextBlocks with <a>TextBlock.isMultiLine</a> set to false, when a validation function was present.
</li>
</ul>
<h4>Changes for 1.5.8</h4>
<ul>
<li>
Improved the TypeScript definition file, <a href="../release/gojs.d.ts">goJS.d.ts</a>,
fixing some typos, changing some <b>Object</b> types to be <b>any</b> for easier usage.
</li>
<li>
Fixed <a>DraggingTool</a> when <a>DraggingTool.dragsLink</a> is true and when dragging a <a>Link</a>
to respect <a>LinkingBaseTool.isValidLink</a> on the <a>RelinkingTool</a>.
</li>
<li>
Fixed <a>TextBlock</a> rendering in some ellipses cases.
</li>
</ul>
<h4>Changes for 1.5.7</h4>
<ul>
<li>
Added an Introduction page just for <a href="../intro/changedEvents.html">Changed Events</a>.
</li>
<li>
Fixed <a>Iterator.next</a> to continue returning false once it has already returned false.
</li>
<li>
Overviews now respect <a>Layer.opacity</a>
</li>
<li>
Successive calls to <a>CommandHandler.editTextBlock</a> now correctly switch the TextBlock.
</li>
</ul>
<h4>Changes for 1.5.6</h4>
<ul>
<li>
Changed default behavior of <a>LayoutNetwork.commitLayout</a> to call <a>LayoutVertex.commit</a> on each vertex in the layout.
Previous behavior was to do nothing, but all predefined layouts that used <a>LayoutNetwork</a> already had overrides of this method.
The new behavior is convenient for the implementation of simple custom <a>Layout</a>s that use networks.
The new behavior does not affect custom layouts that do not use networks.
</li>
<li>
Fixed <a>GraphObject.getDocumentAngle</a> sometimes returning 0 when it should return 180.
</li>
<li>
Fixed text rendering when both <a>TextBlock.isUnderline</a> and <a>TextBlock.isStrikethrough</a> are true with all values of <a>TextBlock.textAlign</a>.
</li>
<li>
Fixed export of <a>LinkReshapingTool.setReshapingBehavior</a> and <a>LinkReshapingTool.getReshapingBehavior</a>.
</li>
<li>
Fixed <a>Model.fromJson</a> reading solid color <a>Brush</a>es, when they are not just strings.
</li>
</ul>
<h4>Changes for 1.5.5</h4>
<ul>
<li>
Added the <a href="../extensions/CheckBoxes.html" target="_blank">CheckBoxes</a> sample,
demonstrating how to define a "check box" and how to customize them.
</li>
<li>
Added the static method <a>GraphObject.takeBuilderArgument</a>, for use by <a>GraphObject.defineBuilder</a> functions
for more easily retrieving builder arguments from the arguments passed to <a>GraphObject.make</a>.
</li>
<li>
Added the definitions of the predefined arrowheads to the <a href="../extensions/Arrowheads.js" target="_blank">Arrowheads.js</a> file in the Extensions directory.
The predefined arrowheads are still predefined, so you will not need to load this file in order to have those definitions.
This file provides information about how each arrowhead is defined, so that you can customize them or copy-and-adapt them.
</li>
<li>
Fixed <a>TextBlock.isStrikethrough</a> to work with all values of <a>TextBlock.textAlign</a>.
</li>
<li>
Adding a Part is now undoable if its layer has changed without notifying the undo manager, such as with a "layerName":"isSelected" binding.
</li>
<li>
Fixed <a>Geometry.scale</a> and <a>Geometry.rotate</a> of <a>PathSegment</a>s that are arcs.
</li>
</ul>
<h4>Changes for 1.5.4</h4>
<ul>
<li>
Added the <a href="../extensions/RealtimeDragSelecting.html" target="_blank">Realtime Drag Selecting Tool</a> sample,
with the RealtimeDragSelectingTool defined in the <a href="../extensions/RealtimeDragSelectingTool.js">RealtimeDragSelectingTool.js</a>
in the Extensions directory.
</li>
<li>
Added the <a href="../samples/hoverButtons.html" target="_blank">Hover Buttons</a> sample,
demonstrating how an <a>Adornment</a> can be used to show buttons for a node when the mouse is briefly motionless over the node.
</li>
<li>
Added the <a href="../extensions/Spiral.html" target="_blank">Spiral Layout</a> sample,
with the SpiralLayout defined in the <a href="../extensions/SpiralLayout.js">SpiralLayout.js</a> file in the Extensions directory.
</li>
<li>
Fixed <a>ContextMenuTool</a> so that any click events (<a>Tool.standardMouseClick</a>) in the <a>ContextMenuTool.currentContextMenu</a>occur on mouse-up, not mouse-down.
</li>
<li>
Reworked <a>Picture</a> code so that <a>Picture.errorfunction</a> is now called on every Picture instance in every Diagram that references an image which has had an error.
</li>
</ul>
<h4>Changes for 1.5.3</h4>
<ul>
<li>
The transaction name argument to <a>UndoManager.commitTransaction</a> (or <a>Model.commitTransaction</a> or <a>Diagram.commitTransaction</a>) is now optional,
and defaults to the name given at the time of the call to <a>UndoManager.startTransaction</a>.
</li>
<li>The Backspace (Windows) or Delete (Mac) key now invokes <a>CommandHandler.deleteSelection</a> just like the Delete (Windows) or Delete-Forward (Mac) key already does.</li>
</ul>
<h4>Changes for 1.5.2</h4>
<ul>
<li>Updated the TypeScript definition file, <a href="../release/goJS.d.ts">goJS.d.ts</a>, to TypeScript version 1.4.</li>
<li>Fixed <a>Brush</a> constructor in Debug mode improperly raising error about string argument not being a valid color string.</li>
<li>Fixed a cross-origin error when using <a>Diagram.makeImageData</a> with SVG images in Internet Explorer.</li>
</ul>
<h4>Changes for 1.5.1</h4>
<ul>
<li>
Added the <a href="../samples/kanban.html" target="_blank">Kanban Board</a> sample,
derived from the <a href="../samples/swimLanesVertical.html" target="_blank">Swim Lanes (vertical)</a> sample.
</li>
<li>Fixed scrollbar clicking on touch-enabled devices in Chrome on Windows.</li>
<li>More graceful handling of Picture image errors.</li>
<li>Fixed bugs with undo of changed state inside Parts whose <a>Part.category</a> was later changed.</li>
<li>Stopped touch events from always calling preventDefault (touch events were impossible to bubble).</li>
</ul>
<h4>Changes for 1.5 since 1.4.*</h4>
<ul>
<li>
<b>Samples and documentation:</b>
<ul>
<li>
Added the <a href="../samples/addRemoveColumns.html" target="_blank">Add or Remove Columns</a> sample,
demonstrating how columns and rows may be added to or removed from a Table Panel.
</li>
<li>
Added the <a href="../samples/barCharts.html" target="_blank">Bar Charts</a> sample,
demonstrating simple bar charts in each node.
</li>
<li>
Added the <a href="../samples/candlestickCharts.html" target="_blank">Candlestick or Range Charts</a> sample,
demonstrating a simple candlestick chart showing ranges of values in each node.
</li>
<li>
Added the <a href="../samples/curviness.html" target="_blank">Link Curviness</a> sample,
demonstrating how <a>Link.curviness</a> may be set or bound to bend links by different amounts.
</li>
<li>
Added the <a href="../samples/dataFlow.html" target="_blank">Data Flow</a> and
<a href="../samples/dataFlowVertical.html" target="_blank">Data Flow (Vertical)</a> samples,
demonstrating additional styles of having labeled ports on nodes.
</li>
<li>
Added the <a href="../samples/distances.html" target="_blank">Distances and Paths</a> sample,
demonstrating finding a shortest path between two nodes and also demonstrating finding all paths between two nodes.
</li>
<li>
Added the <a href="../samples/draggablePorts.html" target="_blank">Draggable Ports</a> sample,
demonstrating how one could use Nodes as ports within a Group to allow users to select, move, copy, and delete ports.
</li>
<li>
Added the <a href="../samples/interactiveForce.html" target="_blank">Interactive Force Directed</a> sample,
demonstrating a <a>ForceDirectedLayout</a> that operates continuously while the user is dragging the selection.
</li>
<li>
Added the <a href="../samples/magnifier.html" target="_blank">Magnifying Glass</a> sample,
demonstrating how to use an <a>Overview</a> for magnifying an area of a Diagram, with a larger <a>Diagram.scale</a>
than the observed diagram.
</li>
<li>
Added the <a href="../samples/multiNodePathLinks.html" target="_blank">Multi-Node Path Links</a> sample,
demonstrating a custom Link routing that results in a path that goes through various other nodes.
</li>
<li>
Added the <a href="../samples/multiArrow.html" target="_blank">Multiple Arrowheads</a> sample,
demonstrating how a custom orthogonal Link can draw multiple arrowheads, one at the end of each segment.
</li>
<li>
Added the <a href="../samples/pieCharts.html" target="_blank">Pie Charts</a> sample,
demonstrating simple pie charts in each node.
</li>
<li>
Added the <a href="../samples/regroupingTreeView.html" target="_blank">Regrouping Tree View</a> sample,
demonstrating one way of synchronizing a <a>TreeModel</a> in one Diagram and a <a>GraphLinksModel</a> in another Diagram,
where both models are actually sharing the same data objects.
</li>
<li>
Added the <a href="../samples/sankey.html" target="_blank">Sankey Diagram</a> sample,
making use of the new <a>Node.portSpreading</a> property and variable width links.
</li>
<li>
Added the <a href="../samples/scrollModes.html" target="_blank">Scroll Modes</a> sample,
demonstrating how "Infinite Scrolling" can work and how the <a>Diagram.positionComputation</a>
and <a>Diagram.scaleComputation</a> functional properties can be used.
</li>
<li>
Added the <a href="../samples/selectableFields.html" target="_blank">Selectable Fields</a> sample,
demonstrating how the fields in the Records sample may be selected by the user.
</li>
<li>
Added the <a href="../samples/selectablePorts.html" target="_blank">Selectable Ports</a> sample,
demonstrating how ports can be selected and deleted from nodes.
</li>
<li>
Added the <a href="../samples/sharedStates.html" target="_blank">Shared States</a> sample,
demonstrating one way of pretending that a node can be a member of multiple groups simultaneously.
This does not make use of <a>Group</a>s, but makes use of custom layout and dragging to accomplish the effect.
</li>
<li>
Added the <a href="../samples/sparklineGraphs.html" target="_blank">Sparkline Graphs</a> sample,
demonstrating simple sparkline charts within nodes.
</li>
<li>
Added the <a href="../samples/spreadsheet.html" target="_blank">Spreadsheet</a> sample,
demonstrating many nested Table Panels forming something like a spreadsheet grid.
</li>
<li>
Split the <a href="../samples/swimLanes.html" target="_blank">Swim Lanes</a> samples into two: horizontal
and vertical, <a href="../samples/swimLanesVertical.html" target="_blank">Swim Lanes (vertical)</a>.
Each lane (implemented by a <a>Group</a>) is collapsible and resizable and movable.
Lanes belong to "Pool" Groups. When they are moved they are re-ordered by the custom PoolLayout within the pool.
Layout within a "Lane" Group no longer happens automatically -- it only happens by calling <code>relayoutLanes()</code>.
This allows the sample to remember where users have dragged the nodes, including saving and loading to JSON text.
</li>
<li>
Added the <a href="../samples/timeline.html" target="_blank">Timeline</a> sample,
demonstrating a simple graduated timeline with events positioned along it by a custom layout.
</li>
<li>
Added the <a href="../samples/twoDiagrams.html" target="_blank">Two Diagrams</a> sample,
demonstrating how two <a>Diagram</a>s, each with its own <a>Model</a>, can share a single <a>UndoManager</a>,
to facilitate dragging between the diagrams while supporting undo/redo.
</li>
<li>
Added the <a href="../samples/umlClass.html" target="_blank">UML Class Diagram</a> sample,
showing an implementation of UML class nodes.
</li>
<li>
Added the <a href="../samples/visualTreeGrouping.html" target="_blank">Visual Tree Using Nested Groups</a> sample,
showing the visual tree of a Diagram using nested Groups rather than Nodes and Links.
</li>
<li>
Added the <a href="../samples/scrollModes.html" target="_blank">Scroll Modes</a> sample,
showing new properties for controlling scrolling and zooming.
</li>
<br />
<li>
Added the <a href="../extensions/BalloonLink.js">Balloon Link</a> class in the Extensions directory.
The Balloon Link is used by the updated <a href="../samples/comments.html">Comments</a> sample.
</li>
<li>
Added the <a href="../extensions/ColumnResizing.html" target="_blank">Column and Row Resizing</a> sample,
with the ColumnResizingTool and RowResizingTool defined in the
<a href="../extensions/ColumnResizingTool.js">ColumnResizingTool.js</a> and
<a href="../extensions/RowResizingTool.js">RowResizingTool.js</a> files in the Extensions directory.
</li>
<li>
Added the <a href="../extensions/DragCreating.html" target="_blank">Drag Creating Tool</a> sample,
with the DragCreatingTool defined in the <a href="../extensions/DragCreatingTool.js">DragCreatingTool.js</a>
in the Extensions directory.
</li>
<li>
Added overrides of <a>CommandHandler.copyToClipboard</a> and <a>CommandHandler.pasteFromClipboard</a>
to the DrawCommandHandler in the Extensions directory.
Added a DrawCommandHandler.pasteOffset property to control the offset distance.
</li>
<li>
Added the <a href="../extensions/Inspector.html" target="_blank">Inspector</a> sample,
demonstrating a general HTML component for showing and editing various property values.
The Inspector code is defined in the
<a href="../extensions/Inspector.js">Inspector.js</a> file in the Extensions directory.
</li>
<li>
Added the <a href="../extensions/Parallel.html" target="_blank">Parallel Layout</a> sample,
with the ParallelLayout, derived from <a>TreeLayout</a>, defined in the
<a href="../extensions/ParallelLayout.js">ParallelLayout.js</a> file in the Extensions directory.
</li>
<li>
Added the <a href="../extensions/ScrollingTable.html" target="_blank">Scrolling Table</a> sample,
with the "ScrollingTable" <a>Panel</a> defined in <a href="../extensions/ScrollingTable.js">ScrollingTable.js</a>
in the Extensions directory.
That also contains the definition of the "AutoRepeatButton" Panel, two instances of which are used by each "ScrollingTable".
</li>
<li>
Added the <a href="../extensions/Table.html" target="_blank">Table Layout</a> sample,
with the custom Layout defined in <a href="../extensions/TableLayout.js">TableLayout.js</a> in the Extensions directory.
</li>
<li>
Added the <a href="../extensions/TreeMap.html" target="_blank">Tree Map Layout</a> sample,
with the layout defined in <a href="TreeMapLayout.js">TreeMapLayout.js</a> in the Extensions directory.
</li>
<br />
<li>
Moved the definitions of the predefined Buttons from the <a href="../intro/buttons.html">Introduction</a>
to the <a href="../extensions/Buttons.js" target="_blank">Buttons.js</a> file in the Extensions directory.
The predefined buttons are still predefined, so you will not need to load this file in order to have those definitions.
This file provides information about how each button is defined, so that you can customize them or copy-and-adapt them.
</li>
</ul>
</li>
<li>
<b>Diagram and Layer:</b>
<ul>
<li>
Added <a>Diagram.findNodesByExample</a> and <a>Diagram.findLinksByExample</a>, two methods for finding
a collection of Nodes or Links that are bound to data whose properties match the argument object's properties.
This is used by the updated <a href="../samples/orgChartStatic.html">Org Chart (static)</a> sample,
to demonstrate search capabilities.
</li>
<br />
<li>
Added <a>Diagram.scrollMode</a> property, an enum property that can be set to <a>Diagram.DocumentScroll</a>
(the default) or <a>Diagram.InfiniteScroll</a>, to allow for endless scrolling in all directions.
This is demonstrated by the new