yFiles for HTML 2.0.1.4 Release Notes

The newest available bugfix and maintenance release of yFiles for HTML is version 2.0.1.4.

Technical Requirements

  • An IDE with dedicated support for JavaScript development is strongly recommended. For example, IntelliJ WebStorm or IDEA Ultimate, Visual Studio Code, NetBeans, Eclipse.
  • To run yFiles for HTML-based web applications, an HTML5-capable browser with adequate SVG support is required (see table).

yFiles for HTML 2.0.1.4 – Changes Since 2.0.1.3

This is the 4th bugfix release for 2.0.1. It includes more workarounds for browser bugs, brings support for passive event listeners, and corrects several errors. There is an incompatible change of the module dependencies.

Workarounds for Browser Issues

  • SVG rendering in Firefox can be slow due to a problem in Firefox's SVG rendering engine. This can be prevented by enabling the already existing workaround yfiles.workaroundCR320635 which was originally added for a Chrome bug (more information on browser issue workarounds).

    In addition, the rendering of SVGs that contain nested <svg> elements is slow, too. Such nested <svg> elements are not used in library styles and should be replaced with <g> elements in custom styles whenever possible.

  • In Edge 16 (Windows 10 Fall Creators Update), SVG <marker> elements may crash the current tab. The default demo styles use <path> elements instead of <marker> elements for arrows in this browser and custom styles should be changed in this way, too.

Find more details about these and other browser issues in the Known Issues document (of your local yFiles for HTML installation).

Improvements

  • Event listeners that invoke preventDefault are now registered with the option passive: false to conform to the new DOM spec and to prevent warnings on the browser's console.
  • Images which cannot be exported due to cross origin restriction are now replaced with a fallback image instead of throwing an error. Additionally, an optional 'strict' mode can be enabled which will cause the export to fail for these types of errors. The resulting errors can be caught in the export promise.

Bugfixes

  • In rare cases, ES6 classes that extend a yFiles class did not initialize correctly and threw errors on member access.

View

  • CanvasComponent: The value and the width of the scrollbar thumb sometimes were displayed incorrectly after the component was resized.
  • Fixed missing drop shadow of PanelNodeStyle.
  • ImageNodeStyle: The fallback image for an unresolved image is now correctly displayed in Internet Explorer.
  • The NodeStyleStripeStyleAdapter.updateVisual method always created a new visual by delegating to the createVisual method.
  • MoveViewportInputMode: The Dragging, Dragged, DragCanceling, DragCanceled, DragFinishing and DragFinished events did not fire reliably for touch input and when mouse inertia was active.
  • The ICommand.COPY command is no longer executed twice.
  • Fixed a bug in ViewportAnimation that sometimes moved the viewport a bit before the animation started.
  • Pen input was not handled at all on Android devices. Now, it is treated as mouse input.
  • In Internet Explorer, users could interact with the viewport indicator of the OverviewComponent even if the component was set to visibility="hidden".

Layout

  • HierarchicLayout: Fixed an error that occurred when both layering constraints and edge directedness (with HierarchicLayout.EDGE_DIRECTEDNESS_DP_KEY) were specified.
  • HierarchicLayout and SimplexNodePlacer: Fixed a rare error that could be triggered when the input graph had a partition grid and PortCandidates or PortConstraints.
  • HierarchicLayout better adheres to the specified maximum duration by applying a suitable runtime restriction to class PortCandidateOptimizer. Previously, this class didn't have any runtime restrictions.
  • HierarchicLayout creates better port assignments for edges incident to group nodes that are routed directly. Previously, such edges were often reversed.
  • HierarchicLayout no longer violates the specified PortCandidates of edges with labels with preferred placement specifier LabelLayoutConstants.PLACE_AT_SOURCE_PORT or LabelLayoutConstants.PLACE_AT_TARGET_PORT when using an orientation other than top-to-bottom.
  • HierarchicLayout with partition grid: Avoid unnecessarily large layer distances if an empty partition grid row with a minimum row height exists.
  • HierarchicLayout with partition grid: Avoid an error when the layout algorithm is configured to stop after the layering or sequencing phase (see HierarchicLayout.stopAfterLayering and HierarchicLayout.stopAfterSequencing).
  • EdgeRouter: Fixed an error that occurred for graphs with fixed edges and very short segments.
  • OrthogonalLayout: Fixed a rare bug that caused node-edge overlaps.
  • OrganicRemoveOverlapsStage better adheres to the specified maximum duration.
  • SeriesParallelLayout no longer misplaces edge labels for graphs with only a single edge.

Incompatible Change

  • The module yfiles/view-graphml no longer depends on yfiles/view-table and yfiles/view-editor. These dependencies were undocumented and unintended. If you use the GraphML feature and the table or editor feature, make sure to require the corresponding module(s) explicitly.

Notable Demo Improvements

  • Optimized several styles used in demos for better rendering performance in Firefox and iOS browsers. See the performance notices in the documentation for details and tips.
  • Context menus now open on iOS devices.
  • Enabled a workaround in the default demo styles that avoids a fatal error in Edge 16 (Windows 10 Fall Creators Update) that ultimately prevented the loading of the web page. For more details, see the Known Issues document (of your local yFiles for HTML installation).

yFiles for HTML 2.0.1.3 - Changes Since 2.0.1.2

This is the 3rd bugfix release for 2.0.1. It includes two workarounds for browser bugs, brings support for TypeScript 2.5, corrects several errors, and contains two new demos. There are no incompatible changes since 2.0.1.2.

Additionally, we have released a TypeScript migration tool on GitHub that helps with the migration of TypeScript files that reference yFiles for HTML 1.x API to the yFiles for HTML 2.x API.

New Demos

Decision Tree
An interactive decision making app with automatic incremental layout. You can explore the existing samples, and create or load your own decision tree.
Partition Grid
An interactive explorer for the PartitionGrid class. A partition grid distributes the nodes into rows and/or columns during an automatic layout. This can be used, for example, to realize layouts of graphs with swimlanes or tables.

Workarounds for Browser Issues

Find more details about these and other browser issues in the Known Issues document (of your local yFiles for HTML installation).

Improvements

  • TypeScript: Made the typings provided by yfiles-api.d.ts compatible with TypeScript 2.5.
  • yfiles.styles.IArrow.NONE and yfiles.input.HandleTypes.INVISIBLE insert an empty <g> element into the DOM instead of an empty <use> element. The latter resulted in validation errors with exported SVG images in some SVG validators.

Bugfixes

View

  • In some cases, removing an event listener which was not created using yfiles.lang.delegate caused an error.
  • Creating an ES6 subclass of a subclass with overridden yFiles members resulted in incorrect run-time behavior when the lower subclass was instantiated before its super classes.
  • TouchEnter event: The value of the location property was not correct.
  • LayoutExecutor.stop() did not immediately stop the layout animation as it is supposed to.
  • MoveInputMode did not correctly recognize move interactions when triggered using touch gestures in Edge and Internet Explorer.
  • CreateEdgeInputMode fired gesture cancel events even if it was not started before.
  • DropInputMode: An error occurred if a DragEnter event was recognized while another drag action was still running.
  • StripeDropInputMode no longer calls itemCreator twice.
  • The StripeDropInputMode.ItemCreated event was not raised.
  • GeneralPath.IsVisible often returned true for invisible paths.

Layout

  • OrthogonalLayout: Fixed rare bug that caused overlapping nodes.
  • OrthogonalLayout: Improved from-sketch mode in conjunction with node labels or node halos. Previously, in the presence of the mentioned elements, the layout results did not always correctly resemble the sketch drawing, even if it was a good sketch.
  • HierarchicLayout: Fixed edge ports lying outside the node boundaries when using the edge thickness feature (i.e. edges with thickness greater than zero) together with a (rather large) grid spacing value and the default port assignment PortAssignmentMode.DEFAULT.

Notable Demo Improvements

  • Improved printing support to prevent the initial print document from being empty in some browsers.
  • Flowchart node style: The updateVisual() method now correctly handles changes of the flowchart type of a node.
  • The demos use larger values for the dragSize and the hitTestRadius if the input device is a touch device.

yFiles for HTML 2.0.1.2 - Changes Since 2.0.1.1

This is the 2nd bugfix release for 2.0.1. It includes some improvements, corrects several errors, and brings a large number of new demos. There are two incompatible behavior changes since 2.0.1.1.

New Demos

Flowchart Editor
An editor for Flowchart diagrams that features interactive editing, tailored Flowchart node styles, and a specialized layout algorithm.
Tree Layout Demo
Shows how to use different node placers with the automatic tree layout.
Clustering Algorithms Demo

Showcases a selection of clustering algorithms:

  • Edge Betweenness Clustering
  • k-Means
  • Hierarchical Clustering
  • Biconnected Components Clustering
Neo4j Demo
Shows how to load data from a Neo4j database and display it with yFiles for HTML.
CSS3 Animations and Transition Demo
Shows how CSS3 transformations and animations can be applied to graph items.
Edge Bundling Demo
Shows edge bundling which reduces visual clutter in dense graphs.
Node Label Placement Demo
Shows how to place edge labels at the preferred location with a labeling algorithm.
Edge-to-edge Connections Demo
Shows how edge-to-edge connections can be realized. More precisely, it shows how to configure the input mode to allow edges to be connected not only to nodes but also to other edges.
Move Unselected Nodes Demo
Shows a special input mode that allows moving nodes without selecting them first.

Improvements

  • Improved performance when the webcomponents.js polyfill for the Shadow DOM API is used.
  • FilteredGraphWrapper can now deal with node and edge predicates that evaluate to truthy or falsy values. Previously, predicates that did not strictly return true or false resulted in an error with messages like "Node not in this graph".
  • SvgExport: 'id' attributes are now copied to the wrapping <g> element of inlined images. This retains the possibility for the image to be referenced in the exported SVG document. This frequently occurs if the inlined image is part of the <defs> section of an <svg> element.

    By default, SvgExport modifies the copied 'id' attributes to make sure they are unique. This behavior can be switched off with the new property SvgExport.ensureUniqueIds.

  • TypeScript: The static isInstance method of all yFiles classes and interfaces is now part of the typings and specified as user-defined type guard function to avoid superfluous type casts and improve coding experience in IDEs.
  • TypeScript: The typings now use any instead of Object for property types and method parameters to allow usage of primitive types. Most prominently, the ITagOwner.tag property can now be set to a string value without explicitly casting it to any.
  • Developer tool for type checking: Made error messages for wrong method parameters more clear.

Bugfixes

View

  • During reparenting, the edges at reparenting nodes were drawn below the group(s) and thus they were not visible. If reparenting was canceled, these edges stayed behind the group(s) and remained invisible.
  • The promise returned by GraphEditorInputMode.addLabel and TableEditorInputMode.addLabel now fulfills with null instead of the label if the editing was canceled or the text did not validate. This is the documented behavior.
  • CreateEdgeInputMode did not always start correctly for quick gestures on slow devices.
  • CreateEdgeInputMode did not trigger the EdgeCreationStarted event for programmatic initialization of the edge creation gesture.
  • Setting CreateEdgeInputMode.cancelRecognizer could potentially get the input mode into a broken state.
  • In the unusual case that a validBendHitTestable is used, CreateEdgeInputMode will no longer cancel edge creation when using touch and trying to create a bend at an invalid location. Therefore, touch input behaves now in the same way as mouse input.
  • Fixed a possible error in NodeDropInputMode when snapping is enabled and preview is disabled.
  • Drag and drop did not work if the GraphComponent was in a shadow DOM.
  • Changing HandleInputMode.pressedRecognizerTouch had no effect if the input mode was already installed.
  • HandleInputMode.currentHandle could not always be obtained during the DragFinished, DragFinishing, DragCanceling, and DragCanceled events.
  • Switching the GraphComponent's inputMode in a key event handler threw an exception.
  • The 'S' and 'T' keys are now correctly reported as these keys by the KeyEventArgs.key property. Previously, they were swapped, 'S' was reported as 'T' and vice versa.
  • FreeLabelModel.INSTANCE, FreeEdgeLabelModel.INSTANCE, and FreeNodeLabelModel.INSTANCE are now serialized correctly to GraphML even when not used as part of their parameters (e.g. within CompositeLabelModel).
  • Labels with NinePositionsEdgeLabelModel now disappear when the owner edge has no visible edge path. This can happen for example when nodes are moved onto each other. Previously they appeared at unexpected locations, including the origin (0,0) and the upper left corner of the source node.
  • GeneralPath.getTangent now returns null if there is no tangent at the requested position. Previously, it returned a bogus tangent.
  • Prevent errors with the message "TypeError:Attempting to change access mechanism for an unconfigurable property" in Safari 10. This error was thrown when a constructor was declared using the yFiles class framework in code that was not using "strict-mode".
  • In Safari for macOS, changed the default shortcut for the Toggle Item Selection command from Command+Space to Control+Space. Command+Space is reserved for Spotlight.
  • The last row and column of the grid were sometimes not display, especially after zooming and panning.
  • Creating subclasses of subclasses with abstract yFiles members using the class framework resulted in incorrect runtime behavior when the lowest subclass was instantiated first.
  • GraphMLSupport.openFile: After a user canceled the file open dialog once, promises returned by this method stayed always in pending state and were never fulfilled.
  • GraphML: Writing an item's tag threw an error if a value was an array.
  • GraphML: The TextTrimming enum was erroneously obfuscated by the deployment tool and, as a result, the obfuscated name could have been used in GraphML files in rare cases. Reading such a file with a new build of your app resulted in an error since the obfuscated name had likely changed.
  • The following static methods internally called the wrong code and always threw an error: IAnimation.createTableAnimation, ITable.getCellBounds, and ITable.placeNodeInCell.

Layout

  • HierarchicLayout: PropertyHierarchicLayout.componentArrangementPolicy was not correctly considered when there are undirected edges.
  • Tree layout: DefaultNodePlacer.minLastSegmentLength erroneously returned the value of minFirstSegmentLength.
  • Tree layout: Prevent a memory leak in DefaultPortAssignment.
  • If PartialLayout.edgeRoutingStrategy was set to STRAIGHTLINE, all edges were rerouted in the graph, instead of just the ones that were required.
  • EdgeRouter: The minimum first and last segment length were sometimes not respected if they were set to relatively large values.
  • OrthogonalLayout: Fixed rare bug that caused non-orthogonal line segments and bad port locations.

Incompatible Changes

  • CreateEdgeInputMode now triggers the EdgeCreationStarted event for programmatic edge creation with the doStartEdgeCreation method.
  • The 'S' and 'T' keys are now correctly reported as these keys by the KeyEventArgs.key property. Previously, they were swapped, 'S' was reported as 'T' and vice versa.

yFiles for HTML 2.0.1.1 - Changes Since 2.0.1

This is the 1st bugfix release for 2.0.1. It includes some improvements, corrects several errors, and brings a large number of new demos. There are no incompatible changes since 2.0.1.

New and Improved Demos

Fraud Detection Demo
A demo application that shows how to detect fraud cases in time-dependent data.
Isometric Drawing Demo
Displays graphs in an isometric fashion to create the impression of a 3-dimensional view.
Logic Gates Demo
An editor for digital systems consisting of logic gates.
WebComponents and Vue.js Demos
Show how yFiles for HTML can be used with Web Components v1 and Vue.js, respectively.
Sankey Demo
Illustrates a diagram used for visualizing flow information in which the thickness of the edges is proportional to the flow quantity.
Maze Router Demo
Shows how the automatic edge routing finds routes through a maze.
Mixed Layout Demo
Shows how to apply different layouts to the contents of group nodes with the RecursiveGroupLayout.
Partial Layout Demo
Shows how to integrate (new) graph elements into an existing graph layout.
Layer and Sequence Constraints Demos
Show how to use layer and sequence constraints to prescribe and restrict the node layering and sequencing in hierarchic layouts.
Custom Label Model and Port Location Model Demos
Show how to create and use a custom label model and a custom port location model, respectively.
Label Editing and Label Handle Provider Demos
Show customizations of the interactive editing, resizing and rotating of labels.
Notable Demo Improvements
  • Graph Viewer Demo: Added a search box to query the desired term within the labels of the nodes of the graph.
  • BPMN Editor Demo: Prevent the creation of dangling edges when connecting to pool nodes with SHIFT pressed.
  • Neighborhood View Demo: Prevent redundant layout calls when selecting multiple graph items.
  • Context Menu Demo: Now supports the longpress event on iOS devices.
  • Image Export Demo: Added two workarounds for problems with Internet Explorer and current Firefox versions, respectively.

Improvements

  • Improved rendering performance mostly in Chrome. In bad case scenarios, the frame rate now is up to three times as high.
  • InteractiveOrganicLayout: Significant performance improvements during interactive changes of the graph, for example when a user moves nodes.
  • Input modes that use a combination of mouse gestures and modifier key(s) can now be started by the key press. Previously, such an input mode was only started by the first mouse event, e.g. a mouse move. The main benefit is that the cursor changes instantly with the key down to the input mode's one.
  • CanvasComponent: Overridable methods maybePreventPointerDefault and maybePreventContextMenuDefault have been added to control which event's default behavior should be prevented by the component.
  • Added the alias yfiles.lang.Interface for yfiles.lang.Trait. Interface is the intended name since 2.0 and most documentation was already referring to Interface instead of Trait. Note that we keep yfiles.lang.Trait for compatibility reasons for now.

Bugfixes

View

  • The event StripeDropInputMode.StripeCreated always returned a wrong stripe instance.
  • The EditLabel command was not working directly on labels when a TableEditorInputMode was active.
  • TableLayoutConfigurator erroneously considered labels on the left side as top labels, and consequently might have created insets of incorrect size.
  • GraphML: Fixed deserialization of empty XML label nodes.

Layout

  • HierarchicLayout: Fixed bug that caused node-edge overlaps in conjunction with some complex edge grouping specifications.
  • OrganicLayout, ClassicOrganicLayout and InteractiveOrganicLayout: Fixed error that was triggered due to NaN values that could occur in case the input graph had a very large number of nodes.
  • EdgeRouter: Fixed bug that caused violations of minimum first/last segment lengths of grouped edges when using different edge layout descriptors and, second, made the layout algorithm remove a user-registered DataProvider with key EdgeRouter.EDGE_LAYOUT_DESCRIPTOR_DP_KEY.
  • EdgeRouter: Fixed rare node overlaps in conjunction with monotonic path restrictions.
  • RecursiveGroupLayout: Fixed bug that caused edges to share the same port even though they should have been assigned to different ports. Note that this problem only appeared if the core layout algorithm was an instance of class HierarchicLayout.
  • IsolatedGroupComponentLayout: Fixed bug that caused edge labels that intersected with group nodes even though option ComponentLayout.considerLabels was enabled.
  • ComponentLayout , IsolatedGroupComponentLayout, and BusRouter: Fix a problem with rounding that could result in erroneous layouts in rare cases.

Documentation Viewer Improvements

  • The detailed descriptions of the methods for event registration and de-registration were not displayed.
  • The inheritance hierarchy of a type was not properly displayed.
  • In the code generator, corrected the generated code for events.
  • Fixed the display of the sidebar in pinned mode.
  • The documentation viewer can now be opened from the file system even if third-party cookies are disabled.

yFiles for HTML 2.0.1 - Changes Since 2.0.0.1

This maintenance release for yFiles for HTML 2.0 contains several brand-new demos, brings back most demos that were part of yFiles for HTML 1.3 but not of 2.0, and the GWT extension is available again. In addition, we corrected several errors and included small improvements.

There are a small number of incompatible API changes.

New Demos

Business Process Model Demo
An editor for Business Process Diagrams that features interactive editing, BPMN node styles and a specialized BPMN layout algorithm.
Network Monitoring Demo
Example of a monitoring tool for computer networks.
Network Flow Demo
Presents three network flow graph analysis algorithms that are applied on a network of water pipes. Flow algorithms can be applied to various other problem domains from everyday life, for example electricity/power, internet, and transportation.
Transitivity Demo
Shows how transitivity graph analysis algorithms can be applied to graphs to answer reachability questions. The demo presents two example graphs: the dependencies between the yFiles for HTML modules and the dependents and the dependencies of an npm package.
Mindmap Demo
A Mindmap viewer and editor.
React Demo
Shows a React component that renders the yFiles for HTML graph component.
Loading and Bundling Demos
  • AMD Loading: Loads the yFiles module resources using the require function that is defined in the AMD loading standard.
  • Script Loading: Loads the yFiles modules using <script> tags instead of an AMD loader.
  • Browserify: Shows how to bundle the yFiles library in a Browserify project.
  • webpack: Shows how to integrate the yFiles library in a webpack 2 project.
Demos Migrated from yFiles for HTML 1.3
  • The Edge Label Placement demo shows how to place labels at the desired location with an automatic edge labeling algorithm.
  • The Multi-Page Layout demo shows how this layout algorithm divides a large graph into several smaller graphs that each fits on a page.
  • The GraphML demo provides a live view of a graph's GraphML representation.
  • The Bridges demo shows edges with bridges that highlight the edge routes at intersection points.
  • The Clipboard demo shows different ways of using GraphClipboard for copy and paste operations.
  • The Context Menu demo shows context menus for nodes, other graph items, and the canvas background.
  • The Drag and Drop demo shows how to enable drag and drop from a separate palette of node templates into the graph component.
  • The File Operations demo shows various ways to open and save a graph to a GraphML file.
  • The Data Table demo shows a node style and a label style that display data in a tabular fashion.
  • The HTML Label Style demo shows how HTML markup can be used in labels with a custom label style implementation.
  • The jQuery Sparklines demo shows how to integrate visualizations generated by a third-party library with a custom node style.

Improvements

View

  • Added a yfiles_namespace type definition to the yfiles-api.d.ts file. This can be used to annotate the return value of the yFiles modules to improve code completion in IDEs like Visual Studio Code.
  • Added a constructor for RGBA color values to SolidColorFill, Stroke and GradientStop.
  • CreateEdgeInputMode now respects the settings snapBendsToSnapLines and snapBendAdjacentSegments of GraphSnapContext. It also handles grid snapping according to the configuration for snapping.
  • Resizing a table row or column now respects the value of the GraphEditorInputMode.adjustContentRectPolicy property.
  • Nodes are now always drawn above their target group during reparenting.
  • Fixed some incorrect usages of errors in IGraph.
  • GraphMLIOHandler has two new events, QueryType and QueryName, that allow fine-grained control over XML namespace writing and parsing for certain types.
  • Added the property Exception.innerException which preserves the original exception if it was wrapped and re-thrown.

Layout

  • The method LayoutExtensions.applyLayout now supports layouting tables.
  • BalloonLayoutData, HierarchicLayoutData, LabelingData, OrthogonalLayoutData, SeriesParallelLayoutData, and TreeLayoutData now have an edgeLabelPreferredPlacement property which supports an ItemMapping for edge labels to provide a PreferredPlacementDescriptor. This can replace mappers registered with the key LayoutGraphAdapter.EDGE_LABEL_LAYOUT_PREFERRED_PLACEMENT_DESCRIPTOR_DP_KEY.
  • PartitionGridData: It is now sufficient to specify one of row mapping and column mapping. The unspecified one will automatically be set to 0, resulting in a single row or column being used.
  • The ItemMapping.mapper property is now automatically set on first read-access to the property, enabling more convenient use of the mapper without first having to instantiate a matching instance.
  • HierarchicLayout: Slightly reduced the number of bends when integrated edge labeling is enabled.
  • HierarchicLayout: Fixed unstable from-sketch behavior for non-default layout orientations when group nodes are folded or expanded. Applies to orientations LayoutOrientation.LEFT_TO_RIGHT, LayoutOrientation.RIGHT_TO_LEFT and LayoutOrientation.BOTTOM_TO_TOP. Geometry information registered with data providers with keys HierarchicLayout.ALTERNATIVE_GROUP_BOUNDS_DP_KEY and HierarchicLayout.ALTERNATIVE_EDGE_PATH_DP_KEY is now automatically rotated according to the specified layout orientation.

Demos

  • Layout Styles demo: Added special substructure detection for organic layout (e.g., cycles, chains, stars, and parallel substructures).
  • Hierarchic Grouping demo: Improved the stability of the layout.

Bugfixes

General

  • Fixed rest arguments not working when named option parameters where used and debug type information was present at runtime.
  • Fixed ES6-style subclassing of yFiles classes that implement additional interfaces.
  • Added the flag yfiles.workaroundIE7766782 that enables a workaround for the Internet Explorer JIT bug 7766782, which can cause class initialization errors when using the yFiles for HTML GWT Overlay in Internet Explorer, especially when the GWT Overlay is used in combination with Smart GWT (more information on browser issue workarounds).

View

  • Fixed missing browser prefix of certain cursors.
  • Fixed visibility of scrollbar handles of CanvasComponent. The handles were not displayed for ScrollBarVisibility.ALWAYS.
  • Added the flag yfiles.workaroundCR701075 that enables a workaround for occasional render issues in Chrome 57. This is due to Chrome 57 not properly rendering the applied transform matrix (more information on browser issue workarounds). The workaround is automatically enabled in the yFiles demo applications when opened in Chrome 57.
  • CanvasComponent: Key events had no effect if the component was part of a shadow DOM. The component's div element always lost the focus on keydown.
  • GraphModelManager didn't update the child groups if a new ContentGroup was set.
  • Fixed a problem that caused the viewport of GraphOverviewComponent being set to an incorrect value when the component was resized.
  • GraphOverviewControl: Setting a new OverviewInputMode now updates the InputMode property accordingly.
  • Instances of GraphEditorInputMode and GraphViewerInputMode were not garbage collected due to a non-removed event listener in the clickInputMode.
  • CreateEdgeInputMode had a broken edge preview after the input mode was uninstalled and reinstalled again.
  • CreateEdgeInputMode didn't show the edge preview for edges between a node and one of its ancestors.
  • Fixed several issues with orthogonal edge editing.
    • When dragging the source/target port/node of an orthogonal edge, the bends created during the drag were not cleaned up after canceling the gesture by pressing the ESC key.
    • Orthogonal edges could be made non-orthogonal by re-connecting the source port to the target port location (creating a self-loop), or vice versa.
  • Fixed reparent highlighting when multiple nodes are reparented together.
  • Fixed a bug in the DropInputMode which prevented proper assignment to a specific drop data type.
  • Fixed a bug in StripeDropInputMode that could result in nodes being moved to a wrong stripe when a new stripe was created or an existing one relocated.
  • Hiding INodeSnapResultProvider or IBendSnapResultProvider from the lookup no longer leads to a crash when nodes or bends are moved.
  • The parameter finder of FreeEdgeLabelModel could not place the label correctly for self-loops. Labels always appeared at the port location in this case.
  • SmartEdgeLabelModel: Once again, labels at the first segment snap properly at the layout of the source node. Since 1.3.0.6, some snap positions were overlapping with the source node.
  • SmartEdgeLabelModel: Edge label snap lines have been too short for some positions that are far away from the edge path.
  • SmartEdgeLabelModel: An exception was thrown if the path of the corresponding edge contained bends that were close together or at the same location.
  • Fixed incorrect default value attribute for SandwichLabelModel parameters.
  • When a node and its parent group node were both selected and moved with the SHIFT key held down the node was erroneously reparented to the root.
  • Fixed a bug that resulted in folders with empty size when manually creating groups and the folding view is configured to collapse group nodes by default.
  • IGraph.addLabel ignored an explicitly specified preferred size if folding was enabled.
  • FilteredGraphWrapper no longer re-checks its predicates when labels or ports are removed nor when properties of graph items are changed. This prevents inconsistent filtering when the filtering predicate changed recently and changes are made to the graph before nodePredicateChanged or edgePredicateChanged have been called.
  • Some styles erroneously called IRenderContext.childVisualRemoved after the visual was removed instead of just before the removal.
  • Fixed dispose callback invocation of custom visuals.
  • PolylineEdgeStyle: Toggling the pen between dashed and solid styles did only work once. Then, the SVG path stayed at solid regardless of the pen's dash style.
  • Fixed missing TemplateBindings for labelText, isFlipped and isUpsideDown for styles of type TemplateLabelStyleBase.
  • Fixed a bug that might occur when changing wrapped styles in CollapsibleNodeStyleDecorator, ShadowNodeStyleDecorator, NodeStyleLabelStyleAdapter and NodeStylePortStyleAdapter.
  • Rendering of BevelNodeStyle inset rectangle position was wrong when inset value was changed.
  • Fixed icon placement in IconLabelStyle.
  • Fixed uncaught errors in promises during GraphML loading despite providing reject handlers.
  • GraphML: Actually uses namespaces that have been registered with GraphMLIOHandler.addNamespace.
  • GraphML: Enum values that are used across different yFiles platforms are written in PascalCase instead of all upper case with underscores.
  • GraphML: Enum values are not written as shared reference anymore.
  • GraphML: Updated GraphML schema location.
  • Explicit Arrow elements in GraphML were sometimes read back incorrectly. The new deserialization property SerializationProperties.parseArrowElementAsDefaultArrow can be used to work around this issue.
  • Fixed exception when calling OrientedRectangle.resize with a size.

Layout

  • Fixed OrganicLayout ignoring the groupNodeMode settings.
  • Fixed null reference errors in some of the LayoutData implementations that could happen if some of the mappings where accessed but were never really used in client code.
  • AspectRatioTreeLayoutData did not register the correct values with the graph for the root placement and the subtree routing policy.
  • AspectRatioTreeLayout.ROOT_PLACEMENT_DP_KEY is now of type NodeDpKey<RootPlacement>.
  • AspectRatioTreeLayout.SUBTREE_ROUTING_POLICY_DP_KEY is now of type NodeDpKey<SubtreeArrangement>.
  • HierarchicLayout: Fixed bug that may lead to too large group nodes if there are grouped edges.
  • HierarchicLayout: Fixed bug that sometimes caused superfluous bends in edge routes when integrated edge labeling was enabled.
  • HierarchicLayout: Fixed bug that caused that the directedness of edges incident to groups wasn't considered correctly (see HierarchicLayout.EDGE_DIRECTEDNESS_DP_KEY).
  • OrganicLayout and ClassicOrganicLayout: Fixed bug that caused the algorithm to not consider the specified custom GroupBoundsCalculator.
  • MultiPageLayout: Fixed rare bug that sometimes caused straight-line edge routes instead of orthogonal routes.
  • CircularLayout and RadialLayout: Fixed bug that caused that always all edges were bundled if bundling is enabled for at least one single edge. More precisely, property EdgeBundleDescriptor.isBundled wasn't considered correctly.
  • SingleCycleLayout: Fixed bug that could lead to an error if edge bundling is enabled and a custom node sequencer is specified.
  • CircularLayout: Fixed bug that in some cases produced self-intersecting edges when edge bundling is enabled.
  • EdgeRouter: Fixed rare error that was triggered when having multiple target port candidates, where at least one must be fixed. Furthermore, to trigger the exception it is necessary that the path search algorithm tries to perform an early exit due to maximum duration restrictions or a stop request via AbortHandler.

Incompatible Changes

Breaking API Changes

  • LabelStyleDecorationInstaller, NodeStyleDecorationInstaller and SvgExport: Renamed property margin to margins.
  • Renamed method IconLabelStyleRenderer.getInnerStyleInsets to getWrappedStyleInsets.
  • Renamed the following protected methods to enable separate overrides in custom subclasses
    • GraphInputMode.marqueeSelect(IInputModeContext, Rect) to onMarqueeSelect
    • GraphInputMode.marqueeSelect(IInputModeContext, Rect, IEnumerable, Predicate) to onMarqueeSelectItems
    • NavigationInputMode.setCurrentItem(GraphComponent, IModelItem) to onSetCurrentItem
    • GraphClipboard.copy(IGraph, Predicate, IGraph, INode, Callback) to onCopy
    • GraphClipboard.paste(IGraph, Predicate, IGraph, INode, Callback, Predicate) to onPaste
  • Removed property InteractiveOrganicLayout.automaticStructureUpdate since this couldn't be used with LayoutExecutor or LayoutGraphAdapter.
  • Removed property CanvasComponent.enabled since it had the same effect as the autoDrag property.
  • Removed property CanvasComponent.autoMouseWheelZoom since it had no effect anyway. It was replaced by the mouseWheelBehavior property in release 2.0.
  • Removed property CanvasComponent.editable since it had no effect on almost all input modes anyway. The preferred way to disable editing is using GraphViewerInputMode or GraphEditorInputMode with suitable settings.
  • Removed unused enum yfiles.router.ChannelOrientation.
  • VisualCachingPolicy.ALWAYS replaces both VisualCachingPolicy.WEAK and VisualCachingPolicy.STRONG. These two had the same effect.
  • Removed optional constructor initialization parameters of type Object. Affected are the tag / styleTag constructor parameters of DefaultGraph and the template styles.
  • Changed some API members of the yfiles.graphml.Property type which is very rarely used in customer code.

Behavior Changes

  • IGraph and its implementations now always throw an ArgumentError for operations on elements which are not in the graph (was: ArgumentError, ArgumentOutOfRangeError, IllegalOperationError).
  • IGraph and its implementations now always throw an IllegalOperationError for operations which are not allowed (was: ArgumentError).
  • GraphML parsing: For properties which are renamed using the GraphMLAttribute only the explicitly set name is accepted. The property's actual name is no longer accepted as fallback.
  • HierarchicLayout may now place source/target labels in layers that contain common nodes. In previous versions such labels were always placed in separate layers which often led to less compact drawings with superfluous bends.
  • SingleCycleLayout.nodeSequencer now allows to specify null to return to the default sequencer. In previous versions, specifying null led to an error.
  • HierarchicLayout: Geometry information registered with data providers with keys HierarchicLayout.ALTERNATIVE_GROUP_BOUNDS_DP_KEY and HierarchicLayout.ALTERNATIVE_EDGE_PATH_DP_KEY is now automatically rotated according to the specified layout orientation. This fixes unstable from-sketch behavior in incremental layout mode when using an orientation other than top-to-bottom.

yFiles for HTML 2.0.0.1 - Changes Since 2.0

This is the first bugfix release for 2.0. It focuses on new demos, performance improvements, and bugfixes. It contains one minor incompatible API change and two incompatible interaction behavior changes.

Most Notable Changes

Better Layout Performance
Performance improvements for most layout and analysis algorithms. Most layout algorithms are now between 15% and 70% faster than their 1.3 version counterparts. Speed-up varies depending on graph structure, settings, and graph size.
Better GraphML I/O Performance
Up to 80% improved writing performance and 25% improved reading performance in bad-case scenarios.
Style Decorators Demo
This demo shows decorator styles for nodes, labels, and edges that add a visual decoration to a base visualization, for example a status icon to a rectangular shape.
Incremental Hierarchic Demo
This demo shows the incremental mode of the hierarchic layout algorithm.
HTML Popup Demo
This demo shows pop-up panels that display additional information about a clicked node or edge. In general, such panels can contain any HTML elements.

Improvements

  • The class framework now also understands classes generated by the TypeScript compiler if the compiler target is ES5.
  • SvgVisual now has two static members for helping with the efficient implementation of SVG transform manipulations: SvgVisual.setTranslate and SvgVisual.setScale
  • The performance of StripeControlStyle was improved substantially.
  • The AMD meta modules now only ever load the effective modules, resulting in less requests made for AMD loading.
  • The simple Promise shim included with the library now allows for chaining .catch calls.
  • The yfiles-typeinfo.js debug helper code now adds the yfiles.debug() API.
  • On MacOS, the multi-selection feature, the pan viewport feature, and the force bend creation feature now also accept Command mouse clicks as an alternative gesture. This avoids conflicts with the default gesture to open the context menu, namely Ctrl mouse clicks.
  • The default keyboard shortcuts for MacOS devices have been updated to follow MacOS conventions. Where previously the Ctrl key needed to be pressed for many of the default keyboard shortcuts, now the Command key will be used.
  • The default keyboard shortcuts for cut, copy, and paste have been updated to also react to Shift+Delete, Ctrl+Insert, and Shift+Insert respectively. The exact behavior can be fine-tuned via resource customization.

Demo Improvements

  • The require.js sample implementation for the demos now properly understands the AMD paths configuration known from requirejs.org's implementation.
  • In most demos, all JavaScript initialization code was moved to the main JavaScript file from the index.html file. Note that if our simple require implementation is used for loading the demos, the improved version of the same file is required now, too.
  • The demos now show a friendly warning if viewed in a browser that does not natively support ES6. It explains how to run the required pre-compilation step, first.
  • The performance of the graph item styles used in the demos was improved.
  • Visualization of self-loops of the demo edge style was improved.
  • The layout style demo now show-cases the integrated edge-labeling feature for tree layouts.
  • Many more fixes and improvements in the demos.

Bugfixes

  • Loading a new GraphML file could result in an error when loading was initiated from inside a folder node.
  • Table columns were read in the reverse order from GraphML. The file content itself is correct since GraphML writing was not affected.
  • Subclassing yFiles types did not work properly for the second level of subclasses.
  • Subclassing a yFiles type with abstract members and implementing interfaces at the same time did not work.
  • Using folding on a filtered graph could result in errors, for example after calculating an automatic layout.
  • The TypeScript demo did not properly compile if tsc's noImplicitAny option was set.
  • GraphML serialization of ArcEdgeStyle did not work properly.
  • The JavaScript code completion file in ide-support did not properly mark constructors for generic types, possibly resulting in warnings in IDEs.
  • The simple Promise shim included with the library could throw an error during promise resolution.
  • Calling contains(p:Point) on an IRectangle other than a Rect did not work.
  • The simple constructor of MapperInputHandler did not set the value type correctly.
  • CircularLayout produced self-intersecting edges when edge bundling was enabled.

Incompatible Changes

  • The three static helper methods on GraphItemTypes were poorly named and the method contains did not behave according to the documentation. contains is now called enumerableContainsTypes, notContains is now called enumerableNotContainsTypes, and is is now called itemIsOfTypes.
  • On MacOS systems where previously the Ctrl key needed to be pressed for many of the default keyboard shortcuts, now the Command key will be used instead. This behavior can be fine-tuned via resource customization.
  • Default keyboard shortcuts for cut, copy, and paste now also react to Shift+Delete, Ctrl+Insert, and Shift+Insert respectively. This behavior can be fine-tuned via resource customization.