The newest available bugfix and maintenance release of yFiles for HTML is version 220.127.116.11.
FixPortLocationStageDataclass that allows to conveniently define the port constraints that are considered by the
OrganicLayoutData.targetGroupIdscan be used to specify edge grouping.
SvgExportclass silently failed without exporting anything if the text of a label contained emojis or some other unusual Unicode characters.
CanvasControl.animateScrollCommandsproperty enabled no longer changes the zoom level.
EdgeStyleDecorationsInstallerclass now properly displays decorations for edges between group nodes and their descendants when displayed in view coordinates.
IAnimation.createSequentialAnimationmethod no longer throws a
TypeErrordue to '
Object.binarySearchis not a function'.
HierarchicLayoutclass now correctly handles port labels with zero height/width. Previously, such labels may have caused very large distances between some nodes.
HierarchicLayoutclass sometimes threw an exception for input graphs that contained incremental elements in combination with groups.
HierarchicLayoutclass now prevents intersections between labels and the horizontal grid lines of a
HierarchicLayoutclass now properly handles input graphs with source/target port labels and where a subset of nodes has
NodeHalos. Previously, such inputs could cause an exception.
HierarchicLayoutclass does no longer violate fixed
PortCandidatesin cases where also critical edges (
HierarchicLayoutData.criticalEdgePriorities) and edges connecting to group nodes are given.
HierarchicLayoutclass now produces less superfluous crossings if there are same-layer edges with
HierarchicLayoutclass no longer produces non-orthogonal segments if the graph has port labels and the edge grouping feature is enabled.
HierarchicLayoutclass now correctly calculates the required length of straight-line same-layer edges. Previously, the calculated length could have exceeded the required length by the value of the
HierarchicLayoutclass now places sloped segments of grouped octilinear edges such that they are perfectly overlapping each other. Previously, it could happen that segments were slightly displaced with respect to each other.
EdgeRouterclass no longer throws an exception for some inputs containing edges with intermediate routing points.
EdgeRouterclass now correctly handles cases where the maximum duration is exceeded and where previously an exception was triggered.
EdgeRouterclass for cases where a large number of fixed and overlapping edge segments exist. Previously, the search could become very slow in such scenarios.
RecursiveGroupLayout, the values of the properties
computedPositionof the classes
RowDescriptorare now correctly set after the layout if
EdgeRouteris the corresponding
ComponentLayoutclass now correctly handles input graphs with user-specified components that contain nodes with
nullas their component ID (see property
ComponentLayoutData.componentIds). Previously, such inputs may have caused an exception.
CompactNodePlacerclass now correctly considers the specified values for the
CompactNodePlacerclass now correctly handles inputs where the tree root is marked as assistant node, see
CompactNodePlacerclass now correctly handles input graphs that contain assistant nodes and given placement strategies (see the
CompactNodePlacerclass now produces more compact results for some cases where it previously generated larger, less compact results.
CompactNodePlacerclass no longer throws an exception for some inputs with specified strategy memento information.
OrthogonalLayoutdoes no longer throw an exception if a graph is almost a tree and its
treeStyleproperty is set to
TreeLayoutStyle.INTEGRATEDand a fixed
OrganicLayoutclass now produces deterministic results for group nodes if the property
OrganicRemoveOverlapsStageclass no longer gets stuck in an infinite loop in some rare cases.
This is the 5th bugfix release for yFiles for HTML 2.1. It corrects just one issue that prevented backwards compatibility with old browsers.
CLI, Rollup when 'tree shaking' is enabled, and Uglify when the 'pure_getters' setting is enabled. We now check whether the code has been wrecked and show a corresponding warning in the console. For more details, see the Known Issues document (of your local yFiles for HTML installation) and the corresponding angular-cli issue.
LayoutExecutornow automatically enables and disables a wait input mode for the
GraphComponentduring layout and subsequent animation. This can be turned off with the new
GraphModelManager: Fixed an error that occurred when any of the
descriptorproperties were set while the
GraphModelManagerinstance was not yet associated with an
PortRelocationHandle.GHOST_VISUALIZATION_STROKE_KEYconstant was not excluded from obfuscation.
graphparameter of the constructor of the
PortRelocationHandleProviderclass can now be
null. This was already the documented behavior.
ICanvasObjectinstalled by the
RectangleIndicatorInstallerclass were wrong. This impacted the performance as e.g. some node selection highlights were updated although they were not in the viewport and resulted in unnecessary large content rectangles.
IHitTestableimplementation of the
DefaultPortCandidateDescriptorclass used incorrect coordinates.
MouseHoverInputMode.durationproperty had no effect.
ItemHoverInputModeclass now updates the hovered item upon mouse drag events, too. This was already the documented behavior. Previously, the hovered item was only updated on mouse move events.
ItemHoverInputModeclass now removes the hovered item upon
CreateEdgeInputModeclass doesn't show port candidates anymore if bend creation is enforced (by pressing
CTRLkey during edge creation).
KeyboardInputModewere gone after re-installation of the mode.
INodeInsetsProviderimplementations which can be retrieved from
InteriorStretchLabelModelnow correctly sum up the space required by overlapping labels.
TableNodeStyleis rendered with the
tableproperty set to
GraphBuilder.updateGraphmethod properly builds the graph now even if
buildGraphwas not called before.
HierarchicLayoutclass placed source and target edge labels at the wrong location when integrated edge labeling was enabled and if there were either critical edges or the property
HierarchicLayoutclass sometimes threw an error for input graphs that contained fixed elements in combination with both swimlanes and groups.
HierarchicLayoutis no longer stuck in an endless loop if a sub-component with a nested layout algorithm that again contains a
HierarchicLayoutalgorithm is defined.
OrganicLayoutclass now always correctly moves the nodes for inputs with scope set to
MAINLY_SUBSETand with specified output restrictions.
TreeLayoutclass now correctly passes on exceptions that occurred during the layout calculation. Previously, they were sometimes caught without proper handling.
SeriesParallelLayoutclass can now handle input graphs that contain nodes with very large location coordinates (e.g. largest possible floating-point value) when the
fromSketchModeproperty is disabled.
RadialLayoutclass does no longer throw an error if there is an
IDataProviderregistered with the key
RecursiveGroupLayoutclass now correctly considers
PortCandidatesof self-loops where both end points are restricted to the same node side.
GenericLabelingmay have caused an error for some input graphs that contain edges with zero length segments and labels associated with a free edge label model.
EdgeRouternow avoids edge-to-edge distance violations for segments directly connecting at a node if there exists a cheaper route that, e.g., introduces a bend (which costs less by default). The effect of this issue was mainly observable in cases where the edge-to-edge distance was set to a rather large value.
EdgeRouternow avoids some unnecessary bends that were previously created for edges that needed to pass group node borders and in conjunction with rather large
EdgeRouterclass now keeps paths with self-crossings belonging to fixed edges. Previously, the self-crossings were removed, i.e. paths of fixed edges were changed.
PolylineLayoutStageclass now keeps collinear bends of fixed edges.
JSONReaderclasses show how to write and read a graph to/from JSON. They supersede the
GraphToJSONclass and are more universal to support more use cases.
CreateEdgeInputModenow always creates dummy ports during a gesture, instead of temporarily reusing real ports if available. This makes it possible to change, e.g. the dummy edge's source port's style during the gesture.".
PlaceNodesAtBarycenterStageDataclass allows to conveniently define the nodes that should be affected by
HierarchicLayoutnow requires less memory for graphs with sequence constraints.
HierarchicLayoutno longer inserts superfluous bends for edges between group nodes if the input graph contains grouped edges.
GraphModelManagerno longer removes the port visualizations if
PortLayerPolicy.AT_OWNERis used and the
SmartEdgeLabelModelcentered all labels on an edge that overlapped with a segment of the edge or were placed directly next to it.
GraphClipboard: The contents of a folder node were not copied if the folder was copied from within a group view, i.e. if the user entered a group node. In the worst case, this might have frozen the complete application.
GenericLabelModelserialization: Fixed cyclic reference in GraphML which could happen while serializing a
GenericLabelModelwith a parameter with associated descriptor.
IArrowinstances that are returned by the
HierarchicLayoutnow correctly considers fixed nodes with layering constraints. Previously, there were some rare cases where such inputs caused infinite looping issues.
OrthogonalLayoutdoes no longer throw an error for some input graphs when its
treeStyleproperty is set to
chainStyleproperty is set to a wrapped style.
OrthogonalLayoutno longer throws an error if its
cycleStyleproperty is set to a specific style and the input graph only consists of a single cycle.
EdgeRouternow always considers the
PortCandidatesfor edges grouped with fixed edges.
EdgeRouternow keeps collinear bends of fixed edges.
EdgeRouterno longer crashes when defining exactly two equal intermediate routing points for an edge.
EdgeRouterthrew an error when the list of intermediate points for an edge consisted of exactly two equal points.
BusRouterno longer produces non-deterministic results, i.e. different results for consecutive runs on the same input. Previously, this was possible in rare cases.
TabularLayoutno longer crashes when applying an instance of it to a single-node graph after that same instance was previously applied to a larger graph.
GenericLabelingnow always prefers
LabelCandidateswith higher profit values over others with lower profit. Previously, this sometimes happened even though both candidates did not intersect with other elements.
GenericLabelingdoes no longer assume that all
LabelCandidatesassociated to a label have the same size. Previously, this caused unexpected labeling results if custom candidates with different sizes were given.
MultiPageLayoutnow correctly considers the maximum page size for tree layouts.
FamilyTreeLayoutnow correctly considers the preferred family member order.
PreferredPlacementDescriptor.equalsmethod incorrectly reported instances with different angles and distances as equal.
HierarchicLayoutto group edges. Grouped edges share common segments, thus making the layout more understandable and cleaner.
RecursiveGroupLayoutin combination with
HierarchicLayoutpresents the option to align edges that are split at a group's border. This leads to better routes for edges between groups and allows edges that connect ports at a group's border to the nodes of the group.
GraphModelManagerclass to control the order in which graph elements are rendered.
TreeLayoutData.criticalEdgePrioritiesproperty can be used to specify critical edges.
INodeparameter of the
NavigationInputMode.enterGroupmethod is now optional. If it is omitted or
nullthe whole graph will be revealed.
CanvasControl.createInputModeContextmethod is now public instead of protected.
RectD.toMutableRectanglemethods now return a
MutableRectangleinstead of a
CreateEdgeInputMode.doStartEdgeCreationmethod can be used to define the initial location that shall be used to find a target node.
TypeErrorin these browsers. We now avoid the problematic code.
IE7766782for a problem in Internet Explorer with
GWTwas not applied to all problematic usages of
instanceofchecks for arrays could have been wrong in rare cases, resulting in different kinds of subsequent errors.
Workaroundsclass now correctly documents that it is exported by the
CreateEdgeInputModedid not show port candidates after re-installation of the input mode.
CreateEdgeInputModedidn't always update the highlight of possible source port candidates when its
showPortCandidatesproperty was configured to show the source port candidates.
GraphEditorInputMode.moveUnselectedInputModeproperty moved the bottom-most item at the cursor position instead of the top-most. This is most apparent when trying to move a child node of a group.
ClickInputModeprovided wrong click locations in the
Clickevent if a
MouseEventTypes.CLICKevent without preceding
MouseEventTypes.DOWNevent was processed.
MouseHoverInputMode.toolTipproperty was changed while a tool tip was visible, that tool tip was shown forever.
ItemHoverInputModenow resets the hovered item when moving the mouse out of the control.
LassoSelectionInputModeclass was not updated properly during zooming.
PolylineEdgeStylenow takes arrow heads into account for visibility checks.
EdgePathLabelModelplaced the label on the wrong side for
EdgeSides.BELOW_EDGEif the distance and offset was both 0.
TextWrapConverterfor template styles threw a
TypeErrorif the resolved value was not a string (e.g. for numbers or
null). Now, it handles
undefinedlike an empty string and converts non-string values to string.
maximumSizeparameter of the
TextRenderSupport.addTextmethod is now optional, and consequently handles
nullarguments as it was already documented.
HierarchicLayoutnow produces less bends if the edges should be routed on a grid and the grid reference point is not
HierarchicLayoutdid sometimes not correctly consider the edge thickness for grouped edge segments. Even though there would have been space for a thick edge it was placed too close to other elements.
HierarchicLayoutnow produces more symmetric results for grouped edges if property
HierarchicLayoutthrew an exception for layout mode
OrthogonalLayoutthat may have caused infinite looping for grouped input graphs.
OrganicLayoutproduced an error if the
CycleSubstructureStyleproperty was set to
CircularLayoutdoes now correctly consider the
EdgeBundleDescriptor.bundledproperty for edges between different partitions. Previously, when at least one of these edges had the
Bundledproperty enabled, all of them were bundled, ignoring the property value of the other edges.
TreeMapLayoutthat may have caused
NaN-coordinates or infinite looping for input graphs that are non-directed trees.
EdgeRouternow produces better routes if there are edges with intermediate routing points, see property
GraphLayoutLineWrappernow produces more compact results.
GraphLayoutLineWrapperproduced drawings with large empty space between lines.
In addition, there are new tutorial videos available online. We'll add more videos in the future.
IGraph.applyLayoutmethods which are only available if the
view-layout-bridgemodule is loaded.
EdgeRouterclass now calculates a better routing for edges between group nodes and their descendants in the case that the routing is aborted via
AbortHandleror when the maximum duration time limit is up. Previously, such edges might not have been handled in this case, whereas now they always get a simple but valid orthogonal route.
HierarchicLayoutclass now respects the sequence and layering constraints between subcomponents. Previously, such constraints were ignored.
CanvasComponent.dragTime. Previously, the value of the
CanvasComponent.longPressTimeproperty was used instead.
IOrientedRectangle.orientedRectangleCenterproperty didn't return the correct center if the width or height of the rectangle was equal to 0.
SmartEdgeLabelModelthat is owned by an edge without visible path no longer throws an exception.
DefaultObservableCollection.clearmethod has been corrected. Previously, it always threw an error.
yfiles-focusedfor template-based styles were not always applied correctly at element creation time.
SelectionIndicatorManagerno longer results in an error.
CollapsibleNodeStyleDecoratorRenderer.addToggleExpansionStateCommandmethod was used in a custom group node style.
EdgeRouter, an error occurred when there were intermediate routing points and the path search got aborted (e.g. because of maximum duration time limit).
ShortestPaths, an error occurred when the a-star algorithm was applied to a graph with non-monotonic heuristic costs.
HierarchicLayout, an error was triggered when a
yfiles.algorithms.DataProviderAdapterthat does not override the
DataProvider.getmethod was registered with key
GivenLayersLayerer.LAYER_ID_KEY. This issue only appeared in conjunction with subcomponents.
GraphToJSONconverter correctly parses bend locations and port locations now.
IGraph.setNodeLayoutmethod and the various methods to create a node now throw an
ArgumentErrorif the layout rectangle contains one or more
NaNvalues. Similarly, the
IGraph.setBendLocationand the various methods to add a bend to an edge now throw an
ArgumentErrorif the location point contains one or two
ContextMenuInputMode.populateMenuevent is now only fired if the current input mode state allows opening the context menu. Previously, the event was fired before the input mode had even checked whether another active input mode would prevent the opening of the menu.
DragDropEffects.NONE. This was always the intended default value.