gojs
Version:
Interactive diagrams, charts, and graphs, such as trees, flowcharts, orgcharts, UML, BPMN, or business diagrams
1,051 lines (1,005 loc) • 204 kB
HTML
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="GoJS changelog." />
<meta http-equiv="cache-control" content="no-cache">
<title>GoJS Change Log</title>
<!-- Copyright 1998-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.6
</h4>
<ul>
<li>
Added <a>ForceDirectedLayout.moveLimit</a> property.
</li>
<li>
Event bubbling fixes for Pointer Events in IE and Edge.
</li>
</ul>
<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; })
&& 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><svg></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><text></code>s with <code><g></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 definit