Files
plastic-hub-dev-node-saturn 538369cff7 latest
2021-05-12 18:35:18 +02:00

3898 lines
195 KiB
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-2017 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"/>
<script src="../release/go.js"></script>
<script src="../assets/js/goDoc.js"></script>
</head>
<body onload="goDoc()">
<!-- fixed navbar -->
<nav id="fixed-nav" class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<div class="navheader-container">
<div class="navheader-collapse" data-toggle="collapse" data-target="#navbar">
<a id="toplogo" class="navbar-brand" href="../index.html">GoJS</a>
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
</div>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li><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/contact.html" onclick="ga('send','event','Outbound Link','click','contact');">Contact</a></li>
<li class="buy"><a href="https://www.nwoods.com/sales/index.html" onclick="ga('send','event','Outbound Link','click','buy');">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 class="container-fluid mt70 plr15">
<h2>GoJS Change Log</h2>
<p id="ver"></p>
<script>
if (go && go.version) {
var p = document.getElementById('ver');
if (p !== null) p.textContent = ("Version: " + go.version);
}
</script>
<p>
We maintain a
<a href="https://github.com/NorthwoodsSoftware/GoJS">GitHub Repository</a>, which you can star to follow version updates. We also notify of changes on
<a href="https://twitter.com/NorthwoodsGo">Twitter</a>.
</p>
<hr>
<h4>
Changes for 1.8.5</h4>
<ul>
<li>
IE: Fixed a regression from 1.8.3 with PointerEvents: Mouse-based events now correctly report their button
(left, right middle) and modifier keys (Ctrl, Alt, etc). Additionally, meta keys now work with touches,
so users can do actions such as CTRL+touch to select multiple nodes.
</li>
<li>
Fixed a bug with shadows in IE (but not Edge) sometimes causing draw-related errors with the Canvas Context.
</li>
<li>
The user of <code>PointerEvents</code> is additionally limited by <code>window.navigator.msPointerEnabled</code> not being false.
This supports the use of IE 11 when embedded within Windows applications.
</li>
<li>
Fixed an animation regression that began with 1.7.0:
resizing Diagram DIVs now correctly animates layouts that have <a>Layout.isViewportSized</a> set to true.
</li>
</ul>
<h4>Changes for 1.8.4</h4>
<ul>
<li>
Added <a>Diagram.scrollsPageOnFocus</a> property, to control whether the page scrolls to show the Diagram's HTMLDivElement
when the diagram receives focus, if the element is not entirely visible in the window.
For compatibility now the default value is true, but the default value will be false in version 2.0.
</li>
<li>
Fixed a regression from 1.7.28/1.7.29 with starting automatic animations.
</li>
<li>
Fixed an animation positioning bug with nested collapsed groups.
</li>
</ul>
<h4>Changes for 1.8.3</h4>
<ul>
<li>
Added the
<a href="../samples/zoomPinch.html" target="_blank">Zoom Pinch</a> sample, demonstrating gesture customization.
</li>
<li>
Internally, browser PointerEvents are now used by default on IE-related browsers, when possible.
Other browsers still use Touch and Mouse events.
</li>
<li>
Fixed a measurement bug with <a>GraphObject.maxSize</a> when applied to TextBlocks.
</li>
<li>
Fixed another case of moving <a>Group</a>s not correctly invalidating link routes when the link connects with the group.
</li>
<li>
Fixed having <a>UndoManager.isUndoingRedoing</a> to be consistently true during "StartingUndo", "StartingRedo", "FinishedUndo", and "FinishedRedo"
Model <a>ChangedEvent</a>s of type Transaction.
</li>
<li>
Fixed hit testing in some edge cases for geometries.
</li>
</ul>
<h4>Changes for 1.8.1 and 1.8.2</h4>
<ul>
<li>
Fixed the measurement of GraphObjects with <a>GraphObject.isPanelMain</a> in Links and Auto panels.
</li>
<li>
Improved documentation and samples for GoCloudStorage.
</li>
</ul>
<h4>Changes for 1.8 since 1.7.*</h4>
<ul>
<li>
<b>Licensing</b>
<p>
Improvements for unlimited-domains OEM customers.
</p>
</li>
<li>
<b>Samples and documentation:</b>
<ul>
<li>
Added GoCloudStorage classes, in the <code>storage</code> folder, for saving/loading models from
various cloud storage provider services plus <code>localStorage</code>.
<p>
An example of using these services is at: <a href="../storage/samples/GoCloudStorageManager.html" target="_blank">Go Cloud Storage Manager</a>.
<p>
The API documentation is at <a href="../storage/api/index.html" target="_blank">Storage API</a>.
<p>
Load the library from <a href="../storage/lib/gcs.js" target="_blank">Storage library</a>.
You will also need to load the libraries for each of the services themselves (other than localStorage).
<p>
The source code is at <a href="../storage/src/GoCloudStorage.ts">GoCloudStorage.ts</a> and in other files in that folder.
</li>
<li>
Typescript definition file (<code>go.d.ts</code>) fixes.
</li>
</ul>
</li>
<li>
<b>Diagram and Model:</b>
<ul>
<li>
Added <a>Diagram.commit</a> and <a>Model.commit</a>, which call a given function wrapped in a transaction.
This is offered as a concise alternative to calling <code>startTransaction</code> and <code>commitTransaction</code>.
</li>
<li>
Added <a>Model.set</a> as a synonym for <a>Model.setDataProperty</a>.
</li>
</ul>
</li>
<li>
<b>Parts:</b>
<ul>
<li>
Added <a>Part.key</a> and <a>Link.key</a>, as shortcuts for retrieving the Part's key in the Model data, if it exists.
</li>
</ul>
</li>
<li>
<b>Tools:</b>
<ul>
<li>
Fixed duplicate calls to focus within the <a>TextEditingTool</a>.
</li>
</ul>
</li>
<li>
<b style="color:red;">Deprecated features:</b>
<p>
These features will remain in the library until version 2.0, but they will no longer be documented and their use is discouraged.
</p>
<ul>
<li>
<b>Most Predefined Shape figures</b>
<p>
In order to shrink the size of the GoJS library we will be not be defining most predefined figures in the library.
Instead, you can find all of their definitions in the <a href="../extensions/Figures.js" target="_blank">Figures.js</a> file.
You can simply load only those figures that you want to use by copying their definitions into your code.
<p>
Until version 2.0 all of the predefined figures remain defined in the GoJS library,
so you do not yet have to load any figures from the extensions file.
However, a number of very common figures will remain predefined even in version 2.0.
The figures that will remain in 2.0 are: "Rectangle", "Square", "RoundedRectangle", "Border", "Ellipse", "Circle",
"TriangleRight", "TriangleDown", "TriangleLeft", "TriangleUp", "Triangle", "Diamond", "LineH", "LineV",
"BarH", "BarV", "MinusLine", "PlusLine", "XLine".
<p>
Note also that the definitions that are in the <a href="../extensions/Figures.js" target="_blank">Figures.js</a> file
are <em>not</em> entirely the same as their current definitions in the library.
A number of figures have been improved and some figure parameters have changed meaning.
</li>
<li>
<b>DiagramEvent.cancel</b>
<p>
The only use for this property was with the "SelectionDeleting" <a>DiagramEvent</a> in order to prevent the user from deleting the selection.
Where one might have written this Diagram listener:
<pre>"SelectionDeleting": function(e) {
if (e.diagram.selection.any(function(p) { return p.data.key.indexOf("e") >= 0; })) {
e.cancel = true;
}
},</pre>
one can write the equivalent functionality with this <a>CommandHandler.canDeleteSelection</a> method override:
<pre>"commandHandler.canDeleteSelection": function() {
return !this.diagram.selection.any(function(p) { return p.data.key.indexOf("e") >= 0; })
&amp;&amp; go.CommandHandler.prototype.canDeleteSelection.call(this);
},</pre>
<p>
Overriding the method supports the updating/enablement of commands that call <a>CommandHandler.deleteSelection</a>.
Furthermore not having a "cancel" property on the DiagramEvent avoids any potential problems that might occur if there
are multiple listeners for the "SelectionDeleting" event.
The "SelectionDeleting" <a>DiagramEvent</a> remains useful, but not for controlling whether or not the deletion should happen.
</li>
<li>
<b>GraphObject.fromEndSegmentDirection</b> and <b>GraphObject.toEndSegmentDirection</b>
<p>
These properties have not been useful. One can override <a>Link.getLinkDirection</a> to achieve the same effects.
</li>
<li>
<b>TextEditingTool.doFocus</b> and <b>TextEditingTool.doBlur</b>
<p>
These undocumented properties were used to modify the default functionality of the TextEditingTool.
That is now done by setting <a>TextBlock.defaultTextEditor</a> to an instance of <a>HTMLInfo</a> (new in 1.7).
<p>
For examples, see <a href="../samples/customTextEditingTool.html">Custom TextEditingTool sample</a> and
<a href="../extensions/TextEditor.html">Text Editor default implementation extension</a>.
</li>
<li>
<b>TextBlock.textEditor</b>, <b>TextEditingTool.defaultTextEditor</b>, and <b>TextEditingTool.currentTextEditor</b>
<p>
These properties are now primarily used with <a>HTMLInfo</a> values.
HTML Elements will still work until version 2.0.
</p>
</li>
</ul>
</li>
</ul>
<hr class="changelog" />
<h4>Changes for 1.7.29</h4>
<ul>
<li>
Fixed a case of missing layout animation.
</li>
</ul>
<h4>Changes for 1.7.28</h4>
<ul>
<li>
Typescript definition fixes.
</li>
<li>
When <a>Part.move</a> is called as <code>Group.move</code>, the method no longer invalidates Link routes inside the group.
</li>
<li>
Fixed regression in 1.7.23 with performing extra layouts involving nested Groups resulting in duplicate Transactions.
</li>
</ul>
<h4>Changes for 1.7.27</h4>
<ul>
<li>
Fixed <a>TextEditingTool</a> sometimes incorrectly ignoring non-<a>TextBlock</a>s in front of a <a>TextBlock</a>.
</li>
<li>
Fixed <a>RelinkingTool.copyLinkProperties</a> to include copying the <a>Link.points</a>, so that when <a>Link.adjusting</a> is
not None the behavior will be the same as for the original Link.
</li>
<li>
Improved AvoidsNodes link routing to be more likely to find a shorter route by looking beyond the area of the two connected nodes.
</li>
<li>
Improved link routing during <a>DraggingTool</a> moves to keep link routes while snapping is enabled.
</li>
</ul>
<h4>Changes for 1.7.26</h4>
<ul>
<li>
Fixed a regression when drawing large images scaled down, introduced in 1.7.21.
</li>
</ul>
<h4>Changes for 1.7.25</h4>
<ul>
<li>
Replaced the Angular 2 project with a newer Angular 4 project, at <code>../projects/angular-basic</code>.
This projected was created with Angular CLI; we then added a <code>diagram-editor</code> Component
consisting of a <a>Diagram</a> and a <a>Palette</a>. That component takes a <a>Model</a> as an Input
and produces <code>nodeSelected</code> and <code>modelChanged</code> as Outputs.
The main app component shows editable details for the primary selection if it is a <a>Node</a>.
</li>
<li>
Automatically redraw with improved sharpness as the user zooms the page.
</li>
<li>
Fixed a bug where Pictures given a <a>GraphObject.maxSize</a> and no loaded <a>Picture.element</a> or <a>Picture.source</a> would measure incorrectly.
</li>
</ul>
<h4>Changes for 1.7.24</h4>
<ul>
<li>
Fixed a regression introduced in 1.7.18 with pinch-zooming on Microsoft touch devices in IE.
</li>
<li>
Fixed a visibility bug when a non-visible <a>Part</a> switches layers.
</li>
<li>
Events on the Diagram now attempt to find the Event target Diagram differently. This may help in libraries that use a shadow DOM or DOM scoping.
</li>
</ul>
<h4>Changes for 1.7.23</h4>
<ul>
<li>
Fixed a bug with SVG generation. Generated <code>&lt;svg&gt;</code> tags also now specify a <code>viewBox</code> attribute.
</li>
</ul>
<h4>Changes for 1.7.22</h4>
<ul>
<li>
Improved routing of links to non-visible member nodes of collapsed groups,
when the spots of the group's default port are different than thespots of the non-visible node that the link is connected with.
</li>
<li>
Diagram mouseOut now appropriately calls <a>Tool.standardMouseOver</a>,
and <a>Tool.standardMouseOver</a> uses null as the current object if the mouse is not over the current Diagram.
</li>
<li>
For wrapping, TextBlocks respect the maxSize of their Panel, but also accidentally conformed to their Panel's minSize.
</li>
<li>
Diagram keyDown used to always preventDefault on keyDown events, but this is now overridable via <a>InputEvent.bubbling</a>.
</li>
</ul>
<h4>Changes for 1.7.21</h4>
<ul>
<li>
Drawing fix for HTMLVideoElement sources to <a>Picture.element</a>, which were broken in 1.7.5.
</li>
<li>
Fix for the main element of a Panel (when using <a>GraphObject.isPanelMain</a>) sometimes getting cached incorrectly.
</li>
</ul>
<h4>Changes for 1.7.20</h4>
<ul>
<li>
Fixed <a>Panel.rebuildItemElements</a> not to remove any Links that were connected with item elements that are ports.
</li>
<li>
Fixes for link routing during animation.
</li>
<li>
Fixed slight shifting of <a>Group</a>s that have <a>Group.layout</a> being a <a>CircularLayout</a> after repeated layouts,
including after expanding the subgraph.
</li>
</ul>
<h4>Changes for 1.7.19</h4>
<ul>
<li>
Added the <a href="../samples/vue.html" target="_blank">Vue.js</a> sample,
demonstrating a simple GoJS app in the <a href="https://vuejs.org">Vue.js</a> framework.
</li>
<li>
Fixed a bug in <a>DraggingTool.moveParts</a> where it was incorrectly shifting Nodes when Nodes shifted by differing amounts.
</li>
<li>
Extended <a>RotatingTool</a> to work on link labels; the user still cannot rotate whole Links or the <a>Link.path</a>.
</li>
<li>
Restored behavior from 1.6 of <a>Model.fromJson</a> such that <code>linkdata.points</code> property value is of type <a>List</a>.
Version 1.7 had allowed that property to remain as an Array of numbers.
</li>
<li>
When a <a>Group.layout></a> was a <a>CircularLayout</a>, that layout was not respecting the implicit <a>Layout.arrangementOrigin</a>
provided by the group by calling and remembering <a>Layout.initialOrigin</a>.
</li>
<li>
Fixed Link arrowhead and Link label positioning when the object to be positioned is scaled.
</li>
</ul>
<h4>Changes for 1.7.18</h4>
<ul>
<li>
Improved multi-finger touch handling while doing single-finger operations, like dragging and panning.
</li>
<li>
Fixed a bug where collapsing a Group in a LayeredDigraphLayout could cause incorrect routes for bezier links to member nodes.
</li>
<li>
<a>Diagram.makeSVG</a> will now wrap the outputted TextBlock <code>&lt;text&gt;</code>s with <code>&lt;g&gt;</code> if the TextBlock has multiple lines of text.
</li>
</ul>
<h4>Changes for 1.7.17</h4>
<ul>
<li>
Fixed a bug in Grid Panel where it might not draw the last horizontal grid line.
</li>
<li>
More extensions translated into TypeScript, at <a href="../extensionsTS/index.html" target="_blank">ExtensionsTS</a>.
</li>
<li>
Table Panels now allocate space to elements with a <a>GraphObject.stretch</a> value that also span multiple rows or columns in a more consistent fashion.
</li>
<li>
Shapes inside a Grid Panel now respect <a>GraphObject.opacity</a> values.
</li>
<li>
Label Nodes on labeled Links now are members of the link's containing Group, if any.
</li>
<li>
Fixed a bug where if multiple Diagrams shared a Picture, they might not all be redrawn properly upon the image element loading or erroring.
</li>
</ul>
<h4>Changes for 1.7.16</h4>
<ul>
<li>
Translated and modularized the extensions into TypeScript <code>*.ts</code> files, in the <code>extensionsTS</code> directory.
The compiled files are present in that directory as <code>*.js</code> files, which can be required or imported even if you are not using TypeScript.
(Caution: all of the script in the HTML samples in the <code>extensions</code> directory have been split out into <code>...Script.ts</code>
files, so try not to be confused by the corresponding <code>*.js</code> files, which will have <code>Script</code> in their names.)
</li>
<li>
Fixed missing calls to <a>Node.linkConnected</a> and <a>Node.linkDisconnected</a> event handlers when
connecting or disconnecting reflexive links.
</li>
<li>
Fixed error in <a>Model.applyIncrementalJson</a> adding group nodes.
</li>
</ul>
<h4>Changes for 1.7.15</h4>
<ul>
<li>
Fixed scrollbar behavior when <a>Diagram.scrollMargin</a> was set.
</li>
<li>
Fixed <a>ResizingTool</a> not re-routing reflexive links on <a>Group</a>s.
</li>
</ul>
<h4>Changes for 1.7.14</h4>
<ul>
<li>
Avoided undesired side effects of undo and redo after relinking duplicate links.
</li>
<li>
Further improved the dragging between Diagrams that was modified in 1.7.13.
</li>
</ul>
<h4>Changes for 1.7.13</h4>
<ul>
<li>
Fixed a bug with pinch-zooming in some browsers.
</li>
<li>
Fixed a regression with <a>Diagram.makeSVG</a> not including CORS-disabled images.
</li>
<li>
Fixed a bug with the TextEditingTool when using custom HTML text editors.
The code attempted to call <code>editor.focus()</code> and <code>editor.setSelectionRange()</code>
before the editor was added to the DOM. This problem does not affect <a>HTMLInfo</a>, only HTML Element text editors.
</li>
<li>
Improved dragging of nodes from a Diagram or Palette onto an empty Diagram without a new model.
</li>
</ul>
<h4>Changes for 1.7.12</h4>
<ul>
<li>
Added the <a href="../extensions/NonRealtimeDragging.html" target="_blank">Non Realtime Dragging</a> sample,
demonstrating how to customize the <a>DraggingTool</a> to have users drag around a translucent image of the selection,
rather than actually moving those Nodes and Links, until the mouse up occurs.
This makes use of the <a href="../extensions/NonRealtimeDraggingTool.js" target="_blank">NonRealtimeDraggingTool.js</a> extension.
</li>
<li>
The <a>DraggingTool</a> will now initiate auto scroll of the Diagram even if <a>Diagram.allowMove</a> and <a>Diagram.allowCopy</a> are false.
</li>
<li>
Link labels along multi-segmented links with unspecified <a>GraphObject.segmentIndex</a>es will now have more accurate angles.
</li>
<li>
Fixed a bug with TextBlocks when <a>TextBlock.wrapping</a> was set to <a>TextBlock.None</a>, it would size itself only by the last line.
</li>
</ul>
<h4>Changes for 1.7.11</h4>
<ul>
<li>
Fixed a bug in the <a>TextEditingTool</a> when editing TextBlocks with a non-default <a>TextBlock.textAlign</a> value.
</li>
<li>
Fixed some Diagram construction orders not respecting screen pixel ratios.
</li>
<li>
Fixed a <a>DraggingTool</a> bug when dragging disconnected links between Diagrams, when the destination Diagram had <a>Diagram.allowCopy</a> set to false.
</li>
<li>
Fixed faulty locations when <a>Part.locationSpot</a> or <a>Part.locationObjectName</a> were modified when a Part was transformed (angle or scale).
</li>
</ul>
<h4>Changes for 1.7.10</h4>
<ul>
<li>
Fixed routing of <a>Link</a>s to rotated nodes with "...Side" Spots.
</li>
<li>
Fixed routing of <a>Link.AvoidsNodes</a> Links that also had <a>Link.adjusting</a> set to <a>Link.End</a>.
</li>
</ul>
<h4>Changes for 1.7.9</h4>
<ul>
<li>
Added the <a href="../extensions/ParallelRoute.html" target="_blank">Parallel Route</a> sample,
demonstrating a custom <a>Link.computePoints</a> method in order to have multiple links between the same two ports have parallel segments.
This makes use of the <a href="../extensions/ParallelRouteLink.js" target="_blank">ParallelRouteLink.js</a> extension.
</li>
<li>
Fixed some instances of ticks not rendering on Graduated Panels with small <a>Panel.graduatedTickUnit</a> values.
</li>
</ul>
<h4>Changes for 1.7.8</h4>
<ul>
<li>
Added the <a href="../extensions/LinkLabelOnPathDragging.html" target="_blank">Link Label On Path Dragging</a> sample,
demonstrating how to restrict the dragging of link labels to remain on the path of the link.
This makes use of the <a href="../extensions/LinkLabelOnPathDraggingTool.js" target="_blank">LinkLabelOnPathDraggingTool.js</a> extension.
</li>
<li>
TableRows and TableColumns now update their ports correctly when scrolling by setting <a>Panel.topIndex</a> or <a>Panel.leftIndex</a>.
</li>
<li>
<a>Link</a>s that have TwoWay Bindings of <a>Link.points</a> now copy faithfully between different Diagrams.
</li>
<li>
When the <a>DraggingTool.dragsLink</a> is true, a drag of a Link that reconnects one or both ends of the Link will now raise
one or two "LinkRelinked" <a>DiagramEvent</a>s. Just as with a "LinkRelinked" event raised by the <a>RelinkingTool</a>,
the <a>DiagramEvent.parameter</a> will be the old port with which the Link had been connected.
</li>
</ul>
<h4>Changes for 1.7.7</h4>
<ul>
<li>
Added the <a href="../samples/triStateCheckBoxTree.html" target="_blank">Tri-state CheckBox Tree</a> sample,
demonstrating checkboxes for each item in a "tree view".
</li>
<li>
Improved the performance of link routing when groups have a lot of member nodes and links.
</li>
<li>
Fixed shadow scaling when making images.
</li>
</ul>
<h4>Changes for 1.7.6</h4>
<ul>
<li>
Added the <a href="../extensions/RoundedRectangles.js" target="_blank">RoundedRectangles.js</a> definitions of figures
that have rounded corners only at the top or only at the bottom.
</li>
<li>
Added the <a href="../samples/roundedGroups.html" target="_blank">Rounded Groups</a> sample
demonstrating both Nodes and Groups that have rounded headers and rounded footers.
</li>
<li>
Added the <a href="../samples/twoHalves.html" target="_blank">Two Halves</a> sample
demonstrating a Node template that has both a top half and a bottom half and that has rounded corners overall.
</li>
<li>
Fixed cases where <a>InputEvent.left</a> remained true for mouse move events even after the left mouse button was released.
</li>
</ul>
<h4>Changes for 1.7.5</h4>
<ul>
<li>
Added the <a href="../samples/minimalSVG.html" target="_blank">Minimal SVG Download</a> sample,
demonstrating <a>Diagram.makeSvg</a> and "downloading" the resulting SVG file.
</li>
</ul>
<h4>Changes for 1.7.4</h4>
<ul>
<li>
Added the <a href="../extensions/SectorReshaping.html" target="_blank">Sector Reshaping</a> sample,
demonstrating a custom <a>Tool</a> that supports interactively changing the angle and breadth (sweep) and depth (radius)
of a pie-shaped sector of a circle.
The SectorReshapingTool is defined in the <a href="../extensions/SectorReshapingTool.js">SectorReshapingTool.js</a>
file in the Extensions directory.
</li>
<li>
Fixed broken <a>Diagram.makeImageData</a> for "blob" return type.
</li>
</ul>
<h4>Changes for 1.7.3</h4>
<ul>
<li>
Added the <code>angular2-minimal</code> project, in the projects subdirectory.
This is a copy of the Angular 2 Quick Start example, https://angular.io/docs/ts/latest/quickstart.html,
augmented to show the GoJS "minimal" sample.
</li>
<li>
Fixed another declaration in <code>go.d.ts</code>.
</li>
</ul>
<h4>Changes for 1.7.2</h4>
<ul>
<li>
Fixed missing declaration in <code>go.d.ts</code>.
</li>
</ul>
<h4>Changes for 1.7.1</h4>
<ul>
<li>
Fixed some corrupted image files in the samples.
</li>
<li>
Renewed a Leaflet access token for the Leaflet sample.
</li>
</ul>
<div style="border: 2px solid #1F4963; padding: 6px; margin-top: 30px; margin-bottom: 30px;">
<p><strong>GoJS version 1.7</strong> brings several new features and samples. Here are some highlights:</p>
<ul>
<li>
From GoJS 1.7 onward there is a new method of licensing that does not require a separate <code>go.js</code> file download, instead it uses a license key.
Read more on the <a href="../intro/deployment.html">Deployment Intro page</a>.
</li>
<li>
Added a new sample: <a href="../extensions/FloorPlanner.html" target="_blank">Floor Planner</a> in the extensions folder.
</li>
<li>
More intelligent link routing:
GoJS now attempts to preserve Link routes when elements of a Node resize or move, but do not affect the link ports.
</li>
<li>
Improved support for customizing tooltips, context menus and the <a>TextEditingTool</a> using a new class:
<a>HTMLInfo</a>, which contains methods to show and hide custom HTML.
HTMLInfo can be assigned as a value of <a>GraphObject.contextMenu</a>, <a>Diagram.contextMenu</a>,
<a>GraphObject.toolTip</a>, <a>Diagram.toolTip</a>, or <a>TextBlock.defaultTextEditor</a>.
Read more on the <a href="../intro/HTMLInteraction.html">HTML Interaction Intro page</a>.
</li>
<li>
New <a>Panel.type</a>: <a>Panel.Graduated</a>, used to draw regular tick marks and text along a main <a>Shape</a> element.
Read more on the <a href="../intro/graduatedPanels.html">Graduated Panels Intro page</a>.
</li>
<li>
Added the <a>Panel.isEnabled</a> property, the <a>GraphObject.isEnabledObject</a> method, and the <a>GraphObject.enabledChanged</a> event.
</li>
<li>
Added the <a>Panel.isClipping</a> property, which allows Spot Panels to designate their main Shape element as a clipping region instead of a drawn Shape.
</li>
<li>
Added <a>Brush</a> methods for computing lighter or darker colors or Brushes.
</li>
<li>
Added <a>Binding.ofModel</a> method, to support data binding of <a>GraphObject</a> properties to data
properties that are on the <a>Model.modelData</a> shared JavaScript Object.
</li>
</ul>
</div>
<h4>Changes for 1.7 since 1.6.*</h4>
<ul>
<li>
<b>Samples and documentation:</b>
<ul>
<li>
Copied definitions for all <a>Shape.figure</a> figures to the <a href="../extensions/Figures.js" target="_blank">Figures.js</a> file.
All of the old figures are still predefined, so you will not need to load any section of this file.
This file provides information about how each figure is defined, so that you can customize them or copy-and-adapt them.
</li>
<li>
Copied definitions for all predefined templates to the <a href="../extensions/Templates.js" target="_blank">Templates.js</a> file
in the Extensions directory.
The predefined templates are still predefined, so you will not need to load this file in order to use those definitions.
This file provides information about how each template is defined, so that you can customize them or copy-and-adapt them.
</li>
<li>
Added a new sample: <a href="../extensions/FloorPlanner.html" target="_blank">Floor Planner</a> in the extensions folder.
</li>
<li>
Added the <a href="../samples/customExpandCollapse.html" target="_blank">Custom Expand Collapse</a> sample,
demonstrating an alternative to the "TreeExpanderButton" and the use of the <a>Node.isTreeExpanded</a>.
This sample is tolerant of cycles in the graph.
</li>
<li>
Added the <a href="../extensions/Hyperlink.html" target="_blank">Hyperlink</a> sample,
demonstrating a "HyperlinkText" GraphObject builder that implements a standard hyperlink or "HTML anchor" control.
The "HyperlinkText" builder is defined in the <a href="../extensions/HyperlinkText.js" target="_blank">HyperlinkText.js</a>
file in the Extensions directory.
</li>
<li>
Added the <a href="../samples/orgChartAssistants.html" target="_blank">Org Chart Assistants</a> sample,
demonstrating a custom <a>TreeLayout</a> that positions "assistant" child nodes to the side, above the regular child nodes.
</li>
<li>
Added the <a href="../extensions/RadialLayout.js" target="_blank">Radial Layout</a> extension class,
used by the <a href="../samples/radial.html" target="_blank">Recentering Radial</a> sample and the
<a href="../samples/radialPartition.html" target="_blank">Radial Partition</a> sample.
</li>
<li>
Added several new HTML pages that showcase existing extensions as standalone samples:
<a href="../extensions/DrawCommandHandler.html" target="_blank">Draw CommandHandler</a>
<a href="../extensions/GeometryReshaping.html" target="_blank">Geometry Reshaping</a>,
<a href="../extensions/GuidedDragging.html" target="_blank">Guided Dragging</a>,
<a href="../extensions/HyperLink.html" target="_blank">HyperLink</a>,
<a href="../extensions/LocalStorageCommandHandler.html" target="_blank">Local Storage CommandHandler</a>,
<a href="../extensions/ResizeMultiple.html" target="_blank">Resize Multiple</a>,
<a href="../extensions/RotateMultiple.html" target="_blank">Rotate Multiple</a>.
</li>
<li>
Added the <a href="../samples/htmlLightBoxContextMenu.html" target="_blank">HTML Light Box Context Menu</a> sample,
a re-implementation of the default touch context menu using <a>HTMLInfo</a>, and references
<a href="../extensions/LightBoxContextMenu.js" target="_blank">LightBoxContextMenu.js</a> and
<a href="../extensions/LightBoxContextMenu.css" target="_blank">LightBoxContextMenu.css</a>.
</li>
<li>
Added the <a href="../extensions/TextEditor.html" target="_blank">Text Editor</a> sample,
a re-implementation of the default text editor using <a>HTMLInfo</a>.
It uses the <a href="../extensions/TextEditor.js" target="_blank">TextEditor.js</a> extension.
</li>
<li>
Reworked the <a href="../samples/customTextEditingTool.html" target="_blank">CustomTextEditingTool</a> sample
to use two <a>HTMLInfo</a> instances, defined in
<a href="../extensions/TextEditorRadioButtons.js" target="_blank">TextEditorRadioButtons.js</a> and
<a href="../extensions/TextEditorSelectBox.js" target="_blank">TextEditorSelectBox.js</a>.
</li>
<li>
Reworked the <a href="../samples/timeline.html" target="_blank">Timeline</a> sample to use a Graduated Panel.
Added several samples demonstrating Graduated Panels:
<a href="../samples/thermometer.html" target="_blank">Thermometer</a>,
<a href="../samples/instrumentGauge.html" target="_blank">Instrument Gauge</a>,
<a href="../samples/ruleredDiagram.html" target="_blank">Rulered Diagram</a>,
</li>
</ul>
</li>
<li>
<b>Diagram and Layer:</b>
<ul>
<li>
Enhanced the "ViewportBoundsChanged" <a>DiagramEvent</a> to provide the previous <a>Diagram.scale</a> as the "scale" property
of the <a>DiagramEvent.subject</a>; the previous <a>Diagram.position</a> is available as the "position" property of that subject,
and the previous <a>Diagram.viewportBounds</a> is also available as the "bounds" property of that same subject.
</li>
<li>
Enhanced <a>Diagram.computePartsBounds</a> to take optional argument whether to include the bounds of all <a>Link</a>s in the given collection.
</li>
<li>
<a>Diagram.makeImageData</a> has a new option, <code>returnType</code>, which allows you to specify a <code>string</code> (default),
<code>ImageData</code> (new), or <code>Blob</code> (new) as the returned type.
<a>Diagram.makeImageData</a> also has a new option <code>callback</code> which is used in conjunction with <code>returnType: "Blob"</code>.
See the <a href="../samples/minimalBlob.html">Minimal Image Blob Download sample</a> for usage details.
</li>
<li>
<a>Part</a>s that are added and selected or highlighted, and then are removed upon an undo, no longer remain selected or highlighted.
This policy avoids having non-existent nodes and links (due to undo of their insertion) remaining in
the <a>Diagram.selection</a> or <a>Diagram.highlighteds</a> collections.
</li>
<li>
Extended <a>Diagram.findPartForKey</a> to return <a>Link</a>s if the <a>Diagram.model</a> is a <a>GraphLinksModel</a> that is keeping keys for link data.
If <a>GraphLinksModel.findLinkDataForKey</a> returns a link data object, <a>Diagram.findPartForKey</a> may return the corresponding Link.
</li>
</ul>
</li>
<li>
<b>Parts:</b>
<ul>
<li>
Added <a>Node.findTreeParentChain</a> method, to return a collection of the <a>Node</a>s and <a>Link</a>s
following links up to a root node.
</li>
<li>
GoJS now attempts to preserve Link routes when elements of a Node resize or move but do not affect the absolute position of ports.
</li>
<li>
Improved Orthogonal <a>Link</a> routing for links coming out of and going into the same port.
</li>
<li>
<a>Link.AvoidsNodes</a> routing when <a>Link.adjusting</a> is <a>Link.End</a> now tries to preserve earlier routing not near the end(s) of the route that were adjusted.
</li>
<li>
<a>Link.AvoidsNodes</a> routing may be more likely to turn immediately when <a>Node.avoidable</a> Nodes overlap either or both ports.
</li>
<li>
Added <a>Part.highlightedChanged</a>, when one wants to modify the appearance of a Part in a manner that is inconvenient to implement using data Binding.
</li>
</ul>
</li>
<li>
<b>Panels</b>
<ul>
<li>
Added the <a>Panel.isEnabled</a> property, the <a>GraphObject.isEnabledObject</a> method,
and the <a>GraphObject.enabledChanged</a> functional property,
for use by <a>Panels</a> such as "Button"s that are <a>GraphObject.isActionable</a>,
to control whether or not the user may click them.
</li>
<li>
Added the <a>Panel.isClipping</a> property, which allows Spot Panels to designate their main Shape element as a clipping region instead of a drawn Shape.
</li>
<li>
Added the <a>Panel.isOpposite</a> property, which allows Horizontal and Vertical panels to arrange their contents
from the right and bottom side (respectively) instead of the top and left side.
</li>
<li>
Added the <a>Panel.alignmentFocusName</a> property, which allows elements of Spot Panels to name a nested Element to be the alignment object instead of the Panel.
</li>
<li>
Added the new <a>Panel.type</a>: <a>Panel.Graduated</a>, used to draw regular tick marks and text along a main <a>Shape</a> element.
Read more on the <a href="../intro/graduatedPanels.html">Graduated Panels Intro page</a>.
</li>
<li>
Added <a>Panel.graduatedMin</a>, <a>Panel.graduatedMax</a>, <a>Panel.graduatedRange</a>, <a>Panel.graduatedTickUnit</a>, <a>Panel.graduatedTickBase</a>,
<a>Panel.graduatedPointForValue</a>, <a>Panel.graduatedValueForPoint</a>, <a>Shape.graduatedStart</a>, <a>Shape.graduatedEnd</a>, <a>TextBlock.interval</a>,
<a>TextBlock.graduatedStart</a>, <a>TextBlock.graduatedEnd</a>, and <a>TextBlock.graduatedFunction</a>, all for use with Graduated Panels.
</li>
<li>
Improved the "PanelExpanderButton" to work in nested <a>Panel.itemTemplates</a>.
</li>
</ul>
</li>
<li>
<b>GraphObjects and Geometry:</b>
<ul>
<li>
Added <a>Picture.successFunction</a>, a function called when the Picture's image loads successfully.
</li>
<li>
Added <a>Picture.imageAlignment</a>, a Spot to align the source image to, when the source image is smaller than the Picture.
</li>
<li>
Added <a>TextBlock.verticalAlignment</a>, which controls the vertical position of the glyphs
when the TextBlock has more available vertical space than it needs for drawing.
</li>
<li>
Added <a>TextBlock.textEdited</a>, a settable function that is called on a TextBlock when the <a>TextEditingTool</a> is completing.
</li>
<li>
Added <a>TextBlock.choices</a>, a settable/bindable Array that can help implement custom <a>TextEditingTool</a>s.
See the <a href="../samples/customTextEditingTool.html">Custom TextEditingTool Sample</a>.
</li>
<li>
Added <a>TextBlock.interval</a>, <a>TextBlock.graduatedFunction</a>, <a>TextBlock.graduatedStart</a>, <a>TextBlock.graduatedEnd</a>
for use in "Graduated" Panels to implement scales, gauges, rulers, and similar devices.
</li>
<li>
Added <a>Shape.graduatedStart</a> and <a>Shape.graduatedEnd</a> for use in "Graduated" Panels.
</li>
<li>
Added <a>Brush.lightenBy</a> and <a>Brush.darkenBy</a> instance and static methods, which lighten or darken colors in a Brush or a CSS color string.
There are also convenience methods <a>Brush.lighten</a> and <a>Brush.darken</a> which provide default behavior.
</li>
<li>
Extended <a>Placeholder.padding</a> to allow negative values.
</li>
<li>
Extended <a>GraphObject.getDocumentPoint</a> to take a <a>Point</a> in local coordinates, as well as a <a>Spot</a> in this GraphObject.
This is for convenience and clarity the opposite transformation performed by <a>GraphObject.getLocalPoint</a>.
</li>
<li>
Added support for zero-width spaces and soft hyphens wrapping lines in <a>TextBlock</a>.
</li>
</ul>
</li>
<li>
<b>Models:</b>
<ul>
<li>
Added <a>Binding.ofModel</a> method, to support data binding of <a>GraphObject</a> properties to data
properties that are on the <a>Model.modelData</a> shared JavaScript Object.
</li>
<li>
Enhanced <a>Diagram.updateAllRelationshipsFromData</a> to also add and remove <a>Node</a>s and <a>Link</a>s
for any additional and missing data in the model. Remember that it is more efficient to call
methods on the model to modify it and also notify all diagrams about the change
than it is to call <a>Diagram.updateAllRelationshipsFromData</a>. Calling methods such as
<a>Model.addNodeData</a> and <a>Model.setDataProperty</a> also have the benefit of supporting undo/redo --
the "update..." methods do not.
</li>
<li>
It is now possible for a TwoWay <a>Binding</a> in an item template to replace an item in the <a>Panel.itemArray</a>.
For an example, please see the updated documentation for the <a>Binding</a> class.
</li>
<li>
A third argument, the <a>Model</a>, is now passed to back-converter (source-to-target) functions in TwoWay <a>Binding</a>s.
This permits access to the model from the data object without having to explicitly add a reference to the model in each data object.
Such an argument is not needed for the regular source-to-target converters because one can always walk up the visual tree
of <a>GraphObject</a>s via <a>GraphObject.part</a>, <a>GraphObject.panel</a>, or <a>GraphObject.diagram</a>.
</li>
<li>
Fixed a call to <a>Model.removeNodeData</a> not potentially invalidating a <a>Layout</a>.
</li>
</ul>
</li>
<li>
<b>Layouts:</b>
<ul>
<li>
Added the <a>Layout.collectParts</a> method, a convenience method to be called by overrides of <a>Layout.doLayout</a>
to process the argument in order to get a collection of <a>Part</a>s that should be laid out by that custom <a>Layout</a>,
when <em>not</em> using a <a>LayoutNetwork</a>.
</li>
</ul>
</li>
<li>
<b>Tools and Commands:</b>
<ul>
<li>
Added new class <a>HTMLInfo</a>, which contains methods to show and hide custom HTML.
HTMLInfo can be assigned as a value of <a>GraphObject.contextMenu</a>, <a>Diagram.contextMenu</a>, <a>GraphObject.toolTip</a>, or <a>Diagram.toolTip</a>.
Read more on the <a href="../intro/HTMLInteraction.html">HTML Interaction Intro page</a>.
For examples, see:
<ul>
<li>Text Editors: <a href="../samples/customTextEditingTool.html">Custom Text Editors sample</a> and
<a href="../extensions/TextEditor.html">Re-implementation of the default Text Editor</a>
<li>Context Menus: <a href="../samples/customContextMenu.html">Custom Context Menu</a> and
<a href="../samples/htmlLightBoxContextMenu.html">HTML Lightbox Context Menu</a> (a re-implementation of the default touch context menu)
<li>Tooltips: <a href="../samples/dataVisualization.html">Data Visualization Tooltip</a>
</ul>
</li>
<li>
Added <a>TextEditingTool.state</a> and <a>TextEditingTool.measureTemporaryTextBlock</a> that can be used
by custom <a>HTMLInfo</a> text editors.
</li>
<li>
Added the <a>ContextMenuTool.defaultTouchContextMenu</a> property, which is an instance of <a>HTMLInfo</a> by default.
This may be set to another instance of HTMLInfo, or may be set to null to disable the default touch context menu.
</li>
<li>
Extended the <a>DragSelectingTool</a> to auto-scroll when the mouse point is just within the edge of the viewport.
</li>
<li>
Added the overridable method <a>LinkingTool.doNoLink</a>, which is called when a mouse up during a linking operation does <em>not</em> actually draw a new Link.
</li>
<li>
Added the overridable method <a>RelinkingTool.doNoRelink</a>, which is called when a mouse up during a relinking operation does <em>not</em> actually reconnect the Link.
</li>
<li>
Improved the <a>LinkingTool</a> and <a>RelinkingTool</a> to auto-scroll during a linking operation
even when snapped to a valid target port.
</li>
<li>
Added the overridable method <a>ResizingTool.computeReshape</a>, to make it easier to change when the user may change the aspect ratio of the object being resized.
</li>
<li>
Fixed the <a>ResizingTool</a> to work better when resizing rotated parts.
<span style="color:red;">Potentially Incompatible:</span> Previously the <a>Part.locationSpot</a> would determine where an resizing object expanded or contracted from.
Now, resizing objects always resize from their dragged handle, so that the opposite handle always stays in place.
</li>
<li>
Added <a>TextEditingTool.DoubleClick</a> as an additional option for <a>TextEditingTool.starting</a>.
</li>
<li>
<span style="color:red;">CSS Style incompatibility:</span> The <a>TextEditingTool.defaultTextEditor</a> Input element is no longer given the CSS class "start".
This CSS class had been undocumented and unsupported.
</li>
<li>
<span style="color:red;">CSS Style incompatibility:</span> The default context menu used the classes "defaultCXul", "defaultCXli", and "defaultCXa",
they have been renamed "goCXul", "goCXli", and "goCXa", respectively.
These CSS classes had been undocumented and unsupported.
</li>
</ul>
</li>
<li>
<b style="color:red;">Deprecated features:</b>
<p>
These features will remain in the library until version 2.0, but they will no longer be documented and their use is discouraged.
</p>
<ul>
<li>
<b>Most Predefined Shape figures</b>
<p>
In order to shrink the size of the GoJS library we will be not be defining most predefined figures in the library.
Instead, you can find all of their definitions in the <a href="../extensions/Figures.js" target="_blank">Figures.js</a> file.
You can simply load only those figures that you want to use by copying their definitions into your code.
<p>
Until version 2.0 all of the predefined figures remain defined in the GoJS library,
so you do not yet have to load any figures from the extensions file.
However, a number of very common figures will remain predefined even in version 2.0.
The figures that will remain in 2.0 are: "Rectangle", "Square", "RoundedRectangle", "Border", "Ellipse", "Circle",
"TriangleRight", "TriangleDown", "TriangleLeft", "TriangleUp", "Triangle", "Diamond", "LineH", "LineV",
"BarH", "BarV", "MinusLine", "PlusLine", "XLine".
<p>
Note also that the definitions that are in the <a href="../extensions/Figures.js" target="_blank">Figures.js</a> file
are <em>not</em> entirely the same as their current definitions in the library.
A number of figures have been improved and some figure parameters have changed meaning.
</li>
<li>
<b>DiagramEvent.cancel</b>
<p>
The only use for this property was with the "SelectionDeleting" <a>DiagramEvent</a> in order to prevent the user from deleting the selection.
Where one might have written this Diagram listener:
<pre>"SelectionDeleting": function(e) {
if (e.diagram.selection.any(function(p) { return p.data.key.indexOf("e") >= 0; })) {
e.cancel = true;
}
},</pre>
one can write the equivalent functionality with this <a>CommandHandler.canDeleteSelection</a> method override:
<pre>"commandHandler.canDeleteSelection": function() {
return !this.diagram.selection.any(function(p) { return p.data.key.indexOf("e") >= 0; })
&amp;&amp; go.CommandHandler.prototype.canDeleteSelection.call(this);
},</pre>
Overriding the method supports the updating/enablement of commands that call <a>CommandHandler.deleteSelection</a>.
Furthermore not having a "cancel" property on the DiagramEvent avoids any potential problems that might occur if there
are multiple listeners for the "SelectionDeleting" event.
The "SelectionDeleting" <a>DiagramEvent</a> remains useful, but not for controlling whether or not the deletion should happen.
</li>
<li>
<b>GraphObject.fromEndSegmentDirection</b> and <b>GraphObject.toEndSegmentDirection</b>
<p>
These properties have not been useful. One can override <a>Link.getLinkDirection</a> to achieve the same effects.
</li>
<li>
<b>TextEditingTool.doFocus</b> and <b>TextEditingTool.doBlur</b>
<p>
These undocumented properties were used to modify the default functionality of the TextEditingTool.
That is now done by setting <a>TextBlock.defaultTextEditor</a> to an instance of <a>HTMLInfo</a> (new in 1.7).
<p>For examples, see <a href="../samples/customTextEditingTool.html">Custom TextEditingTool sample</a> and
<a href="../extensions/TextEditor.html">Text Editor default implementation extension</a>.
</li>
<li>
<b>TextBlock.textEditor</b>, <b>TextEditingTool.defaultTextEditor</b>, and <b>TextEditingTool.currentTextEditor</b>
<p>
These properties are now primarily used with <a>HTMLInfo</a> values.
HTML Elements will still work until version 2.0.
</p>
</li>
</ul>
</li>
</ul>
<hr class="changelog" />
<h4>Changes for 1.6.24</h4>
<ul>
<li>
Fixed an infinite recursion when a <a>Link</a> with a label <a>Node</a> connects with that same node.
</li>
<li>
Fixed a case of <a>AnimationManager</a> retaining references to Parts that were not cleared by <a>Diagram.clear</a>.
</li>
</ul>
<h4>Changes for 1.6.23</h4>
<ul>
<li>
Fixed a bug with <a>Picture.sourceCrossOrigin</a> setting the CORS flag too late.
Some browsers require it be set before an image source is set.
</li>
<li>
Fixed a bug in recent Chrome browsers and Edge where shift-scroll-wheel did not scroll horizontally.
</li>
</ul>
<h4>Changes for 1.6.22</h4>
<ul>
<li>
Fixed lack of jump-over or jump-gap when link routes have only two points.
</li>
</ul>
<h4>Changes for 1.6.21</h4>
<ul>
<li>
Overviews are notified at the end of animations, in case they need to update their bounding box.
</li>
<li>
Fixed a scrollbar issue when using initalAutoScale and resetting the diagram or loading a new model.
</li>
<li>
Fixed link label positioning in certain cases where <a>GraphObject.alignmentFocus</a> and <a>GraphObject.segmentOrientation</a> are both set.
</li>
</ul>
<h4>Changes for 1.6.20</h4>
<ul>
<li>
Fixed a measuring issue with <a>GraphObject.desiredSize</a> when the old size matches the new size.
</li>
<li>
Fixed an animation issue with Group subgraph collapsing, when the member Nodes have a locationSpot set.
</li>
</ul>
<h4>Changes for 1.6.19</h4>
<ul>
<li>
<a>Shape</a>s with a custom <a>Geometry</a> no longer lose their custom geometry when <a>GraphObject.desiredSize</a> is set to NaN.
Shapes also rebuild custom geometries more accurately when reshaped or scaled.
</li>
<li>
A <a>Group</a> whose <a>Group.layout</a>is a <a>LayeredDigraphLayout</a> is less likely to move after repeated cycles of collapsing and expanding.
</li>
<li>
Fixed an animation issue when there are multiple animations bundled together, and the last one does not add any animatable parts.
</li>
</ul>
<h4>Changes for 1.6.18</h4>
<ul>
<li>
Fixed <a>CommandHandler.scrollToPart</a> exception when called both before and after calling <a>CommandHandler.deleteSelection</a>.
</li>
<li>
Fixed rare infinite loop in <a>LayeredDigraphLayout</a> involving multiple links between nodes with multiple ports.
</li>
<li>
Updated <a href="../extensions/TableLayout.js">TableLayout.js</a> extension to take the <a>Layout.arrangementOrigin</a> into account.
</li>
</ul>
<h4>Changes for 1.6.17</h4>
<ul>
<li>
Fixed a <a>InputEvent.clickCount</a> values during mouseDown operations in IE10 and 11. This was already correct for mouseUp.
</li>
<li>
Fixed an issue with Table Panel spacing when <a>Panel.defaultRowSeparatorStroke</a> and <a>Panel.defaultColumnSeparatorStroke</a>
were set, and there is not enough room to display all rows/columns.
</li>
</ul>
<h4>Changes for 1.6.16</h4>
<ul>
<li>
Scrollbar fixes for RTL langauges.
</li>
<li>
<a>TextBlock.textAlign</a> values "start" and "end" now correctly interpret the alignment value when Diagrams divs have direction: RTL set in their CSS.
</li>
<li>
Fix for Table Panel when panel elements had Horizontal or Vertical stretch, but not enough room.
The stretch had affected sizing in the wrong direction.
</li>
<li>
Fixed line dash drawing (Use of <a>Shape.strokeDashArray</a> and <a>Shape.strokeDashOffset</a>), a regression from 1.6.13.
</li>
<li>
Fixed routing of links connecting with non-visible ports, a regression from 1.6.12.
</li>
</ul>
<h4>Changes for 1.6.15</h4>
<ul>
<li>
Fixed some image loading scenarios when a <a>Picture</a> had no desiredSize set in a template, but a data-bound desiredSize.
</li>
<li>
Stopped <a>Shape.geometry</a> from being scaled to zero during panel measurement.
</li>
<li>
Fixed a null reference error when pasting a collection of Nodes and orthogonal JumpOver/JumpGap Links where some of
the Links were needed to be deleted because they did not have connections on both ends.
</li>
<li>
Fixed an issue where location bindings could potentially have side effects leading to improperly-measured Parts.
</li>
<li>
Disallowed animations from starting when there is nothing to animate.
</li>
</ul>
<h4>Changes for 1.6.14</h4>
<ul>
<li>
Improved the time when a Diagram receives focus, fixing the change made in 1.6.13, so that the <a>ToolManager</a>
gives the focus to the diagram just before starting an eligible <a>Tool</a>, rather than just after it.
This allows tools and event handlers to give focus to other HTML elements, while still not having the
diagram get focus on the mouse down event of a click.
</li>
<li>
Browser mousemove events over the Diagram now bubble appropriately.
</li>
<li>
If a Tooltip or Context Menu <a>Adornment</a> has a <a>Placeholder</a>, the placeholder's scale now changes with the <a>Diagram.scale</a>.
</li>
</ul>
<h4>Changes for 1.6.13</h4>
<ul>
<li>Renamed the TypeScript definition file from <code>release/goJS.d.ts</code> to <code>release/go.d.ts</code>.</li>
<li>Auto panels with a <a>GraphObject.desiredSize</a> set now account for <a>Shape.strokeWidth</a> if their main object is a Shape.</li>
<li>Fixed mouseUp erroneously blocking bubbling.</li>
<li>Fixed some touchMove events erroneously bubbling, causing the page to pan while. This behavior began in 1.6.5.</li>
<li>
Improved how often <a>Adornment</a>s get updated. They are now removed if the <a>Adornment.adornedObject</a>
is removed from the <a>Part</a>. They are now updated during the operation of <a>DraggingTool</a> and other Tools.
</li>
<li>
Changed when Diagrams receive browser focus. Diagram DOM elements are now focused on mouseUp/touchEnd, or when a tool starts.
Previously it was on mouseDown/touchStart. This is to ensure clicks and touches occur at the appropriate location before
the browser scrolls to focus Diagram elements when the Diagram receives focus.
</li>
<li>
Fixed spurious caution about inability to route the <a>LinkingBaseTool.temporaryLink</a> the first time the user tries to draw a new link.
</li>
</ul>
<h4>Changes for 1.6.12</h4>
<ul>
<li>
Fixed <a>Binding.ofObject</a> to evaluate more frequently when the source property is the empty string.
Remember that Bindings with a source property that is an empty string should only used when necessary,
because they get evaluated whenever any settable property on the source object is modified,
which may include many times when the conversion function returns the same value.
</li>
<li>
Fixed some links incorrectly invalidating at the end of an animation.
</li>
<li>
Corrected some cosmetic animations that were leaving state collapsed when repeated animations were successively called.
</li>
<li>
Reduced NaN errors when trying to route a <a>Link</a> connecting with a port element that is not <a>GraphObject.visible</a>.
</li>
<li><a>Overview</a>s will now respect custom pixel ratios.</li>
<li>Fixed Picture alignment when <a>Picture.imageStretch</a> is set.</li>
</ul>
<h4>Changes for 1.6.11</h4>
<ul>
<li>Improved loading for Pattern Brushes.</li>
<li><a>Diagram.makeSvg</a> now handles Pattern Brushes.</li>
<li>Fixed a bug introduced in 1.6.5 where some Key presses unintentionally bubbled.</li>
<li>Fixed an issue with setting location not always updating the diagram.</li>
<li>Improved event handling on devices that use Pointer events (e.g., Microsoft Surface)</li>
<li>
Added the <a href="../extensions/OrthogonalLinkReshaping.html" target="_blank">OrthogonalLinkReshapingTool</a> extension.
See <a href="../extensions/OrthogonalLinkReshapingTool.js" target="_blank">OrthogonalLinkReshapingTool.js</a> for the extension's code.
This extension can be used to allow for dragging of an entire orthogonal link segment, allowing for quick reshaping without needing to drag points.
</li>
<li>Improved orientation of Link Adornments along segments where both endpoints have the same location.</li>
</ul>
<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 <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>The complete list of changes:</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 class="changelog" />
<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/go.d.ts">go.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/go.d.ts">go.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 <a href="../samples/scrollModes.html" target="_blank">Scroll Modes</a> sample.
</li>
<li>
Added <a>Diagram.scrollMargin</a> property, allowing the declaration of additional scrollable area
around the <a>Diagram.documentBounds</a>.
</li>
<li>
Added <a>Diagram.positionComputation</a> property, a function that determines the <a>Diagram.position</a>
that a Diagram can be scrolled or moved to.
</li>
<li>
Added <a>Diagram.scaleComputation</a> property, a function that determines the <a>Diagram.scale</a>
that a Diagram can be zoomed to.
</li>
<br />
<li>
Added <a>Diagram.updateAllRelationshipsFromData</a>, to update the relationships between nodes in the diagram
when there have been changes to properties in the model data that hold node references (keys) without
having gone through model methods.
Like <a>Diagram.updateAllTargetBindings</a>, this is only needed for environments
where one cannot control changes to model data.
</li>
<li>
Added <a>Diagram.setProperties</a>, to set a bunch of properties in exactly the same manner that
<a>GraphObject.make</a> does when constructing a Diagram.
</li>
<li>
Removed support for ancient versions of Firefox (3.6), Opera (10, 11), and Safari (5.0).
</li>
</ul>
</li>
<li>
<b>Parts:</b>
<ul>
<li>
<b style="color:red;">Potentially Incompatible:</b> Fixed a <a>Link</a> to be a member of a <a>Group</a>
if it connects a member node of the group with the group itself.
Such links now connect with the group from inside rather than from the outside.
<b>GoJS</b> had been inconsistent with such membership and its implications.
The behavior is demonstrated by the <a href="../samples/navigation.html">Navigation</a> sample.
</li>
<li>
Extended the <a>Link.points</a> property setter to accept not only a <a>List</a> of <a>Point</a>s and
an Array of an even number of numbers, but also an Array of Objects each of which has 'x' and 'y' properties
that are numbers.
</li>
<br />
<li>
Added <a>Node.findTreeLevel</a> method, to determine a Node's depth in a tree.
Root nodes (i.e. no <a>Node.findTreeParentLink</a>) have a level of zero.
</li>
<li>
Added <a>Node.findCommonTreeParent</a> method, to find a Node that is the closest ancestor to two Nodes,
which may include either of the two Nodes themselves.
</li>
<li>
Added <a>Node.portSpreading</a> property, to control how link points are computed when "Side" spots are specified.
See the <a href="../samples/sankey.html">Sankey Diagram</a> sample for an example using <a>Node.SpreadingPacked</a>
instead of the default value of <a>Node.SpreadingEvenly</a>. Use <a>Node.SpreadingNone</a> with a multiple "Side" spot,
such as <a>Spot.LeftRightSides</a>, in order to have the connection point always be at the middle of either the
left side or the right side, whichever is closer.
</li>
<br />
<li>
Added <a>Group.handlesDragDropForMembers</a> property, which avoids having to define <a>GraphObject.mouseDragEnter</a>,
<a>GraphObject.mouseDragEnter</a>, or <a>GraphObject.mouseDrop</a> event handlers on each Node or Link that is a
member of a Group in order to delegate the drag-and-drop events to the containing Group.
For compatibility the default value is false. Adding this property has significantly simplified several samples:
<a href="../samples/planogram.html">Planogram</a>, <a href="../samples/regrouping.html">Regrouping</a>, and
<a href="../samples/swimLanes.html">Swim Lanes</a>.
</li>
<br />
<li>
Added <a>Part.findSubGraphLevel</a> method, to determine a Part's nested depth in the hierarchy of containing <a>Group</a>s.
A Part that is <a>Part.isTopLevel</a> has a level of zero.
See the <a href="../samples/regroupingScaled.html">Regrouping Scaled</a> sample for an example usage.
</li>
<li>
Added <a>Part.updateRelationshipsFromData</a> method, to update the relationships between nodes in the diagram
when there have been changes to properties in the model data that hold node references (keys)
without having gone through model methods.
Like <a>Part.updateTargetBindings</a>, this is only needed for environments where one cannot control changes to model data.
</li>
</ul>
</li>
<li>
<b>GraphObjects and Geometry:</b>
<ul>
<li>
Changed the default value of <a>Shape.parameter1</a> and <a>Shape.parameter2</a> from 0 to NaN.
This allows the use of zero as a legimate value for the range of numbers handled by any particular figure.
However, since <a>Shape.defineFigureGenerator</a> is new for version 1.5,
this change is unlikely to be an issue for any existing code.
</li>
<li>
The predefined Buttons are styled differently, to be flatter and more rectangular.
You can customize them by setting their properties and their nested properties.
See their new definitions in the <a href="../extensions/Buttons.js">Buttons.js</a> file
in the Extensions directory.
</li>
<br />
<li>
Added the "PanelExpanderButton" predefined Panel,
used by the <a href="../samples/IVRtree.html">IVR Tree</a> and
<a href="../samples/entityRelationship.html">Entity Relationship</a> samples.
The definition is shown in the <a href="../extensions/Buttons.js">Buttons.js</a> file
in the Extensions directory.
</li>
<br />
<li>
Added <a>GraphObject.setProperties</a>, to set a bunch of properties in exactly the same manner that
<a>GraphObject.make</a> does when constructing a GraphObject.
</li>
<li>
Added <a>GraphObject.defineBuilder</a> static function for defining new names that can
be used by <a>GraphObject.make</a>.
This is used in the <a href="../extensions/ScrollingTable.html">Scrolling Table</a> sample
for the "AutoRepeatButton" and the "ScrollingTable".
</li>
<br />
<li>Added <a>Shape.defineFigureGenerator</a> static function for defining new figure names for <a>Shape.figure</a>.</li>
<li>
Added <a>Shape.getFigureGenerators</a> static function for getting a <a>Map</a> of figure names.
This is used in the <a href="../samples/shapes.html">Shapes</a> sample.
</li>
<br />
<li>
Added <a>Geometry.defaultStretch</a> property, which can be used by figure generators to control the aspect ratio of
the <a>Shape</a> that uses that figure.
</li>
<li>
Added <a>Geometry.add</a> and <a>PathFigure.add</a> methods, to make it easier to construct Path Geometries in code,
which is much more efficient than using <a>GraphObject.make</a>.
</li>
<li>
Added "BarH" and "BarV" figures, used by Grid <a>Panel</a>s to fill rectangular areas rather than just draw
horizontal or vertical lines.
See <a href="../intro/grids.html">Grid Patterns</a> for example usage.
</li>
<br />
<li>
Added <a>Shape.defineArrowheadGeometry</a> static function for defining new arrowhead names for <a>Shape.toArrow</a>
and <a>Shape.fromArrow</a>.
</li>
<li>
Added <a>Shape.getArrowheadGeometries</a> static function for getting a <a>Map</a> of arrowhead names.
This is used in the <a href="../samples/arrowheads.html">Arrowheads</a> sample.
</li>
<br />
<li>Added <a>Picture.sourceCrossOrigin</a> property, for customizing cross-origin image requests.</li>
<br />
<li>Added <a>TextBlock.maxLines</a>, to limit the number of lines of text shown in a TextBlock.</li>
<li>
The <a>TextBlock.font</a> property setter now raises an error in <code>Debug</code> mode if the new value
is not a valid font.
</li>
<br />
<li>
Added <a>Panel.findMainElement</a> method, to get the first child element with <a>GraphObject.isPanelMain</a> true,
or if there is no such element, just the first element.
</li>
<li>
Extended support for a first <a>Panel</a> element that is kept when <a>Panel.itemArray</a> gets a new Array value,
beyond just Spot and Auto and Link Panels,
to Table Panels whose first element is a "TableRow" or "TableColumn" Panel with <a>Panel.isMainPanel</a> true.
This makes implementing literal table headers possible without having the header information
in the item Array as the first item.
This is now demonstrated in <a href="../intro/itemArrays.html">Item Arrays</a>,
as well as the previously supported case where the header information was in the item array,
<a href="../intro/templateMaps.html">Template Maps</a>.
</li>
<li>
In templates, Auto or Spot Panels with zero or only one element in them will result in a warning message.
Their operation with zero or one element is otherwise unchanged. However, Auto and Spot Panels expect
there to be a "main" element, so having this warning may help detect places where editing mistakes may
have resulted in unexpected visual trees.
</li>
<li>
Fixed removing the wrong element in a Spot or Auto <a>Panel</a> that had a <a>Panel.itemArray</a> when
calling <a>Model.removeArrayItem</a>.
</li>
</ul>
</li>
<li>
<b>Models:</b>
<ul>
<li>
Added <a>Model.copiesArrays</a> and <a>Model.copiesArrayObjects</a> properties,
so that often one does not need to implement a custom <a>Model.copyNodeDataFunction</a>.
The samples have been simplified by using these two properties and removing all of the functions
that were used to copy node data without sharing Arrays or array item objects.
</li>
<li>Improved data binding target resolution when there are duplicate object names.</li>
</ul>
</li>
<li>
<b>Layouts:</b>
<ul>
<li>
Added an optional predicate argument to <a>LayoutNetwork.addParts</a>,
for easier filtering of which nodes or links to include in the network as vertexes or edges.
</li>
<li>
Added <a>ForceDirectedLayout.randomNumberGenerator</a>, which can be set to null each time you want to use and reset
its own internal random number generator instead of calling Math.random().
This is useful for repeatable results given identical initial circumstances.
</li>
<li>
Fixed bug in <a>LayeredDigraphLayout</a> when dealing with nodes of multiple ports that had not yet gotten real positions.
</li>
</ul>
</li>
<li>
<b>Tools and Commands:</b>
<ul>
<li>
Added <a>LinkingBaseTool.isValidCycle</a>, exposing a predicate called by <a>LinkingBaseTool.isValidLink</a>
to check the validity of a proposed link according to the value of <a>Diagram.validCycle</a>.
</li>
<li>
Added <a>CommandHandler.copiesConnectedLinks</a> property,
to allow control whether Links connected with selected Nodes are copied by <a>CommandHandler.copySelection</a>,
much as <a>DraggingTool.copiesEffectiveCollection</a> does for the <a>DraggingTool</a>.
</li>
<li>Improved external drag-and-drop between <a>Diagram</a>s to give focus to the target diagram upon a successful drop.</li>
<li>
Improved <a>ToolManager.positionToolTip</a> and <a>ContextMenuTool.positionContextMenu</a> to allow <a>Adornment</a>s
(tooltips and context menus)
to position themselves when they contain a <a>Placeholder</a>.
</li>
</ul>
</li>
<li>
<b>Collections:</b>
<ul>
<li>Added <a>List.last</a>, <a>List.push</a>, and <a>List.pop</a> methods, for convenience in treating a List as a stack.</li>
</ul>
</li>
</ul>
<hr class="changelog" />
<h4>Changes for 1.4.28</h4>
<ul>
<li>Fixed calculation of "Side" port positions when there are multiple ports on a node.</li>
<li>More permissive Picture drawing: Will still draw if an image has an error but is complete at a later time (such as from a timeout).</li>
</ul>
<h4>Changes for 1.4.27</h4>
<ul>
<li>Fixed TextBlock ellipses when using the undocumented property TextBlock.maxLines</li>
</ul>
<h4>Changes for 1.4.26</h4>
<ul>
<li>Fixed some clipping scenarios with <a>Diagram.makeSvg</a>.</li>
<li>Improved shadow rendering in <a>Diagram.makeSvg</a>.</li>
<li><a>Diagram.makeSvg</a> now includes temporary parts in its bounds computation when <code>showTemporary</code> is set to true.</li>
</ul>
<h4>Changes for 1.4.25</h4>
<ul>
<li>Dragging into a new Diagram now initializes it.</li>
<li>Moving collapsed members of Groups now modifies position or location, depending on which is real.</li>
<li>Fixed <a>ResizingTool</a>, which could make assumptions expecting a non-null <a>Shape.geometry</a>.</li>
</ul>
<h4>Changes for 1.4.24</h4>
<ul>
<li>Fixed routes of dragged Links after temporarily copying when the <a>UndoManager.isEnabled</a>.</li>
<li>Fixed <a>DraggingTool</a> to disallow drag-and-drop from another <a>Diagram</a> whose <a>Model.dataFormat</a> is different than its own.</li>
<li>
<b style="color:red;">Reverting a change from 1.4.14 and 1.4.20</b>, setting <a>Picture.source</a> no longer sets the <code>crossOrigin</code>
flag on generated images. This functionality can be customized with the undocumented property Picture.sourceCrossOrigin,
a settable function that returns a new value for the <code>image.crossOrigin</code>. This property will be documented in 1.5.
</li>
</ul>
<h4>Changes for 1.4.23</h4>
<ul>
<li><a>Part.updateAdornments</a> now calls <a>Panel.updateTargetBindings</a> on each <a>Adornment</a>.</li>
<li>Changing the category of <a>Group</a>s no longer collapses sub-groups.</li>
<li>Minimum width and height now correctly account for margins.</li>
<li>Improved sizing of the <a>TextEditingTool</a>'s text editor.</li>
<li>Improved routing of adjusted routes between Spot.None ports.</li>
</ul>
<h4>Changes for 1.4.22</h4>
<ul>
<li>Fixed a position initialization bug when <a>GraphObject.position</a> is data-bound and <a>Part.locationSpot</a> is not <a>Spot.TopLeft</a>.</li>
<li>Updated the "Inductor" <a>Shape.figure</a>.</li>
<li>Stopped the keyboard's Menu key from erroneously emitting an additional event.</li>
<li><a>Shape.strokeDashArray</a> once again accepts zeroes as dash values, but does not accept an array of nothing but zeroes.</li>
<li>Fixed <a>GraphObject.toMaxLinks</a> and <a>GraphObject.fromMaxLinks</a> property setters to allow Infinity (which is the default value).</li>
</ul>
<h4>Changes for 1.4.21</h4>
<ul>
<li>Fixed measuring Table Panels that contained only TableRow and TableColumns.</li>
<li>Free up DOM elements by setting <a>Diagram.div</a> to null.</li>
</ul>
<h4>Changes for 1.4.20</h4>
<ul>
<li>Dynamically adding a <a>RowColumnDefinition</a> now updates its containing <a>Panel</a>.</li>
<li>RowColumnDefinition width and height now correctly undo/redo.</li>
<li>Fixed some <a>Link</a> routes when ungrouping collapsed <a>Group</a>s.</li>
<li><a>Panel.Viewbox</a> will no longer attempt to set a <a>GraphObject</a>'s scale to zero.</li>
<li>
Setting <a>Picture.source</a> now conditionally sets the crossOrigin flag on the generated image.
It is set to "anonymous" unless it is served from a data URI or the local filesystem (it will keep the default null value).
</li>
<li>Fixed <a>TextBlock.maxLines</a> not always working in some wrapping scenarios.</li>
<li>Fixed routing of some Links when copied by <a>DraggingTool</a>.</li>
<li>Fixed Link visibility issues when undoing tree collapsing and expanding.</li>
<li>Fixed expand/collapse issues when two data-bound diagrams share a model.</li>
<li>Group adornments are now correctly updated when collapsing trees.</li>
<li>
Fixed <a>CommandHandler.ungroupSelection</a> to expand the <a>Group</a> before removing its members and discarding the group,
and to select any links in addition to the nodes.
</li>
</ul>
<h4>Changes for 1.4.19</h4>
<ul>
<li>Improved panning performance on high-density displays.</li>
<li>Fixed a bug introduced in 1.4.17 groups were unable to resize after parts were dragged out.</li>
<li>Fixes to auto scrolling.</li>
</ul>
<h4>Changes for 1.4.18</h4>
<ul>
<li>Fixed some jumpover Links not recalculating their routes at the right time.</li>
<li><a>Diagram.makeImage</a> "parts" option no longer conflicts with "position" option.</li>
</ul>
<h4>Changes for 1.4.17</h4>
<ul>
<li>Fixed initialization bug with Diagram.findObject... methods not working right after the inital layout completion.</li>
<li>DraggingTool now ignores invisible parts when computing bounds of dragged Parts.</li>
<li><a>Shape.strokeDashArray</a> no longer accepts zeroes as dash values.</li>
<li>Fixed expanding moved <a>Group</a>s not to route <a>Link</a>s at original locations.</li>
<li>Fixed DraggingTool not allowing Nodes to drag out of groups when grid snapping is enabled.</li>
</ul>
<h4>Changes for 1.4.16</h4>
<ul>
<li>Calculations for <a>Diagram.zoomPoint</a> values fixed when scroll and keyboard-command zooming.</li>
<li>Fixed Picture copying, and Picture now reports draw errors in go-debug.</li>
<li>Updated BPMN extension templates.</li>
</ul>
<h4>Changes for 1.4.15</h4>
<ul>
<li><a>Diagram.makeImage</a> and <a>Diagram.makeSvg</a> now stop animation before executing.</li>
<li>Text rendering fixed when combining newlines (\n) with wrapped text.</li>
<li>
<a>TreeLayout</a> no longer causes an iteration exception when the <a>TreeLayout.roots</a> collection
contains vertexes that are in the same tree.
</li>
</ul>
<h4>Changes for 1.4.14</h4>
<ul>
<li>Text will always draw fully (instead of just a line at very small scales) when calling <a>Diagram.makeImage</a>.</li>
<li>Setting <a>Picture.source</a> will now set the crossOrigin property of the created image to "anonymous" by default.</li>
</ul>
<h4>Changes for 1.4.13</h4>
<ul>
<li>Fixed hiding Adornments of <a>Link</a>s hidden by a connected <a>Node</a> becoming not visible.</li>
</ul>
<h4>Changes for 1.4.12</h4>
<ul>
<li>Fixed AvoidsNodes routing of member Links during Group initialization.</li>
<li>Fixed Link route invalidation of duplicate links when loading model with <a>Link.points</a> data bound.</li>
<li>Fixed Link routing when the port is a TableRow or TableColumn, or element inside one.</li>
<li>Fixed incorrect error message when setting <a>Diagram.minScale</a> or <a>Diagram.maxScale</a> to their current values.</li>
</ul>
<h4>Changes for 1.4.11</h4>
<ul>
<li>Tweaked how shadows work for Parts that use Spot panels.</li>
<li>Fixed line height calculations broken in 1.4.10. This was causing the TextEditingTool's textArea to grow too large.</li>
<li>Fixed drawing issues arising from non-visible objects with a <a>GraphObject.opacity</a> set.</li>
</ul>
<h4>Changes for 1.4.10</h4>
<ul>
<li>Fixed link calculation when connecting to TableRows and TableColumns, and their immediate elements.</li>
<li>Fixed dragging coordinates for Diagrams with pixel ratios other than 1.0.</li>
<li>Fixed value for <a>Diagram.isModified</a> after undoing an insertion or removal after setting isModified to false.</li>
<li>Fixed some objects not drawing during animation when initially out of view.</li>
<li>Fixed <a>TreeLayout.layoutComments</a> to handle comment Nodes that are <a>Group</a>s.</li>
</ul>
<h4>Changes for 1.4.9</h4>
<ul>
<li>Added Introduction page for <a href="../intro/legends.html">Legends and Titles</a>.</li>
<li>
Fixed <a>LayoutNetwork.addParts</a> to treat links between nodes nested more than one Group deep as
if they were connecting the outer Groups.
</li>
<li>
Fixed case where making some changes, setting <a>Diagram.isModified</a> to false, undoing,
and then making a new change (thereby discarding some <a>Transaction</a> history),
resulted in isModified becoming false when it should have remained true.
</li>
<li>
Fixed the invalidation of <a>Layout</a> when adding or removing a <a>Link</a> even though the link's
<a>Part.layoutConditions</a> did not include <a>Part.LayoutAdded</a> or <a>Part.LayoutRemoved</a>.
</li>
<li>No longer give warnings when a <a>Picture.source</a> fails to load.</li>
<li>Fixed some sizing issues in IE9 when CSS box-sizing is applied to all HTML elements.</li>
</ul>
<h4>Changes for 1.4.8</h4>
<ul>
<li>Improved completely disconnected <a>Link</a> geometry not to assume that it must be Bezier curved.</li>
<li>Fixed a regression from 1.4.7 with link visibility when connected to Nodes in collapsed Groups.</li>
<li>Fixed some starting transactions animating improperly.</li>
<li>
Fixed <a>DraggingTool</a> to use the Option key (Alt) modifier on a Mac to indicate a copying operation,
rather than the Control key.
</li>
</ul>
<h4>Changes for 1.4.7</h4>
<ul>
<li>
Added the <a href="../extensions/PortShifting.html" target="_blank">Port Shifting</a> sample,
with the tool defined in <a href="../extensions/PortShiftingTool.js">PortShiftingTool.js</a>,
demonstrating how a custom <a>Tool</a> can allow the user to move a port within a node.
</li>
<li>
Added a "semantic zoom" slider to the <a href="../samples/regrouping.html">Regrouping</a> sample,
for controlling how many nested levels of Groups are expanded.
</li>
<li>Fixed some animation bugs on iOS/OSX Safari.</li>
<li>
Potentially Incompatible: Collapsed Groups no longer update their member's positions.
They are only updated when they are visible again (when the group is expanded).
</li>
</ul>
<h4>Changes for 1.4.6</h4>
<ul>
<li>
New property <a>DraggingTool.isComplexRoutingRealtime</a> allows the disabling of <a>Link.AvoidsNodes</a>
during dragging operations.
</li>
<li>Diagram.rebuildParts now allows animation.</li>
<li>Improved animation by removing a race condition.</li>
<li>
Reworked link label position. This fixes bugs but may cause some link labels to have new positions,
especially when <a>GraphObject.segmentOffset</a> values were NaN.
</li>
</ul>
<h4>Changes for 1.4.5</h4>
<ul>
<li>
Added the <a href="../extensions/Fishbone.html" target="_blank">Fishbone Layout</a> sample,
with the layout defined in <a href="../extensions/FishboneLayout.js">FishboneLayout.js</a>,
demonstrating how a custom <a>Layout</a> and a custom routed <a>Link</a> can
produce a fishbone or Ishikawa or cause-and-effect diagram.
</li>
<li>GoJS now accounts for window.devicePixelRatio.</li>
</ul>
<h4>Changes for 1.4.4</h4>
<ul>
<li>New option for <a>Diagram.makeSvg</a>: elementFinished, a function allowing you to modify the SVG as it is being built.</li>
<li>TextBlock ellipsis now works correctly with wrapped text.</li>
<li>All GraphObjects now allow opacity: Panel.opacity has been moved to <a>GraphObject.opacity</a>.</li>
<li>SVG generated with <a>Diagram.makeSvg</a> now contains the <code>xmlns</code> and <code>xmlns:xlink</code> attributes.</li>
</ul>
<h4>Changes for 1.4.3</h4>
<ul>
<li>Animations no longer continuously update the <a>Diagram.documentBounds</a>.</li>
<li>Fixed window resizing accidentally invalidating (viewport-sized) layouts on fixed-size diagrams.</li>
<li><a>Diagram.makeSvg</a> now includes a clipping region to fix IE's SVG behavior,
which does not clip to its SVG viewport by default.</li>
<li>
New option for <a>Diagram.makeImage</a> and <a>Diagram.makeSvg</a>: document, which accepts an optional
HTML Document in lieu of window.document.
This can be useful when opening generated SVG or Images in a new window.
</li>
</ul>
<h4>Changes for 1.4.2</h4>
<ul>
<li>
Reworked transactions for the <a>TextEditingTool</a>.
Transactions no longer start when the tool activates,
instead they begin and end when the tool commits accepted text.
</li>
<li>Fixed Firefox's zoom shortcuts, CTRL-plus and CTRL-minus were not properly captured.</li>
</ul>
<h4>Changes for 1.4.1</h4>
<ul>
<li>Fixed visibility of <a>Link</a>s when changing <a>Layer.visible</a> of connected <a>Node</a>s.</li>
<li>Fixed <a>DraggingTool</a> to allow moving of copied parts even though <a>Diagram.allowMove</a> is false.</li>
<li>Improved dragging from <a>Palette</a> to show temporary copy of dragged parts within the Palette.</li>
<li>Miscellaneous performance improvements.</li>
</ul>
<h4>Changes for 1.4 since 1.3.*</h4>
<ul>
<li>
<b>Animation:</b>
<ul>
<li>GoJS layouts now animate by default. This can be controlled with a Diagram's <a>AnimationManager</a> class.</li>
</ul>
<li>
<b>Samples and documentation:</b>
<ul>
<li>
Added the <a href="../samples/swimBands.html" target="_blank">Layer Bands</a> sample,
where the layout overrides the <a>TreeLayout.commitLayers</a> method in order to make sure the special
"_BANDS" Part's items are updated to show a "band" object around each tree layer.
</li>
<li>
Added the <a href="../extensions/LinkLabelDragging.html" target="_blank">Link Label Dragging</a> sample,
with the tool defined in <a href="../extensions/LinkLabelDraggingTool.js">LinkLabelDraggingTool.js</a>,
demonstrating how the user can manually adjust the position of link labels.
</li>
<li>
Added the <a href="../extensions/NodeLabelDragging.html" target="_blank">Node Label Dragging</a> sample,
with the tool defined in <a href="../extensions/NodeLabelDraggingTool.js">NodeLabelDraggingTool.js</a>,
demonstrating how the user can manually adjust the position of node labels that are in "Spot" Panels.
</li>
<li>
Added the <a href="../extensions/LinkShifting.html" target="_blank">Link Shifting</a> sample,
with the tool defined in <a href="../extensions/LinkShiftingTool.js">LinkShiftingTool.js</a>,
demonstrating how the user can manually shift the end of a link to connect anywhere along the sides of a node.
</li>
<li>
Improved the <a href="../samples/friendWheel.html" target="_blank">Friend Wheel</a> sample
to make use of <a>Part.isHighlighted</a>.
</li>
<li>Changed the documentation style.</li>
</ul>
</li>
<li>
<b>Diagram and Layer:</b>
<ul>
<li>Added the <a>AnimationManager</a> class and the <a>Diagram.animationManager</a> property.</li>
<li>
Added <a>Diagram.highlighteds</a> collection and <a>Diagram.highlight</a>, <a>Diagram.highlightCollection</a>,
and <a>Diagram.clearHighlighteds</a> methods.
</li>
<li>
<a>Diagram.selectCollection</a> now accepts an Array of <a>Part</a>s
as well as an <a>Iterable</a> of <a>Part</a>s.
</li>
<li>
When dragging out from a <a>Palette</a>, the cursor initially shows the "no-drop" cursor
until it is over a diagram with <a>Diagram.allowDrop</a> true.
</li>
</ul>
</li>
<li>
<b>Parts:</b>
<ul>
<li>Added the <a>Part.isAnimated</a> property (default is true).</li>
<li>
Added <a>Part.isHighlighted</a> property, a standard way of declaring that a Part is highlighted.
Use data binding to change the appearance of your parts, e.g.:<br />
<code>new go.Binding("stroke", "isHighlighted", function (h) { return h ? "red" : "black"; }).ofObject()</code>
</li>
<li>
Added <a>Group.findExternalLinksConnected</a> and <a>Group.findExternalNodesConnected</a> methods,
to find connections from anywhere inside a Group (including inside nested Groups) to anywhere outside of that Group.
</li>
<li>
Fixed changing layers of Nodes and Links not to call <a>Group.memberAdded</a>, <a>Group.memberRemoved</a>,
<a>Node.linkConnected</a>, or <a>Node.linkDisconnected</a> event handlers.
</li>
<li>Fixed routing of Bezier Links when <a>Link.adjusting</a> is not None.</li>
<li>
Fixed a case of undoing the deletion of a port on a Node causing connected Links to
be connecting with the whole node instead of the particular port element.
</li>
<li>
Fixed the spreading of side <a>Link</a> connection points on a <a>Group</a> when some of
the links are actually connected with non-visible member <a>Node</a>s because the Group is collapsed.
</li>
</ul>
</li>
<li>
<b>GraphObjects and Geometry:</b>
<ul>
<li>
Added <a>TextBlock.overflow</a> property and <a>TextBlock.OverflowEllipsis</a> and
<a>TextBlock.OverflowClip</a> enum values;
clipping is the default behavior when there is not enough room to draw all of the text.
</li>
<li>
Added <a>Panel.itemIndex</a>, set automatically for Panels created to represent itemArray items and
useful in data bindings within item templates.
</li>
<li>
Invalid color strings now result in errors when using <code>"go-debug.js"</code>,
making it easier to track down painting problems.
</li>
</ul>
</li>
<li>
<b>Models:</b>
<ul>
<li>
Undo and redo operations now raise "ChangingSelection" and "ChangedSelection" <a>DiagramEvent</a>s,
to handle cases where the undo or redo deleted selected Parts.
</li>
<li>Fixed updating of <a>Binding</a>s to the empty string property name when a specific data property was changed.</li>
</ul>
</li>
<li>
<b>Layouts:</b>
<ul>
<li>
Added <a>TreeLayout.layerStyle</a> property;
when set to the new enum value <a>TreeLayout.LayerUniform</a>, all nodes at the same layer level will be aligned.
The default value, <a>TreeLayout.LayerIndividual</a>, produces the original behavior where each node only takes
up as much depth as it needs, causing its children not necessarily to be aligned with its siblings' children.
</li>
<li>
Added <a>TreeLayout.commitLayers</a> and <a>LayeredDigraphLayout.commitLayers</a> overridable methods,
for getting information about the size and position of the "bands" (layout layers) cutting across the diagram,
which is useful when positioning labels or putting rectangular areas behind each band.
</li>
<li>Fixed <a>LayoutVertex.focus</a> to be at the center of the <a>Part.locationObject</a>.</li>
<li>Fixed <a>GridLayout</a>'s wrapping being influenced by the setting of <a>Layout.arrangementOrigin</a>.</li>
</ul>
</li>
<li>
<b>Tools and Commands:</b>
<ul>
<li>Removed ZoomIn and ZoomOut commands from the default touch context menu.</li>
<li>Added <a>DraggingTool.isCopyEnabled</a>, to allow disabling of copying by control-drag-drop without disabling copying altogether.</li>
<li>Added <a>ContextMenuTool.currentObject</a>, to make it easier to refer to the <a>GraphObject</a> for which the context menu is being shown.</li>
<li>Fixed some versions of Android Browser causing two click events for a single tap.</li>
<li><b style="color:red;">New Gesture: </b>Zooming with MSGesture events is now supported on Microsoft touch devices.</li>
</ul>
</li>
<li>
<b>Collections:</b>
<ul>
<li>
Added <a>Iterator.any</a>, <a>List.any</a>, <a>Set.any</a>, and <a>Map.any</a> methods that take a predicate function as an argument
and return true if the predicate is true for at least one item in the collection.
</li>
<li>
Added <a>Iterator.all</a>, <a>List.all</a>, <a>Set.all</a>, and <a>Map.all</a> methods that take a predicate function as an argument
and return false if the predicate is false for at least one item in the collection.
</li>
<li>Added <a>Iterator.each</a>, <a>List.each</a>, <a>Set.each</a>, and <a>Map.each</a> methods that take a function as an argument and call it on each item in the collection.</li>
<li>Added <a>Map.first</a> method, returning a key/value pair object, or null if the Map is empty.</li>
<li>Fixed <code>aMap.iterator.first()</code> to return a key/value pair object, not the first key.</li>
<li>
Added <a>Map.iteratorValues</a> property, for iterating over the values in the Map.
Added <a>Map.iteratorKeys</a> property, for iterating over the keys of the Map.
(<a>Map.iterator</a> continues to return an Iterator for iterating over the keys and values of the Map.
This is the same as <a>Map.iteratorValues</a> unless one calls <code>first</code>, <code>any</code>, <code>all</code>, or <code>each</code> on the Iterator.)
</li>
</ul>
</li>
</ul>
<hr class="changelog" />
<h4>Changes for 1.3.11</h4>
<ul>
<li>Improved re-routing of Links to deeply nested subgraph Nodes upon expanding a subgraph.</li>
<li>Fixed potential error in <a>GridLayout</a> when switching template for an existing <a>Group</a>.</li>
<li>Brush copies now correctly copy start and end Spot values</li>
</ul>
<h4>Changes for 1.3.10</h4>
<ul>
<li>Fixed some bounds calculations of elements inside of TableRow and TableColumn Panels.</li>
<li>Fixed the "Modified" <a>DiagramEvent</a> when the <a>UndoManager</a> is not enabled.</li>
<li>Improved AvoidsNodes routing of Links when there are Nodes that are not visible.</li>
<li>Fixed Diagram background grid issues when an Overview was only partially initialized.</li>
</ul>
<h4>Changes for 1.3.9</h4>
<ul>
<li>The TextEditingTool now checks Diagram.allowTextEdit (previously, only CommandHandler.canEditTextBlock did).</li>
<li>
Changing a drag from a move to a copy (with the control key) now correctly saves any link routes so that an undo/redo
does not restore the routes to where the node had been moved to before being copied.
</li>
<li>Panels with no elements now properly respect all combinations of desiredSize, minSize, maxSize, and padding.</li>
<li>
Allowed SVG to work with Picture elements on browsers that support drawing SVG to canvas.
See the <a href="../intro/pictures.html" target="_blank">Pictures intro page</a> for details.
</li>
<li>Fixed internal line-intersection for TableRow and TableColumn Panels.</li>
</ul>
<h4>Changes for 1.3.8</h4>
<ul>
<li>Fixed the measurement of some GraphObjects when modifying angle with both a desiredSize and minSize set.</li>
<li>Fixed <a>Diagram.addLayerAfter</a> and <a>Diagram.addLayerBefore</a> for re-ordering layers, and improved their error checking.</li>
</ul>
<h4>Changes for 1.3.7</h4>
<ul>
<li>Fixed <a>Set.toList</a>.</li>
<li>Fixed the <a>Diagram.model</a> property setter to call <a>Diagram.clearSelection</a> before actually replacing the model.</li>
<li>Fixed Picture measuring scenarios where it would incorrectly prefer a stretch value over the desiredSize when both were given.</li>
<li>The <a>Link.points</a> setter now also accepts an Array of numbers representing point values ([x1, y1, x2, y2, x3, y3], etc.)</li>
</ul>
<h4>Changes for 1.3.6</h4>
<ul>
<li>Added <a href="../samples/seatingChart.html" target="_blank">Seating Chart</a> sample.</li>
<li>Fixed a bug in calculating positions of member nodes when dragging a group.</li>
<li>
The "TreeExpanderButton" and "SubGraphExpanderButton" <a>Panel</a>s are now
calling <a>CommandHandler.canCollapseTree</a>, <a>CommandHandler.canExpandTree</a>,
<a>CommandHandler.canCollapseSubGraph</a>, or <a>CommandHandler.canExpandSubGraph</a>, as
appropriate, in case any of those methods were overridden.
</li>
<li>
<a>Tool.standardMouseWheel</a> now calls <a>CommandHandler.canIncreaseZoom</a> or
<a>CommandHandler.canDecreaseZoom</a>, as appropriate, in case either method is overridden.
</li>
</ul>
<h4>Changes for 1.3.5</h4>
<ul>
<li>
Added <a>Model.addNodeDataCollection</a>, <a>Model.removeNodeDataCollection</a>,
<a>GraphLinksModel.addLinkDataCollection</a>, <a>GraphLinksModel.removeLinkDataCollection</a>,
taking either Arrays or Iterables of model data objects, for convenience.
</li>
<li>Fixed Table Panel's measuring of GraphObjects that span multiple rows and columns in some situations.</li>
<li>Fixed <a>Node.ports</a> to include the default port, the whole <a>Node</a>, when there are no objects with <a>GraphObject.portId</a> set to non-null.</li>
<li>Fixed some method names on <a>Spot</a> which had not been exported.</li>
<li>Fixed the scaling of some arcs in a Geometry.</li>
</ul>
<h4>Changes for 1.3.4</h4>
<ul>
<li>
Added the <a href="../extensions/Robot.html" target="_blank">Robot</a> sample in the extensions directory,
demonstrating the simulation of input events.
</li>
<li>Added the "Ring" figure for <a>Shape</a>s.</li>
<li>
Added property setters for <a>InputEvent</a> properties: control, shift, alt, meta, left, middle, right,
for convenience when initializing to avoid requiring knowledge of the particular flag values.
</li>
<li>
Added <a>Part.LayoutNodeReplaced</a> as a new reason for invalidating <a>Layout</a>s,
to fix a bug where a Layout would not be performed when replacing a Node or simple Part by changing its <a>Part.category</a>,
because the new Node had a fixed size.
</li>
<li>Scrolling on uninitialized Diagrams will no longer capture the event and prevent bubbling.</li>
<li>Fixed shadows in some <a>Panel</a> scenarios involving Auto panels.</li>
<li>Fixed the display of never-arranged Nodes when added to an invisible <a>Layer</a> that is later made visible.</li>
<li>Fixed data binding on the first elements of "Spot", "Auto", and "Link" <a>Panel</a>s that hold <a>Panel.itemArray</a>s.</li>
<li><a>Margin.parse</a> now parses strings with only zero, one, or two numbers in them, as if calling the <a>Margin</a> constructor.</li>
<li>Fixed the <a>Diagram.grid</a> setter, which was not always updating the grid immediately.</li>
<li>
<b style="color:red;">Potentially Incompatible:</b> Fixed Table Panel's allocation of cell size in some complex settings,
such as with multiple rows or columns stretching. Some complex Table Panels may size differently now.
</li>
</ul>
<h4>Changes for 1.3.3</h4>
<ul>
<li>Added <a>CommandHandler.defaultScale</a> property, initially 1.0.</li>
<li>
When AMD Module <code>define</code> capability is present, <code>go</code> is still exposed to the global object,
which avoids problems with undefined <code>go</code> when explicitly loading <code>"go.js"</code> instead of using your framework's require mechanisms.
</li>
<li>Reduced possible errors with zero-sized images used as <a>Picture</a> sources.</li>
<li>Fixed default value of <code>scale</code> for <a>Diagram.makeImage</a> (Default should be <code>null</code>, was erroneously <code>NaN</code>).
<li>Zero is now an allowed value in the array of <a>Shape.strokeDashArray</a></li>
</ul>
<h4>Changes for 1.3.2</h4>
<ul>
<li>Fixed exception when <a>Diagram.makeImage</a> generates very large images.</li>
<li>Fixed Layouts maintaining custom link routing in nested groups.</li>
<li>Fixed tree collapsing causing some links to not update when the tree is expanded after moving the node.</li>
<li>Fixed the drawing of strokes when <a>Shape.strokeWidth</a> is zero.</li>
</ul>
<h4>Changes for 1.3.1</h4>
<ul>
<li>Fixed computation of tree relationships when <a>Link.isTreeLink</a> is modified dynamically.</li>
<li>
Fixed the behavior of <a>GraphObject.mouseDragEnter</a> and <a>GraphObject.mouseDragLeave</a> and
the <a href="../samples/regrouping.html" target="_blank">Regrouping</a> and
<a href="../samples/planogram.html" target="_blank">Planogram</a> samples
not to depend on the target <a>Diagram.selection</a> for external drag-and-drops.
</li>
<li>Fixed bounds calculations when using the <a>DraggingTool</a> with Parts that were not in the default layer.</li>
<li>
Implemented support for comments in <a>ForceDirectedLayout</a>;
for compatibility and efficiency <a>ForceDirectedLayout.comments</a> now defaults to false.
Also added overridable method <a>ForceDirectedLayout.addComments</a>.
</li>
<li>
Added <a>TreeLayout.comments</a> property,
for efficiency by disabling searching for "Comment" Nodes associated with each Node;
for compatibility the default value is true.
</li>
<li>Allowed <a>Diagram.makeImage</a> to accept no arguments again.</li>
</ul>
<h4>Changes for 1.3 since 1.2.*</h4>
<ul>
<li>
<b>Samples and documentation:</b>
<ul>
<li>Added the <a href="../samples/tournament.html" target="_blank">Tournament</a> sample.</li>
<li>Added the <a href="../samples/draggableLink.html" target="_blank">Draggable Link</a> sample, demonstrating partly or fully disconnected <a>Link</a>s.</li>
<li>Added the <a href="../samples/require.html" target="_blank">Require</a> sample, demonstrating use of <b>GoJS</b> AMD module definition and use with RequireJS.</li>
<li>Added the <a href="../samples/angular.html" target="_blank">Angular</a> sample, demonstrating a <b>GoJS</b> "goDiagram" directive in AngularJS.</li>
<li>Added the <a href="../extensions/BPMN.html" target="_blank">BPMN Editor</a> sample in the extensions directory, demonstrating BPMN templates and using custom tools.
</ul>
</li>
<li>
<b>Diagram and Layer:</b>
<ul>
<li>
Added support for (static) SVG generation with <a>Diagram.makeSvg</a>.
You can generate an SVG scene of all or part of a Diagram using the same
options that <a>Diagram.makeImage</a> takes.
</li>
<li>
Added a "Modified" <a>DiagramEvent</a>, to support updating non-Diagram UI
after the <a>Diagram.isModified</a> property has changed.
Many samples now implement such a listener to add a "*" to the document title and to enable the "Save" Button.
A "Modified" DiagramEvent listener should not modify the Diagram or its Model.
Replacing the <a>Diagram.model</a> now automatically sets <a>Diagram.isModified</a>
to false, but you still have to set it when you save a diagram.
</li>
<li>
Added <a>Diagram.copyParts</a> method, for copying a collection of Parts and
returning a <a>Map</a> of original Parts and their respective copies.
(This is called by <a>CommandHandler.copySelection</a> and <a>CommandHandler.pasteSelection</a> and the <a>DraggingTool</a>.)
</li>
<li>
Added <a>Diagram.removeParts</a> method, for deleting a collection of Parts.
(This is called by <a>CommandHandler.deleteSelection</a>.)
</li>
<li>
Added <a>Diagram.moveParts</a> method, for shifting the location of a collection of Parts.
(This is called by the <a>DraggingTool</a> and <a>CommandHandler.pasteSelection</a>.)
Moving with a zero offset will align the parts to the grid, if <a>DraggingTool.isGridSnapEnabled</a> is true.
</li>
<li>
Fixed <a>Diagram.findPartAt</a> with a false <i>selectable</i> argument,
to ignore temporary <a>Layer</a>s, just as it always has when <i>selectable</i> is true.
</li>
<li>
Fixed <a>Diagram.findObjectAt</a> (and similar methods) not correctly finding remaining TableRow or TableColumn <a>Panel</a>s
in Table Panels that have been modified.
</li>
<li>
Fixed some cases where Layouts with <code><a>Layout.isRealtime</a> == false</code> would perform their layout at incorrect times.
</li>
<li>
There is now an implicit transaction that surrounds the initial layout of a Diagram.
This ensures that all model Changed listeners are called at a time when all of the diagram state has been updated.
</li>
<li>
<a>Diagram.hasHorizontalScrollbar</a> and <a>Diagram.hasVerticalScrollbar</a> now trigger an update to remove or add the scrollbars appropriately.
</li>
</ul>
</li>
<li>
<b>Parts:</b>
<ul>
<li>
The default <a>Diagram.nodeSelectionAdornmentTemplate</a>, <a>Diagram.groupSelectionAdornmentTemplate</a>,
<a>Diagram.linkSelectionAdornmentTemplate</a>, <a>ResizingTool.handleArchetype</a>,
<a>LinkReshapingTool.handleArchetype</a>, <a>LinkReshapingTool.midHandleArchetype</a>,
<a>RelinkingTool.fromHandleArchetype</a>, <a>RelinkingTool.toHandleArchetype</a>, and
<a>RotatingTool.handleArchetype</a> now all default to showing blue handles.
</li>
<li>
Added <a>Node.linkValidation</a> property, which if non-null, is called by <a>LinkingBaseTool.isValidLink</a>
to support validating potential links at each node,
in addition to the <a>LinkingBaseTool.linkValidation</a> on the <a>LinkingTool</a> and <a>RelinkingTool</a>.
</li>
<li>
Added <a>Group.computesBoundsIncludingLinks</a> property, which if false causes the computation of
a <a>Group</a>'s members bounds to ignore <a>Link</a>s.
</li>
<li>
Added <a>Group.computesBoundsIncludingLocation</a> property, which if true causes the computation
of a <a>Group</a>'s members bounds to include its current Location.
This is helpful to allow users to move member nodes at the top down or at the left side rightwards,
without necessarily shrinking the <a>Placeholder</a> and shifting it down or towards the right.
</li>
<li>
Fixed <a>RotatingTool.updateAdornments</a> not to require the rotation Adornment to use a <a>Part.locationSpot</a> of Spot.Center.
</li>
<li>
Copying a <a>Link</a> with AvoidsNodes routing no longer invalidates the route of the original Link.
</li>
</ul>
</li>
<li>
<b>GraphObjects and Geometry:</b>
<ul>
<li>
Added <a>Point.projectOntoLineSegment</a>, <a>Point.projectOntoLineSegmentPoint</a>,
<a>Point.snapToGrid</a> and <a>Point.snapToGridPoint</a> methods.
</li>
<li>
Corrected some Table Panel layouts with complex sizing rules.
</li>
<li>
Added a new arrowhead (<a>Shape.toArrow</a> and <a>Shape.fromArrow</a>), the empty string (""),
which can be used to turn an arrowhead "off" without making ths Shape revert to a regular figure.
</li>
</ul>
</li>
<li>
<b>Models:</b>
<ul>
<li>
A regular <a>Node</a> may become a label node on a <a>Link</a> or vice-versa, dynamically.
Whether a node is a link label node is determined in a <a>GraphLinksModel</a> by whether
there is a reference to the node in the link's <a>GraphLinksModel.getLabelKeysForLinkData</a> Array.
You can use whatever category you like to choose the node template used to represent the node data;
"LinkLabel" is the default predefined category for link label nodes.
</li>
<li>
Added <a>Model.modelData</a> property, a JavaScript object for programmer-defined
properties that are written by <a>Model.toJson</a> and read by <a>Model.fromJson</a>.
This provides easy persistence of properties that are for the whole model,
not for individual nodes or links.
</li>
<li>
A <a>Binding</a> target of <a>GraphObject.name</a> now may produce an error.
A TwoWay <a>Binding</a> whose source is the key property on node data now may produce an error.
These kinds of Bindings have always been disallowed,
but now are more likely to produce an error that can be seen in the console log.
</li>
<li>
Added <a>ChangedEvent.isTransactionFinished</a> property,
for convenience in detecting model changes that are of type <a>ChangedEvent.Transaction</a>
and indicate the end of a committed transaction or undo or redo.
</li>
<li>
Fixed <a>Model.addArrayItem</a> and <a>Model.insertArrayItem</a> to accept non-Object new item values.
</li>
</ul>
</li>
<!--
<li><b>Layouts:</b>
<ul>
(none)
</ul>
</li>
-->
<li>
<b>Tools and Commands:</b>
<ul>
<li>
<b style="color:red;">Potentially Incompatible:</b>
Mac-based platforms now use the Command key instead of Control for almost all commands.
For instance the undo command is Control-Z on Windows and Linux platforms and Command-Z on Macs.
This is more canonical on Macs, but could cause incompatibilities if custom tools were created.
</li>
<li>
<b style="color:red;">New Gesture:</b> On iOS devices, a two-finger pan now pans the page instead of the Diagram.
</li>
<li>
Scrolling and zooming with a mouse wheel can now be used on scrolling devices and
trackpads that allow for less than one "click" of a scroll wheel, accommodating finer scrolling.
</li>
<li>
The <a>TextEditingTool</a> now automatically selects text upon focus.
</li>
<li>
The <a>TextEditingTool</a> now demands focus until it is completed or cancelled.
</li>
<li>
Added <a>LinkReshapingTool.getReshapingBehavior</a> and <a>LinkReshapingTool.setReshapingBehavior</a>
to allow overrides of <a>LinkReshapingTool</a> methods access to the permitted
user reshaping behaviors of particular reshape handles.
</li>
<li>
Added <a>RelinkingTool.copyLinkProperties</a> method, which copies properties of the
selected Link to the <a>LinkingBaseTool.temporaryLink</a>.
</li>
<li>
Added <a>LinkingBaseTool.isUnconnectedLinkValid</a> property on <a>LinkingTool</a> or <a>RelinkingTool</a>,
to control whether the user may draw new links or reconnect existing links to no port/node.
</li>
<li>
Added <a>DraggingTool.dragsLink</a> property, to control whether the user may drag a single link,
disconnecting it from any nodes, and perhaps reconnecting the link at one or both ends.
</li>
<li>
Added <a>DraggingTool.startPoint</a> property, to improve ability to simulate drag-and-drops.
</li>
<li>
Added <a>CommandHandler.copiesParentKey</a> and <a>CommandHandler.copiesGroupKey</a> properties,
to have a copy/pasted new node automatically be a child of the original node's tree parent or
a member of the original node's containing group.
</li>
<li>
Resizing, reshaping, rotating, and relinking tool Adornments no longer appear on selected Parts
that are in Palettes or other Diagrams that are <a>Diagram.isReadOnly</a>.
</li>
<li>
Improved <a>Part.updateAdornments</a> to hide or show tool adornments on selected Parts as their
<a>Part.reshapable</a>, <a>Part.resizable</a>, or <a>Part.rotatable</a> properties are modified dynamically.
</li>
<li>
Only a left-button mouse-down will allow <a>LinkReshapingTool.canStart</a> to return true;
other buttons no longer cause the LinkReshapingTool to start.
</li>
<li>
Fixed some cases where a copy-pasted Part had a different location than the original.
</li>
</ul>
</li>
</ul>
<hr class="changelog" />
<h4>Changes for 1.2.8</h4>
<ul>
<li>Fixed some relinking bugs with undo/redo.</li>
<li>Some table panel measurement fixes.</li>
</ul>
<h4>Changes for 1.2.7</h4>
<ul>
<li>Fixed exception when changing <a>Panel.itemArray</a> decreased the number of items in an <a>Adornment</a> or <a>Group</a>.</li>
<li>Fixed mouse cursor on Diagram (<a>Diagram.currentCursor</a>, <a>Diagram.defaultCursor</a>) erroneously setting the cursor for the entire page.</li>
<li>Touch-zoom gestures now correctly respect <a>Diagram.minScale</a>, <a>Diagram.maxScale</a>, and <a>Diagram.allowZoom</a> on all platforms.</li>
</ul>
<h4>Changes for 1.2.6</h4>
<ul>
<li>Fixed the setter for <a>Shape.strokeDashArray</a>, which incorrectly discarded null as a value.</li>
<li>Fixed a divide-by-zero scenario in link routing.</li>
<li>Stopped Table Panel rows and columns with only stretch elements from taking up inappropriate space.</li>
<li>Other minor Table Panel fixes.</li>
</ul>
<h4>Changes for 1.2.5</h4>
<ul>
<li>Fixed context menu clicks on touch-capable devices when a mouse-right click was performed on an object with no available context menu.</li>
<li>Fixed some areaBackgrounds when they used shared brushes with objects of identical size, when those objects are rotated at different angles.</li>
<li>Fixed object picking after calling <a>Diagram.makeImage</a> with a non-default viewport.</li>
</ul>
<h4>Changes for 1.2.4</h4>
<ul>
<li>Fixed double-clicking in some circumstances on IE10 and IE11.</li>
<li>Fixed initial performance of <a>Group.layout</a>s even when <a>Layout.isInitial</a> was false.</li>
<li>Fixed some bugs with zero and near-zero sized Diagrams that caused update loops when layouts were <a>Layout.isViewportSized</a>.</li>
<li>Fixed <a>Link.getLinkDirection</a> to return better values for rotated ports when the <a>Node</a> is not rotated.</li>
<li><a>GraphObject.getDocumentAngle</a> now returns a normalized angle from 0 to 360, instead of returning an angle between -180 and 180.</li>
</ul>
<h4>Changes for 1.2.3</h4>
<ul>
<li>Fixed shadow drawing on Parts that had a non-real position.</li>
<li>Fixed <a>Diagram.isEnabled</a> failing to disable scrollbars.</li>
<li>Fixed some issues with dynamic Picture loading, and decreased time between tests for loaded images.</li>
<li>Fixed some errors with odd Diagram sizes, including disallowing negative-sized Diagrams in Internet Explorer.</li>
<li>Fixed <a>Panel.findRowForLocalY</a> and <a>Panel.findColumnForLocalX</a> when the input was a negative number.</li>
<li>Auto Panels now correctly measure main Shape elements that have a <a>Shape.geometryStretch</a> of Uniform, such as the figures 'Circle' and 'Square'.</li>
<li>Auto Panels now correctly re-measure TextBlock elements when the Panel's size changes dynamically (ie, desiredSize).</li>
</ul>
<h4>Changes for 1.2.2</h4>
<ul>
<li>Added CommandHandler functions: <a>CommandHandler.showContextMenu</a> and <a>CommandHandler.canShowContextMenu</a>.</li>
<li>Added key-binding for Menu key to invoke <a>CommandHandler.showContextMenu</a>.</li>
<li>Fixed <a>TextEditingTool</a> sizing in some configurations.</li>
<li><a>Shape.strokeDashArray</a> now checks for zero, negative, and non-number values, and there is a fix for non-native dash drawing with offsets.</li>
<li>Fixed miscellaneous sizing issues with near-zero sized Diagrams.</li>
</ul>
<h4>Changes for 1.2.1</h4>
<ul>
<li>Fixed non-routing of the original <a>Link</a>s after they have been copied.</li>
<li>Fixed positioning of link label nodes that are <a>Group</a>s.</li>
</ul>
<h4>Changes for 1.2 since 1.1.*</h4>
<ul>
<li>Added a TypeScript definition file: <code>release/go.d.ts</code> for better type-checking when using TypeScript and for Intellisense support in Visual Studio.</li>
<li>
Added Extensions of <a>Tool</a>, <a>Layout</a>, and <a>CommandHandler</a>:
<ul>
<li>
Added the <a href="../extensions/DragZooming.html" target="_blank">Drag Zooming Tool</a> sample,
with the tool defined in <a href="DragZoomingTool.js">DragZoomingTool.js</a>.
</li>
<li>
Added the <a href="../extensions/FreehandDrawing.html" target="_blank">Freehand Drawing Tool</a> sample,
with the tool defined in <a href="FreehandDrawingTool.js">FreehandDrawingTool.js</a>.
</li>
<li>
Added the <a href="../extensions/PolygonDrawing.html" target="_blank">Polygon Drawing Tool</a> sample,
with the tool defined in <a href="PolygonDrawingTool.js">PolygonDrawingTool.js</a>.
</li>
<li>
Added the <a href="../extensions/PolylineLinking.html" target="_blank">Polyline Linking Tool</a> sample,
with the tool defined in <a href="PolylineLinkingTool.js">PolylineLinkingTool.js</a>.
</li>
<li>
Added the <a href="../extensions/Serpentine.html" target="_blank">Serpentine Layout</a> sample,
with the layout defined in <a href="SerpentineLayout.js">SerpentineLayout.js</a>.
</li>
<li>
Added the <a href="../extensions/FloorPlanEditor.html" target="_blank">Floor Plan Editor</a> and
<a href="../extensions/FloorPlanMonitor.html" target="_blank">Floor Plan Monitor</a> samples,
demonstrating several tools and a command handler:
<ul>
<li><a href="../extensions/GuidedDraggingTool.js">GuidedDraggingTool.js</a></li>
<li><a href="../extensions/ResizeMultipleTool.js">ResizeMultipleTool.js</a></li>
<li><a href="../extensions/RotateMultipleTool.js">RotateMultipleTool.js</a></li>
<li><a href="../extensions/DrawCommandHandler.js">DrawCommandHandler.js</a></li>
</ul>
</li>
</ul>
</li>
<li>
Samples:
<ul>
<li>Added the <a href="../samples/euler.html" target="_blank">Euler Diagram</a> sample.</li>
<li>Added the <a href="../samples/grafcet.html" target="_blank">Grafcet Diagrams</a> sample.</li>
<li>Added the <a href="../samples/network.html" target="_blank">Network Configuration</a> sample.</li>
<li>Added the <a href="../samples/radial.html" target="_blank">Recentering Radial Layout</a> sample.</li>
<li>Added the <a href="../samples/regrouping.html" target="_blank">Regrouping</a> sample.</li>
</ul>
</li>
<li>
Selection and Tool <a>Adornment</a>s are now virtualized:
<ul>
<li>Adornments are only created automatically when viewed.</li>
<li>The "Adornment" <a>Layer</a>'s part count will only reflect Adornments created so far.</li>
<li>
<a>Part.adornments</a> will be empty for Parts that should have Adornments (i.e., are selected) but have yet to be viewed.
(<a>Part.adornments</a> will never be null.)
</li>
<li>If your app needs Adornments that should exist but are off-screen you can call <a>Part.updateAdornments</a> to create them.</li>
</ul>
</li>
<li>
Trees:
<ul>
<li>Added a parameter to <a>Node.findTreeParts</a> to control how much of a subtree is returned.</li>
<li>Added a parameter to <a>Node.collapseTree</a> and <a>Node.expandTree</a> for controlling how much of a tree is collapsed or expanded.</li>
<li>Added <a>Node.findTreeRoot</a> method for walking up the chain of tree parent links.</li>
<li>Added <a>Diagram.findTreeRoots</a> method for finding all root <a>Node</a>s of trees.</li>
<li>
Added <a>Link.isTreeLink</a> property; set to false to have tree-oriented methods ignore such <a>Link</a>s,
which is convenient when you want a tree-structured diagram using a <a>GraphLinksModel</a> with additional links connecting the nodes.
</li>
<li>Fixed <a>Node.collapseTree</a> not causing the Diagram to redraw.</li>
<li><a>TreeLayout.roots</a> collection now holds <a>TreeVertex</a>es, although Nodes in that collection are still supported for compatibility.</li>
<li>Added overridable <a>TreeLayout.initializeTreeVertexValues</a> method.</li>
<li>Added overridable <a>TreeLayout.addComments</a> and <a>TreeLayout.layoutComments</a> methods.</li>
<li>Added overridable <a>TreeLayout.arrangeTrees</a> method.</li>
</ul>
</li>
<li>
Links:
<ul>
<li>Added <a>Link.isOrthogonal</a> read-only property, for convenience in checking the kind of routing a Link does.</li>
<li>
Added <a>Link.getLinkPointFromPoint</a>, <a>Link.getLinkPoint</a>, and <a>Link.getLinkDirection</a> overridable methods,
to help customize the computation of link routes where a link connects with a port.
</li>
<li>Added <a>Link.resegmentable</a> and <a>LinkReshapingTool.midHandleArchetype</a> properties to allow users to add and remove straight segments from links.</li>
<li>Added <a>LinkingBaseTool.portTargeted</a> functional property as an event handler that is called during a linking or relinking operation.</li>
<li>
Added <a>LinkingBaseTool.copyPortProperties</a> and <a>LinkingBaseTool.setNoTargetPortProperties</a> overridable methods,
for customizing the behavior during linking and relinking operations, when setting <a>LinkingBaseTool.portTargeted</a> is not enough.
</li>
<li>The <a>LinkingTool</a> and <a>RelinkingTool</a> now autoscroll when dragging the end of a link just inside the edge of the viewport.</li>
</ul>
</li>
<li>
Added Row and Column separators in Table Panels:
<ul>
<li><a>RowColumnDefinition.separatorPadding</a></li>
<li><a>RowColumnDefinition.separatorStroke</a></li>
<li><a>RowColumnDefinition.separatorStrokeWidth</a></li>
<li><a>RowColumnDefinition.separatorDashArray</a></li>
<li><a>RowColumnDefinition.background</a></li>
<li><a>RowColumnDefinition.coversSeparators</a></li>
<li><a>RowColumnDefinition.total</a></li>
<li><a>Panel.defaultSeparatorPadding</a></li>
<li><a>Panel.defaultRowSeparatorStroke</a></li>
<li><a>Panel.defaultRowSeparatorStrokeWidth</a></li>
<li><a>Panel.defaultRowSeparatorDashArray</a></li>
<li><a>Panel.defaultColumnSeparatorStroke</a></li>
<li><a>Panel.defaultColumnSeparatorStrokeWidth</a></li>
<li><a>Panel.defaultColumnSeparatorDashArray</a></li>
</ul>
</li>
<li>
Diagrams and Layers:
<ul>
<li>Added <a>Diagram.findTopLevelGroups</a> method for finding all unnested <a>Group</a>s.</li>
<li>Added a <i>partialInclusion</i> argument to <a>Diagram.findObjectsNear</a> and <a>Layer.findObjectsNear</a>.</li>
<li>
Added <a>Layer.pickable</a> and <a>GraphObject.pickable</a> properties, to permit visual objects to be ignored by methods such as <a>Diagram.findObjectAt</a>,
which in turn allows one to create Parts such as the background grid that cannot get mouse events but are still visible.
</li>
<li>Added <a>Diagram.zoomPoint</a> property, for controlling where to "focus" the diagram contents when changing the <a>Diagram.scale</a>.</li>
<li>Added <a>Overview.drawsTemporaryLayers</a> property to disable drawing temporary layers.</li>
<li>Fixed Overview's div setter when changing the div to null and back.</li>
<li>Fixed the drawing of grid on Overviews.</li>
<li><a>Diagram.makeImage</a> now correctly includes or excludes the grid based on showGrid and showTemporary when a parts list is used.</li>
<li>The viewport now changes size appropriately on browser window maximize and restore.</li>
<li>
When a Diagram's div is hidden in such a way that its clientWidth or clientHeight go to zero,
the old viewport width and height are kept at their old values until they are changed to nonzero values again.
</li>
</ul>
</li>
<li>
Parts and GraphObjects:
<ul>
<li>
Added <a>Layer.pickable</a> and <a>GraphObject.pickable</a> properties, to permit visual objects to be ignored by methods such as <a>Diagram.findObjectAt</a>,
which in turn allows one to create Parts such as the background grid that cannot get mouse events but are still visible.
</li>
<li>Added methods for finding links between nodes: <a>Node.findLinksTo</a> (in one direction) and <a>Node.findLinksBetween</a> (in either direction).</li>
<li>Added support for row and column separators in Table Panels -- see paragraph above.</li>
<li>Added <a>Panel.findColumnForLocalX</a> and <a>Panel.findRowForLocalY</a>.</li>
<li>Fixed the <a>Panel.data</a> binding of tooltip Adornments for GraphObjects created for items in a <a>Panel.itemArray</a>.</li>
<li>Fixed <a>Placeholder</a> positioning when a Placeholder has a padding or the Group has a non-default locationSpot.</li>
<li>Added <a>TextBlock.isUnderline</a> and <a>TextBlock.isStrikethrough</a>.</li>
<li>Fixed some geometric arc calculations on Geometries with more than one Figure.</li>
<li>Fixed deletion of label <a>Node</a>s from <a>Link</a>s to remove the key reference in the link data.</li>
</ul>
</li>
<li>
Layouts:
<ul>
<li>Added <a>Layout.isRealtime</a> property, to control whether an invalid layout is performed during some tool operations before a transaction is completed.</li>
<li>Improved <a>LayeredDigraphLayout</a> detection whether links need to be routed around the "from" node or the "to" node.</li>
<li><a>TreeLayout.roots</a> collection now holds <a>TreeVertex</a>es, although Nodes in that collection are still supported for compatibility.</li>
<li>Added overridable <a>TreeLayout.initializeTreeVertexValues</a> method.</li>
<li>Added overridable <a>TreeLayout.addComments</a> and <a>TreeLayout.layoutComments</a> methods.</li>
<li>Added overridable <a>TreeLayout.arrangeTrees</a> method.</li>
</ul>
</li>
<li>
Tools and CommandHandler:
<ul>
<li>Added <a>ToolManager.dragSize</a> property, for controlling the distance at which the mouse may move before it is no longer considered a click but a drag.</li>
<li>
Added <a>ToolManager.WheelNone</a>; set <a>ToolManager.mouseWheelBehavior</a> to this value
to ignore mouse wheel events without disabling scrolling or zooming by other means.
</li>
<li>Stopped <a>Tool.standardMouseOver</a> from being called with the initial <a>Diagram.lastInput</a>.</li>
<li>On touch-supported devices, the default context menu no longer appears if the right-click was initiated with a mouse.</li>
<li>Fixed <a>ActionTool</a> to work on a <a>Part</a>s when the whole Part has <a>GraphObject.isActionable</a> set to true.</li>
<li>Improved <a>ToolManager.positionToolTip</a> and <a>ContextMenuTool.positionContextMenu</a> not to position it left of the left edge of the viewport.</li>
</ul>
</li>
</ul>
<hr class="changelog" />
<h4>Changes for 1.1.12</h4>
<ul>
<li>Dragging a selection over a foreign Diagram no longer selects the objects until they are successfully dropped.</li>
<li>Allowed Diagram and model listeners to modify the listener collection during execution.</li>
<li>
Fixes for <a>Diagram.makeImage</a>. Regardless of the Diagram.documentBounds value,
inputting a size and position that are analogous to a Node's actualBounds will always print that node.
</li>
</ul>
<h4>Changes for 1.1.11</h4>
<ul>
<li>
Fixed <a>Diagram.zoomToRect</a> scaling to default to <a>Diagram.Uniform</a>, not <a>Diagram.UniformToFill</a>.
Added an optional <i>scaling</i> argument to <a>Diagram.zoomToRect</a> so that you can choose the behavior.
</li>
<li>Fixed <a>GridLayout.doLayout</a> to take an <a>Iterable</a> collection of <a>Part</a>s.</li>
</ul>
<h4>Changes for 1.1.10</h4>
<ul>
<li>Fixed some cases of Link routing when <a>Link.adjusting</a> is <a>Link.End</a>.</li>
<li>Fixed <a>Diagram.makeImage</a> when <a>Diagram.documentBounds</a> X and Y values are non-zero.</li>
</ul>
<h4>Changes for 1.1.9</h4>
<ul>
<li>Fixed route invalidation of not visible Links.</li>
<li>Created a workaround for an IE10 bug that disallowed double clicking.</li>
<li>Fixed the initialization of <a>Node.isTreeLeaf</a> when changing the category of a Node.</li>
<li>Fixed <a>Diagram.grid</a>'s updating when toggling <a>GraphObject.visible</a>.</li>
</ul>
<h4>Changes for 1.1.8</h4>
<ul>
<li>Fixed <a>Diagram.findObjectsAt</a> and <a>Diagram.findObjectsIn</a> not to throw away the argument results collection.</li>
<li>Fixed the ResizingTool Adornment location on Shapes with large strokeWidths.</li>
<li>Fixed some nested objects (Panels, Picture, and Shapes) with a scale and a stretch value measuring incorrectly.</li>
<li>
Changed Links to be not seen when a connected Node is not seen, if the Link is a member of a Group,
rather than appear to connect with the Group that contains it.
</li>
</ul>
<h4>Changes for 1.1.7</h4>
<ul>
<li>Fixed addition and removal of Parts from the temporary layers causing the diagram's bounds to update.</li>
<li>
Initial Diagram setup such as <a>Diagram.initialContentAlignment</a> now occurs at the end of the first transaction,
not at the transaction's start.
</li>
<li>Fixed <a>GraphObject.alignment</a> so that it correctly re-measures the GraphObject in all cases.</li>
<li>Fixed updating of tooltips when the viewport changes without any mouse move.</li>
<li>Fixed TableRow and TableColum visibility within Table Panels.</li>
<li>
TwoWay <a>Binding</a>s now update data properties by calling <a>Model.setDataProperty</a>,
thereby updating other bindings on the same property.
</li>
</ul>
<h4>Changes for 1.1.6</h4>
<ul>
<li>Added <a href="../samples/parseTree.html" target="_blank">Parse Tree</a> sample.</li>
<li>
Improved the <a href="../samples/stateChart.html" target="_blank">State Chart</a> and
<a href="../samples/dynamicPorts.html" target="_blank">Dynamic Ports</a> samples to remember Link routes
by using TwoWay Binding on the <a>Link.points</a> property.
</li>
<li>Fixed hiding Links in collapsed trees when the tree is inside a Group.</li>
<li>Fixed <a>Diagram.position</a> setter incorrectly modifying values.</li>
</ul>
<h4>Changes for 1.1.5</h4>
<ul>
<li>Fixed Arcs with negative radii made using <a>Geometry.parse</a>.</li>
<li>Corrected NaN locations when copying Parts under certain conditions.</li>
<li>Fixed <a>Diagram.makeImage</a> padding and background grid rendering, and padding can no longer be negative.</li>
</ul>
<h4>Changes for 1.1.4</h4>
<ul>
<li>Fixed rules for <a>Part.addAdornment</a> or <a>Adornment.adornedObject</a> causing an Adornment to adorn a different part.</li>
<li>Fixed <a>Diagram.minScale</a> and <a>Diagram.maxScale</a> when using a <a>Diagram.autoScale</a> values other than <a>Diagram.None</a></li>
<li>Fixed incorrect autoScrolling when Diagram is zoomed.</li>
<li>Added support for Android pinch-zooming and fixed <a>Diagram.zoomPoint</a> setting during pinch zoom.</li>
<li>Fixed the drawing of the background Grid during <a>Diagram.makeImage</a></li>
</ul>
<h4>Changes for 1.1.3</h4>
<ul>
<li>Added <a href="../samples/sequenceDiagram.html" target="_blank">Sequence Diagram</a> sample.</li>
<li>Improved behavior of <a>LinkingBaseTool.findTargetPort</a> when the <a>LinkingBaseTool.portGravity</a> is a small value.</li>
<li>Improved "AvoidsNodes" link routing not to compute special route when default orthogonal routing does not cross over any nodes.</li>
<li>
Improved the behavior of <a>LinkReshapingTool</a> when dragging a reshape handle adjacent to the end point of a link
that is connecting with a port for which <a>Spot.isNoSpot</a> is true.
</li>
<li>Fixed layouts with <a>Layout.isViewportSized</a> not redoing their layout when the Diagram's viewport changed size.</li>
</ul>
<h4>Changes for 1.1.2</h4>
<ul>
<li>Fixed <a>Geometry.stringify</a> not to round off coordinate values.</li>
<li>Automatically set <a>Tool.diagram</a> for tools that are added to any of the three <a>ToolManager</a> tool lists.</li>
</ul>
<h4>Changes for 1.1.1</h4>
<ul>
<li>Many enhancements to the <a href="../samples/pipes.html" target="_blank">Pipes</a> sample.</li>
<li>Improved "AvoidsNodes" link routing within groups.</li>
<li>Double-click implemented on touch devices.</li>
<li>Fixed copying collections declared to hold Objects.</li>
<li>Fixed un-handled mouseup events not bubbling.</li>
<li>Fixed updating Nodes that are modified in the middle of a Diagram update.</li>
<li>Fixed positioning of asymmetric background Grid Panel patterns.</li>
</ul>
<h4>Changes for 1.1 since 1.0.*</h4>
<ul>
<li>
<b style="color:red;">Incompatible changes in 1.1:</b>
<ul>
<li>
The second argument of <a>Geometry.parse</a> defaults to false instead of true.
The first argument is assumed to be a <b>GoJS</b> format geometry path string, not an SVG format string,
even though the SVG strings are now a subset of the <b>GoJS</b> strings.
</li>
</ul>
</li>
<hr />
<li>
<b>Samples and documentation:</b>
<ul>
<li>Added <a href="../samples/IVRtree.html" target="_blank">IVR Tree</a> sample</li>
<li>Added <a href="../samples/genogram.html" target="_blank">Genogram</a> sample</li>
<li>Added <a href="../samples/comments.html" target="_blank">Comments</a> sample</li>
<li>Added <a href="../samples/pipes.html" target="_blank">Pipes</a> sample</li>
<li>Added <a href="../samples/canvases.html" target="_blank">Canvases</a> sample</li>
<li>Added <a href="../samples/kittenMonitor.html" target="_blank">Kitten Monitor</a> sample</li>
<li>Added <a href="../samples/doubleTreeJSON.html" target="_blank">Double Tree (JSON)</a> sample</li>
<li>Added intro page about <a href="../intro/makingImages.html" target="_blank">Diagram Images</a></li>
<li>Added intro page about <a href="../intro/printing.html" target="_blank">Local Printing</a></li>
<li>Added intro page about <a href="../intro/serverSideImages.html" target="_blank">Server-side Image Creation</a></li>
<li>Added intro page about <a href="../intro/geometry.html" target="_blank">Geometry Strings and Parsing</a></li>
</ul>
</li>
<li>
<b>Diagram and Layer:</b>
<ul>
<li>
New named property arguments for <a>Diagram.makeImage</a> and <a>Diagram.makeImageData</a>
can now specify "size", "maxSize", "padding", and "background" of the resulting Diagram image.
The new named property arguments "position" and "scale" control what area of the document is drawn.
The "parts" and "omitTemporary" property arguments control which Parts are drawn.
</li>
<li>Added <a>Diagram.computePartsBounds</a> method, to determine the area occupied by a collection of Parts.</li>
<li>Added <a>Diagram.delayInitialization</a>, replacing the now deprecated <code>update</code> and <code>requestUpdate</code> methods.</li>
<li>Added <a>Diagram.zoomToRect</a>, allowing easy changing of the viewport.</li>
<li>
Added <a>Diagram.initialScale</a> and <a>Diagram.initialPosition</a>, needed for more complex initialization
and when <a>Diagram.delayInitialization</a> is used.
</li>
<li>Added <a>Layer.opacity</a> property, for setting multiplicative opacity on all Parts in a layer.</li>
<li>Added double-click functionality for mobile devices</li>
<li>Fixed <a>Diagram.zoomToFit</a> not updating the document bounds first.</li>
<li>Fixed <a>Layer.findObjectsIn</a> not always returning the results of the <i>navigation</i> function.</li>
<li>Fixed picking of <a>Shape</a>s by <a>Layer.findObjectsIn</a> where partial containment was incorrect.</li>
<li>
Fixed Diagram scrolling using PageUp/PageDown. Diagrams now scroll the correct amount regardless of scale and
scroll left to right with Shift+PageUp/PageDown.
</li>
<li>Fixed removing a selected Part when deselecting it caused it to change layers.</li>
</ul>
</li>
<li>
<b>Parts:</b>
<ul>
<li>
Added <a>Node.findTreeParentLink</a>, <a>Node.findTreeParentNode</a>, <a>Node.findTreeChildrenLinks</a>, <a>Node.findTreeChildrenNodes</a>,
for your convenience in navigating a tree-structured diagram without worrying about <a>Diagram.isTreePathToChildren</a>.
For example, see the updated <a href="../samples/localview.html" target="_blank">Local View</a> sample.
</li>
<li>Added <a>Link.isLabeledLink</a> property, equivalent to <code>link.labelNodes.count > 0</code>, but more convenient.</li>
<li>Added <a>Part.findTopLevelPart</a> method.</li>
<li>
<a>Link.fromPortId</a> and <a>Link.toPortId</a> can now be set in a Link template -- if non-empty, the property will not be set with the value
of <a>GraphLinksModel.getFromPortIdForLinkData</a> or <a>GraphLinksModel.getToPortIdForLinkData</a> unless that value is non-empty.
</li>
<li>
Improved "ChangingSelection" and "ChangedSelection" <a>DiagramEvent</a>s not to happen when
<a>Diagram.clearSelection</a> is called when no Parts are selected.
</li>
</ul>
</li>
<li>
<b>GraphObjects and Geometry:</b>
<ul>
<li>Added <a>Shape.geometryString</a> property to more easily use SVG geometry path strings in your Parts.</li>
<li>Added <a>Shape.isGeometryPositioned</a> property to position a Shape in a Position Panel ignoring the <a>Shape.strokeWidth</a>.</li>
<li>Added <a>Shape.strokeDashArray</a> and <a>Shape.strokeDashOffset</a> properties, to draw customizable dashed or dotted lines.</li>
<li>Fixed some cases of <a>GraphObject.stretch</a> improperly affecting <a>GraphObject.margin</a> calculations.</li>
<hr class="changelog" />
<li>
Added <a>PathSegment.SvgArc</a> enum value to allow the creation of SVG-like arcs.
<a>Geometry.parse</a> now parses SVG "a" commands as well as <b>GoJS</b>-specific commands.
See <a href="../intro/geometry.html">Geometry Path Strings</a> for details.
</li>
<li>
Added <a>Geometry.stringify</a> static method, as the opposite of <a>Geometry.parse</a>.
This saves the complete state of a <a>Geometry</a> object, except for the <a>Geometry.spot1</a> and
<a>Geometry.spot2</a> hints for <a>Shape</a> figures.
</li>
<li>Added <a>Geometry.fillPath</a> static method, to help convert SVG geometry path strings to GoJS.</li>
<li>
Added many "Backward..." arrowhead names, to make it easier to have double-ended arrow links.
See the <a href="../samples/arrowheads.html" target="_blank">Arrowheads</a> sample.
</li>
<li>
Added <a>Geometry.scale</a>, <a>Geometry.rotate</a>, <a>Geometry.offset</a>, <a>Geometry.normalize</a>,
<a>Geometry.computeBoundsWithoutOrigin</a> methods, for easier explicit manipulation of a Geometry.
</li>
<li>Fixed scaling of <a>Geometry</a>s that contain Bezier curves.</li>
<li>Fixed some computations of <a>Geometry.bounds</a> that contained multiple <a>PathFigure</a>s with arcs.</li>
<hr />
<li>Fixed <a>TextBlock</a> greeking (drawing lines instead of text at very small sizes) to be more accurately positioned.</li>
<li>Improved <a>TextBlock</a> measurement of an empty string to have a small non-zero width, to allow empty strings to be clicked.</li>
<hr />
<li>
Added <a>Panel.TableRow</a> and <a>Panel.TableColumn</a> Panel types, for use as elements of a Panel of type <a>Panel.Table</a>.
These are particularly useful as the Panel type of <a>Panel.itemTemplate</a>.
</li>
<li>Added support for <a>Panel.itemArray</a> elements in Panels of type <a>Panel.Spot</a> and <a>Panel.Auto</a>.</li>
<li>Added <a>Panel.opacity</a>, for affecting the opacity of the panel and all its elements.</li>
<li>Fixed GraphObject clipping in Panels.</li>
</ul>
</li>
<li>
<b>Models:</b>
<ul>
<li>
Added <a>TreeModel</a> to allow creating tree-structured graphs without the use of separate link data objects.
Many (but not all) samples involving trees have been updated to make use of a TreeModel.
</li>
<li>
Added <a>GraphLinksModel.archetypeNodeData</a> for automatically adding a node data to a <a>GraphLinksModel</a>
when there is an unresolved reference in a link data.
For example, see the updated <a href="../samples/beatpaths.html" target="_blank">Beat Paths</a> sample.
</li>
<li>
Added <a>Model.setKeyForNodeData</a>, to allow you to change a node data key and automatically
update all references in that model using the old key value to use the new one.
</li>
<li>Added <a>Model.addArrayItem</a>, for completeness -- this just calls <a>Model.insertArrayItem</a>.</li>
<li>Added <a>Iterator.first</a> method for your convenience.</li>
<li>Fixed <a>Model.setDataProperty</a> for objects in item Arrays in <a>GraphLinksModel</a>s.</li>
</ul>
</li>
<li>
<b>Layouts:</b>
<ul>
<li>Added <a>Layout.isRouting</a> property, to control whether Links are routed by the layout (default true).</li>
<li>Added <a>TreeLayout.assignTreeVertexValues</a> overridable method, for vertex-specific control of tree layout.</li>
<li>Added <a>LayeredDigraphLayout.assignLayers</a> overridable method, to control which layout layer each vertex should be in.</li>
<li>Added <a>LayoutNetwork.findAllParts</a> method.</li>
<li>
Changed <a>TreeLayout.path</a> to default to new value <a>TreeLayout.PathDefault</a>,
which chooses logical tree direction based on <a>Diagram.isTreePathToChildren</a>.
</li>
<li>
Fixed alignment of vertexes in layouts that use networks to be based on center of <a>Part.locationObject</a>,
except for <a>Group</a>s which align to the center of the whole Group.
</li>
<li>
Fixed <a>CircularLayout</a> Packed arrangement occasionally causing an exception and
improved it for full circles and for 3 or 4 nodes.
</li>
</ul>
</li>
<li>
<b>Tools and Commands:</b>
<ul>
<li>
Added <a>CommandHandler.zoomToFit</a> command, invoked by <code>Shift-Z</code>.
Invoke it twice in a row to restore the original viewport.
</li>
<li>
Added <a>CommandHandler.zoomFactor</a> property, so that you can easily change how much <a>CommandHandler.decreaseZoom</a>
and <a>CommandHandler.increaseZoom</a> change the <a>Diagram.scale</a>.
</li>
<li>
Added <a>InputEvent.down</a> and <a>InputEvent.up</a> properties,
to make it easier to distinguish between mouse-down and mouse-up and other mouse events, and between key-down and key-up events.
</li>
<li>Added <a>DraggingTool.isGridSnapRealtime</a> to control whether the grid-snapping movement of parts occurs during the drag or only upon mouse-up.</li>
<li>
Added <a>DraggingTool.doDragOver</a>, <a>DraggingTool.doDropOnto</a>, <a>DraggingTool.computeMove</a>,
and <a>DraggingTool.moveParts</a> overridable methods, for easier implementation of custom dragging tools.
</li>
<li>
Added <a>LinkReshapingTool.originalPoint</a>, <a>LinkReshapingTool.originalPoints</a>,
<a>ResizingTool.originalDesiredSize</a>, <a>ResizingTool.originalLocation</a>,
<a>RotatingTool.originalAngle</a>, and <a>PanningTool.originalPosition</a> read-only properties,
for convenience when overriding some tool methods or implementing corresponding <a>DiagramEvent</a> handlers.
</li>
<li>Extended <a>Tool.isBeyondDragSize</a> to take two optional <a>Point</a> arguments, defaulting to the first and the last input points in view coordinates.</li>
<li>Improved tools to select a selectable containing <a>Group</a> when a <a>Part</a> is not selectable.</li>
<li>
Improved <a>ContextMenuTool.showContextMenu</a> and <a>ToolManager.showToolTip</a> to set the <a>Adornment</a>'s <a>GraphObject.scale</a>
such that the apparent size stays the same regardless of the <a>Diagram.scale</a>.
</li>
<li>
Improve <a>RelinkingTool</a> to disallow reconnecting not only to link label nodes on the Link itself,
but also to any link label nodes on links connecting perhaps indirectly via label nodes to that Link.
</li>
<li>Fixed <a>RelinkingTool</a> to update positions of temporary nodes even before any mouse move occurs.</li>
<li>Fixed <a>ClickCreatingTool</a>, when <a>ClickCreatingTool.isDoubleClick</a>, to check that both click points are close to each other.</li>
<li>Fixed <a>DragSelectingTool</a>, when used modally, not to show the previous selection box upon mouse-down.</li>
</ul>
</li>
</ul>
<hr class="changelog" />
<h4>Changes for 1.0.8</h4>
<ul>
<li>Fixed some Bezier <a>Link</a>s not displaying correctly.</li>
<li>Fixed Position, Horizontal, and Vertical <a>Panel</a>s not respecting some padding values.</li>
<li><a>Picture</a> now appropriately handles Canvas elements as the <a>Picture.element</a>.</li>
<li>Fixed <a>Panel.Auto</a> measuring incorrectly when the main object was a <a>Shape</a>.</li>
<li>Fixed <a>ContextMenuTool</a> to also raise a <a>DiagramEvent</a> when a context click happens.</li>
<li>Fixed <a>Placeholder</a> objects not respecting padding when not part of a <a>Group</a>.</li>
</ul>
<h4>Changes for 1.0.7</h4>
<ul>
<li>Fixed asynchronous <a>Picture</a> loading failing to update the <a>Diagram.documentBounds</a>.</li>
<li>Fixed <a>DraggingTool</a> to move Parts to the mouse-up location, not the last mouse-move location.</li>
<li>Use <code>Array.isArray(x)</code> instead of <code>x instanceof Array</code> to check for Arrays created in different frames.</li>
<li>Fixed replacing the model not respecting <a>Diagram.contentAlignment</a>.</li>
</ul>
<h4>Changes for 1.0.6</h4>
<ul>
<li>Added "Links to Links" sample.</li>
<li>Added "Shop Floor Monitor" sample.</li>
<li>
Changed a <a>Link</a> to have a jump-over or a jump-gap with another link if they do not share the same start points or the same end points,
even if they connect with the same node.
</li>
<li>Improved <a>Diagram.add</a> to check that the argument <a>Part</a> is not already a part of a different <a>Diagram</a>.</li>
<li>Fixed copy and paste not to copy partly or fully disconnected <a>Link</a>s.</li>
<li>Fixed the updating of jump-overs or jump-gaps in other links after adding or removing links.</li>
<li>Fixed undo/redo changes of Z-ordering of <a>Panel</a> elements.</li>
<li>Fixed <a>Group</a> Z-ordering when adding groups or switching layers.</li>
<li>Fixed link validation check of <a>GraphObject.fromMaxLinks</a> or <a>GraphObject.toMaxLinks</a> when links were already connected in both directions.</li>
<li>Fixed an issue with Table <a>Panel</a>s not accounting for <a>GraphObject.padding</a> properly.</li>
</ul>
<h4>Changes for 1.0.5</h4>
<ul>
<li>Added "HTML Interaction" sample.</li>
<li>Added <a>Diagram.focus</a> method.</li>
<li>Improved more API documentation.</li>
<li>Improved error checking by <a>Panel.add</a> to disallow sharing of a <a>GraphObject</a> by <a>Panel</a>s.</li>
<li>Setting <a>Part.category</a> of a <a>Node</a> or <a>Link</a> or simple <a>Part</a> now also tries to set the category of any bound data in the model.</li>
<li>Fixed dynamically changing the <a>Part.category</a> of a <a>Link</a> that connects with specific ports to remember those port Ids.</li>
<li>Fixed <a>Diagram.skipsUndoManager</a> property setter to also set the Diagram's Model's <a>Model.skipsUndoManager</a>.</li>
<li>Fixed some issues relating to scrollbars, especially on small diagrams.</li>
</ul>
<h4>Changes for 1.0.4</h4>
<ul>
<li>Improved API documentation for some classes.</li>
<li>Improved error message when running in browsers without support for Canvas.</li>
<li>Fixed hit testing of individual <a>Panel.Grid</a> Panels</li>
<li>Fixed the default touch context menu to no longer scroll to the top of the page when a button was pressed.</li>
<li>Changed the way GoJS handles event coordinates, increasing accuracy on complex HTML pages.</li>
</ul>
<h4>Changes for 1.0.3</h4>
<ul>
<li>Added "Planogram" sample.</li>
<li>Fixed <a>ResizingTool</a> modifying the saved <a>ResizingTool.minSize</a>.</li>
<li><a>Diagram.selection</a> read-only-ness is now enforced.</li>
<li>Fixed <a>Panel.Table</a> <a>Panel</a> allocating an incorrect size for some stretched objects.</li>
<li>Fixed <a>TextBlock</a> not respecting maximum height.</li>
<li>Fixed <a>Panel.Grid</a> incorrect hit testing (object picking).</li>
</ul>
<h4>Changes for 1.0.2</h4>
<ul>
<li>Added "Swim Lanes" sample.</li>
<li>Fixed <a>DraggingTool</a> updating the bounds of a containing <a>Group</a> when <a>Group.computesBoundsAfterDrag</a> is true.</li>
<li>Fixed a single <a>Shape</a> inside of a <a>Panel.Auto</a> <a>Panel</a> getting the wrong size if only <a>GraphObject.minSize</a> was set.</li>
<li>Improved measurement of nested <a>Group</a>s during automatic layouts.</li>
</ul>
<h4>Changes for 1.0.1</h4>
<ul>
<li>Added "Record Mapper" sample.</li>
<li>Removed deprecated "closed" argument to <a>PathFigure</a> constructor.</li>
<li>Fixed <a>LayeredDigraphLayout</a> routing of Bezier <a>Link</a>s connecting with visible <a>Node</a>s inside <a>Group</a>s.</li>
<li>Fixed sizing <a>Panel.Auto</a> <a>Panel</a>s with a <a>Panel</a> as the main element.</li>
<li>Initialization bugfixes.</li>
</ul>
<hr style="margin-top:50px;" />
</div> <!-- end container -->
<script src="../assets/js/jquery.min.js"></script>
<script async src="../assets/js/bootstrap.min.js"></script>
</body>
</html>