From 860925b8fa0b961dbae9f1c5d5b6c7940da85165 Mon Sep 17 00:00:00 2001 From: mcyph <20507948+mcyph@users.noreply.github.com> Date: Sun, 21 Mar 2021 12:24:29 +1100 Subject: [PATCH] large batch convert `var` to `let` --- .../files/editor/mxDefaultKeyHandler-js.html | 4 +- .../files/editor/mxDefaultPopupMenu-js.html | 2 +- .../files/editor/mxDefaultToolbar-js.html | 6 +- docs/js-api/files/editor/mxEditor-js.html | 42 +- .../files/handler/mxCellHighlight-js.html | 4 +- .../js-api/files/handler/mxCellMarker-js.html | 4 +- .../files/handler/mxCellTracker-js.html | 4 +- .../files/handler/mxConnectionHandler-js.html | 16 +- .../files/handler/mxConstraintHandler-js.html | 2 +- .../files/handler/mxEdgeHandler-js.html | 2 +- .../handler/mxEdgeSegmentHandler-js.html | 2 +- .../files/handler/mxElbowEdgeHandler-js.html | 2 +- .../files/handler/mxGraphHandler-js.html | 4 +- docs/js-api/files/handler/mxHandle-js.html | 2 +- .../js-api/files/handler/mxKeyHandler-js.html | 4 +- .../files/handler/mxPanningHandler-js.html | 2 +- .../files/handler/mxPopupMenuHandler-js.html | 2 +- .../js-api/files/handler/mxRubberband-js.html | 4 +- .../handler/mxSelectionCellsHandler-js.html | 2 +- .../files/handler/mxTooltipHandler-js.html | 2 +- .../files/handler/mxVertexHandler-js.html | 18 +- docs/js-api/files/index-txt.html | 16 +- docs/js-api/files/io/mxCellCodec-js.html | 2 +- .../files/io/mxChildChangeCodec-js.html | 2 +- docs/js-api/files/io/mxCodec-js.html | 32 +- docs/js-api/files/io/mxCodecRegistry-js.html | 4 +- .../files/io/mxDefaultKeyHandlerCodec-js.html | 2 +- .../files/io/mxDefaultPopupMenuCodec-js.html | 2 +- .../files/io/mxDefaultToolbarCodec-js.html | 4 +- docs/js-api/files/io/mxEditorCodec-js.html | 2 +- .../files/io/mxGenericChangeCodec-js.html | 6 +- docs/js-api/files/io/mxGraphCodec-js.html | 2 +- docs/js-api/files/io/mxGraphViewCodec-js.html | 2 +- docs/js-api/files/io/mxModelCodec-js.html | 2 +- docs/js-api/files/io/mxObjectCodec-js.html | 14 +- .../js-api/files/io/mxRootChangeCodec-js.html | 2 +- .../js-api/files/io/mxStylesheetCodec-js.html | 2 +- .../files/io/mxTerminalChangeCodec-js.html | 2 +- .../mxGraphAbstractHierarchyCell-js.html | 2 +- .../model/mxGraphHierarchyEdge-js.html | 2 +- .../model/mxGraphHierarchyModel-js.html | 2 +- .../model/mxGraphHierarchyNode-js.html | 2 +- .../model/mxSwimlaneModel-js.html | 2 +- .../hierarchical/mxHierarchicalLayout-js.html | 2 +- .../hierarchical/mxSwimlaneLayout-js.html | 2 +- .../stage/mxCoordinateAssignment-js.html | 2 +- .../stage/mxHierarchicalLayoutStage-js.html | 2 +- .../mxMedianHybridCrossingReduction-js.html | 2 +- .../stage/mxMinimumCycleRemover-js.html | 2 +- .../stage/mxSwimlaneOrdering-js.html | 2 +- .../files/layout/mxCircleLayout-js.html | 4 +- .../files/layout/mxCompactTreeLayout-js.html | 4 +- .../files/layout/mxCompositeLayout-js.html | 8 +- .../files/layout/mxEdgeLabelLayout-js.html | 4 +- .../files/layout/mxFastOrganicLayout-js.html | 4 +- .../js-api/files/layout/mxGraphLayout-js.html | 4 +- .../files/layout/mxParallelEdgeLayout-js.html | 14 +- .../files/layout/mxPartitionLayout-js.html | 4 +- .../files/layout/mxRadialTreeLayout-js.html | 4 +- .../js-api/files/layout/mxStackLayout-js.html | 4 +- docs/js-api/files/model/mxCell-js.html | 10 +- docs/js-api/files/model/mxCellPath-js.html | 2 +- docs/js-api/files/model/mxGeometry-js.html | 2 +- docs/js-api/files/model/mxGraphModel-js.html | 44 +- docs/js-api/files/mxClient-js.html | 10 +- docs/js-api/files/shape/mxActor-js.html | 2 +- docs/js-api/files/shape/mxArrow-js.html | 2 +- .../files/shape/mxArrowConnector-js.html | 2 +- docs/js-api/files/shape/mxCloud-js.html | 2 +- docs/js-api/files/shape/mxConnector-js.html | 2 +- docs/js-api/files/shape/mxCylinder-js.html | 2 +- .../files/shape/mxDoubleEllipse-js.html | 4 +- docs/js-api/files/shape/mxEllipse-js.html | 2 +- docs/js-api/files/shape/mxHexagon-js.html | 2 +- docs/js-api/files/shape/mxImageShape-js.html | 2 +- docs/js-api/files/shape/mxLabel-js.html | 2 +- docs/js-api/files/shape/mxLine-js.html | 2 +- docs/js-api/files/shape/mxMarker-js.html | 2 +- docs/js-api/files/shape/mxPolyline-js.html | 2 +- .../files/shape/mxRectangleShape-js.html | 2 +- docs/js-api/files/shape/mxRhombus-js.html | 2 +- docs/js-api/files/shape/mxShape-js.html | 4 +- docs/js-api/files/shape/mxStencil-js.html | 2 +- .../files/shape/mxStencilRegistry-js.html | 2 +- docs/js-api/files/shape/mxSwimlane-js.html | 2 +- docs/js-api/files/shape/mxText-js.html | 2 +- docs/js-api/files/shape/mxTriangle-js.html | 2 +- .../files/util/mxAbstractCanvas2D-js.html | 2 +- docs/js-api/files/util/mxAnimation-js.html | 2 +- .../files/util/mxAutoSaveManager-js.html | 4 +- docs/js-api/files/util/mxClipboard-js.html | 16 +- docs/js-api/files/util/mxConstants-js.html | 2 +- docs/js-api/files/util/mxDictionary-js.html | 2 +- docs/js-api/files/util/mxDivResizer-js.html | 4 +- docs/js-api/files/util/mxDragSource-js.html | 4 +- docs/js-api/files/util/mxEffects-js.html | 4 +- docs/js-api/files/util/mxEvent-js.html | 2 +- docs/js-api/files/util/mxEventObject-js.html | 2 +- docs/js-api/files/util/mxEventSource-js.html | 2 +- docs/js-api/files/util/mxForm-js.html | 2 +- docs/js-api/files/util/mxGuide-js.html | 2 +- docs/js-api/files/util/mxImage-js.html | 2 +- docs/js-api/files/util/mxImageBundle-js.html | 4 +- docs/js-api/files/util/mxImageExport-js.html | 18 +- docs/js-api/files/util/mxLog-js.html | 2 +- docs/js-api/files/util/mxMorphing-js.html | 6 +- docs/js-api/files/util/mxMouseEvent-js.html | 2 +- .../files/util/mxObjectIdentity-js.html | 2 +- .../files/util/mxPanningManager-js.html | 2 +- docs/js-api/files/util/mxPoint-js.html | 2 +- docs/js-api/files/util/mxPopupMenu-js.html | 4 +- docs/js-api/files/util/mxRectangle-js.html | 2 +- docs/js-api/files/util/mxResources-js.html | 4 +- docs/js-api/files/util/mxSvgCanvas2D-js.html | 10 +- docs/js-api/files/util/mxToolbar-js.html | 2 +- docs/js-api/files/util/mxUndoManager-js.html | 6 +- docs/js-api/files/util/mxUndoableEdit-js.html | 6 +- docs/js-api/files/util/mxUrlConverter-js.html | 2 +- docs/js-api/files/util/mxUtils-js.html | 32 +- docs/js-api/files/util/mxVmlCanvas2D-js.html | 2 +- docs/js-api/files/util/mxWindow-js.html | 22 +- docs/js-api/files/util/mxXmlCanvas2D-js.html | 2 +- docs/js-api/files/util/mxXmlRequest-js.html | 14 +- docs/js-api/files/view/mxCellEditor-js.html | 8 +- docs/js-api/files/view/mxCellOverlay-js.html | 10 +- docs/js-api/files/view/mxCellRenderer-js.html | 2 +- docs/js-api/files/view/mxCellState-js.html | 4 +- .../files/view/mxCellStatePreview-js.html | 2 +- .../files/view/mxConnectionConstraint-js.html | 2 +- docs/js-api/files/view/mxEdgeStyle-js.html | 8 +- docs/js-api/files/view/mxGraph-js.html | 142 +- .../files/view/mxGraphSelectionModel-js.html | 6 +- docs/js-api/files/view/mxGraphView-js.html | 14 +- .../js-api/files/view/mxLayoutManager-js.html | 4 +- docs/js-api/files/view/mxMultiplicity-js.html | 2 +- docs/js-api/files/view/mxOutline-js.html | 12 +- docs/js-api/files/view/mxPerimeter-js.html | 8 +- docs/js-api/files/view/mxPrintPreview-js.html | 22 +- .../js-api/files/view/mxStyleRegistry-js.html | 2 +- docs/js-api/files/view/mxStylesheet-js.html | 8 +- .../files/view/mxSwimlaneManager-js.html | 2 +- .../files/view/mxTemporaryCellStates-js.html | 2 +- docs/js-api/index/Classes.html | 2 +- docs/js-api/index/Classes2.html | 2 +- docs/js-api/index/Cookies.html | 2 +- docs/js-api/index/Events.html | 2 +- docs/js-api/index/Files.html | 2 +- docs/js-api/index/Functions.html | 2 +- docs/js-api/index/Functions10.html | 2 +- docs/js-api/index/Functions11.html | 4 +- docs/js-api/index/Functions12.html | 2 +- docs/js-api/index/Functions13.html | 2 +- docs/js-api/index/Functions14.html | 2 +- docs/js-api/index/Functions15.html | 2 +- docs/js-api/index/Functions16.html | 2 +- docs/js-api/index/Functions17.html | 2 +- docs/js-api/index/Functions18.html | 2 +- docs/js-api/index/Functions19.html | 2 +- docs/js-api/index/Functions2.html | 2 +- docs/js-api/index/Functions3.html | 2 +- docs/js-api/index/Functions4.html | 2 +- docs/js-api/index/Functions5.html | 2 +- docs/js-api/index/Functions6.html | 2 +- docs/js-api/index/Functions7.html | 2 +- docs/js-api/index/Functions8.html | 2 +- docs/js-api/index/Functions9.html | 2 +- docs/js-api/index/General.html | 2 +- docs/js-api/index/General10.html | 2 +- docs/js-api/index/General11.html | 2 +- docs/js-api/index/General12.html | 4 +- docs/js-api/index/General13.html | 2 +- docs/js-api/index/General14.html | 2 +- docs/js-api/index/General15.html | 2 +- docs/js-api/index/General16.html | 2 +- docs/js-api/index/General17.html | 2 +- docs/js-api/index/General18.html | 2 +- docs/js-api/index/General19.html | 2 +- docs/js-api/index/General2.html | 2 +- docs/js-api/index/General20.html | 2 +- docs/js-api/index/General21.html | 2 +- docs/js-api/index/General3.html | 2 +- docs/js-api/index/General4.html | 2 +- docs/js-api/index/General5.html | 2 +- docs/js-api/index/General6.html | 2 +- docs/js-api/index/General7.html | 2 +- docs/js-api/index/General8.html | 2 +- docs/js-api/index/General9.html | 2 +- docs/js-api/index/Variables.html | 2 +- docs/js-api/index/Variables10.html | 2 +- docs/js-api/index/Variables11.html | 2 +- docs/js-api/index/Variables12.html | 2 +- docs/js-api/index/Variables13.html | 2 +- docs/js-api/index/Variables14.html | 2 +- docs/js-api/index/Variables15.html | 2 +- docs/js-api/index/Variables16.html | 2 +- docs/js-api/index/Variables17.html | 2 +- docs/js-api/index/Variables2.html | 2 +- docs/js-api/index/Variables3.html | 2 +- docs/js-api/index/Variables4.html | 2 +- docs/js-api/index/Variables5.html | 2 +- docs/js-api/index/Variables6.html | 2 +- docs/js-api/index/Variables7.html | 2 +- docs/js-api/index/Variables8.html | 2 +- docs/js-api/index/Variables9.html | 2 +- docs/js-api/javascript/main.js | 66 +- docs/js-api/javascript/prettify.js | 390 +-- docs/js-api/javascript/searchdata.js | 2 +- docs/js-api/search/ClassesM.html | 2 +- docs/js-api/search/ClassesW.html | 2 +- docs/js-api/search/CookiesM.html | 2 +- docs/js-api/search/EventsA.html | 2 +- docs/js-api/search/EventsB.html | 2 +- docs/js-api/search/EventsC.html | 2 +- docs/js-api/search/EventsD.html | 2 +- docs/js-api/search/EventsE.html | 2 +- docs/js-api/search/EventsF.html | 2 +- docs/js-api/search/EventsG.html | 2 +- docs/js-api/search/EventsH.html | 2 +- docs/js-api/search/EventsL.html | 2 +- docs/js-api/search/EventsM.html | 2 +- docs/js-api/search/EventsN.html | 2 +- docs/js-api/search/EventsO.html | 2 +- docs/js-api/search/EventsP.html | 2 +- docs/js-api/search/EventsR.html | 2 +- docs/js-api/search/EventsS.html | 2 +- docs/js-api/search/EventsT.html | 2 +- docs/js-api/search/EventsU.html | 2 +- docs/js-api/search/FilesA.html | 2 +- docs/js-api/search/FilesM.html | 2 +- docs/js-api/search/FunctionsA.html | 2 +- docs/js-api/search/FunctionsB.html | 2 +- docs/js-api/search/FunctionsC.html | 2 +- docs/js-api/search/FunctionsD.html | 2 +- docs/js-api/search/FunctionsE.html | 2 +- docs/js-api/search/FunctionsF.html | 2 +- docs/js-api/search/FunctionsG.html | 2 +- docs/js-api/search/FunctionsH.html | 2 +- docs/js-api/search/FunctionsI.html | 2 +- docs/js-api/search/FunctionsJ.html | 2 +- docs/js-api/search/FunctionsK.html | 2 +- docs/js-api/search/FunctionsL.html | 2 +- docs/js-api/search/FunctionsM.html | 2 +- docs/js-api/search/FunctionsN.html | 2 +- docs/js-api/search/FunctionsO.html | 2 +- docs/js-api/search/FunctionsP.html | 2 +- docs/js-api/search/FunctionsQ.html | 2 +- docs/js-api/search/FunctionsR.html | 2 +- docs/js-api/search/FunctionsS.html | 2 +- docs/js-api/search/FunctionsT.html | 2 +- docs/js-api/search/FunctionsU.html | 2 +- docs/js-api/search/FunctionsV.html | 2 +- docs/js-api/search/FunctionsW.html | 2 +- docs/js-api/search/FunctionsZ.html | 2 +- docs/js-api/search/GeneralA.html | 2 +- docs/js-api/search/GeneralB.html | 2 +- docs/js-api/search/GeneralC.html | 2 +- docs/js-api/search/GeneralD.html | 2 +- docs/js-api/search/GeneralE.html | 2 +- docs/js-api/search/GeneralF.html | 2 +- docs/js-api/search/GeneralG.html | 2 +- docs/js-api/search/GeneralH.html | 2 +- docs/js-api/search/GeneralI.html | 2 +- docs/js-api/search/GeneralJ.html | 2 +- docs/js-api/search/GeneralK.html | 2 +- docs/js-api/search/GeneralL.html | 2 +- docs/js-api/search/GeneralM.html | 2 +- docs/js-api/search/GeneralN.html | 2 +- docs/js-api/search/GeneralO.html | 2 +- docs/js-api/search/GeneralP.html | 2 +- docs/js-api/search/GeneralQ.html | 2 +- docs/js-api/search/GeneralR.html | 2 +- docs/js-api/search/GeneralS.html | 2 +- docs/js-api/search/GeneralT.html | 2 +- docs/js-api/search/GeneralU.html | 2 +- docs/js-api/search/GeneralV.html | 2 +- docs/js-api/search/GeneralW.html | 2 +- docs/js-api/search/GeneralX.html | 2 +- docs/js-api/search/GeneralY.html | 2 +- docs/js-api/search/GeneralZ.html | 2 +- docs/js-api/search/VariablesA.html | 2 +- docs/js-api/search/VariablesB.html | 2 +- docs/js-api/search/VariablesC.html | 2 +- docs/js-api/search/VariablesD.html | 2 +- docs/js-api/search/VariablesE.html | 2 +- docs/js-api/search/VariablesF.html | 2 +- docs/js-api/search/VariablesG.html | 2 +- docs/js-api/search/VariablesH.html | 2 +- docs/js-api/search/VariablesI.html | 2 +- docs/js-api/search/VariablesJ.html | 2 +- docs/js-api/search/VariablesK.html | 2 +- docs/js-api/search/VariablesL.html | 2 +- docs/js-api/search/VariablesM.html | 2 +- docs/js-api/search/VariablesN.html | 2 +- docs/js-api/search/VariablesO.html | 2 +- docs/js-api/search/VariablesP.html | 2 +- docs/js-api/search/VariablesQ.html | 2 +- docs/js-api/search/VariablesR.html | 2 +- docs/js-api/search/VariablesS.html | 2 +- docs/js-api/search/VariablesT.html | 2 +- docs/js-api/search/VariablesU.html | 2 +- docs/js-api/search/VariablesV.html | 2 +- docs/js-api/search/VariablesW.html | 2 +- docs/js-api/search/VariablesX.html | 2 +- docs/js-api/search/VariablesY.html | 2 +- docs/js-api/search/VariablesZ.html | 2 +- docs/js/toc.js | 30 +- docs/manual.html | 22 +- docs/tutorial.html | 30 +- src/examples/HelloWorld.js | 2 + src/examples/anchors.html | 6 +- src/examples/animation.html | 8 +- src/examples/autolayout.html | 24 +- src/examples/boundary.html | 42 +- src/examples/clipboard.html | 78 +- src/examples/codec.html | 28 +- src/examples/collapse.html | 8 +- src/examples/constituent.html | 8 +- src/examples/contexticons.html | 16 +- src/examples/control.html | 24 +- src/examples/dragsource.html | 40 +- src/examples/drop.html | 48 +- src/examples/dynamicloading.html | 70 +- src/examples/dynamicstyle.html | 16 +- src/examples/dynamictoolbar.html | 30 +- src/examples/edgetolerance.html | 14 +- src/examples/editing.html | 22 +- src/examples/editors/config/diagrameditor.xml | 6 +- .../editors/config/editor-commons.xml | 24 +- src/examples/editors/config/processeditor.xml | 6 +- .../editors/config/wfeditor-commons.xml | 6 +- .../editors/config/wfgraph-commons.xml | 8 +- src/examples/editors/diagrameditor.html | 96 +- src/examples/editors/js/app.js | 14 +- src/examples/events.html | 16 +- src/examples/extendcanvas.html | 62 +- src/examples/fileio.html | 44 +- src/examples/fixedicon.html | 12 +- src/examples/fixedpoints.html | 40 +- src/examples/folding.html | 10 +- .../grapheditor/www/deflate/base64.js | 20 +- src/examples/grapheditor/www/index.html | 18 +- src/examples/grapheditor/www/js/Actions.js | 272 +-- src/examples/grapheditor/www/js/Dialogs.js | 430 ++-- src/examples/grapheditor/www/js/Editor.js | 416 ++-- src/examples/grapheditor/www/js/EditorUi.js | 736 +++--- src/examples/grapheditor/www/js/Format.js | 1124 ++++----- src/examples/grapheditor/www/js/Graph.js | 2104 ++++++++--------- src/examples/grapheditor/www/js/Menus.js | 246 +- src/examples/grapheditor/www/js/Shapes.js | 966 ++++---- src/examples/grapheditor/www/js/Sidebar.js | 630 ++--- src/examples/grapheditor/www/js/Toolbar.js | 98 +- .../grapheditor/www/jscolor/jscolor.js | 130 +- src/examples/grapheditor/www/open.html | 36 +- src/examples/grapheditor/www/viewer.html | 26 +- src/examples/graphlayout.html | 20 +- src/examples/grid.html | 64 +- src/examples/groups.html | 38 +- src/examples/guides.html | 14 +- src/examples/handles.html | 8 +- src/examples/helloport.html | 14 +- src/examples/hierarchicallayout.html | 14 +- src/examples/hovericons.html | 24 +- src/examples/hoverstyle.html | 6 +- src/examples/htmllabel.html | 26 +- src/examples/ie9svg.html | 4 +- src/examples/images.html | 6 +- src/examples/indicators.html | 8 +- src/examples/jquery.html | 18 +- src/examples/jsondata.html | 14 +- src/examples/labelposition.html | 6 +- src/examples/labels.html | 18 +- src/examples/layers.html | 10 +- src/examples/lod.html | 4 +- src/examples/map-background/leaflet-src.js | 1242 +++++----- .../map-background/map-background.html | 30 +- src/examples/map.html | 40 +- src/examples/markers.html | 34 +- src/examples/menustyle.html | 8 +- src/examples/merge.html | 38 +- src/examples/monitor.html | 34 +- src/examples/morph.html | 12 +- src/examples/offpage.html | 22 +- src/examples/orgchart.html | 62 +- src/examples/orthogonal.html | 10 +- src/examples/overlays.html | 14 +- src/examples/pagebreaks.html | 24 +- src/examples/perimeter.html | 10 +- src/examples/permissions.html | 46 +- src/examples/portrefs.html | 34 +- src/examples/ports.html | 66 +- src/examples/radialtreelayout.html | 8 +- src/examples/resources.html | 4 +- src/examples/schema.html | 156 +- src/examples/scrollbars.html | 108 +- src/examples/secondlabel.html | 22 +- src/examples/serverview.html | 56 +- src/examples/shape.html | 10 +- src/examples/showregion.html | 16 +- src/examples/standardsmode.html | 8 +- src/examples/stencils.html | 32 +- src/examples/stylesheet.html | 16 +- src/examples/swimlanes.html | 50 +- src/examples/template.html | 6 +- src/examples/thread.html | 8 +- src/examples/toolbar.html | 42 +- src/examples/touch.html | 60 +- src/examples/tree.html | 34 +- src/examples/uiconfig.html | 8 +- src/examples/uiconfig.xml | 4 +- src/examples/userobject.html | 62 +- src/examples/validation.html | 16 +- src/examples/visibility.html | 14 +- src/examples/webpack/src/anchors.js | 8 +- src/examples/windows.html | 12 +- src/examples/wires.html | 130 +- src/examples/wrapping.html | 4 +- src/js/editor/mxDefaultKeyHandler.js | 3 +- src/js/editor/mxEditor.js | 236 +- src/js/handler/mxCellHighlight.js | 10 +- src/js/handler/mxCellMarker.js | 14 +- src/js/handler/mxCellTracker.js | 2 +- src/js/handler/mxConnectionHandler.js | 246 +- src/js/handler/mxConstraintHandler.js | 68 +- src/js/handler/mxEdgeHandler.js | 362 +-- src/js/handler/mxEdgeSegmentHandler.js | 98 +- src/js/handler/mxElbowEdgeHandler.js | 28 +- src/js/handler/mxGraphHandler.js | 194 +- src/js/handler/mxHandle.js | 28 +- src/js/handler/mxKeyHandler.js | 6 +- src/js/handler/mxPanningHandler.js | 16 +- src/js/handler/mxPopupMenuHandler.js | 4 +- src/js/handler/mxRubberband.js | 50 +- src/js/handler/mxSelectionCellsHandler.js | 30 +- src/js/handler/mxTooltipHandler.js | 16 +- src/js/handler/mxVertexHandler.js | 308 +-- src/js/index.txt | 14 +- src/js/io/mxCellCodec.js | 24 +- src/js/io/mxChildChangeCodec.js | 6 +- src/js/io/mxCodec.js | 66 +- src/js/io/mxCodecRegistry.js | 14 +- src/js/io/mxDefaultKeyHandlerCodec.js | 8 +- src/js/io/mxDefaultPopupMenuCodec.js | 2 +- src/js/io/mxDefaultToolbarCodec.js | 68 +- src/js/io/mxEditorCodec.js | 34 +- src/js/io/mxGraphViewCodec.js | 32 +- src/js/io/mxModelCodec.js | 8 +- src/js/io/mxObjectCodec.js | 66 +- src/js/io/mxRootChangeCodec.js | 2 +- src/js/io/mxStylesheetCodec.js | 30 +- .../model/mxGraphHierarchyEdge.js | 8 +- .../model/mxGraphHierarchyModel.js | 132 +- .../model/mxGraphHierarchyNode.js | 10 +- .../hierarchical/model/mxSwimlaneModel.js | 164 +- .../hierarchical/mxHierarchicalLayout.js | 138 +- .../layout/hierarchical/mxSwimlaneLayout.js | 186 +- .../stage/mxCoordinateAssignment.js | 412 ++-- .../stage/mxMedianHybridCrossingReduction.js | 186 +- .../stage/mxMinimumCycleRemover.js | 18 +- .../hierarchical/stage/mxSwimlaneOrdering.js | 18 +- src/js/layout/mxCompactTreeLayout.js | 174 +- src/js/layout/mxCompositeLayout.js | 10 +- src/js/layout/mxEdgeLabelLayout.js | 38 +- src/js/layout/mxFastOrganicLayout.js | 106 +- src/js/layout/mxGraphLayout.js | 60 +- src/js/layout/mxParallelEdgeLayout.js | 78 +- src/js/layout/mxPartitionLayout.js | 54 +- src/js/layout/mxRadialTreeLayout.js | 78 +- src/js/layout/mxStackLayout.js | 90 +- src/js/model/mxCell.js | 30 +- src/js/model/mxCellPath.js | 24 +- src/js/model/mxGeometry.js | 24 +- src/js/model/mxGraphModel.js | 274 +-- src/js/mxClient.js | 18 +- src/js/shape/mxActor.js | 2 +- src/js/shape/mxArrow.js | 30 +- src/js/shape/mxArrowConnector.js | 88 +- src/js/shape/mxConnector.js | 30 +- src/js/shape/mxCylinder.js | 2 +- src/js/shape/mxDoubleEllipse.js | 6 +- src/js/shape/mxHexagon.js | 2 +- src/js/shape/mxImageShape.js | 16 +- src/js/shape/mxLabel.js | 28 +- src/js/shape/mxLine.js | 4 +- src/js/shape/mxMarker.js | 32 +- src/js/shape/mxPolyline.js | 14 +- src/js/shape/mxRectangleShape.js | 8 +- src/js/shape/mxRhombus.js | 6 +- src/js/shape/mxShape.js | 134 +- src/js/shape/mxStencil.js | 116 +- src/js/shape/mxStencilRegistry.js | 8 +- src/js/shape/mxSwimlane.js | 42 +- src/js/shape/mxText.js | 158 +- src/js/shape/mxTriangle.js | 2 +- src/js/util/mxAbstractCanvas2D.js | 12 +- src/js/util/mxAutoSaveManager.js | 6 +- src/js/util/mxClipboard.js | 24 +- src/js/util/mxConstants.js | 2 +- src/js/util/mxDictionary.js | 14 +- src/js/util/mxDivResizer.js | 16 +- src/js/util/mxDragSource.js | 60 +- src/js/util/mxEffects.js | 48 +- src/js/util/mxEvent.js | 48 +- src/js/util/mxEventObject.js | 2 +- src/js/util/mxEventSource.js | 12 +- src/js/util/mxForm.js | 20 +- src/js/util/mxGuide.js | 56 +- src/js/util/mxImageBundle.js | 6 +- src/js/util/mxImageExport.js | 26 +- src/js/util/mxLog.js | 34 +- src/js/util/mxMorphing.js | 40 +- src/js/util/mxMouseEvent.js | 2 +- src/js/util/mxObjectIdentity.js | 4 +- src/js/util/mxPanningManager.js | 12 +- src/js/util/mxPopupMenu.js | 30 +- src/js/util/mxRectangle.js | 12 +- src/js/util/mxResources.js | 38 +- src/js/util/mxSvgCanvas2D.js | 250 +- src/js/util/mxToolbar.js | 34 +- src/js/util/mxUndoManager.js | 14 +- src/js/util/mxUndoableEdit.js | 16 +- src/js/util/mxUrlConverter.js | 2 +- src/js/util/mxUtils.js | 650 ++--- src/js/util/mxWindow.js | 104 +- src/js/util/mxXmlCanvas2D.js | 68 +- src/js/util/mxXmlRequest.js | 34 +- src/js/view/mxCellEditor.js | 120 +- src/js/view/mxCellOverlay.js | 22 +- src/js/view/mxCellRenderer.js | 214 +- src/js/view/mxCellState.js | 14 +- src/js/view/mxCellStatePreview.js | 28 +- src/js/view/mxEdgeStyle.js | 354 +-- src/js/view/mxGraph.js | 1777 +++++++------- src/js/view/mxGraphSelectionModel.js | 32 +- src/js/view/mxGraphView.js | 456 ++-- src/js/view/mxLayoutManager.js | 46 +- src/js/view/mxMultiplicity.js | 16 +- src/js/view/mxOutline.js | 100 +- src/js/view/mxPerimeter.js | 168 +- src/js/view/mxPrintPreview.js | 168 +- src/js/view/mxStyleRegistry.js | 2 +- src/js/view/mxStylesheet.js | 26 +- src/js/view/mxSwimlaneManager.js | 50 +- src/js/view/mxTemporaryCellStates.js | 12 +- 543 files changed, 11608 insertions(+), 11604 deletions(-) diff --git a/docs/js-api/files/editor/mxDefaultKeyHandler-js.html b/docs/js-api/files/editor/mxDefaultKeyHandler-js.html index da3c603f2..e0a9568cc 100644 --- a/docs/js-api/files/editor/mxDefaultKeyHandler-js.html +++ b/docs/js-api/files/editor/mxDefaultKeyHandler-js.html @@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxDefaultKeyHandler

Binds keycodes to actionnames in an editor.  This aggregates an internal handler and extends the implementation of mxKeyHandler.escape to not only cancel the editing, but also hide the properties dialog and fire an <mxEditor.escape> event via editor.  An instance of this class is created by mxEditor and stored in mxEditor.keyHandler.

Example

Bind the delete key to the delete action in an existing editor.

var keyHandler = new mxDefaultKeyHandler(editor);
+

mxDefaultKeyHandler

Binds keycodes to actionnames in an editor.  This aggregates an internal handler and extends the implementation of mxKeyHandler.escape to not only cancel the editing, but also hide the properties dialog and fire an <mxEditor.escape> event via editor.  An instance of this class is created by mxEditor and stored in mxEditor.keyHandler.

Example

Bind the delete key to the delete action in an existing editor.

let keyHandler = new mxDefaultKeyHandler(editor);
 keyHandler.bindAction(46, 'delete');

Codec

This class uses the mxDefaultKeyHandlerCodec to read configuration data into an existing instance.  See mxDefaultKeyHandlerCodec for a description of the configuration format.

Keycodes

See mxKeyHandler.

An mxEvent.ESCAPE event is fired via the editor if the escape key is pressed.

Summary
mxDefaultKeyHandlerBinds keycodes to actionnames in an editor.
Functions
mxDefaultKeyHandlerConstructs a new default key handler for the mxEditor.graph in the given mxEditor.
Variables
editorReference to the enclosing mxEditor.
handlerHolds the mxKeyHandler for key event handling.
Functions
bindActionBinds the specified keycode to the given action in editor.
destroyDestroys the handler associated with this object.

Functions

@@ -37,7 +37,7 @@ keyHandler.bindAction(46, 'delete');

Codec< diff --git a/docs/js-api/files/editor/mxDefaultPopupMenu-js.html b/docs/js-api/files/editor/mxDefaultPopupMenu-js.html index 736b60612..a10ca5079 100644 --- a/docs/js-api/files/editor/mxDefaultPopupMenu-js.html +++ b/docs/js-api/files/editor/mxDefaultPopupMenu-js.html @@ -54,7 +54,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/editor/mxDefaultToolbar-js.html b/docs/js-api/files/editor/mxDefaultToolbar-js.html index 1d12447f2..b2012591e 100644 --- a/docs/js-api/files/editor/mxDefaultToolbar-js.html +++ b/docs/js-api/files/editor/mxDefaultToolbar-js.html @@ -11,10 +11,10 @@ if (browserType) {document.write("
");if (browserV -

mxDefaultToolbar

Toolbar for the editor.  This modifies the state of the graph or inserts new cells upon mouse clicks.

Example

Create a toolbar with a button to copy the selection into the clipboard, and a combo box with one action to paste the selection from the clipboard into the graph.

var toolbar = new mxDefaultToolbar(container, editor);
+

mxDefaultToolbar

Toolbar for the editor.  This modifies the state of the graph or inserts new cells upon mouse clicks.

Example

Create a toolbar with a button to copy the selection into the clipboard, and a combo box with one action to paste the selection from the clipboard into the graph.

let toolbar = new mxDefaultToolbar(container, editor);
 toolbar.addItem('Copy', null, 'copy');
 
-var combo = toolbar.addActionCombo('More actions...');
+let combo = toolbar.addActionCombo('More actions...');
 toolbar.addActionOption(combo, 'Paste', 'paste');

Codec

This class uses the mxDefaultToolbarCodec to read configuration data into an existing instance.  See mxDefaultToolbarCodec for a description of the configuration format.

Summary
mxDefaultToolbarToolbar for the editor.
Functions
mxDefaultToolbarConstructs a new toolbar for the given container and editor.
Variables
editorReference to the enclosing mxEditor.
toolbarHolds the internal mxToolbar.
resetHandlerReference to the function used to reset the toolbar.
spacingDefines the spacing between existing and new vertices in gridSize units when a new vertex is dropped on an existing cell.
connectOnDropSpecifies if elements should be connected if new cells are dropped onto connectable elements.
Functions
initConstructs the toolbar for the given container and installs a listener that updates the mxEditor.insertFunction on editor if an item is selected in the toolbar.
addItemAdds a new item that executes the given action in editor.
addSeparatorAdds a vertical separator using the optional icon.
addComboHelper method to invoke mxToolbar.addCombo on toolbar and return the resulting DOM node.
addActionComboHelper method to invoke mxToolbar.addActionCombo on toolbar using the given title and return the resulting DOM node.
addActionOptionBinds the given action to a option with the specified label in the given combo.
addOptionHelper method to invoke mxToolbar.addOption on toolbar and return the resulting DOM node that represents the option.
addModeCreates an item for selecting the given mode in the editor’s graph.
addPrototypeCreates an item for inserting a clone of the specified prototype cell into the editor’s graph.
dropHandles a drop from a toolbar item to the graph.
insertHandles a drop by inserting the given vertex into the given parent cell or the default parent if no parent is specified.
connectHandles a drop by connecting the given vertex to the given source cell.
installDropHandlerMakes the given img draggable using the given function for handling a drop event.
destroyDestroys the toolbar associated with this object and removes all installed listeners.

Functions

@@ -70,7 +70,7 @@ toolbar.addActionOption(combo, 'Paste', 'paste');
diff --git a/docs/js-api/files/editor/mxEditor-js.html b/docs/js-api/files/editor/mxEditor-js.html index 40526dd46..cbc4a5688 100644 --- a/docs/js-api/files/editor/mxEditor-js.html +++ b/docs/js-api/files/editor/mxEditor-js.html @@ -11,16 +11,16 @@ if (browserType) {document.write("
");if (browserV -

mxEditor

Extends mxEventSource to implement an application wrapper for a graph that adds actions, I/O using mxCodec, auto-layout using mxLayoutManager, command history using undoManager, and standard dialogs and widgets, eg. properties, help, outline, toolbar, and popupmenu.  It also adds templates to be used as cells in toolbars, auto-validation using the <validation> flag, attribute cycling using cycleAttributeValues, higher-level events such as <root>, and backend integration using urlPost and urlImage.

Actions

Actions are functions stored in the actions array under their names.  The functions take the mxEditor as the first, and an optional mxCell as the second argument and are invoked using execute.  Any additional arguments passed to execute are passed on to the action as-is.

A list of built-in actions is available in the addActions description.

Read/write Diagrams

To read a diagram from an XML string, for example from a textfield within the page, the following code is used:

var doc = mxUtils.parseXML(xmlString);
-var node = doc.documentElement;
+

mxEditor

Extends mxEventSource to implement an application wrapper for a graph that adds actions, I/O using mxCodec, auto-layout using mxLayoutManager, command history using undoManager, and standard dialogs and widgets, eg. properties, help, outline, toolbar, and popupmenu.  It also adds templates to be used as cells in toolbars, auto-validation using the <validation> flag, attribute cycling using cycleAttributeValues, higher-level events such as <root>, and backend integration using urlPost and urlImage.

Actions

Actions are functions stored in the actions array under their names.  The functions take the mxEditor as the first, and an optional mxCell as the second argument and are invoked using execute.  Any additional arguments passed to execute are passed on to the action as-is.

A list of built-in actions is available in the addActions description.

Read/write Diagrams

To read a diagram from an XML string, for example from a textfield within the page, the following code is used:

let doc = mxUtils.parseXML(xmlString);
+let node = doc.documentElement;
 editor.readGraphModel(node);

For reading a diagram from a remote location, use the open method.

To save diagrams in XML on a server, you can set the urlPost variable.  This variable will be used in getUrlPost to construct a URL for the post request that is issued in the save method.  The post request contains the XML representation of the diagram as returned by writeGraphModel in the xml parameter.

On the server side, the post request is processed using standard technologies such as Java Servlets, CGI, .NET or ASP.

Here are some examples of processing a post request in various languages.

  • Java: URLDecoder.decode(request.getParameter(“xml”), “UTF-8”).replace(“\n”, “&#xa;”)

Note that the linefeeds should only be replaced if the XML is processed in Java, for example when creating an image, but not if the XML is passed back to the client-side.

  • .NET: HttpUtility.UrlDecode(context.Request.Params[“xml”])
  • PHP: urldecode($_POST[“xml”])

Creating images

A backend (Java, PHP or C#) is required for creating images.  The distribution contains an example for each backend (ImageHandler.java, ImageHandler.cs and graph.php).  More information about using a backend to create images can be found in the readme.html files.  Note that the preview is implemented using VML/SVG in the browser and does not require a backend.  The backend is only required to creates images (bitmaps).

Special characters

Note There are five characters that should always appear in XML content as escapes, so that they do not interact with the syntax of the markup.  These are part of the language for all documents based on XML and for HTML.

  • &lt; (<)
  • &gt; (>)
  • &amp; (&)
  • &quot; (“)
  • &apos; (‘)

Although it is part of the XML language, &apos; is not defined in HTML.  For this reason the XHTML specification recommends instead the use of &#39; if text may be passed to a HTML user agent.

If you are having problems with special characters on the server-side then you may want to try the escapePostData flag.

For converting decimal escape sequences inside strings, a user has provided us with the following function:

function html2js(text)
 {
-  var entitySearch = /&#[0-9]+;/;
+  let entitySearch = /&#[0-9]+;/;
   var entity;
 
   while (entity = entitySearch.exec(text))
   {
-    var charCode = entity[0].substring(2, entity[0].length -1);
+    let charCode = entity[0].substring(2, entity[0].length -1);
     text = text.substring(0, entity.index)
            + String.fromCharCode(charCode)
            + text.substring(entity.index + entity[0].length);
@@ -40,9 +40,9 @@ echo($xml);

To open a local file, the file should be upload <mxDefaultToolbar> <add as="save" action="save" icon="images/save.gif"/> <add as="Swimlane" template="swimlane" icon="images/swimlane.gif"/> - ...

The format of the configuration is described in mxDefaultToolbarCodec.decode.

Ids

For the IDs, there is an implicit behaviour in mxCodec: It moves the Id from the cell to the user object at encoding time and vice versa at decoding time.  For example, if the Task node from above has an id attribute, then the mxCell.id of the corresponding cell will have this value.  If there is no Id collision in the model, then the cell may be retrieved using this Id with the mxGraphModel.getCell function.  If there is a collision, a new Id will be created for the cell using mxGraphModel.createId.  At encoding time, this new Id will replace the value previously stored under the id attribute in the Task node.

See mxEditorCodec, mxDefaultToolbarCodec and mxDefaultPopupMenuCodec for information about configuring the editor and user interface.

Programmatically inserting cells

For inserting a new cell, say, by clicking a button in the document, the following code can be used.  This requires an reference to the editor.

var userObject = {};
-var parent = editor.graph.getDefaultParent();
-var model = editor.graph.model;
+    ...

The format of the configuration is described in mxDefaultToolbarCodec.decode.

Ids

For the IDs, there is an implicit behaviour in mxCodec: It moves the Id from the cell to the user object at encoding time and vice versa at decoding time.  For example, if the Task node from above has an id attribute, then the mxCell.id of the corresponding cell will have this value.  If there is no Id collision in the model, then the cell may be retrieved using this Id with the mxGraphModel.getCell function.  If there is a collision, a new Id will be created for the cell using mxGraphModel.createId.  At encoding time, this new Id will replace the value previously stored under the id attribute in the Task node.

See mxEditorCodec, mxDefaultToolbarCodec and mxDefaultPopupMenuCodec for information about configuring the editor and user interface.

Programmatically inserting cells

For inserting a new cell, say, by clicking a button in the document, the following code can be used.  This requires an reference to the editor.

let userObject = {};
+let parent = editor.graph.getDefaultParent();
+let model = editor.graph.model;
 model.beginUpdate();
 try
 {
@@ -51,8 +51,8 @@ try
 finally
 {
   model.endUpdate();
-}

If a template cell from the config file should be inserted, then a clone of the template can be created as follows.  The clone is then inserted using the add function instead of addVertex.

var template = editor.templates['task'];
-var clone = editor.graph.model.cloneCell(template);

Resources

resources/editorLanguage resources for mxEditor
Summary
mxEditorExtends mxEventSource to implement an application wrapper for a graph that adds actions, I/O using mxCodec, auto-layout using mxLayoutManager, command history using undoManager, and standard dialogs and widgets, eg.
onInitCalled from within the constructor.
mxgraph=seenSet when the editor is started.
mxEvent.OPENFires after a file was opened in open.
mxEvent.SAVEFires after the current file was saved in save.
mxEvent.POSTFires if a successful response was received in postDiagram.
mxEvent.ROOTFires when the current root has changed, or when the title of the current root has changed.
mxEvent.BEFORE_ADD_VERTEXFires before a vertex is added in addVertex.
mxEvent.ADD_VERTEXFires between begin- and endUpdate in addVertex.
mxEvent.AFTER_ADD_VERTEXFires after a vertex was inserted and selected in addVertex.
mxEvent.ESCAPEFires when the escape key is pressed.
mxEditorConstructs a new editor.
Controls and Handlers
askZoomResourceSpecifies the resource key for the zoom dialog.
lastSavedResourceSpecifies the resource key for the last saved info.
currentFileResourceSpecifies the resource key for the current file info.
propertiesResourceSpecifies the resource key for the properties window title.
tasksResourceSpecifies the resource key for the tasks window title.
helpResourceSpecifies the resource key for the help window title.
outlineResourceSpecifies the resource key for the outline window title.
outlineReference to the mxWindow that contains the outline.
graphHolds a mxGraph for displaying the diagram.
graphRenderHintHolds the render hint used for creating the graph in setGraphContainer.
toolbarHolds a mxDefaultToolbar for displaying the toolbar.
statusDOM container that holds the statusbar.
popupHandlerHolds a mxDefaultPopupMenu for displaying popupmenus.
undoManagerHolds an mxUndoManager for the command history.
keyHandlerHolds a mxDefaultKeyHandler for handling keyboard events.
Actions and Options
actionsMaps from actionnames to actions, which are functions taking the editor and the cell as arguments.
dblClickActionSpecifies the name of the action to be executed when a cell is double clicked.
swimlaneRequiredSpecifies if new cells must be inserted into an existing swimlane.
disableContextMenuSpecifies if the context menu should be disabled in the graph container.
Templates
insertFunctionSpecifies the function to be used for inserting new cells into the graph.
forcedInsertingSpecifies if a new cell should be inserted on a single click even using insertFunction if there is a cell under the mousepointer, otherwise the cell under the mousepointer is selected.
templatesMaps from names to protoype cells to be used in the toolbar for inserting new cells into the diagram.
defaultEdgePrototype edge cell that is used for creating new edges.
defaultEdgeStyleSpecifies the edge style to be returned in getEdgeStyle.
defaultGroupPrototype group cell that is used for creating new groups.
groupBorderSizeDefault size for the border of new groups.
Backend Integration
filenameContains the URL of the last opened file as a string.
lineFeedCharacter to be used for encoding linefeeds in save.
postParameterNameSpecifies if the name of the post parameter that contains the diagram data in a post request to the server.
escapePostDataSpecifies if the data in the post request for saving a diagram should be converted using encodeURIComponent.
urlPostSpecifies the URL to be used for posting the diagram to a backend in save.
urlImageSpecifies the URL to be used for creating a bitmap of the graph in the image action.
Autolayout
horizontalFlowSpecifies the direction of the flow in the diagram.
layoutDiagramSpecifies if the top-level elements in the diagram should be layed out using a vertical or horizontal stack depending on the setting of horizontalFlow.
swimlaneSpacingSpecifies the spacing between swimlanes if automatic layout is turned on in layoutDiagram.
maintainSwimlanesSpecifies if the swimlanes should be kept at the same width or height depending on the setting of horizontalFlow.
layoutSwimlanesSpecifies if the children of swimlanes should be layed out, either vertically or horizontally depending on horizontalFlow.
Attribute Cycling
cycleAttributeValuesSpecifies the attribute values to be cycled when inserting new swimlanes.
cycleAttributeIndexIndex of the last consumed attribute index.
cycleAttributeNameName of the attribute to be assigned a cycleAttributeValues when inserting new swimlanes.
Windows
tasksHolds the mxWindow created in showTasks.
tasksWindowImageIcon for the tasks window.
tasksTopSpecifies the top coordinate of the tasks window in pixels.
helpHolds the mxWindow created in showHelp.
helpWindowImageIcon for the help window.
urlHelpSpecifies the URL to be used for the contents of the Online Help window.
helpWidthSpecifies the width of the help window in pixels.
helpHeightSpecifies the height of the help window in pixels.
propertiesWidthSpecifies the width of the properties window in pixels.
propertiesHeightSpecifies the height of the properties window in pixels.
movePropertiesDialogSpecifies if the properties dialog should be automatically moved near the cell it is displayed for, otherwise the dialog is not moved.
validatingSpecifies if mxGraph.validateGraph should automatically be invoked after each change.
modifiedTrue if the graph has been modified since it was last saved.
isModifiedReturns modified.
setModifiedSets modified to the specified boolean value.
addActionsAdds the built-in actions to the editor instance.
configureConfigures the editor using the specified node.
resetFirstTimeResets the cookie that is used to remember if the editor has already been used.
resetHistoryResets the command history, modified state and counters.
addActionBinds the specified actionname to the specified function.
executeExecutes the function with the given name in actions passing the editor instance and given cell as the first and second argument.
addTemplateAdds the specified template under the given name in templates.
getTemplateReturns the template for the given name.
createGraphCreates the graph for the editor.
createSwimlaneManagerSets the graph’s container using mxGraph.init.
createLayoutManagerCreates a layout manager for the swimlane and diagram layouts, that is, the locally defined inter- and intraswimlane layouts.
setGraphContainerSets the graph’s container using mxGraph.init.
installDblClickHandlerOverrides mxGraph.dblClick to invoke dblClickAction on a cell and reset the selection tool in the toolbar.
installUndoHandlerAdds the undoManager to the graph model and the view.
installDrillHandlerInstalls listeners for dispatching the <root> event.
installChangeHandlerInstalls the listeners required to automatically validate the graph.
installInsertHandlerInstalls the handler for invoking insertFunction if one is defined.
createDiagramLayoutCreates the layout instance used to layout the swimlanes in the diagram.
createSwimlaneLayoutCreates the layout instance used to layout the children of each swimlane.
createToolbarCreates the toolbar with no container.
setToolbarContainerInitializes the toolbar for the given container.
setStatusContainerCreates the status using the specified container.
setStatusDisplay the specified message in the status bar.
setTitleContainerCreates a listener to update the inner HTML of the specified DOM node with the value of getTitle.
treeLayoutExecutes a vertical or horizontal compact tree layout using the specified cell as an argument.
getTitleReturns the string value for the current root of the diagram.
getRootTitleReturns the string value of the root cell in mxGraph.model.
undoUndo the last change in graph.
redoRedo the last change in graph.
groupCellsInvokes createGroup to create a new group cell and the invokes mxGraph.groupCells, using the grid size of the graph as the spacing in the group’s content area.
createGroupCreates and returns a clone of defaultGroup to be used as a new group cell in <group>.
openOpens the specified file synchronously and parses it using readGraphModel.
readGraphModelReads the specified XML node into the existing graph model and resets the command history and modified state.
savePosts the string returned by writeGraphModel to the given URL or the URL returned by getUrlPost.
postDiagramHook for subclassers to override the posting of a diagram represented by the given node to the given URL.
writeGraphModelHook to create the string representation of the diagram.
getUrlPostReturns the URL to post the diagram to.
getUrlImageReturns the URL to create the image with.
swapStylesSwaps the styles for the given names in the graph’s stylesheet and refreshes the graph.
showPropertiesCreates and shows the properties dialog for the given cell.
isPropertiesVisibleReturns true if the properties dialog is currently visible.
createPropertiesCreates and returns the DOM node that represents the contents of the properties dialog for the given cell.
hidePropertiesHides the properties dialog.
showTasksShows the tasks window.
refreshTasksUpdates the contents of the tasks window using createTasks.
createTasksUpdates the contents of the given DOM node to display the tasks associated with the current editor state.
showHelpShows the help window.
showOutlineShows the outline window.
setModePuts the graph into the specified mode.
createPopupMenuUses popupHandler to create the menu in the graph’s panning handler.
createEdgeUses defaultEdge as the prototype for creating new edges in the connection handler of the graph.
getEdgeStyleReturns a string identifying the style of new edges.
consumeCycleAttributeReturns the next attribute in cycleAttributeValues or null, if not attribute should be used in the specified cell.
cycleAttributeUses the returned value from consumeCycleAttribute as the value for the cycleAttributeName key in the given cell’s style.
addVertexAdds the given vertex as a child of parent at the specified x and y coordinate and fires an addVertex event.
destroyRemoves the editor and all its associated resources.
+}

If a template cell from the config file should be inserted, then a clone of the template can be created as follows.  The clone is then inserted using the add function instead of addVertex.

let template = editor.templates['task'];
+let clone = editor.graph.model.cloneCell(template);

Resources

resources/editorLanguage resources for mxEditor
Summary
mxEditorExtends mxEventSource to implement an application wrapper for a graph that adds actions, I/O using mxCodec, auto-layout using mxLayoutManager, command history using undoManager, and standard dialogs and widgets, eg.
onInitCalled from within the constructor.
mxgraph=seenSet when the editor is started.
mxEvent.OPENFires after a file was opened in open.
mxEvent.SAVEFires after the current file was saved in save.
mxEvent.POSTFires if a successful response was received in postDiagram.
mxEvent.ROOTFires when the current root has changed, or when the title of the current root has changed.
mxEvent.BEFORE_ADD_VERTEXFires before a vertex is added in addVertex.
mxEvent.ADD_VERTEXFires between begin- and endUpdate in addVertex.
mxEvent.AFTER_ADD_VERTEXFires after a vertex was inserted and selected in addVertex.
mxEvent.ESCAPEFires when the escape key is pressed.
mxEditorConstructs a new editor.
Controls and Handlers
askZoomResourceSpecifies the resource key for the zoom dialog.
lastSavedResourceSpecifies the resource key for the last saved info.
currentFileResourceSpecifies the resource key for the current file info.
propertiesResourceSpecifies the resource key for the properties window title.
tasksResourceSpecifies the resource key for the tasks window title.
helpResourceSpecifies the resource key for the help window title.
outlineResourceSpecifies the resource key for the outline window title.
outlineReference to the mxWindow that contains the outline.
graphHolds a mxGraph for displaying the diagram.
graphRenderHintHolds the render hint used for creating the graph in setGraphContainer.
toolbarHolds a mxDefaultToolbar for displaying the toolbar.
statusDOM container that holds the statusbar.
popupHandlerHolds a mxDefaultPopupMenu for displaying popupmenus.
undoManagerHolds an mxUndoManager for the command history.
keyHandlerHolds a mxDefaultKeyHandler for handling keyboard events.
Actions and Options
actionsMaps from actionnames to actions, which are functions taking the editor and the cell as arguments.
dblClickActionSpecifies the name of the action to be executed when a cell is double clicked.
swimlaneRequiredSpecifies if new cells must be inserted into an existing swimlane.
disableContextMenuSpecifies if the context menu should be disabled in the graph container.
Templates
insertFunctionSpecifies the function to be used for inserting new cells into the graph.
forcedInsertingSpecifies if a new cell should be inserted on a single click even using insertFunction if there is a cell under the mousepointer, otherwise the cell under the mousepointer is selected.
templatesMaps from names to protoype cells to be used in the toolbar for inserting new cells into the diagram.
defaultEdgePrototype edge cell that is used for creating new edges.
defaultEdgeStyleSpecifies the edge style to be returned in getEdgeStyle.
defaultGroupPrototype group cell that is used for creating new groups.
groupBorderSizeDefault size for the border of new groups.
Backend Integration
filenameContains the URL of the last opened file as a string.
lineFeedCharacter to be used for encoding linefeeds in save.
postParameterNameSpecifies if the name of the post parameter that contains the diagram data in a post request to the server.
escapePostDataSpecifies if the data in the post request for saving a diagram should be converted using encodeURIComponent.
urlPostSpecifies the URL to be used for posting the diagram to a backend in save.
urlImageSpecifies the URL to be used for creating a bitmap of the graph in the image action.
Autolayout
horizontalFlowSpecifies the direction of the flow in the diagram.
layoutDiagramSpecifies if the top-level elements in the diagram should be layed out using a vertical or horizontal stack depending on the setting of horizontalFlow.
swimlaneSpacingSpecifies the spacing between swimlanes if automatic layout is turned on in layoutDiagram.
maintainSwimlanesSpecifies if the swimlanes should be kept at the same width or height depending on the setting of horizontalFlow.
layoutSwimlanesSpecifies if the children of swimlanes should be layed out, either vertically or horizontally depending on horizontalFlow.
Attribute Cycling
cycleAttributeValuesSpecifies the attribute values to be cycled when inserting new swimlanes.
cycleAttributeIndexIndex of the last consumed attribute index.
cycleAttributeNameName of the attribute to be assigned a cycleAttributeValues when inserting new swimlanes.
Windows
tasksHolds the mxWindow created in showTasks.
tasksWindowImageIcon for the tasks window.
tasksTopSpecifies the top coordinate of the tasks window in pixels.
helpHolds the mxWindow created in showHelp.
helpWindowImageIcon for the help window.
urlHelpSpecifies the URL to be used for the contents of the Online Help window.
helpWidthSpecifies the width of the help window in pixels.
helpHeightSpecifies the height of the help window in pixels.
propertiesWidthSpecifies the width of the properties window in pixels.
propertiesHeightSpecifies the height of the properties window in pixels.
movePropertiesDialogSpecifies if the properties dialog should be automatically moved near the cell it is displayed for, otherwise the dialog is not moved.
validatingSpecifies if mxGraph.validateGraph should automatically be invoked after each change.
modifiedTrue if the graph has been modified since it was last saved.
isModifiedReturns modified.
setModifiedSets modified to the specified boolean value.
addActionsAdds the built-in actions to the editor instance.
configureConfigures the editor using the specified node.
resetFirstTimeResets the cookie that is used to remember if the editor has already been used.
resetHistoryResets the command history, modified state and counters.
addActionBinds the specified actionname to the specified function.
executeExecutes the function with the given name in actions passing the editor instance and given cell as the first and second argument.
addTemplateAdds the specified template under the given name in templates.
getTemplateReturns the template for the given name.
createGraphCreates the graph for the editor.
createSwimlaneManagerSets the graph’s container using mxGraph.init.
createLayoutManagerCreates a layout manager for the swimlane and diagram layouts, that is, the locally defined inter- and intraswimlane layouts.
setGraphContainerSets the graph’s container using mxGraph.init.
installDblClickHandlerOverrides mxGraph.dblClick to invoke dblClickAction on a cell and reset the selection tool in the toolbar.
installUndoHandlerAdds the undoManager to the graph model and the view.
installDrillHandlerInstalls listeners for dispatching the <root> event.
installChangeHandlerInstalls the listeners required to automatically validate the graph.
installInsertHandlerInstalls the handler for invoking insertFunction if one is defined.
createDiagramLayoutCreates the layout instance used to layout the swimlanes in the diagram.
createSwimlaneLayoutCreates the layout instance used to layout the children of each swimlane.
createToolbarCreates the toolbar with no container.
setToolbarContainerInitializes the toolbar for the given container.
setStatusContainerCreates the status using the specified container.
setStatusDisplay the specified message in the status bar.
setTitleContainerCreates a listener to update the inner HTML of the specified DOM node with the value of getTitle.
treeLayoutExecutes a vertical or horizontal compact tree layout using the specified cell as an argument.
getTitleReturns the string value for the current root of the diagram.
getRootTitleReturns the string value of the root cell in mxGraph.model.
undoUndo the last change in graph.
redoRedo the last change in graph.
groupCellsInvokes createGroup to create a new group cell and the invokes mxGraph.groupCells, using the grid size of the graph as the spacing in the group’s content area.
createGroupCreates and returns a clone of defaultGroup to be used as a new group cell in <group>.
openOpens the specified file synchronously and parses it using readGraphModel.
readGraphModelReads the specified XML node into the existing graph model and resets the command history and modified state.
savePosts the string returned by writeGraphModel to the given URL or the URL returned by getUrlPost.
postDiagramHook for subclassers to override the posting of a diagram represented by the given node to the given URL.
writeGraphModelHook to create the string representation of the diagram.
getUrlPostReturns the URL to post the diagram to.
getUrlImageReturns the URL to create the image with.
swapStylesSwaps the styles for the given names in the graph’s stylesheet and refreshes the graph.
showPropertiesCreates and shows the properties dialog for the given cell.
isPropertiesVisibleReturns true if the properties dialog is currently visible.
createPropertiesCreates and returns the DOM node that represents the contents of the properties dialog for the given cell.
hidePropertiesHides the properties dialog.
showTasksShows the tasks window.
refreshTasksUpdates the contents of the tasks window using createTasks.
createTasksUpdates the contents of the given DOM node to display the tasks associated with the current editor state.
showHelpShows the help window.
showOutlineShows the outline window.
setModePuts the graph into the specified mode.
createPopupMenuUses popupHandler to create the menu in the graph’s panning handler.
createEdgeUses defaultEdge as the prototype for creating new edges in the connection handler of the graph.
getEdgeStyleReturns a string identifying the style of new edges.
consumeCycleAttributeReturns the next attribute in cycleAttributeValues or null, if not attribute should be used in the specified cell.
cycleAttributeUses the returned value from consumeCycleAttribute as the value for the cycleAttributeName key in the given cell’s style.
addVertexAdds the given vertex as a child of parent at the specified x and y coordinate and fires an addVertex event.
destroyRemoves the editor and all its associated resources.

onInit

Called from within the constructor.  In the callback, “this” refers to the editor instance.

@@ -72,7 +72,7 @@ var clone = editor.graph.model.cloneCell(template);

mxEvent.AFTER_ADD_VERTEX

Fires after a vertex was inserted and selected in addVertex.  The <code>vertex</code> property contains the new vertex.

Example

For starting an in-place edit after a new vertex has been added to the graph, the following code can be used.

editor.addListener(mxEvent.AFTER_ADD_VERTEX, function(sender, evt)
 {
-  var vertex = evt.getProperty('vertex');
+  let vertex = evt.getProperty('vertex');
 
   if (editor.graph.isCellEditable(vertex))
   {
@@ -82,8 +82,8 @@ var clone = editor.graph.model.cloneCell(template);

mxEvent.ESCAPE

Fires when the escape key is pressed.  The <code>event</code> property contains the key event.

-

mxEditor

function mxEditor(config)

Constructs a new editor.  This function invokes the onInit callback upon completion.

Example

var config = mxUtils.load('config/diagrameditor.xml').getDocumentElement();
-var editor = new mxEditor(config);

Parameters

configOptional XML node that contains the configuration.
+

mxEditor

function mxEditor(config)

Constructs a new editor.  This function invokes the onInit callback upon completion.

Example

let config = mxUtils.load('config/diagrameditor.xml').getDocumentElement();
+let editor = new mxEditor(config);

Parameters

configOptional XML node that contains the configuration.

Controls and Handlers

@@ -123,8 +123,8 @@ var editor = new mxEditor(config);

Paramete

dblClickAction

mxEditor.prototype.dblClickAction

Specifies the name of the action to be executed when a cell is double clicked.  Default is ‘edit’.

To handle a singleclick, use the following code.

editor.graph.addListener(mxEvent.CLICK, function(sender, evt)
 {
-  var e = evt.getProperty('event');
-  var cell = evt.getProperty('cell');
+  let e = evt.getProperty('event');
+  let cell = evt.getProperty('cell');
 
   if (cell != null && !e.isConsumed())
   {
@@ -221,7 +221,7 @@ var editor = new mxEditor(config);

Paramete

addActions

mxEditor.prototype.addActions = () =>

Adds the built-in actions to the editor instance.

saveSaves the graph using urlPost.
printShows the graph in a new print preview window.
showShows the graph in a new window.
exportImageShows the graph as a bitmap image using getUrlImage.
refreshRefreshes the graph’s display.
cutCopies the current selection into the clipboard and removes it from the graph.
copyCopies the current selection into the clipboard.
pastePastes the clipboard into the graph.
deleteRemoves the current selection from the graph.
groupPuts the current selection into a new group.
ungroupRemoves the selected groups and selects the children.
undoUndoes the last change on the graph model.
redoRedoes the last change on the graph model.
zoomSets the zoom via a dialog.
zoomInZooms into the graph.
zoomOutZooms out of the graph
actualSizeResets the scale and translation on the graph.
fitChanges the scale so that the graph fits into the window.
showPropertiesShows the properties dialog.
selectAllSelects all cells.
selectNoneClears the selection.
selectVerticesSelects all vertices. selectEdges = Selects all edges.
editStarts editing the current selection cell.
enterGroupDrills down into the current selection cell.
exitGroupMoves up in the drilling hierachy
homeMoves to the topmost parent in the drilling hierarchy
selectPreviousSelects the previous cell.
selectNextSelects the next cell.
selectParentSelects the parent of the selection cell.
selectChildSelects the first child of the selection cell.
collapseCollapses the currently selected cells.
expandExpands the currently selected cells.
boldToggle bold text style.
italicToggle italic text style.
underlineToggle underline text style.
alignCellsLeftAligns the selection cells at the left.
alignCellsCenterAligns the selection cells in the center.
alignCellsRightAligns the selection cells at the right.
alignCellsTopAligns the selection cells at the top.
alignCellsMiddleAligns the selection cells in the middle.
alignCellsBottomAligns the selection cells at the bottom.
alignFontLeftSets the horizontal text alignment to left.
alignFontCenterSets the horizontal text alignment to center.
alignFontRightSets the horizontal text alignment to right.
alignFontTopSets the vertical text alignment to top.
alignFontMiddleSets the vertical text alignment to middle.
alignFontBottomSets the vertical text alignment to bottom.
toggleTasksShows or hides the tasks window.
toggleHelpShows or hides the help window.
toggleOutlineShows or hides the outline window.
toggleConsoleShows or hides the console window.
-

configure

mxEditor.prototype.configure = (node) =>

Configures the editor using the specified node.  To load the configuration from a given URL the following code can be used to obtain the XML node.

var node = mxUtils.load(url).getDocumentElement();

Parameters

nodeXML node that contains the configuration.
+

configure

mxEditor.prototype.configure = (node) =>

Configures the editor using the specified node.  To load the configuration from a given URL the following code can be used to obtain the XML node.

let node = mxUtils.load(url).getDocumentElement();

Parameters

nodeXML node that contains the configuration.

resetFirstTime

mxEditor.prototype.resetFirstTime = () =>

Resets the cookie that is used to remember if the editor has already been used.

@@ -308,13 +308,13 @@ catch (e)

postDiagram

mxEditor.prototype.postDiagram = (url,
data) =>

Hook for subclassers to override the posting of a diagram represented by the given node to the given URL.  This fires an asynchronous <post> event if the diagram has been posted.

Example

To replace the diagram with the diagram in the response, use the following code.

editor.addListener(mxEvent.POST, function(sender, evt)
 {
   // Process response (replace diagram)
-  var req = evt.getProperty('request');
-  var root = req.getDocumentElement();
+  let req = evt.getProperty('request');
+  let root = req.getDocumentElement();
   editor.graph.readGraphModel(root)
 });
-

writeGraphModel

mxEditor.prototype.writeGraphModel = (linefeed) =>

Hook to create the string representation of the diagram.  The default implementation uses an mxCodec to encode the graph model as follows:

var enc = new mxCodec();
-var node = enc.encode(this.graph.getModel());
+

writeGraphModel

mxEditor.prototype.writeGraphModel = (linefeed) =>

Hook to create the string representation of the diagram.  The default implementation uses an mxCodec to encode the graph model as follows:

let enc = new mxCodec();
+let node = enc.encode(this.graph.getModel());
 return mxUtils.getXml(node, this.linefeed);

Parameters

linefeedOptional character to be used as the linefeed.  Default is <linefeed>.

getUrlPost

mxEditor.prototype.getUrlPost = () =>

Returns the URL to post the diagram to.  This is used in save.  The default implementation returns urlPost, adding <code>?draft=true</code>.

@@ -331,7 +331,7 @@ return mxUtils.getXml(node, this.linefeed);

hideProperties

mxEditor.prototype.hideProperties = () =>

Hides the properties dialog.

-

showTasks

mxEditor.prototype.showTasks = () =>

Shows the tasks window.  The tasks window is created using createTasks.  The default width of the window is 200 pixels, the y-coordinate of the location can be specifies in tasksTop and the x-coordinate is right aligned with a 20 pixel offset from the right border.  To change the location of the tasks window, the following code can be used:

var oldShowTasks = mxEditor.prototype.showTasks;
+

showTasks

mxEditor.prototype.showTasks = () =>

Shows the tasks window.  The tasks window is created using createTasks.  The default width of the window is 200 pixels, the y-coordinate of the location can be specifies in tasksTop and the x-coordinate is right aligned with a 20 pixel offset from the right border.  To change the location of the tasks window, the following code can be used:

let oldShowTasks = mxEditor.prototype.showTasks;
 mxEditor.prototype.showTasks = function()
 {
   oldShowTasks.apply(this, arguments); // "supercall"
@@ -373,7 +373,7 @@ mxEditor.prototype.showTasks = function()
 
 
 
 
diff --git a/docs/js-api/files/handler/mxCellHighlight-js.html b/docs/js-api/files/handler/mxCellHighlight-js.html
index 87cfd4675..c0e7f316c 100644
--- a/docs/js-api/files/handler/mxCellHighlight-js.html
+++ b/docs/js-api/files/handler/mxCellHighlight-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxCellHighlight

A helper class to highlight cells.  Here is an example for a given cell.

var highlight = new mxCellHighlight(graph, '#ff0000', 2);
+

mxCellHighlight

A helper class to highlight cells.  Here is an example for a given cell.

let highlight = new mxCellHighlight(graph, '#ff0000', 2);
 highlight.highlight(graph.view.getState(cell)));
Summary
mxCellHighlightA helper class to highlight cells.
Functions
mxCellHighlightConstructs a cell highlight.
Variables
keepOnTopSpecifies if the highlights should appear on top of everything else in the overlay pane.
graphReference to the enclosing mxGraph.
stateReference to the mxCellState.
spacingSpecifies the spacing between the highlight for vertices and the vertex.
resetHandlerHolds the handler that automatically invokes reset if the highlight should be hidden.
Functions
setHighlightColorSets the color of the rectangle used to highlight drop targets.
drawHighlightCreates and returns the highlight shape for the given state.
createShapeCreates and returns the highlight shape for the given state.
getStrokeWidthReturns the stroke width.
repaintUpdates the highlight after a change of the model or view.
hideResets the state of the cell marker.
markMarks the <markedState> and fires a mark event.
isHighlightAtReturns true if this highlight is at the given position.
destroyDestroys the handler and all its resources and DOM nodes.

Functions

@@ -57,7 +57,7 @@ highlight.highlight(graph.view.getState(cell)));
diff --git a/docs/js-api/files/handler/mxCellMarker-js.html b/docs/js-api/files/handler/mxCellMarker-js.html index ade7e22ee..bde9527d6 100644 --- a/docs/js-api/files/handler/mxCellMarker-js.html +++ b/docs/js-api/files/handler/mxCellMarker-js.html @@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxCellMarker

A helper class to process mouse locations and highlight cells.

Helper class to highlight cells.  To add a cell marker to an existing graph for highlighting all cells, the following code is used:

var marker = new mxCellMarker(graph);
+

mxCellMarker

A helper class to process mouse locations and highlight cells.

Helper class to highlight cells.  To add a cell marker to an existing graph for highlighting all cells, the following code is used:

let marker = new mxCellMarker(graph);
 graph.addMouseListener({
   mouseDown: function() {},
   mouseMove: function(sender, me)
@@ -102,7 +102,7 @@ graph.addMouseListener({
 
 
 
 
diff --git a/docs/js-api/files/handler/mxCellTracker-js.html b/docs/js-api/files/handler/mxCellTracker-js.html
index c8ce25a80..1fb63498a 100644
--- a/docs/js-api/files/handler/mxCellTracker-js.html
+++ b/docs/js-api/files/handler/mxCellTracker-js.html
@@ -17,7 +17,7 @@ if (browserType) {document.write("
");if (browserV mouseDown: function(sender, me) { }, mouseMove: function(sender, me) { - var tmp = me.getCell(); + let tmp = me.getCell(); if (tmp != this.cell) { @@ -73,7 +73,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/handler/mxConnectionHandler-js.html b/docs/js-api/files/handler/mxConnectionHandler-js.html index b01ab4e66..d65a64198 100644 --- a/docs/js-api/files/handler/mxConnectionHandler-js.html +++ b/docs/js-api/files/handler/mxConnectionHandler-js.html @@ -32,13 +32,13 @@ mxConnectionHandler.prototype.insertEdge = function(parent, id, value, source, t

mxEvent.CONNECT

Fires between begin- and endUpdate in connect.  The <code>cell</code> property contains the inserted edge, the <code>event</code> and <code>target</code> properties contain the respective arguments that were passed to connect (where target corresponds to the dropTarget argument).  Finally, the <code>terminal</code> property corresponds to the target argument in connect or the clone of the source terminal if createTarget is enabled.

Note that the target is the cell under the mouse where the mouse button was released.  Depending on the logic in the handler, this doesn’t necessarily have to be the target of the inserted edge.  To print the source, target or any optional ports IDs that the edge is connected to, the following code can be used.  To get more details about the actual connection point, mxGraph.getConnectionConstraint can be used.  To resolve the port IDs, use mxGraphModel.getCell.

graph.connectionHandler.addListener(mxEvent.CONNECT, function(sender, evt)
 {
-  var edge = evt.getProperty('cell');
-  var source = graph.getModel().getTerminal(edge, true);
-  var target = graph.getModel().getTerminal(edge, false);
+  let edge = evt.getProperty('cell');
+  let source = graph.getModel().getTerminal(edge, true);
+  let target = graph.getModel().getTerminal(edge, false);
 
-  var style = graph.getCellStyle(edge);
-  var sourcePortId = style[mxConstants.STYLE_SOURCE_PORT];
-  var targetPortId = style[mxConstants.STYLE_TARGET_PORT];
+  let style = graph.getCellStyle(edge);
+  let sourcePortId = style[mxConstants.STYLE_SOURCE_PORT];
+  let targetPortId = style[mxConstants.STYLE_TARGET_PORT];
 
   mxLog.show();
   mxLog.debug('connect', edge, source.id, target.id, sourcePortId, targetPortId);
@@ -146,7 +146,7 @@ mxConnectionHandler.prototype.insertEdge = function(parent, id, value, source, t
 
 

createEdgeState

mxConnectionHandler.prototype.createEdgeState = function(me)

Hook to return an mxCellState which may be used during the preview.  This implementation returns null.

Use the following code to create a preview for an existing edge style

graph.connectionHandler.createEdgeState = function(me)
 {
-  var edge = graph.createEdge(null, null, null, null, null, 'edgeStyle=elbowEdgeStyle');
+  let edge = graph.createEdge(null, null, null, null, null, 'edgeStyle=elbowEdgeStyle');
 
   return new mxCellState(this.graph.view, edge, this.graph.getCellStyle(edge));
 };
@@ -210,7 +210,7 @@ mxConnectionHandler.prototype.insertEdge = function(parent, id, value, source, t diff --git a/docs/js-api/files/handler/mxConstraintHandler-js.html b/docs/js-api/files/handler/mxConstraintHandler-js.html index a990e927f..0ccfac0e1 100644 --- a/docs/js-api/files/handler/mxConstraintHandler-js.html +++ b/docs/js-api/files/handler/mxConstraintHandler-js.html @@ -70,7 +70,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/handler/mxEdgeHandler-js.html b/docs/js-api/files/handler/mxEdgeHandler-js.html index 5041626d6..512f7a80e 100644 --- a/docs/js-api/files/handler/mxEdgeHandler-js.html +++ b/docs/js-api/files/handler/mxEdgeHandler-js.html @@ -207,7 +207,7 @@ mxEdgeHandler.prototype.removeEnabled = true;

Note: This ex

diff --git a/docs/js-api/files/handler/mxEdgeSegmentHandler-js.html b/docs/js-api/files/handler/mxEdgeSegmentHandler-js.html index 2420dad26..d7a88f953 100644 --- a/docs/js-api/files/handler/mxEdgeSegmentHandler-js.html +++ b/docs/js-api/files/handler/mxEdgeSegmentHandler-js.html @@ -38,7 +38,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/handler/mxElbowEdgeHandler-js.html b/docs/js-api/files/handler/mxElbowEdgeHandler-js.html index 565aaac03..5167471e8 100644 --- a/docs/js-api/files/handler/mxElbowEdgeHandler-js.html +++ b/docs/js-api/files/handler/mxElbowEdgeHandler-js.html @@ -42,7 +42,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/handler/mxGraphHandler-js.html b/docs/js-api/files/handler/mxGraphHandler-js.html index 81e5e5179..dded648b6 100644 --- a/docs/js-api/files/handler/mxGraphHandler-js.html +++ b/docs/js-api/files/handler/mxGraphHandler-js.html @@ -101,7 +101,7 @@ if (browserType) {document.write("
");if (browserV

selectCellForEvent

mxGraphHandler.prototype.selectCellForEvent = function(cell,
me)

Selects the given cell for the given mxMouseEvent.

-

consumeMouseEvent

mxGraphHandler.prototype.consumeMouseEvent = function(evtName,
me)

Consumes the given mouse event.  NOTE: This may be used to enable click events for links in labels on iOS as follows as consuming the initial touchStart disables firing the subsequent click event on the link.

<code> mxGraphHandler.prototype.consumeMouseEvent = function(evtName, me) { var source = mxEvent.getSource(me.getEvent());

if (!mxEvent.isTouchEvent(me.getEvent()) || source.nodeName != ‘A’) { me.consume(); } } </code>

+

consumeMouseEvent

mxGraphHandler.prototype.consumeMouseEvent = function(evtName,
me)

Consumes the given mouse event.  NOTE: This may be used to enable click events for links in labels on iOS as follows as consuming the initial touchStart disables firing the subsequent click event on the link.

<code> mxGraphHandler.prototype.consumeMouseEvent = function(evtName, me) { let source = mxEvent.getSource(me.getEvent());

if (!mxEvent.isTouchEvent(me.getEvent()) || source.nodeName != ‘A’) { me.consume(); } } </code>

mouseDown

mxGraphHandler.prototype.mouseDown = function(sender,
me)

Handles the event by selecing the given cell and creating a handle for it.  By consuming the event all subsequent events of the gesture are redirected to this handler.

@@ -180,7 +180,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/handler/mxHandle-js.html b/docs/js-api/files/handler/mxHandle-js.html index f3692657b..dc6be3d12 100644 --- a/docs/js-api/files/handler/mxHandle-js.html +++ b/docs/js-api/files/handler/mxHandle-js.html @@ -72,7 +72,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/handler/mxKeyHandler-js.html b/docs/js-api/files/handler/mxKeyHandler-js.html index 0d25ec22c..0be12dbbd 100644 --- a/docs/js-api/files/handler/mxKeyHandler-js.html +++ b/docs/js-api/files/handler/mxKeyHandler-js.html @@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxKeyHandler

Event handler that listens to keystroke events.  This is not a singleton, however, it is normally only required once if the target is the document element (default).

This handler installs a key event listener in the topmost DOM node and processes all events that originate from descandants of <mxGraph.container> or from the topmost DOM node.  The latter means that all unhandled keystrokes are handled by this object regardless of the focused state of the graph.

Example

The following example creates a key handler that listens to the delete key (46) and deletes the selection cells if the graph is enabled.

var keyHandler = new mxKeyHandler(graph);
+

mxKeyHandler

Event handler that listens to keystroke events.  This is not a singleton, however, it is normally only required once if the target is the document element (default).

This handler installs a key event listener in the topmost DOM node and processes all events that originate from descandants of <mxGraph.container> or from the topmost DOM node.  The latter means that all unhandled keystrokes are handled by this object regardless of the focused state of the graph.

Example

The following example creates a key handler that listens to the delete key (46) and deletes the selection cells if the graph is enabled.

let keyHandler = new mxKeyHandler(graph);
 keyHandler.bindKey(46, function(evt)
 {
   if (graph.isEnabled())
@@ -85,7 +85,7 @@ keyHandler.bindKey(46, function(evt)
 
 
 
 
diff --git a/docs/js-api/files/handler/mxPanningHandler-js.html b/docs/js-api/files/handler/mxPanningHandler-js.html
index 639f7489e..fb444f248 100644
--- a/docs/js-api/files/handler/mxPanningHandler-js.html
+++ b/docs/js-api/files/handler/mxPanningHandler-js.html
@@ -111,7 +111,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/handler/mxPopupMenuHandler-js.html b/docs/js-api/files/handler/mxPopupMenuHandler-js.html index ba67181b0..e006a82e2 100644 --- a/docs/js-api/files/handler/mxPopupMenuHandler-js.html +++ b/docs/js-api/files/handler/mxPopupMenuHandler-js.html @@ -56,7 +56,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/handler/mxRubberband-js.html b/docs/js-api/files/handler/mxRubberband-js.html index 06e482d63..593d0ccb1 100644 --- a/docs/js-api/files/handler/mxRubberband-js.html +++ b/docs/js-api/files/handler/mxRubberband-js.html @@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxRubberband

Event handler that selects rectangular regions.  This is not built-into mxGraph.  To enable rubberband selection in a graph, use the following code.

Example

var rubberband = new mxRubberband(graph);
Summary
mxRubberbandEvent handler that selects rectangular regions.
Functions
mxRubberbandConstructs an event handler that selects rectangular regions in the graph using rubberband selection.
Variables
defaultOpacitySpecifies the default opacity to be used for the rubberband div.
enabledSpecifies if events are handled.
divHolds the DIV element which is currently visible.
sharedDivHolds the DIV element which is used to display the rubberband.
currentXHolds the value of the x argument in the last call to update.
currentYHolds the value of the y argument in the last call to update.
fadeOutOptional fade out effect.
Functions
isEnabledReturns true if events are handled.
setEnabledEnables or disables event handling.
isForceRubberbandEventReturns true if the given mxMouseEvent should start rubberband selection.
mouseDownHandles the event by initiating a rubberband selection.
startSets the start point for the rubberband selection.
mouseMoveHandles the event by updating therubberband selection.
createShapeCreates the rubberband selection shape.
isActiveReturns true if this handler is active.
mouseUpHandles the event by selecting the region of the rubberband using mxGraph.selectRegion.
executeResets the state of this handler and selects the current region for the given event.
resetResets the state of the rubberband selection.
updateSets currentX and currentY and calls repaint.
repaintComputes the bounding box and updates the style of the div.
destroyDestroys the handler and all its resources and DOM nodes.
+

mxRubberband

Event handler that selects rectangular regions.  This is not built-into mxGraph.  To enable rubberband selection in a graph, use the following code.

Example

let rubberband = new mxRubberband(graph);
Summary
mxRubberbandEvent handler that selects rectangular regions.
Functions
mxRubberbandConstructs an event handler that selects rectangular regions in the graph using rubberband selection.
Variables
defaultOpacitySpecifies the default opacity to be used for the rubberband div.
enabledSpecifies if events are handled.
divHolds the DIV element which is currently visible.
sharedDivHolds the DIV element which is used to display the rubberband.
currentXHolds the value of the x argument in the last call to update.
currentYHolds the value of the y argument in the last call to update.
fadeOutOptional fade out effect.
Functions
isEnabledReturns true if events are handled.
setEnabledEnables or disables event handling.
isForceRubberbandEventReturns true if the given mxMouseEvent should start rubberband selection.
mouseDownHandles the event by initiating a rubberband selection.
startSets the start point for the rubberband selection.
mouseMoveHandles the event by updating therubberband selection.
createShapeCreates the rubberband selection shape.
isActiveReturns true if this handler is active.
mouseUpHandles the event by selecting the region of the rubberband using mxGraph.selectRegion.
executeResets the state of this handler and selects the current region for the given event.
resetResets the state of the rubberband selection.
updateSets currentX and currentY and calls repaint.
repaintComputes the bounding box and updates the style of the div.
destroyDestroys the handler and all its resources and DOM nodes.

Functions

@@ -70,7 +70,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/handler/mxSelectionCellsHandler-js.html b/docs/js-api/files/handler/mxSelectionCellsHandler-js.html index cdfb5d718..2449c81bb 100644 --- a/docs/js-api/files/handler/mxSelectionCellsHandler-js.html +++ b/docs/js-api/files/handler/mxSelectionCellsHandler-js.html @@ -62,7 +62,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/handler/mxTooltipHandler-js.html b/docs/js-api/files/handler/mxTooltipHandler-js.html index 41721d4dc..37de5b8c7 100644 --- a/docs/js-api/files/handler/mxTooltipHandler-js.html +++ b/docs/js-api/files/handler/mxTooltipHandler-js.html @@ -72,7 +72,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/handler/mxVertexHandler-js.html b/docs/js-api/files/handler/mxVertexHandler-js.html index 57d0307fa..e808ef84b 100644 --- a/docs/js-api/files/handler/mxVertexHandler-js.html +++ b/docs/js-api/files/handler/mxVertexHandler-js.html @@ -145,27 +145,27 @@ if (browserType) {document.write("
");if (browserV

moveChildren

mxVertexHandler.prototype.moveChildren = function(cell,
dx,
dy)

Moves the children of the given cell by the given vector.

-

union

mxVertexHandler.prototype.union = function(bounds,
dx,
dy,
index,
gridEnabled,
scale,
tr,
constrained,
centered)

Returns the union of the given bounds and location for the specified handle index.

To override this to limit the size of vertex via a minWidth/-Height style, the following code can be used.

var vertexHandlerUnion = mxVertexHandler.prototype.union;
+

union

mxVertexHandler.prototype.union = function(bounds,
dx,
dy,
index,
gridEnabled,
scale,
tr,
constrained,
centered)

Returns the union of the given bounds and location for the specified handle index.

To override this to limit the size of vertex via a minWidth/-Height style, the following code can be used.

let vertexHandlerUnion = mxVertexHandler.prototype.union;
 mxVertexHandler.prototype.union = function(bounds, dx, dy, index, gridEnabled, scale, tr, constrained)
 {
-  var result = vertexHandlerUnion.apply(this, arguments);
+  let result = vertexHandlerUnion.apply(this, arguments);
 
   result.width = Math.max(result.width, mxUtils.getNumber(this.state.style, 'minWidth', 0));
   result.height = Math.max(result.height, mxUtils.getNumber(this.state.style, 'minHeight', 0));
 
   return result;
-};

The minWidth/-Height style can then be used as follows

graph.insertVertex(parent, null, 'Hello,', 20, 20, 80, 30, 'minWidth=100;minHeight=100;');

To override this to update the height for a wrapped text if the width of a vertex is changed, the following can be used.

var mxVertexHandlerUnion = mxVertexHandler.prototype.union;
+};

The minWidth/-Height style can then be used as follows

graph.insertVertex(parent, null, 'Hello,', 20, 20, 80, 30, 'minWidth=100;minHeight=100;');

To override this to update the height for a wrapped text if the width of a vertex is changed, the following can be used.

let mxVertexHandlerUnion = mxVertexHandler.prototype.union;
 mxVertexHandler.prototype.union = function(bounds, dx, dy, index, gridEnabled, scale, tr, constrained)
 {
-  var result = mxVertexHandlerUnion.apply(this, arguments);
-  var s = this.state;
+  let result = mxVertexHandlerUnion.apply(this, arguments);
+  let s = this.state;
 
   if (this.graph.isHtmlLabel(s.cell) && (index == 3 || index == 4) &&
       s.text != null && s.style[mxConstants.STYLE_WHITE_SPACE] == 'wrap')
   {
-    var label = this.graph.getLabel(s.cell);
-    var fontSize = mxUtils.getNumber(s.style, mxConstants.STYLE_FONTSIZE, mxConstants.DEFAULT_FONTSIZE);
-    var ww = result.width / s.view.scale - s.text.spacingRight - s.text.spacingLeft
+    let label = this.graph.getLabel(s.cell);
+    let fontSize = mxUtils.getNumber(s.style, mxConstants.STYLE_FONTSIZE, mxConstants.DEFAULT_FONTSIZE);
+    let ww = result.width / s.view.scale - s.text.spacingRight - s.text.spacingLeft
 
     result.height = mxUtils.getSizeForString(label, fontSize, s.style[mxConstants.STYLE_FONTFAMILY], ww).height;
   }
@@ -211,7 +211,7 @@ mxVertexHandler.prototype.union = function(bounds, dx, dy, index, gridEnabled, s
 
 
 
 
diff --git a/docs/js-api/files/index-txt.html b/docs/js-api/files/index-txt.html
index 71274faba..cf19e0cbf 100644
--- a/docs/js-api/files/index-txt.html
+++ b/docs/js-api/files/index-txt.html
@@ -11,35 +11,35 @@ if (browserType) {document.write("
");if (browserV -

API Specification

Overview

This JavaScript library is divided into 8 packages.  The top-level mxClient class includes (or dynamically imports) everything else.  The current version is stored in mxClient.VERSION.

The editor package provides the classes required to implement a diagram editor.  The main class in this package is mxEditor.

The view and model packages implement the graph component, represented by mxGraph.  It refers to a mxGraphModel which contains mxCells and caches the state of the cells in a mxGraphView.  The cells are painted using a mxCellRenderer based on the appearance defined in mxStylesheet.  Undo history is implemented in mxUndoManager.  To display an icon on the graph, mxCellOverlay may be used.  Validation rules are defined with mxMultiplicity.

The handler, layout and shape packages contain event listeners, layout algorithms and shapes, respectively.  The graph event listeners include mxRubberband for rubberband selection, mxTooltipHandler for tooltips and mxGraphHandler for basic cell modifications.  mxCompactTreeLayout implements a tree layout algorithm, and the shape package provides various shapes, which are subclasses of mxShape.

The util package provides utility classes including mxClipboard for copy-paste, <mxDatatransfer> for drag-and-drop, mxConstants for keys and values of stylesheets, mxEvent and mxUtils for cross-browser event-handling and general purpose functions, mxResources for internationalization and mxLog for console output.

The io package implements a generic mxObjectCodec for turning JavaScript objects into XML.  The main class is mxCodecmxCodecRegistry is the global registry for custom codecs.

Events

There are three different types of events, namely native DOM events, mxEventObjects which are fired in an mxEventSource, and mxMouseEvents which are fired in mxGraph.

Some helper methods for handling native events are provided in mxEvent.  It also takes care of resolving cycles between DOM nodes and JavaScript event handlers, which can lead to memory leaks in IE6.

Most custom events in mxGraph are implemented using mxEventSource.  Its listeners are functions that take a sender and mxEventObject.  Additionally, the mxGraph class fires special mxMouseEvents which are handled using mouse listeners, which are objects that provide a mousedown, mousemove and mouseup method.

Events in mxEventSource are fired using mxEventSource.fireEvent.  Listeners are added and removed using mxEventSource.addListener and mxEventSource.removeListenermxMouseEvents in mxGraph are fired using mxGraph.fireMouseEvent.  Listeners are added and removed using mxGraph.addMouseListener and mxGraph.removeMouseListener, respectively.

Key bindings

The following key bindings are defined for mouse events in the client across all browsers and platforms:

  • Control-Drag: Duplicates (clones) selected cells
  • Shift-Rightlick: Shows the context menu
  • Alt-Click: Forces rubberband (aka. marquee)
  • Control-Select: Toggles the selection state
  • Shift-Drag: Constrains the offset to one direction
  • Shift-Control-Drag: Panning (also Shift-Rightdrag)

Configuration

The following global variables may be defined before the client is loaded to specify its language or base path, respectively.

  • mxBasePath: Specifies the path in mxClient.basePath.
  • mxImageBasePath: Specifies the path in mxClient.imageBasePath.
  • mxLanguage: Specifies the language for resources in mxClient.language.
  • mxDefaultLanguage: Specifies the default language in mxClient.defaultLanguage.
  • mxLoadResources: Specifies if any resources should be loaded.  Default is true.
  • mxLoadStylesheets: Specifies if any stylesheets should be loaded.  Default is true.

Reserved Words

The mx prefix is used for all classes and objects in mxGraph.  The mx prefix can be seen as the global namespace for all JavaScript code in mxGraph.  The following fieldnames should not be used in objects.

  • mxObjectId: If the object is used with mxObjectIdentity
  • as: If the object is a field of another object
  • id: If the object is an idref in a codec
  • mxListenerList: Added to DOM nodes when used with mxEvent
  • window._mxDynamicCode: Temporarily used to load code in Safari and Chrome (see mxClient.include).
  • _mxJavaScriptExpression: Global variable that is temporarily used to evaluate code in Safari, Opera, Firefox 3 and IE (see mxUtils.eval).

Files

The library contains these relative filenames.  All filenames are relative to mxClient.basePath.

Built-in Images

All images are loaded from the mxClient.imageBasePath, which you can change to reflect your environment.  The image variables can also be changed individually.

  • mxGraph.prototype.collapsedImage
  • mxGraph.prototype.expandedImage
  • mxGraph.prototype.warningImage
  • mxWindow.prototype.closeImage
  • mxWindow.prototype.minimizeImage
  • mxWindow.prototype.normalizeImage
  • mxWindow.prototype.maximizeImage
  • mxWindow.prototype.resizeImage
  • mxPopupMenu.prototype.submenuImage
  • mxUtils.errorImage
  • mxConstraintHandler.prototype.pointImage

The basename of the warning image (images/warning without extension) used in mxGraph.setCellWarning is defined in mxGraph.warningImage.

Resources

The mxEditor and mxGraph classes add the following resources to mxResources at class loading time:

  • resources/editor*.properties
  • resources/graph*.properties

By default, the library ships with English and German resource files.

Images

Recommendations for using images.  Use GIF images (256 color palette) in HTML elements (such as the toolbar and context menu), and PNG images (24 bit) for all images which appear inside the graph component.

  • For PNG images inside HTML elements, Internet Explorer will ignore any transparency information.
  • For GIF images inside the graph, Firefox on the Mac will display strange colors.  Furthermore, only the first image for animated GIFs is displayed on the Mac.

For faster image rendering during application runtime, images can be prefetched using the following code:

var image = new Image();
+

API Specification

Overview

This JavaScript library is divided into 8 packages.  The top-level mxClient class includes (or dynamically imports) everything else.  The current version is stored in mxClient.VERSION.

The editor package provides the classes required to implement a diagram editor.  The main class in this package is mxEditor.

The view and model packages implement the graph component, represented by mxGraph.  It refers to a mxGraphModel which contains mxCells and caches the state of the cells in a mxGraphView.  The cells are painted using a mxCellRenderer based on the appearance defined in mxStylesheet.  Undo history is implemented in mxUndoManager.  To display an icon on the graph, mxCellOverlay may be used.  Validation rules are defined with mxMultiplicity.

The handler, layout and shape packages contain event listeners, layout algorithms and shapes, respectively.  The graph event listeners include mxRubberband for rubberband selection, mxTooltipHandler for tooltips and mxGraphHandler for basic cell modifications.  mxCompactTreeLayout implements a tree layout algorithm, and the shape package provides various shapes, which are subclasses of mxShape.

The util package provides utility classes including mxClipboard for copy-paste, <mxDatatransfer> for drag-and-drop, mxConstants for keys and values of stylesheets, mxEvent and mxUtils for cross-browser event-handling and general purpose functions, mxResources for internationalization and mxLog for console output.

The io package implements a generic mxObjectCodec for turning JavaScript objects into XML.  The main class is mxCodecmxCodecRegistry is the global registry for custom codecs.

Events

There are three different types of events, namely native DOM events, mxEventObjects which are fired in an mxEventSource, and mxMouseEvents which are fired in mxGraph.

Some helper methods for handling native events are provided in mxEvent.  It also takes care of resolving cycles between DOM nodes and JavaScript event handlers, which can lead to memory leaks in IE6.

Most custom events in mxGraph are implemented using mxEventSource.  Its listeners are functions that take a sender and mxEventObject.  Additionally, the mxGraph class fires special mxMouseEvents which are handled using mouse listeners, which are objects that provide a mousedown, mousemove and mouseup method.

Events in mxEventSource are fired using mxEventSource.fireEvent.  Listeners are added and removed using mxEventSource.addListener and mxEventSource.removeListenermxMouseEvents in mxGraph are fired using mxGraph.fireMouseEvent.  Listeners are added and removed using mxGraph.addMouseListener and mxGraph.removeMouseListener, respectively.

Key bindings

The following key bindings are defined for mouse events in the client across all browsers and platforms:

  • Control-Drag: Duplicates (clones) selected cells
  • Shift-Rightlick: Shows the context menu
  • Alt-Click: Forces rubberband (aka. marquee)
  • Control-Select: Toggles the selection state
  • Shift-Drag: Constrains the offset to one direction
  • Shift-Control-Drag: Panning (also Shift-Rightdrag)

Configuration

The following global variables may be defined before the client is loaded to specify its language or base path, respectively.

  • mxBasePath: Specifies the path in mxClient.basePath.
  • mxImageBasePath: Specifies the path in mxClient.imageBasePath.
  • mxLanguage: Specifies the language for resources in mxClient.language.
  • mxDefaultLanguage: Specifies the default language in mxClient.defaultLanguage.
  • mxLoadResources: Specifies if any resources should be loaded.  Default is true.
  • mxLoadStylesheets: Specifies if any stylesheets should be loaded.  Default is true.

Reserved Words

The mx prefix is used for all classes and objects in mxGraph.  The mx prefix can be seen as the global namespace for all JavaScript code in mxGraph.  The following fieldnames should not be used in objects.

  • mxObjectId: If the object is used with mxObjectIdentity
  • as: If the object is a field of another object
  • id: If the object is an idref in a codec
  • mxListenerList: Added to DOM nodes when used with mxEvent
  • window._mxDynamicCode: Temporarily used to load code in Safari and Chrome (see mxClient.include).
  • _mxJavaScriptExpression: Global variable that is temporarily used to evaluate code in Safari, Opera, Firefox 3 and IE (see mxUtils.eval).

Files

The library contains these relative filenames.  All filenames are relative to mxClient.basePath.

Built-in Images

All images are loaded from the mxClient.imageBasePath, which you can change to reflect your environment.  The image variables can also be changed individually.

  • mxGraph.prototype.collapsedImage
  • mxGraph.prototype.expandedImage
  • mxGraph.prototype.warningImage
  • mxWindow.prototype.closeImage
  • mxWindow.prototype.minimizeImage
  • mxWindow.prototype.normalizeImage
  • mxWindow.prototype.maximizeImage
  • mxWindow.prototype.resizeImage
  • mxPopupMenu.prototype.submenuImage
  • mxUtils.errorImage
  • mxConstraintHandler.prototype.pointImage

The basename of the warning image (images/warning without extension) used in mxGraph.setCellWarning is defined in mxGraph.warningImage.

Resources

The mxEditor and mxGraph classes add the following resources to mxResources at class loading time:

  • resources/editor*.properties
  • resources/graph*.properties

By default, the library ships with English and German resource files.

Images

Recommendations for using images.  Use GIF images (256 color palette) in HTML elements (such as the toolbar and context menu), and PNG images (24 bit) for all images which appear inside the graph component.

  • For PNG images inside HTML elements, Internet Explorer will ignore any transparency information.
  • For GIF images inside the graph, Firefox on the Mac will display strange colors.  Furthermore, only the first image for animated GIFs is displayed on the Mac.

For faster image rendering during application runtime, images can be prefetched using the following code:

let image = new Image();
 image.src = url_to_image;

Deployment

The client is added to the page using the following script tag inside the head of a document:

<script type="text/javascript" src="js/mxClient.js"></script>

The deployment version of the mxClient.js file contains all required code in a single file.  For deployment, the complete javascript/src directory is required.

Source Code

If you are a source code customer and you wish to develop using the full source code, the commented source code is shipped in the javascript/devel/source.zip file.  It contains one file for each class in mxGraph.  To use the source code the source.zip file must be uncompressed and the mxClient.js URL in the HTML page must be changed to reference the uncompressed mxClient.js from the source.zip file.

Compression

When using Apache2 with mod_deflate, you can use the following directive in src/js/.htaccess to speedup the loading of the JavaScript sources:

SetOutputFilter DEFLATE

Classes

There are two types of “classes” in mxGraph: classes and singletons (where only one instance exists).  Singletons are mapped to global objects where the variable name equals the classname.  For example mxConstants is an object with all the constants defined as object fields.  Normal classes are mapped to a constructor function and a prototype which defines the instance fields and methods.  For example, mxEditor is a function and mxEditor.prototype is the prototype for the object that the mxEditor function creates.  The mx prefix is a convention that is used for all classes in the mxGraph package to avoid conflicts with other objects in the global namespace.

Subclassing

For subclassing, the superclass must provide a constructor that is either parameterless or handles an invocation with no arguments.  Furthermore, the special constructor field must be redefined after extending the prototype.  For example, the superclass of mxEditor is mxEventSource.  This is represented in JavaScript by first “inheriting” all fields and methods from the superclass by assigning the prototype to an instance of the superclass, eg. mxEditor.prototype = new mxEventSource() and redefining the constructor field using mxEditor.prototype.constructor = mxEditor.  The latter rule is applied so that the type of an object can be retrieved via the name of itÂ’s constructor using mxUtils.getFunctionName(obj.constructor).

Constructor

For subclassing in mxGraph, the same scheme should be applied.  For example, for subclassing the mxGraph class, first a constructor must be defined for the new class.  The constructor calls the super constructor with any arguments that it may have using the call function on the mxGraph function object, passing along explitely each argument:

function MyGraph(container)
 {
   mxGraph.call(this, container);
 }

The prototype of MyGraph inherits from mxGraph as follows.  As usual, the constructor is redefined after extending the superclass:

MyGraph.prototype = new mxGraph();
-MyGraph.prototype.constructor = MyGraph;

You may want to define the codec associated for the class after the above code.  This code will be executed at class loading time and makes sure the same codec is used to encode instances of mxGraph and MyGraph.

var codec = mxCodecRegistry.getCodec(mxGraph);
+MyGraph.prototype.constructor = MyGraph;

You may want to define the codec associated for the class after the above code.  This code will be executed at class loading time and makes sure the same codec is used to encode instances of mxGraph and MyGraph.

let codec = mxCodecRegistry.getCodec(mxGraph);
 codec.template = new MyGraph();
 mxCodecRegistry.register(codec);

Functions

In the prototype for MyGraph, functions of mxGraph can then be extended as follows.

MyGraph.prototype.isCellSelectable = function(cell)
 {
-  var selectable = mxGraph.prototype.isSelectable.apply(this, arguments);
+  let selectable = mxGraph.prototype.isSelectable.apply(this, arguments);
 
-  var geo = this.model.getGeometry(cell);
+  let geo = this.model.getGeometry(cell);
   return selectable && (geo == null || !geo.relative);
 }

The supercall in the first line is optional.  It is done using the apply function on the isSelectable function object of the mxGraph prototype, using the special this and arguments variables as parameters.  Calls to the superclass function are only possible if the function is not replaced in the superclass as follows, which is another way of “subclassing” in JavaScript.

mxGraph.prototype.isCellSelectable = function(cell)
 {
-  var geo = this.model.getGeometry(cell);
+  let geo = this.model.getGeometry(cell);
   return selectable &&
       (geo == null ||
       !geo.relative);
 }

The above scheme is useful if a function definition needs to be replaced completely.

In order to add new functions and fields to the subclass, the following code is used.  The example below adds a new function to return the XML representation of the graph model:

MyGraph.prototype.getXml = function()
 {
-  var enc = new mxCodec();
+  let enc = new mxCodec();
   return enc.encode(this.getModel());
 }

Variables

Likewise, a new field is declared and defined as follows.

MyGraph.prototype.myField = 'Hello, World!';

Note that the value assigned to myField is created only once, that is, all instances of MyGraph share the same value.  If you require instance-specific values, then the field must be defined in the constructor instead.

function MyGraph(container)
 {
   mxGraph.call(this, container);
 
   this.myField = new Array();
-}

Finally, a new instance of MyGraph is created using the following code, where container is a DOM node that acts as a container for the graph view:

var graph = new MyGraph(container);
+}

Finally, a new instance of MyGraph is created using the following code, where container is a DOM node that acts as a container for the graph view:

let graph = new MyGraph(container);
@@ -48,7 +48,7 @@ mxCodecRegistry.register(codec);

Functions< diff --git a/docs/js-api/files/io/mxCellCodec-js.html b/docs/js-api/files/io/mxCellCodec-js.html index 87aa8aad5..89bf02919 100644 --- a/docs/js-api/files/io/mxCellCodec-js.html +++ b/docs/js-api/files/io/mxCellCodec-js.html @@ -38,7 +38,7 @@ mxCodecRegistry.addAlias('CustomCell', 'mxCell');

diff --git a/docs/js-api/files/io/mxChildChangeCodec-js.html b/docs/js-api/files/io/mxChildChangeCodec-js.html index f01485239..195128448 100644 --- a/docs/js-api/files/io/mxChildChangeCodec-js.html +++ b/docs/js-api/files/io/mxChildChangeCodec-js.html @@ -32,7 +32,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/io/mxCodec-js.html b/docs/js-api/files/io/mxCodec-js.html index bb1937c7e..43244486c 100644 --- a/docs/js-api/files/io/mxCodec-js.html +++ b/docs/js-api/files/io/mxCodec-js.html @@ -11,15 +11,15 @@ if (browserType) {document.write("
");if (browserV -

mxCodec

XML codec for JavaScript object graphs.  See mxObjectCodec for a description of the general encoding/decoding scheme.  This class uses the codecs registered in mxCodecRegistry for encoding/decoding each object.

References

In order to resolve references, especially forward references, the mxCodec constructor must be given the document that contains the referenced elements.

Examples

The following code is used to encode a graph model.

var encoder = new mxCodec();
-var result = encoder.encode(graph.getModel());
-var xml = mxUtils.getXml(result);

Example

Using the code below, an XML document is decoded into an existing model.  The document may be obtained using one of the functions in mxUtils for loading an XML file, eg.  mxUtils.get, or using mxUtils.parseXml for parsing an XML string.

var doc = mxUtils.parseXml(xmlString);
-var codec = new mxCodec(doc);
-codec.decode(doc.documentElement, graph.getModel());

Example

This example demonstrates parsing a list of isolated cells into an existing graph model.  Note that the cells do not have a parent reference so they can be added anywhere in the cell hierarchy after parsing.

var xml = '<root><mxCell id="2" value="Hello," vertex="1"><mxGeometry x="20" y="20" width="80" height="30" as="geometry"/></mxCell><mxCell id="3" value="World!" vertex="1"><mxGeometry x="200" y="150" width="80" height="30" as="geometry"/></mxCell><mxCell id="4" value="" edge="1" source="2" target="3"><mxGeometry relative="1" as="geometry"/></mxCell></root>';
-var doc = mxUtils.parseXml(xml);
-var codec = new mxCodec(doc);
-var elt = doc.documentElement.firstChild;
-var cells = [];
+

mxCodec

XML codec for JavaScript object graphs.  See mxObjectCodec for a description of the general encoding/decoding scheme.  This class uses the codecs registered in mxCodecRegistry for encoding/decoding each object.

References

In order to resolve references, especially forward references, the mxCodec constructor must be given the document that contains the referenced elements.

Examples

The following code is used to encode a graph model.

let encoder = new mxCodec();
+let result = encoder.encode(graph.getModel());
+let xml = mxUtils.getXml(result);

Example

Using the code below, an XML document is decoded into an existing model.  The document may be obtained using one of the functions in mxUtils for loading an XML file, eg.  mxUtils.get, or using mxUtils.parseXml for parsing an XML string.

let doc = mxUtils.parseXml(xmlString);
+let codec = new mxCodec(doc);
+codec.decode(doc.documentElement, graph.getModel());

Example

This example demonstrates parsing a list of isolated cells into an existing graph model.  Note that the cells do not have a parent reference so they can be added anywhere in the cell hierarchy after parsing.

let xml = '<root><mxCell id="2" value="Hello," vertex="1"><mxGeometry x="20" y="20" width="80" height="30" as="geometry"/></mxCell><mxCell id="3" value="World!" vertex="1"><mxGeometry x="200" y="150" width="80" height="30" as="geometry"/></mxCell><mxCell id="4" value="" edge="1" source="2" target="3"><mxGeometry relative="1" as="geometry"/></mxCell></root>';
+let doc = mxUtils.parseXml(xml);
+let codec = new mxCodec(doc);
+let elt = doc.documentElement.firstChild;
+let cells = [];
 
 while (elt != null)
 {
@@ -27,16 +27,16 @@ while (elt != null)
   elt = elt.nextSibling;
 }
 
-graph.addCells(cells);

Example

Using the following code, the selection cells of a graph are encoded and the output is displayed in a dialog box.

var enc = new mxCodec();
-var cells = graph.getSelectionCells();
-mxUtils.alert(mxUtils.getPrettyXml(enc.encode(cells)));

Newlines in the XML can be converted to <br>, in which case a ‘<br>’ argument must be passed to mxUtils.getXml as the second argument.

Debugging

For debugging I/O you can use the following code to get the sequence of encoded objects:

var oldEncode = mxCodec.prototype.encode;
+graph.addCells(cells);

Example

Using the following code, the selection cells of a graph are encoded and the output is displayed in a dialog box.

let enc = new mxCodec();
+let cells = graph.getSelectionCells();
+mxUtils.alert(mxUtils.getPrettyXml(enc.encode(cells)));

Newlines in the XML can be converted to <br>, in which case a ‘<br>’ argument must be passed to mxUtils.getXml as the second argument.

Debugging

For debugging I/O you can use the following code to get the sequence of encoded objects:

let oldEncode = mxCodec.prototype.encode;
 mxCodec.prototype.encode = function(obj)
 {
   mxLog.show();
   mxLog.debug('mxCodec.encode: obj='+mxUtils.getFunctionName(obj.constructor));
 
   return oldEncode.apply(this, arguments);
-};

Note that the I/O system adds object codecs for new object automatically.  For decoding those objects, the constructor should be written as follows:

var MyObj = function(name)
+};

Note that the I/O system adds object codecs for new object automatically.  For decoding those objects, the constructor should be written as follows:

let MyObj = function(name)
 {
   // ...
 };
Summary
mxCodecXML codec for JavaScript object graphs.
Functions
mxCodecConstructs an XML encoder/decoder for the specified owner document.
Variables
documentThe owner document of the codec.
objectsMaps from IDs to objects.
elementsLookup table for resolving IDs to elements.
encodeDefaultsSpecifies if default values should be encoded.
Functions
putObjectAssoiates the given object with the given ID and returns the given object.
getObjectReturns the decoded object for the element with the specified ID in document.
lookupHook for subclassers to implement a custom lookup mechanism for cell IDs.
getElementByIdReturns the element with the given ID from document.
updateElementsReturns the element with the given ID from document.
addElementAdds the given element to elements if it has an ID.
getIdReturns the ID of the specified object.
referenceHook for subclassers to implement a custom method for retrieving IDs from objects.
encodeEncodes the specified object and returns the resulting XML node.
decodeDecodes the given XML node.
encodeCellEncoding of cell hierarchies is built-into the core, but is a higher-level function that needs to be explicitely used by the respective object encoders (eg.
isCellCodecReturns true if the given codec is a cell codec.
decodeCellDecodes cells that have been encoded using inversion, ie.
insertIntoGraphInserts the given cell into its parent and terminal cells.
setAttributeSets the attribute on the specified node to value.
@@ -61,7 +61,7 @@ mxCodec.prototype.encode = function(obj)

getObject

mxCodec.prototype.getObject = function(id)

Returns the decoded object for the element with the specified ID in document.  If the object is not known then lookup is used to find an object.  If no object is found, then the element with the respective ID from the document is parsed using decode.

-

lookup

mxCodec.prototype.lookup = function(id)

Hook for subclassers to implement a custom lookup mechanism for cell IDs.  This implementation always returns null.

Example

var codec = new mxCodec();
+

lookup

mxCodec.prototype.lookup = function(id)

Hook for subclassers to implement a custom lookup mechanism for cell IDs.  This implementation always returns null.

Example

let codec = new mxCodec();
 codec.lookup = function(id)
 {
   return model.getCell(id);
@@ -75,7 +75,7 @@ codec.lookup = function(id)
 
 

getId

mxCodec.prototype.getId = function(obj)

Returns the ID of the specified object.  This implementation calls reference first and if that returns null handles the object as an mxCell by returning their IDs using mxCell.getId.  If no ID exists for the given cell, then an on-the-fly ID is generated using mxCellPath.create.

Parameters

objObject to return the ID for.
-

reference

mxCodec.prototype.reference = function(obj)

Hook for subclassers to implement a custom method for retrieving IDs from objects.  This implementation always returns null.

Example

var codec = new mxCodec();
+

reference

mxCodec.prototype.reference = function(obj)

Hook for subclassers to implement a custom method for retrieving IDs from objects.  This implementation always returns null.

Example

let codec = new mxCodec();
 codec.reference = function(obj)
 {
   return obj.getCustomId();
@@ -102,7 +102,7 @@ codec.reference = function(obj)
 
 
 
 
diff --git a/docs/js-api/files/io/mxCodecRegistry-js.html b/docs/js-api/files/io/mxCodecRegistry-js.html
index 84b7bf4d9..dd8219b2c 100644
--- a/docs/js-api/files/io/mxCodecRegistry-js.html
+++ b/docs/js-api/files/io/mxCodecRegistry-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxCodecRegistry

Singleton class that acts as a global registry for codecs.

Adding an mxCodec

1.  Define a default codec with a new instance of the object to be handled.

var codec = new mxObjectCodec(new mxGraphModel());

2.  Define the functions required for encoding and decoding objects.

codec.encode = function(enc, obj) { ... }
+

mxCodecRegistry

Singleton class that acts as a global registry for codecs.

Adding an mxCodec

1.  Define a default codec with a new instance of the object to be handled.

let codec = new mxObjectCodec(new mxGraphModel());

2.  Define the functions required for encoding and decoding objects.

codec.encode = function(enc, obj) { ... }
 codec.decode = function(dec, node, into) { ... }

3.  Register the codec in the mxCodecRegistry.

mxCodecRegistry.register(codec);

mxObjectCodec.decode may be used to either create a new instance of an object or to configure an existing instance, in which case the into argument points to the existing object.  In this case, we say the codec “configures” the object.

Summary
mxCodecRegistrySingleton class that acts as a global registry for codecs.
Variables
codecsMaps from constructor names to codecs.
aliasesMaps from classnames to codecnames.
Functions
registerRegisters a new codec and associates the name of the template constructor in the codec with the codec object.
addAliasAdds an alias for mapping a classname to a codecname.
getCodecReturns a codec that handles objects that are constructed using the given constructor.

Variables

@@ -35,7 +35,7 @@ codec.decode = function(dec, node, into) { ... }

3.  R

diff --git a/docs/js-api/files/io/mxDefaultKeyHandlerCodec-js.html b/docs/js-api/files/io/mxDefaultKeyHandlerCodec-js.html index 757427508..2feb5676b 100644 --- a/docs/js-api/files/io/mxDefaultKeyHandlerCodec-js.html +++ b/docs/js-api/files/io/mxDefaultKeyHandlerCodec-js.html @@ -30,7 +30,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/io/mxDefaultPopupMenuCodec-js.html b/docs/js-api/files/io/mxDefaultPopupMenuCodec-js.html index c13fea0c9..67ea5c3cd 100644 --- a/docs/js-api/files/io/mxDefaultPopupMenuCodec-js.html +++ b/docs/js-api/files/io/mxDefaultPopupMenuCodec-js.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/io/mxDefaultToolbarCodec-js.html b/docs/js-api/files/io/mxDefaultToolbarCodec-js.html index 013e42a70..a526d4acb 100644 --- a/docs/js-api/files/io/mxDefaultToolbarCodec-js.html +++ b/docs/js-api/files/io/mxDefaultToolbarCodec-js.html @@ -20,7 +20,7 @@ if (browserType) {document.write("
");if (browserV

decode

codec.decode = function(dec,
node,
into)

Reads a sequence of the following child nodes and attributes:

Child Nodes

addAdds a new item to the toolbar.  See below for attributes.
separatorAdds a vertical separator.  No attributes.
hrAdds a horizontal separator.  No attributes.
brAdds a linefeed.  No attributes.

Attributes

asResource key for the label.
actionName of the action to execute in enclosing editor.
modeModename (see below).
templateTemplate name for cell insertion.
styleOptional style to override the template style.
iconIcon (relative/absolute URL).
pressedIconOptional icon for pressed state (relative/absolute URL).
idOptional ID to be used for the created DOM element.
toggleOptional 0 or 1 to disable toggling of the element.  Default is 1 (true).

The action, mode and template attributes are mutually exclusive.  The style can only be used with the template attribute.  The add node may contain another sequence of add nodes with as and action attributes to create a combo box in the toolbar.  If the icon is specified then a list of the child node is expected to have its template attribute set and the action is ignored instead.

Nodes with a specified template may define a function to be used for inserting the cloned template into the graph.  Here is an example of such a node:

<add as="Swimlane" template="swimlane" icon="images/swimlane.gif"><![CDATA[
   function (editor, cell, evt, targetCell)
   {
-    var pt = mxUtils.convertPoint(
+    let pt = mxUtils.convertPoint(
       editor.graph.container, mxEvent.getClientX(evt),
         mxEvent.getClientY(evt));
     return editor.addVertex(targetCell, cell, pt.x, pt.y);
@@ -51,7 +51,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/io/mxEditorCodec-js.html b/docs/js-api/files/io/mxEditorCodec-js.html index 386fde947..22e180f08 100644 --- a/docs/js-api/files/io/mxEditorCodec-js.html +++ b/docs/js-api/files/io/mxEditorCodec-js.html @@ -37,7 +37,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/io/mxGenericChangeCodec-js.html b/docs/js-api/files/io/mxGenericChangeCodec-js.html index 84fa712f7..46f055cb2 100644 --- a/docs/js-api/files/io/mxGenericChangeCodec-js.html +++ b/docs/js-api/files/io/mxGenericChangeCodec-js.html @@ -15,7 +15,7 @@ if (browserType) {document.write("
");if (browserV

Functions

-

mxGenericChangeCodec

var mxGenericChangeCodec = function(obj,
variable)

Factory function that creates a mxObjectCodec for the specified change and fieldname.

Parameters

objAn instance of the change object.
variableThe fieldname for the change data.
+

mxGenericChangeCodec

let mxGenericChangeCodec = function(obj,
variable)

Factory function that creates a mxObjectCodec for the specified change and fieldname.

Parameters

objAn instance of the change object.
variableThe fieldname for the change data.

afterDecode

codec.afterDecode = function(dec,
node,
obj)

Restores the state by assigning the previous value.

@@ -26,14 +26,14 @@ if (browserType) {document.write("
");if (browserV -
Action to change a user object in a model.
Action to change a cell’s style in a model.
Action to change a cell’s geometry in a model.
Action to change a cell’s collapsed state in a model.
Action to change a cell’s visible state in a model.
var mxGenericChangeCodec = function(obj,
variable)
Factory function that creates a mxObjectCodec for the specified change and fieldname.
Generic codec for JavaScript objects that implements a mapping between JavaScript objects and XML nodes that maps each field or element to an attribute or child node, and vice versa.
codec.afterDecode = function(dec,
node,
obj)
Restores the state by assigning the previous value.
XML codec for JavaScript object graphs.
Singleton class that acts as a global registry for codecs.
+
Action to change a user object in a model.
Action to change a cell’s style in a model.
Action to change a cell’s geometry in a model.
Action to change a cell’s collapsed state in a model.
Action to change a cell’s visible state in a model.
let mxGenericChangeCodec = function(obj,
variable)
Factory function that creates a mxObjectCodec for the specified change and fieldname.
Generic codec for JavaScript objects that implements a mapping between JavaScript objects and XML nodes that maps each field or element to an attribute or child node, and vice versa.
codec.afterDecode = function(dec,
node,
obj)
Restores the state by assigning the previous value.
XML codec for JavaScript object graphs.
Singleton class that acts as a global registry for codecs.
diff --git a/docs/js-api/files/io/mxGraphCodec-js.html b/docs/js-api/files/io/mxGraphCodec-js.html index da5a7b369..e51df9c32 100644 --- a/docs/js-api/files/io/mxGraphCodec-js.html +++ b/docs/js-api/files/io/mxGraphCodec-js.html @@ -20,7 +20,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/io/mxGraphViewCodec-js.html b/docs/js-api/files/io/mxGraphViewCodec-js.html index 87a954699..c5b71c16b 100644 --- a/docs/js-api/files/io/mxGraphViewCodec-js.html +++ b/docs/js-api/files/io/mxGraphViewCodec-js.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/io/mxModelCodec-js.html b/docs/js-api/files/io/mxModelCodec-js.html index c66e73f1b..b16a5ec9d 100644 --- a/docs/js-api/files/io/mxModelCodec-js.html +++ b/docs/js-api/files/io/mxModelCodec-js.html @@ -28,7 +28,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/io/mxObjectCodec-js.html b/docs/js-api/files/io/mxObjectCodec-js.html index 0169bee55..f3cdee6f9 100644 --- a/docs/js-api/files/io/mxObjectCodec-js.html +++ b/docs/js-api/files/io/mxObjectCodec-js.html @@ -11,13 +11,13 @@ if (browserType) {document.write("
");if (browserV -

mxObjectCodec

Generic codec for JavaScript objects that implements a mapping between JavaScript objects and XML nodes that maps each field or element to an attribute or child node, and vice versa.

Atomic Values

Consider the following example.

var obj = {};
+

mxObjectCodec

Generic codec for JavaScript objects that implements a mapping between JavaScript objects and XML nodes that maps each field or element to an attribute or child node, and vice versa.

Atomic Values

Consider the following example.

let obj = {};
 obj.foo = "Foo";
-obj.bar = "Bar";

This object is encoded into an XML node using the following.

var enc = new mxCodec();
-var node = enc.encode(obj);

The output of the encoding may be viewed using mxLog as follows.

mxLog.show();
-mxLog.debug(mxUtils.getPrettyXml(node));

Finally, the result of the encoding looks as follows.

<Object foo="Foo" bar="Bar"/>

In the above output, the foo and bar fields have been mapped to attributes with the same names, and the name of the constructor was used for the nodename.

Booleans

Since booleans are numbers in JavaScript, all boolean values are encoded into 1 for true and 0 for false.  The decoder also accepts the string true and false for boolean values.

Objects

The above scheme is applied to all atomic fields, that is, to all non-object fields of an object.  For object fields, a child node is created with a special attribute that contains the fieldname.  This special attribute is called “as” and hence, as is a reserved word that should not be used for a fieldname.

Consider the following example where foo is an object and bar is an atomic property of foo.

var obj = {foo: {bar: "Bar"}};

This will be mapped to the following XML structure by mxObjectCodec.

<Object>
+obj.bar = "Bar";

This object is encoded into an XML node using the following.

let enc = new mxCodec();
+let node = enc.encode(obj);

The output of the encoding may be viewed using mxLog as follows.

mxLog.show();
+mxLog.debug(mxUtils.getPrettyXml(node));

Finally, the result of the encoding looks as follows.

<Object foo="Foo" bar="Bar"/>

In the above output, the foo and bar fields have been mapped to attributes with the same names, and the name of the constructor was used for the nodename.

Booleans

Since booleans are numbers in JavaScript, all boolean values are encoded into 1 for true and 0 for false.  The decoder also accepts the string true and false for boolean values.

Objects

The above scheme is applied to all atomic fields, that is, to all non-object fields of an object.  For object fields, a child node is created with a special attribute that contains the fieldname.  This special attribute is called “as” and hence, as is a reserved word that should not be used for a fieldname.

Consider the following example where foo is an object and bar is an atomic property of foo.

let obj = {foo: {bar: "Bar"}};

This will be mapped to the following XML structure by mxObjectCodec.

<Object>
   <Object bar="Bar" as="foo"/>
-</Object>

In the above output, the inner Object node contains the as-attribute that specifies the fieldname in the enclosing object.  That is, the field foo was mapped to a child node with an as-attribute that has the value foo.

Arrays

Arrays are special objects that are either associative, in which case each key, value pair is treated like a field where the key is the fieldname, or they are a sequence of atomic values and objects, which is mapped to a sequence of child nodes.  For object elements, the above scheme is applied without the use of the special as-attribute for creating each child.  For atomic elements, a special add-node is created with the value stored in the value-attribute.

For example, the following array contains one atomic value and one object with a field called bar.  Furthermore it contains two associative entries called bar with an atomic value, and foo with an object value.

var obj = ["Bar", {bar: "Bar"}];
+</Object>

In the above output, the inner Object node contains the as-attribute that specifies the fieldname in the enclosing object.  That is, the field foo was mapped to a child node with an as-attribute that has the value foo.

Arrays

Arrays are special objects that are either associative, in which case each key, value pair is treated like a field where the key is the fieldname, or they are a sequence of atomic values and objects, which is mapped to a sequence of child nodes.  For object elements, the above scheme is applied without the use of the special as-attribute for creating each child.  For atomic elements, a special add-node is created with the value stored in the value-attribute.

For example, the following array contains one atomic value and one object with a field called bar.  Furthermore it contains two associative entries called bar with an atomic value, and foo with an object value.

let obj = ["Bar", {bar: "Bar"}];
 obj["bar"] = "Bar";
 obj["foo"] = {bar: "Bar"};

This array is represented by the following XML nodes.

<Array bar="Bar">
   <add value="Bar"/>
@@ -29,7 +29,7 @@ obj["foo"] = {bar: "Bar"};

This array i

Functions

-

mxObjectCodec

function mxObjectCodec(template,
exclude,
idrefs,
mapping)

Constructs a new codec for the specified template object.  The variables in the optional exclude array are ignored by the codec.  Variables in the optional idrefs array are turned into references in the XML.  The optional mapping may be used to map from variable names to XML attributes.  The argument is created as follows:

var mapping = {};
+

mxObjectCodec

function mxObjectCodec(template,
exclude,
idrefs,
mapping)

Constructs a new codec for the specified template object.  The variables in the optional exclude array are ignored by the codec.  Variables in the optional idrefs array are turned into references in the XML.  The optional mapping may be used to map from variable names to XML attributes.  The argument is created as follows:

let mapping = {};
 mapping['variableName'] = 'attribute-name';

Parameters

templatePrototypical instance of the object to be encoded/decoded.
excludeOptional array of fieldnames to be ignored.
idrefsOptional array of fieldnames to be converted to/from references.
mappingOptional mapping from field- to attributenames.

Variables

@@ -121,7 +121,7 @@ mapping['variableName'] = 'attribute-name';
diff --git a/docs/js-api/files/io/mxRootChangeCodec-js.html b/docs/js-api/files/io/mxRootChangeCodec-js.html index 498f2fea4..455b2753d 100644 --- a/docs/js-api/files/io/mxRootChangeCodec-js.html +++ b/docs/js-api/files/io/mxRootChangeCodec-js.html @@ -28,7 +28,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/io/mxStylesheetCodec-js.html b/docs/js-api/files/io/mxStylesheetCodec-js.html index af9c976a8..b5e046ce2 100644 --- a/docs/js-api/files/io/mxStylesheetCodec-js.html +++ b/docs/js-api/files/io/mxStylesheetCodec-js.html @@ -39,7 +39,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/io/mxTerminalChangeCodec-js.html b/docs/js-api/files/io/mxTerminalChangeCodec-js.html index 222ee50fe..b26e716cc 100644 --- a/docs/js-api/files/io/mxTerminalChangeCodec-js.html +++ b/docs/js-api/files/io/mxTerminalChangeCodec-js.html @@ -24,7 +24,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html b/docs/js-api/files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html index fcdeef716..dc9c3d3b4 100644 --- a/docs/js-api/files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html +++ b/docs/js-api/files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html @@ -64,7 +64,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html b/docs/js-api/files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html index f875e34fd..371634f6f 100644 --- a/docs/js-api/files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html +++ b/docs/js-api/files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html @@ -52,7 +52,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/layout/hierarchical/model/mxGraphHierarchyModel-js.html b/docs/js-api/files/layout/hierarchical/model/mxGraphHierarchyModel-js.html index f3421bd79..5e1a1f919 100644 --- a/docs/js-api/files/layout/hierarchical/model/mxGraphHierarchyModel-js.html +++ b/docs/js-api/files/layout/hierarchical/model/mxGraphHierarchyModel-js.html @@ -58,7 +58,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/layout/hierarchical/model/mxGraphHierarchyNode-js.html b/docs/js-api/files/layout/hierarchical/model/mxGraphHierarchyNode-js.html index 3b8868980..748c4ac8c 100644 --- a/docs/js-api/files/layout/hierarchical/model/mxGraphHierarchyNode-js.html +++ b/docs/js-api/files/layout/hierarchical/model/mxGraphHierarchyNode-js.html @@ -54,7 +54,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/layout/hierarchical/model/mxSwimlaneModel-js.html b/docs/js-api/files/layout/hierarchical/model/mxSwimlaneModel-js.html index 9904369e2..e4d19416c 100644 --- a/docs/js-api/files/layout/hierarchical/model/mxSwimlaneModel-js.html +++ b/docs/js-api/files/layout/hierarchical/model/mxSwimlaneModel-js.html @@ -62,7 +62,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/layout/hierarchical/mxHierarchicalLayout-js.html b/docs/js-api/files/layout/hierarchical/mxHierarchicalLayout-js.html index 5da9a332b..ce5fdfc98 100644 --- a/docs/js-api/files/layout/hierarchical/mxHierarchicalLayout-js.html +++ b/docs/js-api/files/layout/hierarchical/mxHierarchicalLayout-js.html @@ -92,7 +92,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/layout/hierarchical/mxSwimlaneLayout-js.html b/docs/js-api/files/layout/hierarchical/mxSwimlaneLayout-js.html index c99c051f1..9478421ac 100644 --- a/docs/js-api/files/layout/hierarchical/mxSwimlaneLayout-js.html +++ b/docs/js-api/files/layout/hierarchical/mxSwimlaneLayout-js.html @@ -98,7 +98,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/layout/hierarchical/stage/mxCoordinateAssignment-js.html b/docs/js-api/files/layout/hierarchical/stage/mxCoordinateAssignment-js.html index 0782f3e3d..45b79076a 100644 --- a/docs/js-api/files/layout/hierarchical/stage/mxCoordinateAssignment-js.html +++ b/docs/js-api/files/layout/hierarchical/stage/mxCoordinateAssignment-js.html @@ -108,7 +108,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/layout/hierarchical/stage/mxHierarchicalLayoutStage-js.html b/docs/js-api/files/layout/hierarchical/stage/mxHierarchicalLayoutStage-js.html index 85b1bdd6e..f9887409d 100644 --- a/docs/js-api/files/layout/hierarchical/stage/mxHierarchicalLayoutStage-js.html +++ b/docs/js-api/files/layout/hierarchical/stage/mxHierarchicalLayoutStage-js.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html b/docs/js-api/files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html index 977e9968e..b21c6e460 100644 --- a/docs/js-api/files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html +++ b/docs/js-api/files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html @@ -70,7 +70,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/layout/hierarchical/stage/mxMinimumCycleRemover-js.html b/docs/js-api/files/layout/hierarchical/stage/mxMinimumCycleRemover-js.html index a820701e8..d61116010 100644 --- a/docs/js-api/files/layout/hierarchical/stage/mxMinimumCycleRemover-js.html +++ b/docs/js-api/files/layout/hierarchical/stage/mxMinimumCycleRemover-js.html @@ -32,7 +32,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/layout/hierarchical/stage/mxSwimlaneOrdering-js.html b/docs/js-api/files/layout/hierarchical/stage/mxSwimlaneOrdering-js.html index b7c58576c..41b84f184 100644 --- a/docs/js-api/files/layout/hierarchical/stage/mxSwimlaneOrdering-js.html +++ b/docs/js-api/files/layout/hierarchical/stage/mxSwimlaneOrdering-js.html @@ -32,7 +32,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/layout/mxCircleLayout-js.html b/docs/js-api/files/layout/mxCircleLayout-js.html index a90856a05..aac67a06b 100644 --- a/docs/js-api/files/layout/mxCircleLayout-js.html +++ b/docs/js-api/files/layout/mxCircleLayout-js.html @@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxCircleLayout

Extends mxGraphLayout to implement a circluar layout for a given radius.  The vertices do not need to be connected for this layout to work and all connections between vertices are not taken into account.

Example

var layout = new mxCircleLayout(graph);
+

mxCircleLayout

Extends mxGraphLayout to implement a circluar layout for a given radius.  The vertices do not need to be connected for this layout to work and all connections between vertices are not taken into account.

Example

let layout = new mxCircleLayout(graph);
 layout.execute(graph.getDefaultParent());
Summary
mxCircleLayoutExtends mxGraphLayout to implement a circluar layout for a given radius.
Functions
mxCircleLayoutConstructs a new circular layout for the specified radius.
Variables
radiusInteger specifying the size of the radius.
moveCircleBoolean specifying if the circle should be moved to the top, left corner specified by x0 and y0.
x0Integer specifying the left coordinate of the circle.
y0Integer specifying the top coordinate of the circle.
resetEdgesSpecifies if all edge points of traversed edges should be removed.
disableEdgeStyleSpecifies if the STYLE_NOEDGESTYLE flag should be set on edges that are modified by the result.
Functions
executeImplements mxGraphLayout.execute.
getRadiusReturns the radius to be used for the given vertex count.
circleExecutes the circular layout for the specified array of vertices and the given radius.

Functions

@@ -47,7 +47,7 @@ layout.execute(graph.getDefaultParent());
diff --git a/docs/js-api/files/layout/mxCompactTreeLayout-js.html b/docs/js-api/files/layout/mxCompactTreeLayout-js.html index 854324270..ea74b5c53 100644 --- a/docs/js-api/files/layout/mxCompactTreeLayout-js.html +++ b/docs/js-api/files/layout/mxCompactTreeLayout-js.html @@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxCompactTreeLayout

Extends mxGraphLayout to implement a compact tree (Moen) algorithm.  This layout is suitable for graphs that have no cycles (trees).  Vertices that are not connected to the tree will be ignored by this layout.

Example

var layout = new mxCompactTreeLayout(graph);
+

mxCompactTreeLayout

Extends mxGraphLayout to implement a compact tree (Moen) algorithm.  This layout is suitable for graphs that have no cycles (trees).  Vertices that are not connected to the tree will be ignored by this layout.

Example

let layout = new mxCompactTreeLayout(graph);
 layout.execute(graph.getDefaultParent());
Summary
mxCompactTreeLayoutExtends mxGraphLayout to implement a compact tree (Moen) algorithm.
Functions
mxCompactTreeLayoutConstructs a new compact tree layout for the specified graph and orientation.
Variables
horizontalSpecifies the orientation of the layout.
invertSpecifies if edge directions should be inverted.
resizeParentIf the parents should be resized to match the width/height of the children.
maintainParentLocationSpecifies if the parent location should be maintained, so that the top, left corner stays the same before and after execution of the layout.
groupPaddingPadding added to resized parents.
groupPaddingTopTop padding added to resized parents.
groupPaddingRightRight padding added to resized parents.
groupPaddingBottomBottom padding added to resized parents.
groupPaddingLeftLeft padding added to resized parents.
parentsChangedA set of the parents that need updating based on children process as part of the layout.
moveTreeSpecifies if the tree should be moved to the top, left corner if it is inside a top-level layer.
visitedSpecifies if the tree should be moved to the top, left corner if it is inside a top-level layer.
levelDistanceHolds the levelDistance.
nodeDistanceHolds the nodeDistance.
resetEdgesSpecifies if all edge points of traversed edges should be removed.
prefHozEdgeSepThe preferred horizontal distance between edges exiting a vertex.
prefVertEdgeOffThe preferred vertical offset between edges exiting a vertex.
minEdgeJettyThe minimum distance for an edge jetty from a vertex.
channelBufferThe size of the vertical buffer in the center of inter-rank channels where edge control points should not be placed.
edgeRoutingWhether or not to apply the internal tree edge routing.
sortEdgesSpecifies if edges should be sorted according to the order of their opposite terminal cell in the model.
alignRanksWhether or not the tops of cells in each rank should be aligned across the rank
maxRankHeightAn array of the maximum height of cells (relative to the layout direction) per rank
rootThe cell to use as the root of the tree
nodeThe internal node representation of the root cell.
Functions
isVertexIgnoredReturns a boolean indicating if the given mxCell should be ignored as a vertex.
isHorizontalReturns horizontal.
executeImplements mxGraphLayout.execute.
moveNodeMoves the specified node and all of its children by the given amount.
sortOutgoingEdgesCalled if sortEdges is true to sort the array of outgoing edges in place.
findRankHeightsStores the maximum height (relative to the layout direction) of cells in each rank
setCellHeightsSet the cells heights (relative to the layout direction) when the tops of each rank are to be aligned
dfsDoes a depth first search starting at the specified cell.
layoutStarts the actual compact tree layout algorithm at the given node.
horizontalLayout
verticalLayout
attachParent
layoutLeaf
join
merge
offset
bridge
createNode
apply
createLine
adjustParentsAdjust parent cells whose child geometries have changed.
localEdgeProcessingMoves the specified node and all of its children by the given amount.
processNodeOutgoingSeparates the x position of edges as they connect to vertices

Functions

@@ -125,7 +125,7 @@ layout.execute(graph.getDefaultParent());
diff --git a/docs/js-api/files/layout/mxCompositeLayout-js.html b/docs/js-api/files/layout/mxCompositeLayout-js.html index 83ac2e841..c5b6e9fce 100644 --- a/docs/js-api/files/layout/mxCompositeLayout-js.html +++ b/docs/js-api/files/layout/mxCompositeLayout-js.html @@ -11,9 +11,9 @@ if (browserType) {document.write("
");if (browserV -

mxCompositeLayout

Allows to compose multiple layouts into a single layout.  The master layout is the layout that handles move operations if another layout than the first element in layouts should be used.  The master layout is not executed as the code assumes that it is part of layouts.

Example

var first = new mxFastOrganicLayout(graph);
-var second = new mxParallelEdgeLayout(graph);
-var layout = new mxCompositeLayout(graph, [first, second], first);
+

mxCompositeLayout

Allows to compose multiple layouts into a single layout.  The master layout is the layout that handles move operations if another layout than the first element in layouts should be used.  The master layout is not executed as the code assumes that it is part of layouts.

Example

let first = new mxFastOrganicLayout(graph);
+let second = new mxParallelEdgeLayout(graph);
+let layout = new mxCompositeLayout(graph, [first, second], first);
 layout.execute(graph.getDefaultParent());
Summary
mxCompositeLayoutAllows to compose multiple layouts into a single layout.
Functions
mxCompositeLayoutConstructs a new layout using the given layouts.
Variables
layoutsHolds the array of mxGraphLayouts that this layout contains.
masterReference to the mxGraphLayouts that handles moves.
Functions
moveCellImplements mxGraphLayout.moveCell by calling move on master or the first layout in layouts.
executeImplements mxGraphLayout.execute by executing all layouts in a single transaction.

Functions

@@ -39,7 +39,7 @@ layout.execute(graph.getDefaultParent());
diff --git a/docs/js-api/files/layout/mxEdgeLabelLayout-js.html b/docs/js-api/files/layout/mxEdgeLabelLayout-js.html index 13f80c00f..011cbaef8 100644 --- a/docs/js-api/files/layout/mxEdgeLabelLayout-js.html +++ b/docs/js-api/files/layout/mxEdgeLabelLayout-js.html @@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxEdgeLabelLayout

Extends mxGraphLayout to implement an edge label layout.  This layout makes use of cell states, which means the graph must be validated in a graph view (so that the label bounds are available) before this layout can be executed.

Example

var layout = new mxEdgeLabelLayout(graph);
+

mxEdgeLabelLayout

Extends mxGraphLayout to implement an edge label layout.  This layout makes use of cell states, which means the graph must be validated in a graph view (so that the label bounds are available) before this layout can be executed.

Example

let layout = new mxEdgeLabelLayout(graph);
 layout.execute(graph.getDefaultParent());
Summary
mxEdgeLabelLayoutExtends mxGraphLayout to implement an edge label layout.
Functions
mxEdgeLabelLayoutConstructs a new edge label layout.
executeImplements mxGraphLayout.execute.
placeLabelsPlaces the labels of the given edges.
avoidPlaces the labels of the given edges.

Functions

@@ -31,7 +31,7 @@ layout.execute(graph.getDefaultParent());
diff --git a/docs/js-api/files/layout/mxFastOrganicLayout-js.html b/docs/js-api/files/layout/mxFastOrganicLayout-js.html index a1af076c9..2b3dc9a89 100644 --- a/docs/js-api/files/layout/mxFastOrganicLayout-js.html +++ b/docs/js-api/files/layout/mxFastOrganicLayout-js.html @@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxFastOrganicLayout

Extends mxGraphLayout to implement a fast organic layout algorithm.  The vertices need to be connected for this layout to work, vertices with no connections are ignored.

Example

var layout = new mxFastOrganicLayout(graph);
+

mxFastOrganicLayout

Extends mxGraphLayout to implement a fast organic layout algorithm.  The vertices need to be connected for this layout to work, vertices with no connections are ignored.

Example

let layout = new mxFastOrganicLayout(graph);
 layout.execute(graph.getDefaultParent());
Summary
mxFastOrganicLayoutExtends mxGraphLayout to implement a fast organic layout algorithm.
Functions
mxCompactTreeLayoutConstructs a new fast organic layout for the specified graph.
Variables
useInputOriginSpecifies if the top left corner of the input cells should be the origin of the layout result.
resetEdgesSpecifies if all edge points of traversed edges should be removed.
disableEdgeStyleSpecifies if the STYLE_NOEDGESTYLE flag should be set on edges that are modified by the result.
forceConstantThe force constant by which the attractive forces are divided and the replusive forces are multiple by the square of.
forceConstantSquaredCache of <forceConstant>^2 for performance.
minDistanceLimitMinimal distance limit.
maxDistanceLimitMaximal distance limit.
minDistanceLimitSquaredCached version of minDistanceLimit squared.
initialTempStart value of temperature.
temperatureTemperature to limit displacement at later stages of layout.
maxIterationsTotal number of iterations to run the layout though.
iterationCurrent iteration count.
vertexArrayAn array of all vertices to be laid out.
dispXAn array of locally stored X co-ordinate displacements for the vertices.
dispYAn array of locally stored Y co-ordinate displacements for the vertices.
cellLocationAn array of locally stored co-ordinate positions for the vertices.
radiusThe approximate radius of each cell, nodes only.
radiusSquaredThe approximate radius squared of each cell, nodes only.
isMoveableArray of booleans representing the movable states of the vertices.
neighboursLocal copy of cell neighbours.
indicesHashtable from cells to local indices.
allowedToRunBoolean flag that specifies if the layout is allowed to run.
Functions
isVertexIgnoredReturns a boolean indicating if the given mxCell should be ignored as a vertex.
executeImplements mxGraphLayout.execute.
calcPositionsTakes the displacements calculated for each cell and applies them to the local cache of cell positions.
calcAttractionCalculates the attractive forces between all laid out nodes linked by edges
calcRepulsionCalculates the repulsive forces between all laid out nodes
reduceTemperatureReduces the temperature of the layout from an initial setting in a linear fashion to zero.

Functions

@@ -85,7 +85,7 @@ layout.execute(graph.getDefaultParent());
diff --git a/docs/js-api/files/layout/mxGraphLayout-js.html b/docs/js-api/files/layout/mxGraphLayout-js.html index 87e878e94..376259e72 100644 --- a/docs/js-api/files/layout/mxGraphLayout-js.html +++ b/docs/js-api/files/layout/mxGraphLayout-js.html @@ -38,7 +38,7 @@ if (browserType) {document.write("
");if (browserV

getConstraint

mxGraphLayout.prototype.getConstraint = function(key,
cell,
edge,
source)

Returns the constraint for the given key and cell.  The optional edge and source arguments are used to return inbound and outgoing routing- constraints for the given edge and vertex.  This implementation always returns the value for the given key in the style of the given cell.

Parameters

keyKey of the constraint to be returned.
cellmxCell whose constraint should be returned.
edgeOptional mxCell that represents the connection whose constraint should be returned.  Default is null.
sourceOptional boolean that specifies if the connection is incoming or outgoing.  Default is null.

traverse

mxGraphLayout.traverse = function(vertex,
directed,
func,
edge,
visited)

Traverses the (directed) graph invoking the given function for each visited vertex and edge.  The function is invoked with the current vertex and the incoming edge as a parameter.  This implementation makes sure each vertex is only visited once.  The function may return false if the traversal should stop at the given vertex.

Example

mxLog.show();
-var cell = graph.getSelectionCell();
+let cell = graph.getSelectionCell();
 graph.traverse(cell, false, function(vertex, edge)
 {
   mxLog.debug(graph.getLabel(vertex));
@@ -95,7 +95,7 @@ graph.traverse(cell, false, function(vertex, edge)
 
 
 
 
diff --git a/docs/js-api/files/layout/mxParallelEdgeLayout-js.html b/docs/js-api/files/layout/mxParallelEdgeLayout-js.html
index 3e15f7bc5..1d659cc6d 100644
--- a/docs/js-api/files/layout/mxParallelEdgeLayout-js.html
+++ b/docs/js-api/files/layout/mxParallelEdgeLayout-js.html
@@ -11,15 +11,15 @@ if (browserType) {document.write("
");if (browserV -

mxParallelEdgeLayout

Extends mxGraphLayout for arranging parallel edges.  This layout works on edges for all pairs of vertices where there is more than one edge connecting the latter.

Example

var layout = new mxParallelEdgeLayout(graph);
-layout.execute(graph.getDefaultParent());

To run the layout for the parallel edges of a changed edge only, the following code can be used.

var layout = new mxParallelEdgeLayout(graph);
+

mxParallelEdgeLayout

Extends mxGraphLayout for arranging parallel edges.  This layout works on edges for all pairs of vertices where there is more than one edge connecting the latter.

Example

let layout = new mxParallelEdgeLayout(graph);
+layout.execute(graph.getDefaultParent());

To run the layout for the parallel edges of a changed edge only, the following code can be used.

let layout = new mxParallelEdgeLayout(graph);
 
 graph.addListener(mxEvent.CELL_CONNECTED, function(sender, evt)
 {
-  var model = graph.getModel();
-  var edge = evt.getProperty('edge');
-  var src = model.getTerminal(edge, true);
-  var trg = model.getTerminal(edge, false);
+  let model = graph.getModel();
+  let edge = evt.getProperty('edge');
+  let src = model.getTerminal(edge, true);
+  let trg = model.getTerminal(edge, false);
 
   layout.isEdgeIgnored = function(edge2)
   {
@@ -61,7 +61,7 @@ graph.addListener(mxEvent.CELL_CONNECTED, function(sender, evt)
 
 
 
 
diff --git a/docs/js-api/files/layout/mxPartitionLayout-js.html b/docs/js-api/files/layout/mxPartitionLayout-js.html
index 6f827c916..6baca8682 100644
--- a/docs/js-api/files/layout/mxPartitionLayout-js.html
+++ b/docs/js-api/files/layout/mxPartitionLayout-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxPartitionLayout

Extends mxGraphLayout for partitioning the parent cell vertically or horizontally by filling the complete area with the child cells.  A horizontal layout partitions the height of the given parent whereas a a non-horizontal layout partitions the width.  If the parent is a layer (that is, a child of the root node), then the current graph size is partitioned.  The children do not need to be connected for this layout to work.

Example

var layout = new mxPartitionLayout(graph, true, 10, 20);
+

mxPartitionLayout

Extends mxGraphLayout for partitioning the parent cell vertically or horizontally by filling the complete area with the child cells.  A horizontal layout partitions the height of the given parent whereas a a non-horizontal layout partitions the width.  If the parent is a layer (that is, a child of the root node), then the current graph size is partitioned.  The children do not need to be connected for this layout to work.

Example

let layout = new mxPartitionLayout(graph, true, 10, 20);
 layout.execute(graph.getDefaultParent());
Summary
mxPartitionLayoutExtends mxGraphLayout for partitioning the parent cell vertically or horizontally by filling the complete area with the child cells.
Functions
mxPartitionLayoutConstructs a new stack layout layout for the specified graph, spacing, orientation and offset.
Variables
horizontalBoolean indicating the direction in which the space is partitioned.
spacingInteger that specifies the absolute spacing in pixels between the children.
borderInteger that specifies the absolute inset in pixels for the parent that contains the children.
resizeVerticesBoolean that specifies if vertices should be resized.
Functions
isHorizontalReturns horizontal.
moveCellImplements mxGraphLayout.moveCell.
executeImplements mxGraphLayout.execute.

Functions

@@ -43,7 +43,7 @@ layout.execute(graph.getDefaultParent());
diff --git a/docs/js-api/files/layout/mxRadialTreeLayout-js.html b/docs/js-api/files/layout/mxRadialTreeLayout-js.html index 8fff972e1..09c293c0d 100644 --- a/docs/js-api/files/layout/mxRadialTreeLayout-js.html +++ b/docs/js-api/files/layout/mxRadialTreeLayout-js.html @@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxRadialTreeLayout

Extends mxGraphLayout to implement a radial tree algorithm.  This layout is suitable for graphs that have no cycles (trees).  Vertices that are not connected to the tree will be ignored by this layout.

Example

var layout = new mxRadialTreeLayout(graph);
+

mxRadialTreeLayout

Extends mxGraphLayout to implement a radial tree algorithm.  This layout is suitable for graphs that have no cycles (trees).  Vertices that are not connected to the tree will be ignored by this layout.

Example

let layout = new mxRadialTreeLayout(graph);
 layout.execute(graph.getDefaultParent());
Summary
mxRadialTreeLayoutExtends mxGraphLayout to implement a radial tree algorithm.
Functions
mxRadialTreeLayoutConstructs a new radial tree layout for the specified graph
Variables
angleOffsetThe initial offset to compute the angle position.
rootxThe X co-ordinate of the root cell
rootyThe Y co-ordinate of the root cell
levelDistanceHolds the levelDistance.
nodeDistanceHolds the nodeDistance.
autoRadiusSpecifies if the radios should be computed automatically
sortEdgesSpecifies if edges should be sorted according to the order of their opposite terminal cell in the model.
rowMinXArray of leftmost x coordinate of each row
rowMaxXArray of rightmost x coordinate of each row
rowMinCenXArray of x coordinate of leftmost vertex of each row
rowMaxCenXArray of x coordinate of rightmost vertex of each row
rowRadiArray of y deltas of each row behind root vertex, also the radius in the tree
rowArray of vertices on each row
Functions
isVertexIgnoredReturns a boolean indicating if the given mxCell should be ignored as a vertex.
executeImplements mxGraphLayout.execute.
calcRowDimsRecursive function to calculate the dimensions of each row

Functions

@@ -61,7 +61,7 @@ layout.execute(graph.getDefaultParent());
diff --git a/docs/js-api/files/layout/mxStackLayout-js.html b/docs/js-api/files/layout/mxStackLayout-js.html index 8ec1aefcb..bb51638d7 100644 --- a/docs/js-api/files/layout/mxStackLayout-js.html +++ b/docs/js-api/files/layout/mxStackLayout-js.html @@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxStackLayout

Extends mxGraphLayout to create a horizontal or vertical stack of the child vertices.  The children do not need to be connected for this layout to work.

Example

var layout = new mxStackLayout(graph, true);
+

mxStackLayout

Extends mxGraphLayout to create a horizontal or vertical stack of the child vertices.  The children do not need to be connected for this layout to work.

Example

let layout = new mxStackLayout(graph, true);
 layout.execute(graph.getDefaultParent());
Summary
mxStackLayoutExtends mxGraphLayout to create a horizontal or vertical stack of the child vertices.
Functions
mxStackLayoutConstructs a new stack layout layout for the specified graph, spacing, orientation and offset.
Variables
horizontalSpecifies the orientation of the layout.
spacingSpecifies the spacing between the cells.
x0Specifies the horizontal origin of the layout.
y0Specifies the vertical origin of the layout.
borderBorder to be added if fill is true.
marginTopTop margin for the child area.
marginLeftTop margin for the child area.
marginRightTop margin for the child area.
marginBottomTop margin for the child area.
keepFirstLocationBoolean indicating if the location of the first cell should be kept, that is, it will not be moved to x0 or y0.
fillBoolean indicating if dimension should be changed to fill out the parent cell.
resizeParentIf the parent should be resized to match the width/height of the stack.
resizeParentMaxUse maximum of existing value and new value for resize of parent.
resizeLastIf the last element should be resized to fill out the parent.
wrapValue at which a new column or row should be created.
borderCollapseIf the strokeWidth should be ignored.
allowGapsIf gaps should be allowed in the stack.
gridSizeGrid size for alignment of position and size.
Functions
isHorizontalReturns horizontal.
moveCellImplements mxGraphLayout.moveCell.
getParentSizeReturns the size for the parent container or the size of the graph container if the parent is a layer or the root of the model.
getLayoutCellsReturns the cells to be layouted.
snapSnaps the given value to the grid size.
executeImplements mxGraphLayout.execute.
setChildGeometrySets the specific geometry to the given child cell.
updateParentGeometryUpdates the geometry of the given parent cell.

Functions

@@ -81,7 +81,7 @@ layout.execute(graph.getDefaultParent());
diff --git a/docs/js-api/files/model/mxCell-js.html b/docs/js-api/files/model/mxCell-js.html index 96c301894..20f45e7ac 100644 --- a/docs/js-api/files/model/mxCell-js.html +++ b/docs/js-api/files/model/mxCell-js.html @@ -11,8 +11,8 @@ if (browserType) {document.write("
");if (browserV -

mxCell

Cells are the elements of the graph model.  They represent the state of the groups, vertices and edges in a graph.

Custom attributes

For custom attributes we recommend using an XML node as the value of a cell.  The following code can be used to create a cell with an XML node as the value:

var doc = mxUtils.createXmlDocument();
-var node = doc.createElement('MyNode')
+

mxCell

Cells are the elements of the graph model.  They represent the state of the groups, vertices and edges in a graph.

Custom attributes

For custom attributes we recommend using an XML node as the value of a cell.  The following code can be used to create a cell with an XML node as the value:

let doc = mxUtils.createXmlDocument();
+let node = doc.createElement('MyNode')
 node.setAttribute('label', 'MyLabel');
 node.setAttribute('attribute1', 'value1');
 graph.insertVertex(graph.getDefaultParent(), null, node, 40, 40, 80, 30);

For the label to work, mxGraph.convertValueToString and mxGraph.cellLabelChanged should be overridden as follows:

graph.convertValueToString = function(cell)
@@ -23,13 +23,13 @@ graph.insertVertex(graph.getDefaultParent(), null, node, 40, 40, 80, 30);
< } }; -var cellLabelChanged = graph.cellLabelChanged; +let cellLabelChanged = graph.cellLabelChanged; graph.cellLabelChanged = function(cell, newValue, autoSize) { if (mxUtils.isNode(cell.value)) { // Clones the value for correct undo/redo - var elt = cell.value.cloneNode(true); + let elt = cell.value.cloneNode(true); elt.setAttribute('label', newValue); newValue = elt; } @@ -164,7 +164,7 @@ graph.cellLabelChanged = function(cell, newValue, autoSize) diff --git a/docs/js-api/files/model/mxCellPath-js.html b/docs/js-api/files/model/mxCellPath-js.html index 2b730afc4..67b589e18 100644 --- a/docs/js-api/files/model/mxCellPath-js.html +++ b/docs/js-api/files/model/mxCellPath-js.html @@ -34,7 +34,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/model/mxGeometry-js.html b/docs/js-api/files/model/mxGeometry-js.html index 5cdb56835..a3cfbd5b2 100644 --- a/docs/js-api/files/model/mxGeometry-js.html +++ b/docs/js-api/files/model/mxGeometry-js.html @@ -58,7 +58,7 @@ geometry.setTerminalPoint(new mxPoint(x3, y3), false);

Cont

diff --git a/docs/js-api/files/model/mxGraphModel-js.html b/docs/js-api/files/model/mxGraphModel-js.html index baf7ba59d..e7b6bb932 100644 --- a/docs/js-api/files/model/mxGraphModel-js.html +++ b/docs/js-api/files/model/mxGraphModel-js.html @@ -11,27 +11,27 @@ if (browserType) {document.write("
");if (browserV -

mxGraphModel

Extends mxEventSource to implement a graph model.  The graph model acts as a wrapper around the cells which are in charge of storing the actual graph datastructure.  The model acts as a transactional wrapper with event notification for all changes, whereas the cells contain the atomic operations for updating the actual datastructure.

Layers

The cell hierarchy in the model must have a top-level root cell which contains the layers (typically one default layer), which in turn contain the top-level cells of the layers.  This means each cell is contained in a layer.  If no layers are required, then all new cells should be added to the default layer.

Layers are useful for hiding and showing groups of cells, or for placing groups of cells on top of other cells in the display.  To identify a layer, the isLayer function is used.  It returns true if the parent of the given cell is the root of the model.

Events

See events section for more details.  There is a new set of events for tracking transactional changes as they happen.  The events are called startEdit for the initial beginUpdate, executed for each executed change and endEdit for the terminal endUpdate.  The executed event contains a property called change which represents the change after execution.

Encoding the model

To encode a graph model, use the following code

var enc = new mxCodec();
-var node = enc.encode(graph.getModel());

This will create an XML node that contains all the model information.

Encoding and decoding changes

For the encoding of changes, a graph model listener is required that encodes each change from the given array of changes.

model.addListener(mxEvent.CHANGE, function(sender, evt)
+

mxGraphModel

Extends mxEventSource to implement a graph model.  The graph model acts as a wrapper around the cells which are in charge of storing the actual graph datastructure.  The model acts as a transactional wrapper with event notification for all changes, whereas the cells contain the atomic operations for updating the actual datastructure.

Layers

The cell hierarchy in the model must have a top-level root cell which contains the layers (typically one default layer), which in turn contain the top-level cells of the layers.  This means each cell is contained in a layer.  If no layers are required, then all new cells should be added to the default layer.

Layers are useful for hiding and showing groups of cells, or for placing groups of cells on top of other cells in the display.  To identify a layer, the isLayer function is used.  It returns true if the parent of the given cell is the root of the model.

Events

See events section for more details.  There is a new set of events for tracking transactional changes as they happen.  The events are called startEdit for the initial beginUpdate, executed for each executed change and endEdit for the terminal endUpdate.  The executed event contains a property called change which represents the change after execution.

Encoding the model

To encode a graph model, use the following code

let enc = new mxCodec();
+let node = enc.encode(graph.getModel());

This will create an XML node that contains all the model information.

Encoding and decoding changes

For the encoding of changes, a graph model listener is required that encodes each change from the given array of changes.

model.addListener(mxEvent.CHANGE, function(sender, evt)
 {
-  var changes = evt.getProperty('edit').changes;
-  var nodes = [];
-  var codec = new mxCodec();
+  let changes = evt.getProperty('edit').changes;
+  let nodes = [];
+  let codec = new mxCodec();
 
-  for (var i = 0; i < changes.length; i++)
+  for (let i = 0; i < changes.length; i++)
   {
     nodes.push(codec.encode(changes[i]));
   }
   // do something with the nodes
-});

For the decoding and execution of changes, the codec needs a lookup function that allows it to resolve cell IDs as follows:

var codec = new mxCodec();
+});

For the decoding and execution of changes, the codec needs a lookup function that allows it to resolve cell IDs as follows:

let codec = new mxCodec();
 codec.lookup = function(id)
 {
   return model.getCell(id);
-}

For each encoded change (represented by a node), the following code can be used to carry out the decoding and create a change object.

var changes = [];
-var change = codec.decode(node);
+}

For each encoded change (represented by a node), the following code can be used to carry out the decoding and create a change object.

let changes = [];
+let change = codec.decode(node);
 change.model = model;
 change.execute();
-changes.push(change);

The changes can then be dispatched using the model as follows.

var edit = new mxUndoableEdit(model, false);
+changes.push(change);

The changes can then be dispatched using the model as follows.

let edit = new mxUndoableEdit(model, false);
 edit.changes = changes;
 
 edit.notify = function()
@@ -50,11 +50,11 @@ model.fireEvent(new mxEventObject(mxEvent.CHANGE,
 
 

mxEvent.CHANGE

Fires when an undoable edit is dispatched.  The <code>edit</code> property contains the mxUndoableEdit.  The <code>changes</code> property contains the array of atomic changes inside the undoable edit.  The changes property is <strong>deprecated</strong>, please use edit.changes instead.

Example

For finding newly inserted cells, the following code can be used

graph.model.addListener(mxEvent.CHANGE, function(sender, evt)
 {
-  var changes = evt.getProperty('edit').changes;
+  let changes = evt.getProperty('edit').changes;
 
-  for (var i = 0; i < changes.length; i++)
+  for (let i = 0; i < changes.length; i++)
   {
-    var change = changes[i];
+    let change = changes[i];
 
     if (change instanceof mxChildChange &&
       change.change.previous == null)
@@ -127,15 +127,15 @@ model.fireEvent(new mxEventObject(mxEvent.CHANGE,
 
 

getDescendants

mxGraphModel.prototype.getDescendants = function(parent)

Returns all descendants of the given cell and the cell itself in an array.

Parameters

parentmxCell whose descendants should be returned.
-

filterDescendants

mxGraphModel.prototype.filterDescendants = function(filter,
parent)

Visits all cells recursively and applies the specified filter function to each cell.  If the function returns true then the cell is added to the resulting array.  The parent and result paramters are optional.  If parent is not specified then the recursion starts at root.

Example

The following example extracts all vertices from a given model:

var filter = function(cell)
+

filterDescendants

mxGraphModel.prototype.filterDescendants = function(filter,
parent)

Visits all cells recursively and applies the specified filter function to each cell.  If the function returns true then the cell is added to the resulting array.  The parent and result paramters are optional.  If parent is not specified then the recursion starts at root.

Example

The following example extracts all vertices from a given model:

let filter = function(cell)
 {
  return model.isVertex(cell);
 }
-var vertices = model.filterDescendants(filter);

Parameters

filterJavaScript function that takes an mxCell as an argument and returns a boolean.
parentOptional mxCell that is used as the root of the recursion.
+let vertices = model.filterDescendants(filter);

Parameters

filterJavaScript function that takes an mxCell as an argument and returns a boolean.
parentOptional mxCell that is used as the root of the recursion.

getRoot

mxGraphModel.prototype.getRoot = function(cell)

Returns the root of the model or the topmost parent of the given cell.

Parameters

cellOptional mxCell that specifies the child.
-

setRoot

mxGraphModel.prototype.setRoot = function(root)

Sets the root of the model using mxRootChange and adds the change to the current transaction.  This resets all datastructures in the model and is the preferred way of clearing an existing model.  Returns the new root.

Example

var root = new mxCell();
+

setRoot

mxGraphModel.prototype.setRoot = function(root)

Sets the root of the model using mxRootChange and adds the change to the current transaction.  This resets all datastructures in the model and is the preferred way of clearing an existing model.  Returns the new root.

Example

let root = new mxCell();
 root.insert(new mxCell());
 model.setRoot(root);

Parameters

rootmxCell that specifies the new root.
@@ -223,7 +223,7 @@ model.setRoot(root);

Parameters

valueForCellChanged

mxGraphModel.prototype.valueForCellChanged = function(cell,
value)

Inner callback to update the user object of the given mxCell using mxCell.valueChanged and return the previous value, that is, the return value of mxCell.valueChanged.

To change a specific attribute in an XML node, the following code can be used.

graph.getModel().valueForCellChanged = function(cell, value)
 {
-  var previous = cell.value.getAttribute('label');
+  let previous = cell.value.getAttribute('label');
   cell.value.setAttribute('label', value);
 
   return previous;
@@ -255,9 +255,9 @@ model.setRoot(root);

Parameters

execute

mxGraphModel.prototype.execute = function(change)

Executes the given edit and fires events if required.  The edit object requires an execute function which is invoked.  The edit is added to the currentEdit between beginUpdate and endUpdate calls, so that events will be fired if this execute is an individual transaction, that is, if no previous beginUpdate calls have been made without calling endUpdate.  This implementation fires an execute event before executing the given change.

Parameters

changeObject that described the change.
-

beginUpdate

mxGraphModel.prototype.beginUpdate = function()

Increments the updateLevel by one.  The event notification is queued until updateLevel reaches 0 by use of endUpdate.

All changes on mxGraphModel are transactional, that is, they are executed in a single undoable change on the model (without transaction isolation).  Therefore, if you want to combine any number of changes into a single undoable change, you should group any two or more API calls that modify the graph model between beginUpdate and endUpdate calls as shown here:

var model = graph.getModel();
-var parent = graph.getDefaultParent();
-var index = model.getChildCount(parent);
+

beginUpdate

mxGraphModel.prototype.beginUpdate = function()

Increments the updateLevel by one.  The event notification is queued until updateLevel reaches 0 by use of endUpdate.

All changes on mxGraphModel are transactional, that is, they are executed in a single undoable change on the model (without transaction isolation).  Therefore, if you want to combine any number of changes into a single undoable change, you should group any two or more API calls that modify the graph model between beginUpdate and endUpdate calls as shown here:

let model = graph.getModel();
+let parent = graph.getDefaultParent();
+let index = model.getChildCount(parent);
 model.beginUpdate();
 try
 {
@@ -358,7 +358,7 @@ finally
 

mxCellAttributeChange

Action to change the attribute of a cell’s user object.  There is no method on the graph model that uses this action.  To use the action, you can use the code shown in the example below.

Example

To change the attributeName in the cell’s user object to attributeValue, use the following code:

model.beginUpdate();
 try
 {
-  var edit = new mxCellAttributeChange(
+  let edit = new mxCellAttributeChange(
     cell, attributeName, attributeValue);
   model.execute(edit);
 }
@@ -380,7 +380,7 @@ finally
 
 
 
 
diff --git a/docs/js-api/files/mxClient-js.html b/docs/js-api/files/mxClient-js.html
index 179a38810..e73c7d7c9 100644
--- a/docs/js-api/files/mxClient-js.html
+++ b/docs/js-api/files/mxClient-js.html
@@ -89,22 +89,22 @@ if (browserType) {document.write("
");if (browserV

Variables

mxLoadResources

Optional global config variable to toggle loading of the two resource files in mxGraph and mxEditor.  Default is true.  NOTE: This is a global variable, not a variable of mxClient.  If this is false, you can use mxClient.loadResources with its callback to load the default bundles asynchronously.

<script type="text/javascript">
-     var mxLoadResources = false;
+     let mxLoadResources = false;
 </script>
 <script type="text/javascript" src="/path/to/core/directory/js/mxClient.js"></script>

mxForceIncludes

Optional global config variable to force loading the JavaScript files in development mode.  Default is undefined.  NOTE: This is a global variable, not a variable of mxClient.

<script type="text/javascript">
-     var mxLoadResources = true;
+     let mxLoadResources = true;
 </script>
 <script type="text/javascript" src="/path/to/core/directory/js/mxClient.js"></script>

mxResourceExtension

Optional global config variable to specify the extension of resource files.  Default is true.  NOTE: This is a global variable, not a variable of mxClient.

<script type="text/javascript">
-     var mxResourceExtension = '.txt';
+     let mxResourceExtension = '.txt';
 </script>
 <script type="text/javascript" src="/path/to/core/directory/js/mxClient.js"></script>

mxLoadStylesheets

Optional global config variable to toggle loading of the CSS files when the library is initialized.  Default is true.  NOTE: This is a global variable, not a variable of mxClient.

<script type="text/javascript">
-     var mxLoadStylesheets = false;
+     let mxLoadStylesheets = false;
 </script>
 <script type="text/javascript" src="/path/to/core/directory/js/mxClient.js"></script>
@@ -140,7 +140,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxActor-js.html b/docs/js-api/files/shape/mxActor-js.html index f1364877a..bec142819 100644 --- a/docs/js-api/files/shape/mxActor-js.html +++ b/docs/js-api/files/shape/mxActor-js.html @@ -40,7 +40,7 @@ SampleShape.prototype.redrawPath = function(path, x, y, w, h) diff --git a/docs/js-api/files/shape/mxArrow-js.html b/docs/js-api/files/shape/mxArrow-js.html index 448b60611..cdad0f70c 100644 --- a/docs/js-api/files/shape/mxArrow-js.html +++ b/docs/js-api/files/shape/mxArrow-js.html @@ -28,7 +28,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxArrowConnector-js.html b/docs/js-api/files/shape/mxArrowConnector-js.html index aa1fd8d02..57f10af6e 100644 --- a/docs/js-api/files/shape/mxArrowConnector-js.html +++ b/docs/js-api/files/shape/mxArrowConnector-js.html @@ -58,7 +58,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxCloud-js.html b/docs/js-api/files/shape/mxCloud-js.html index 3669f0a14..b42c3eae4 100644 --- a/docs/js-api/files/shape/mxCloud-js.html +++ b/docs/js-api/files/shape/mxCloud-js.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxConnector-js.html b/docs/js-api/files/shape/mxConnector-js.html index e3be864df..ffcf59097 100644 --- a/docs/js-api/files/shape/mxConnector-js.html +++ b/docs/js-api/files/shape/mxConnector-js.html @@ -32,7 +32,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxCylinder-js.html b/docs/js-api/files/shape/mxCylinder-js.html index ec165693a..61b973676 100644 --- a/docs/js-api/files/shape/mxCylinder-js.html +++ b/docs/js-api/files/shape/mxCylinder-js.html @@ -38,7 +38,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxDoubleEllipse-js.html b/docs/js-api/files/shape/mxDoubleEllipse-js.html index ad9f12742..286b9697b 100644 --- a/docs/js-api/files/shape/mxDoubleEllipse-js.html +++ b/docs/js-api/files/shape/mxDoubleEllipse-js.html @@ -16,7 +16,7 @@ if (browserType) {document.write("
");if (browserV c.ellipse(x, y, w, h); c.stroke(); - var inset = mxUtils.getValue(this.style, mxConstants.STYLE_MARGIN, Math.min(3 + this.strokewidth, Math.min(w / 5, h / 5))); + let inset = mxUtils.getValue(this.style, mxConstants.STYLE_MARGIN, Math.min(3 + this.strokewidth, Math.min(w / 5, h / 5))); x += inset; y += inset; w -= 2 * inset; @@ -53,7 +53,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxEllipse-js.html b/docs/js-api/files/shape/mxEllipse-js.html index 25977b513..8754e3f3f 100644 --- a/docs/js-api/files/shape/mxEllipse-js.html +++ b/docs/js-api/files/shape/mxEllipse-js.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxHexagon-js.html b/docs/js-api/files/shape/mxHexagon-js.html index f7aa3f0c7..668c92700 100644 --- a/docs/js-api/files/shape/mxHexagon-js.html +++ b/docs/js-api/files/shape/mxHexagon-js.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxImageShape-js.html b/docs/js-api/files/shape/mxImageShape-js.html index 106f22a17..37447222f 100644 --- a/docs/js-api/files/shape/mxImageShape-js.html +++ b/docs/js-api/files/shape/mxImageShape-js.html @@ -44,7 +44,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxLabel-js.html b/docs/js-api/files/shape/mxLabel-js.html index 793c931aa..d472b0f2a 100644 --- a/docs/js-api/files/shape/mxLabel-js.html +++ b/docs/js-api/files/shape/mxLabel-js.html @@ -54,7 +54,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxLine-js.html b/docs/js-api/files/shape/mxLine-js.html index f39f2f8e7..83a41b94e 100644 --- a/docs/js-api/files/shape/mxLine-js.html +++ b/docs/js-api/files/shape/mxLine-js.html @@ -28,7 +28,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxMarker-js.html b/docs/js-api/files/shape/mxMarker-js.html index 2f9b29fe1..07c38d0af 100644 --- a/docs/js-api/files/shape/mxMarker-js.html +++ b/docs/js-api/files/shape/mxMarker-js.html @@ -30,7 +30,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxPolyline-js.html b/docs/js-api/files/shape/mxPolyline-js.html index 3711e092b..f377b40de 100644 --- a/docs/js-api/files/shape/mxPolyline-js.html +++ b/docs/js-api/files/shape/mxPolyline-js.html @@ -36,7 +36,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxRectangleShape-js.html b/docs/js-api/files/shape/mxRectangleShape-js.html index 6f64ec7d6..af15e969f 100644 --- a/docs/js-api/files/shape/mxRectangleShape-js.html +++ b/docs/js-api/files/shape/mxRectangleShape-js.html @@ -32,7 +32,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxRhombus-js.html b/docs/js-api/files/shape/mxRhombus-js.html index 71f8ca21e..b97bf929c 100644 --- a/docs/js-api/files/shape/mxRhombus-js.html +++ b/docs/js-api/files/shape/mxRhombus-js.html @@ -28,7 +28,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxShape-js.html b/docs/js-api/files/shape/mxShape-js.html index 01756ee04..f27e797d4 100644 --- a/docs/js-api/files/shape/mxShape-js.html +++ b/docs/js-api/files/shape/mxShape-js.html @@ -14,7 +14,7 @@ if (browserType) {document.write("
");if (browserV

mxShape

Base class for all shapes.  A shape in mxGraph is a separate implementation for SVG, VML and HTML.  Which implementation to use is controlled by the dialect property which is assigned from within the mxCellRenderer when the shape is created.  The dialect must be assigned for a shape, and it does normally depend on the browser and the confiuration of the graph (see mxGraph rendering hint).

For each supported shape in SVG and VML, a corresponding shape exists in mxGraph, namely for text, image, rectangle, rhombus, ellipse and polyline.  The other shapes are a combination of these shapes (eg. label and swimlane) or they consist of one or more (filled) path objects (eg. actor and cylinder).  The HTML implementation is optional but may be required for a HTML-only view of the graph.

Custom Shapes

To extend from this class, the basic code looks as follows.  In the special case where the custom shape consists only of one filled region or one filled region and an additional stroke the mxActor and mxCylinder should be subclassed, respectively.

function CustomShape() { }
 
 CustomShape.prototype = new mxShape();
-CustomShape.prototype.constructor = CustomShape;

To register a custom shape in an existing graph instance, one must register the shape under a new name in the graph’s cell renderer as follows:

mxCellRenderer.registerShape('customShape', CustomShape);

The second argument is the name of the constructor.

In order to use the shape you can refer to the given name above in a stylesheet.  For example, to change the shape for the default vertex style, the following code is used:

var style = graph.getStylesheet().getDefaultVertexStyle();
+CustomShape.prototype.constructor = CustomShape;

To register a custom shape in an existing graph instance, one must register the shape under a new name in the graph’s cell renderer as follows:

mxCellRenderer.registerShape('customShape', CustomShape);

The second argument is the name of the constructor.

In order to use the shape you can refer to the given name above in a stylesheet.  For example, to change the shape for the default vertex style, the following code is used:

let style = graph.getStylesheet().getDefaultVertexStyle();
 style[mxConstants.STYLE_SHAPE] = 'customShape';
Summary
mxShapeBase class for all shapes.
Functions
mxShapeConstructs a new shape.
Variables
dialectHolds the dialect in which the shape is to be painted.
scaleHolds the scale in which the shape is being painted.
antiAliasRendering hint for configuring the canvas.
minSvgStrokeWidthMinimum stroke width for SVG output.
boundsHolds the mxRectangle that specifies the bounds of this shape.
pointsHolds the array of mxPoints that specify the points of this shape.
nodeHolds the outermost DOM node that represents this shape.
stateOptional reference to the corresponding mxCellState.
styleOptional reference to the style of the corresponding mxCellState.
boundingBoxContains the bounding box of the shape, that is, the smallest rectangle that includes all pixels of the shape.
stencilHolds the mxStencil that defines the shape.
svgStrokeToleranceEvent-tolerance for SVG strokes (in px).
pointerEventsSpecifies if pointer events should be handled.
svgPointerEventsSpecifies if pointer events should be handled.
shapePointerEventsSpecifies if pointer events outside of shape should be handled.
stencilPointerEventsSpecifies if pointer events outside of stencils should be handled.
vmlScaleScale for improving the precision of VML rendering.
outlineSpecifies if the shape should be drawn as an outline.
visibleSpecifies if the shape is visible.
useSvgBoundingBoxAllows to use the SVG bounding box in SVG.
Functions
initInitializes the shape by creaing the DOM node using create and adding it into the given container.
initStylesSets the styles to their default values.
isParseVmlSpecifies if any VML should be added via insertAdjacentHtml to the DOM.
isHtmlAllowedReturns true if HTML is allowed for this shape.
getSvgScreenOffsetReturns 0, or 0.5 if <strokewidth> % 2 == 1.
createCreates and returns the DOM node(s) for the shape in the given container.
createSvgCreates and returns the SVG node(s) to represent this shape.
createVmlCreates and returns the VML node to represent this shape.
createHtmlCreates and returns the HTML DOM node(s) to represent this shape.
reconfigureReconfigures this shape.
redrawCreates and returns the SVG node(s) to represent this shape.
clearRemoves all child nodes and resets all CSS.
updateBoundsFromPointsUpdates the bounds based on the points.
getLabelBoundsReturns the mxRectangle for the label bounds of this shape, based on the given scaled and translated bounds of the shape.
getLabelMarginsReturns the scaled top, left, bottom and right margin to be used for computing the label bounds as an mxRectangle, where the bottom and right margin are defined in the width and height of the rectangle, respectively.
checkBoundsReturns true if the bounds are not null and all of its variables are numeric.
createVmlGroupReturns the temporary element used for rendering in IE8 standards mode.
redrawShapeUpdates the SVG or VML shape.
createCanvasCreates a new canvas for drawing this shape.
createSvgCanvasCreates and returns an mxSvgCanvas2D for rendering this shape.
createVmlCanvasCreates and returns an mxVmlCanvas2D for rendering this shape.
updateVmlContainerUpdates the bounds of the VML container.
redrawHtmlAllow optimization by replacing VML with HTML.
updateHtmlFiltersAllow optimization by replacing VML with HTML.
updateHtmlColorsAllow optimization by replacing VML with HTML.
updateHtmlBoundsAllow optimization by replacing VML with HTML.
destroyCanvasDestroys the given canvas which was used for drawing.
beforePaintInvoked before paint is called.
afterPaintInvokes after paint was called.
paintGeneric rendering code.
configureCanvasSets the state of the canvas for drawing the shape.
getGradientBoundsReturns the bounding box for the gradient box for this shape.
updateTransformSets the scale and rotation on the given canvas.
paintVertexShapePaints the vertex shape.
paintBackgroundHook for subclassers.
paintForegroundHook for subclassers.
paintEdgeShapeHook for subclassers.
getArcSizeReturns the arc size for the given dimension.
paintGlassEffectPaints the glass gradient effect.
addPointsPaints the given points with rounded corners.
resetStylesResets all styles.
applyApplies the style of the given mxCellState to the shape.
setCursorSets the cursor on the given shape.
getCursorReturns the current cursor.
isRoundableHook for subclassers.
updateBoundingBoxUpdates the boundingBox for this shape using createBoundingBox and augmentBoundingBox and stores the result in boundingBox.
createBoundingBoxReturns a new rectangle that represents the bounding box of the bare shape with no shadows or strokewidths.
augmentBoundingBoxAugments the bounding box with the strokewidth and shadow offsets.
isPaintBoundsInvertedReturns true if the bounds should be inverted.
getRotationReturns the rotation from the style.
getTextRotationReturns the rotation for the text label.
getShapeRotationReturns the actual rotation of the shape.
createTransparentSvgRectangleAdds a transparent rectangle that catches all events.
setTransparentBackgroundImageSets a transparent background CSS style to catch all events.
releaseSvgGradientsPaints the line shape.
destroyDestroys the shape by removing it from the DOM and releasing the DOM node associated with the shape using mxEvent.release.

Functions

@@ -184,7 +184,7 @@ style[mxConstants.STYLE_SHAPE] = 'customShape';
diff --git a/docs/js-api/files/shape/mxStencil-js.html b/docs/js-api/files/shape/mxStencil-js.html index f62f1111e..904b1f991 100644 --- a/docs/js-api/files/shape/mxStencil-js.html +++ b/docs/js-api/files/shape/mxStencil-js.html @@ -70,7 +70,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxStencilRegistry-js.html b/docs/js-api/files/shape/mxStencilRegistry-js.html index 69bb0acca..1746c3f71 100644 --- a/docs/js-api/files/shape/mxStencilRegistry-js.html +++ b/docs/js-api/files/shape/mxStencilRegistry-js.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxSwimlane-js.html b/docs/js-api/files/shape/mxSwimlane-js.html index 8ff93f159..dc262ba10 100644 --- a/docs/js-api/files/shape/mxSwimlane-js.html +++ b/docs/js-api/files/shape/mxSwimlane-js.html @@ -54,7 +54,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxText-js.html b/docs/js-api/files/shape/mxText-js.html index 3843adab3..ef5fd5417 100644 --- a/docs/js-api/files/shape/mxText-js.html +++ b/docs/js-api/files/shape/mxText-js.html @@ -106,7 +106,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/shape/mxTriangle-js.html b/docs/js-api/files/shape/mxTriangle-js.html index 8a6dd1332..d69f96f49 100644 --- a/docs/js-api/files/shape/mxTriangle-js.html +++ b/docs/js-api/files/shape/mxTriangle-js.html @@ -28,7 +28,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxAbstractCanvas2D-js.html b/docs/js-api/files/util/mxAbstractCanvas2D-js.html index eca05bee4..3bc69a015 100644 --- a/docs/js-api/files/util/mxAbstractCanvas2D-js.html +++ b/docs/js-api/files/util/mxAbstractCanvas2D-js.html @@ -138,7 +138,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxAnimation-js.html b/docs/js-api/files/util/mxAnimation-js.html index c0ae7577d..feee1432c 100644 --- a/docs/js-api/files/util/mxAnimation-js.html +++ b/docs/js-api/files/util/mxAnimation-js.html @@ -40,7 +40,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxAutoSaveManager-js.html b/docs/js-api/files/util/mxAutoSaveManager-js.html index 37bbdad75..b1b2012a4 100644 --- a/docs/js-api/files/util/mxAutoSaveManager-js.html +++ b/docs/js-api/files/util/mxAutoSaveManager-js.html @@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxAutoSaveManager

Manager for automatically saving diagrams.  The save hook must be implemented.

Example

var mgr = new mxAutoSaveManager(editor.graph);
+

mxAutoSaveManager

Manager for automatically saving diagrams.  The save hook must be implemented.

Example

let mgr = new mxAutoSaveManager(editor.graph);
 mgr.save = function()
 {
   mxLog.show();
@@ -63,7 +63,7 @@ mgr.save = function()
 
 
 
 
diff --git a/docs/js-api/files/util/mxClipboard-js.html b/docs/js-api/files/util/mxClipboard-js.html
index eae8d182b..eeb4344bf 100644
--- a/docs/js-api/files/util/mxClipboard-js.html
+++ b/docs/js-api/files/util/mxClipboard-js.html
@@ -15,11 +15,11 @@ if (browserType) {document.write("
");if (browserV mxClipboard.paste(graph2);

This copies the selection cells from the graph to the clipboard and pastes them into graph2.

For fine-grained control of the clipboard data the mxGraph.canExportCell and mxGraph.canImportCell functions can be overridden.

To restore previous parents for pasted cells, the implementation for copy and paste can be changed as follows.

mxClipboard.copy = function(graph, cells)
 {
   cells = cells || graph.getSelectionCells();
-  var result = graph.getExportableCells(cells);
+  let result = graph.getExportableCells(cells);
 
   mxClipboard.parents = {};
 
-  for (var i = 0; i < result.length; i++)
+  for (let i = 0; i < result.length; i++)
   {
     mxClipboard.parents[i] = graph.model.getParent(cells[i]);
   }
@@ -34,16 +34,16 @@ mxClipboard.paste = function(graph)
 {
   if (!mxClipboard.isEmpty())
   {
-    var cells = graph.getImportableCells(mxClipboard.getCells());
-    var delta = mxClipboard.insertCount * mxClipboard.STEPSIZE;
-    var parent = graph.getDefaultParent();
+    let cells = graph.getImportableCells(mxClipboard.getCells());
+    let delta = mxClipboard.insertCount * mxClipboard.STEPSIZE;
+    let parent = graph.getDefaultParent();
 
     graph.model.beginUpdate();
     try
     {
-      for (var i = 0; i < cells.length; i++)
+      for (let i = 0; i < cells.length; i++)
       {
-        var tmp = (mxClipboard.parents != null && graph.model.contains(mxClipboard.parents[i])) ?
+        let tmp = (mxClipboard.parents != null && graph.model.contains(mxClipboard.parents[i])) ?
              mxClipboard.parents[i] : parent;
         cells[i] = graph.importCells([cells[i]], delta, delta, tmp)[0];
       }
@@ -90,7 +90,7 @@ mxClipboard.paste = function(graph)
 
 
 
 
diff --git a/docs/js-api/files/util/mxConstants-js.html b/docs/js-api/files/util/mxConstants-js.html
index 632ab3004..7e4c51dea 100644
--- a/docs/js-api/files/util/mxConstants-js.html
+++ b/docs/js-api/files/util/mxConstants-js.html
@@ -570,7 +570,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxDictionary-js.html b/docs/js-api/files/util/mxDictionary-js.html index e2e0c96c7..090e8e566 100644 --- a/docs/js-api/files/util/mxDictionary-js.html +++ b/docs/js-api/files/util/mxDictionary-js.html @@ -40,7 +40,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxDivResizer-js.html b/docs/js-api/files/util/mxDivResizer-js.html index 97f0281f1..992567b64 100644 --- a/docs/js-api/files/util/mxDivResizer-js.html +++ b/docs/js-api/files/util/mxDivResizer-js.html @@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxDivResizer

Maintains the size of a div element in Internet Explorer.  This is a workaround for the right and bottom style being ignored in IE.

If you need a div to cover the scrollwidth and -height of a document, then you can use this class as follows:

var resizer = new mxDivResizer(background);
+

mxDivResizer

Maintains the size of a div element in Internet Explorer.  This is a workaround for the right and bottom style being ignored in IE.

If you need a div to cover the scrollwidth and -height of a document, then you can use this class as follows:

let resizer = new mxDivResizer(background);
 resizer.getDocumentHeight = function()
 {
   return document.body.scrollHeight;
@@ -45,7 +45,7 @@ resizer.resize();
diff --git a/docs/js-api/files/util/mxDragSource-js.html b/docs/js-api/files/util/mxDragSource-js.html index 07bf1f6b2..0ce454e27 100644 --- a/docs/js-api/files/util/mxDragSource-js.html +++ b/docs/js-api/files/util/mxDragSource-js.html @@ -83,7 +83,7 @@ if (browserType) {document.write("
");if (browserV

reset

mxDragSource.prototype.reset = function()

Stops and removes everything and restores the state of the object.

-

mouseDown

mxDragSource.prototype.mouseDown = function(evt)

Returns the drop target for the given graph and coordinates.  This implementation uses mxGraph.getCellAt.

To ignore popup menu events for a drag source, this function can be overridden as follows.

var mouseDown = dragSource.mouseDown;
+

mouseDown

mxDragSource.prototype.mouseDown = function(evt)

Returns the drop target for the given graph and coordinates.  This implementation uses mxGraph.getCellAt.

To ignore popup menu events for a drag source, this function can be overridden as follows.

let mouseDown = dragSource.mouseDown;
 
 dragSource.mouseDown = function(evt)
 {
@@ -124,7 +124,7 @@ dragSource.mouseDown = function(evt)
 
 
 
 
diff --git a/docs/js-api/files/util/mxEffects-js.html b/docs/js-api/files/util/mxEffects-js.html
index ed3a70711..afcb5b6eb 100644
--- a/docs/js-api/files/util/mxEffects-js.html
+++ b/docs/js-api/files/util/mxEffects-js.html
@@ -17,7 +17,7 @@ if (browserType) {document.write("
");if (browserV

animateChanges

animateChanges: function(graph,
changes,
done)

Asynchronous animated move operation.  See also: mxMorphing.

Example

graph.model.addListener(mxEvent.CHANGE, function(sender, evt)
 {
-  var changes = evt.getProperty('edit').changes;
+  let changes = evt.getProperty('edit').changes;
 
   if (changes.length < 10)
   {
@@ -36,7 +36,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxEvent-js.html b/docs/js-api/files/util/mxEvent-js.html index 866f1c3d6..1f29a9995 100644 --- a/docs/js-api/files/util/mxEvent-js.html +++ b/docs/js-api/files/util/mxEvent-js.html @@ -278,7 +278,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxEventObject-js.html b/docs/js-api/files/util/mxEventObject-js.html index 0f527c4e4..db58b22b9 100644 --- a/docs/js-api/files/util/mxEventObject-js.html +++ b/docs/js-api/files/util/mxEventObject-js.html @@ -45,7 +45,7 @@ INV: evt.isConsumed() == true
diff --git a/docs/js-api/files/util/mxEventSource-js.html b/docs/js-api/files/util/mxEventSource-js.html index 3d7079846..c3958ce36 100644 --- a/docs/js-api/files/util/mxEventSource-js.html +++ b/docs/js-api/files/util/mxEventSource-js.html @@ -51,7 +51,7 @@ MyClass.prototype.constructor = MyClass;

Kn diff --git a/docs/js-api/files/util/mxForm-js.html b/docs/js-api/files/util/mxForm-js.html index 7c5911e0a..0e882d086 100644 --- a/docs/js-api/files/util/mxForm-js.html +++ b/docs/js-api/files/util/mxForm-js.html @@ -48,7 +48,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxGuide-js.html b/docs/js-api/files/util/mxGuide-js.html index fda9a7887..d4b3edfc9 100644 --- a/docs/js-api/files/util/mxGuide-js.html +++ b/docs/js-api/files/util/mxGuide-js.html @@ -66,7 +66,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxImage-js.html b/docs/js-api/files/util/mxImage-js.html index c0b40b0ce..74a10fa4c 100644 --- a/docs/js-api/files/util/mxImage-js.html +++ b/docs/js-api/files/util/mxImage-js.html @@ -32,7 +32,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxImageBundle-js.html b/docs/js-api/files/util/mxImageBundle-js.html index 0a5273010..1844e361b 100644 --- a/docs/js-api/files/util/mxImageBundle-js.html +++ b/docs/js-api/files/util/mxImageBundle-js.html @@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxImageBundle

Maps from keys to base64 encoded images or file locations.  All values must be URLs or use the format data:image/format followed by a comma and the base64 encoded image data, eg.  “data:image/gif,XYZ”, where XYZ is the base64 encoded image data.

To add a new image bundle to an existing graph, the following code is used

var bundle = new mxImageBundle(alt);
+

mxImageBundle

Maps from keys to base64 encoded images or file locations.  All values must be URLs or use the format data:image/format followed by a comma and the base64 encoded image data, eg.  “data:image/gif,XYZ”, where XYZ is the base64 encoded image data.

To add a new image bundle to an existing graph, the following code is used

let bundle = new mxImageBundle(alt);
 bundle.putImage('myImage', 'data:image/gif,R0lGODlhEAAQAMIGAAAAAICAAICAgP' +
   '//AOzp2O3r2////////yH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh+QQBCgAHACwAAAAA' +
   'EAAQAAADTXi63AowynnAMDfjPUDlnAAJhmeBFxAEloliKltWmiYCQvfVr6lBPB1ggxN1hi' +
@@ -64,7 +64,7 @@ all data URIs should be limited to 32 KB.
diff --git a/docs/js-api/files/util/mxImageExport-js.html b/docs/js-api/files/util/mxImageExport-js.html index 92562098e..66ec60626 100644 --- a/docs/js-api/files/util/mxImageExport-js.html +++ b/docs/js-api/files/util/mxImageExport-js.html @@ -11,19 +11,19 @@ if (browserType) {document.write("
");if (browserV -

mxImageExport

Creates a new image export instance to be used with an export canvas.  Here is an example that uses this class to create an image via a backend using <mxXmlExportCanvas>.

var xmlDoc = mxUtils.createXmlDocument();
-var root = xmlDoc.createElement('output');
+

mxImageExport

Creates a new image export instance to be used with an export canvas.  Here is an example that uses this class to create an image via a backend using <mxXmlExportCanvas>.

let xmlDoc = mxUtils.createXmlDocument();
+let root = xmlDoc.createElement('output');
 xmlDoc.appendChild(root);
 
-var xmlCanvas = new mxXmlCanvas2D(root);
-var imgExport = new mxImageExport();
+let xmlCanvas = new mxXmlCanvas2D(root);
+let imgExport = new mxImageExport();
 imgExport.drawState(graph.getView().getState(graph.model.root), xmlCanvas);
 
-var bounds = graph.getGraphBounds();
-var w = Math.ceil(bounds.x + bounds.width);
-var h = Math.ceil(bounds.y + bounds.height);
+let bounds = graph.getGraphBounds();
+let w = Math.ceil(bounds.x + bounds.width);
+let h = Math.ceil(bounds.y + bounds.height);
 
-var xml = mxUtils.getXml(root);
+let xml = mxUtils.getXml(root);
 new mxXmlRequest('export', 'format=png&w=' + w +
      '&h=' + h + '&bg=#F9F7ED&xml=' + encodeURIComponent(xml))
      .simulate(document, '_blank');
Summary
mxImageExportCreates a new image export instance to be used with an export canvas.
Functions
mxImageExportConstructs a new image export.
Variables
includeOverlaysSpecifies if overlays should be included in the export.
Functions
drawStateDraws the given state and all its descendants to the given canvas.
visitStatesRecursiveVisits the given state and all its descendants to the given canvas recursively.
getLinkForCellStateReturns the link for the given cell state and canvas.
drawCellStateDraws the given state to the given canvas.
drawShapeDraws the shape of the given state.
drawTextDraws the text of the given state.
drawOverlaysDraws the overlays for the given state.
@@ -59,7 +59,7 @@ new mxXmlRequest('export', 'format=png&w=' + w + diff --git a/docs/js-api/files/util/mxLog-js.html b/docs/js-api/files/util/mxLog-js.html index 4f46933e4..458bc99a8 100644 --- a/docs/js-api/files/util/mxLog-js.html +++ b/docs/js-api/files/util/mxLog-js.html @@ -63,7 +63,7 @@ mxLog.warn('Hello, World!');
diff --git a/docs/js-api/files/util/mxMorphing-js.html b/docs/js-api/files/util/mxMorphing-js.html index 7eef98e01..559b76102 100644 --- a/docs/js-api/files/util/mxMorphing-js.html +++ b/docs/js-api/files/util/mxMorphing-js.html @@ -14,12 +14,12 @@ if (browserType) {document.write("
");if (browserV

mxMorphing

Implements animation for morphing cells.  Here is an example of using this class for animating the result of a layout algorithm:

graph.getModel().beginUpdate();
 try
 {
-  var circleLayout = new mxCircleLayout(graph);
+  let circleLayout = new mxCircleLayout(graph);
   circleLayout.execute(graph.getDefaultParent());
 }
 finally
 {
-  var morph = new mxMorphing(graph);
+  let morph = new mxMorphing(graph);
   morph.addListener(mxEvent.DONE, function()
   {
     graph.getModel().endUpdate();
@@ -65,7 +65,7 @@ finally
 
 
 
 
diff --git a/docs/js-api/files/util/mxMouseEvent-js.html b/docs/js-api/files/util/mxMouseEvent-js.html
index 14c24e406..9e729ee73 100644
--- a/docs/js-api/files/util/mxMouseEvent-js.html
+++ b/docs/js-api/files/util/mxMouseEvent-js.html
@@ -78,7 +78,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxObjectIdentity-js.html b/docs/js-api/files/util/mxObjectIdentity-js.html index 9cf57dd9f..f4e42634f 100644 --- a/docs/js-api/files/util/mxObjectIdentity-js.html +++ b/docs/js-api/files/util/mxObjectIdentity-js.html @@ -32,7 +32,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxPanningManager-js.html b/docs/js-api/files/util/mxPanningManager-js.html index 1f450c6ad..f4c4fc411 100644 --- a/docs/js-api/files/util/mxPanningManager-js.html +++ b/docs/js-api/files/util/mxPanningManager-js.html @@ -30,7 +30,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxPoint-js.html b/docs/js-api/files/util/mxPoint-js.html index b2bd46243..20a178478 100644 --- a/docs/js-api/files/util/mxPoint-js.html +++ b/docs/js-api/files/util/mxPoint-js.html @@ -36,7 +36,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxPopupMenu-js.html b/docs/js-api/files/util/mxPopupMenu-js.html index c5b2e8e63..e5aa8543d 100644 --- a/docs/js-api/files/util/mxPopupMenu-js.html +++ b/docs/js-api/files/util/mxPopupMenu-js.html @@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxPopupMenu

Basic popup menu.  To add a vertical scrollbar to a given submenu, the following code can be used.

var mxPopupMenuShowMenu = mxPopupMenu.prototype.showMenu;
+

mxPopupMenu

Basic popup menu.  To add a vertical scrollbar to a given submenu, the following code can be used.

let mxPopupMenuShowMenu = mxPopupMenu.prototype.showMenu;
 mxPopupMenu.prototype.showMenu = function()
 {
   mxPopupMenuShowMenu.apply(this, arguments);
@@ -89,7 +89,7 @@ mxPopupMenu.prototype.showMenu = function()
 
 
 
 
diff --git a/docs/js-api/files/util/mxRectangle-js.html b/docs/js-api/files/util/mxRectangle-js.html
index 2ea5f855c..5ddd553d6 100644
--- a/docs/js-api/files/util/mxRectangle-js.html
+++ b/docs/js-api/files/util/mxRectangle-js.html
@@ -52,7 +52,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxResources-js.html b/docs/js-api/files/util/mxResources-js.html index a501dbbfa..d031e0ba5 100644 --- a/docs/js-api/files/util/mxResources-js.html +++ b/docs/js-api/files/util/mxResources-js.html @@ -39,7 +39,7 @@ if (browserType) {document.write("
");if (browserV

parse

parse: function(text)

Parses the key, value pairs in the specified text and stores them as local resources.

-

get

get: function(key,
params,
defaultValue)

Returns the value for the specified resource key.

Example

To read the value for ‘welomeMessage’, use the following:

var result = mxResources.get('welcomeMessage') || '';

This would require an entry of the following form in one of the English language resource files:

welcomeMessage=Welcome to mxGraph!

The part behind the || is the string value to be used if the given resource is not available.

Parameters

keyString that represents the key of the resource to be returned.
paramsArray of the values for the placeholders of the form {1}...{n} to be replaced with in the resulting string.
defaultValueOptional string that specifies the default return value.
+

get

get: function(key,
params,
defaultValue)

Returns the value for the specified resource key.

Example

To read the value for ‘welomeMessage’, use the following:

let result = mxResources.get('welcomeMessage') || '';

This would require an entry of the following form in one of the English language resource files:

welcomeMessage=Welcome to mxGraph!

The part behind the || is the string value to be used if the given resource is not available.

Parameters

keyString that represents the key of the resource to be returned.
paramsArray of the values for the placeholders of the form {1}...{n} to be replaced with in the resulting string.
defaultValueOptional string that specifies the default return value.

replacePlaceholders

replacePlaceholders: function(value,
params)

Replaces the given placeholders with the given parameters.

Parameters

valueString that contains the placeholders.
paramsArray of the values for the placeholders of the form {1}...{n} to be replaced with in the resulting string.
@@ -52,7 +52,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxSvgCanvas2D-js.html b/docs/js-api/files/util/mxSvgCanvas2D-js.html index 5c85be23a..0c63e7a9e 100644 --- a/docs/js-api/files/util/mxSvgCanvas2D-js.html +++ b/docs/js-api/files/util/mxSvgCanvas2D-js.html @@ -11,8 +11,8 @@ if (browserType) {document.write("
");if (browserV -

mxSvgCanvas2D

Extends mxAbstractCanvas2D to implement a canvas for SVG.  This canvas writes all calls as SVG output to the given SVG root node.

var svgDoc = mxUtils.createXmlDocument();
-var root = (svgDoc.createElementNS != null) ?
+

mxSvgCanvas2D

Extends mxAbstractCanvas2D to implement a canvas for SVG.  This canvas writes all calls as SVG output to the given SVG root node.

let svgDoc = mxUtils.createXmlDocument();
+let root = (svgDoc.createElementNS != null) ?
      svgDoc.createElementNS(mxConstants.NS_SVG, 'svg') : svgDoc.createElement('svg');
 
 if (svgDoc.createElementNS == null)
@@ -25,14 +25,14 @@ else
   root.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:xlink', mxConstants.NS_XLINK);
 }
 
-var bounds = graph.getGraphBounds();
+let bounds = graph.getGraphBounds();
 root.setAttribute('width', (bounds.x + bounds.width + 4) + 'px');
 root.setAttribute('height', (bounds.y + bounds.height + 4) + 'px');
 root.setAttribute('version', '1.1');
 
 svgDoc.appendChild(root);
 
-var svgCanvas = new mxSvgCanvas2D(root);

A description of the public API is available in mxXmlCanvas2D.

To disable anti-aliasing in the output, use the following code.

graph.view.canvas.ownerSVGElement.setAttribute('shape-rendering', 'crispEdges');

Or set the respective attribute in the SVG element directly.

Summary
mxSvgCanvas2DExtends mxAbstractCanvas2D to implement a canvas for SVG.
Functions
mxSvgCanvas2DConstructs a new SVG canvas.
Variables
rootReference to the container for the SVG content.
gradientsLocal cache of gradients for quick lookups.
defsReference to the defs section of the SVG document.
styleEnabledStores the value of styleEnabled passed to the constructor.
pathHolds the current DOM node.
matchHtmlAlignmentSpecifies if plain text output should match the vertical HTML alignment.
textEnabledSpecifies if text output should be enabled.
foEnabledSpecifies if use of foreignObject for HTML markup is allowed.
foAltTextSpecifies the fallback text for unsupported foreignObjects in exported documents.
foOffsetOffset to be used for foreignObjects.
textOffsetOffset to be used for text elements.
imageOffsetOffset to be used for image elements.
strokeToleranceAdds transparent paths for strokes.
minStrokeWidthMinimum stroke width for output.
refCountLocal counter for references in SVG export.
lineHeightCorrectionCorrection factor for mxConstants.LINE_HEIGHT in HTML output.
pointerEventsValueDefault value for active pointer events.
fontMetricsPaddingPadding to be added for text that is not wrapped to account for differences in font metrics on different platforms in pixels.
cacheOffsetSizeSpecifies if offsetWidth and offsetHeight should be cached.
Functions
formatRounds all numbers to 2 decimal points.
getBaseUrlReturns the URL of the page without the hash part.
resetReturns any offsets for rendering pixels.
createStyleCreates the optional style section.
createElementPrivate helper function to create SVG elements
getAlternateTextReturns the alternate text string for the given foreignObject.
getAlternateContentReturns the alternate content for the given foreignObject.
createGradientIdPrivate helper function to create SVG elements
getSvgGradientPrivate helper function to create SVG elements
createSvgGradientCreates the given SVG gradient.
addNodePrivate helper function to create SVG elements
updateFillTransfers the stroke attributes from <state> to <node>.
getCurrentStrokeWidthReturns the current stroke width (>= 1), ie.
updateStrokeTransfers the stroke attributes from <state> to <node>.
updateStrokeAttributesTransfers the stroke attributes from <state> to <node>.
createDashPatternCreates the SVG dash pattern for the given state.
createToleranceCreates a hit detection tolerance shape for the given node.
createShadowCreates a shadow for the given node.
setLinkExperimental implementation for hyperlinks.
rotateSets the rotation of the canvas.
beginExtends superclass to create path.
rectPrivate helper function to create SVG elements
roundrectPrivate helper function to create SVG elements
ellipsePrivate helper function to create SVG elements
imagePrivate helper function to create SVG elements
convertHtmlConverts the given HTML string to XHTML.
createDivPrivate helper function to create SVG elements
addForeignObjectCreates a foreignObject for the given string and adds it to the given root.
getTextCssPrivate helper function to create SVG elements
textPaints the given text.
createClipCreates a clip for the given coordinates.
plainTextPaints the given text.
updateFontUpdates the text properties for the given node.
addTextBackgroundBackground color and border
strokePaints the outline of the current path.
fillFills the current path.
fillAndStrokeFills and paints the outline of the current path.
+let svgCanvas = new mxSvgCanvas2D(root);

A description of the public API is available in mxXmlCanvas2D.

To disable anti-aliasing in the output, use the following code.

graph.view.canvas.ownerSVGElement.setAttribute('shape-rendering', 'crispEdges');

Or set the respective attribute in the SVG element directly.

Summary
mxSvgCanvas2DExtends mxAbstractCanvas2D to implement a canvas for SVG.
Functions
mxSvgCanvas2DConstructs a new SVG canvas.
Variables
rootReference to the container for the SVG content.
gradientsLocal cache of gradients for quick lookups.
defsReference to the defs section of the SVG document.
styleEnabledStores the value of styleEnabled passed to the constructor.
pathHolds the current DOM node.
matchHtmlAlignmentSpecifies if plain text output should match the vertical HTML alignment.
textEnabledSpecifies if text output should be enabled.
foEnabledSpecifies if use of foreignObject for HTML markup is allowed.
foAltTextSpecifies the fallback text for unsupported foreignObjects in exported documents.
foOffsetOffset to be used for foreignObjects.
textOffsetOffset to be used for text elements.
imageOffsetOffset to be used for image elements.
strokeToleranceAdds transparent paths for strokes.
minStrokeWidthMinimum stroke width for output.
refCountLocal counter for references in SVG export.
lineHeightCorrectionCorrection factor for mxConstants.LINE_HEIGHT in HTML output.
pointerEventsValueDefault value for active pointer events.
fontMetricsPaddingPadding to be added for text that is not wrapped to account for differences in font metrics on different platforms in pixels.
cacheOffsetSizeSpecifies if offsetWidth and offsetHeight should be cached.
Functions
formatRounds all numbers to 2 decimal points.
getBaseUrlReturns the URL of the page without the hash part.
resetReturns any offsets for rendering pixels.
createStyleCreates the optional style section.
createElementPrivate helper function to create SVG elements
getAlternateTextReturns the alternate text string for the given foreignObject.
getAlternateContentReturns the alternate content for the given foreignObject.
createGradientIdPrivate helper function to create SVG elements
getSvgGradientPrivate helper function to create SVG elements
createSvgGradientCreates the given SVG gradient.
addNodePrivate helper function to create SVG elements
updateFillTransfers the stroke attributes from <state> to <node>.
getCurrentStrokeWidthReturns the current stroke width (>= 1), ie.
updateStrokeTransfers the stroke attributes from <state> to <node>.
updateStrokeAttributesTransfers the stroke attributes from <state> to <node>.
createDashPatternCreates the SVG dash pattern for the given state.
createToleranceCreates a hit detection tolerance shape for the given node.
createShadowCreates a shadow for the given node.
setLinkExperimental implementation for hyperlinks.
rotateSets the rotation of the canvas.
beginExtends superclass to create path.
rectPrivate helper function to create SVG elements
roundrectPrivate helper function to create SVG elements
ellipsePrivate helper function to create SVG elements
imagePrivate helper function to create SVG elements
convertHtmlConverts the given HTML string to XHTML.
createDivPrivate helper function to create SVG elements
addForeignObjectCreates a foreignObject for the given string and adds it to the given root.
getTextCssPrivate helper function to create SVG elements
textPaints the given text.
createClipCreates a clip for the given coordinates.
plainTextPaints the given text.
updateFontUpdates the text properties for the given node.
addTextBackgroundBackground color and border
strokePaints the outline of the current path.
fillFills the current path.
fillAndStrokeFills and paints the outline of the current path.

Functions

@@ -161,7 +161,7 @@ var svgCanvas = new mxSvgCanvas2D(root);

A description of t

diff --git a/docs/js-api/files/util/mxToolbar-js.html b/docs/js-api/files/util/mxToolbar-js.html index e7cc17a7a..f9c6159eb 100644 --- a/docs/js-api/files/util/mxToolbar-js.html +++ b/docs/js-api/files/util/mxToolbar-js.html @@ -64,7 +64,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxUndoManager-js.html b/docs/js-api/files/util/mxUndoManager-js.html index ca9bd0dbf..84a86d6d9 100644 --- a/docs/js-api/files/util/mxUndoManager-js.html +++ b/docs/js-api/files/util/mxUndoManager-js.html @@ -11,8 +11,8 @@ if (browserType) {document.write("
");if (browserV -

mxUndoManager

Implements a command history.  When changing the graph model, an <mxUndoableChange> object is created at the start of the transaction (when model.beginUpdate is called).  All atomic changes are then added to this object until the last model.endUpdate call, at which point the mxUndoableEdit is dispatched in an event, and added to the history inside mxUndoManager.  This is done by an event listener in mxEditor.installUndoHandler.

Each atomic change of the model is represented by an object (eg.  mxRootChange, mxChildChange, mxTerminalChange etc) which contains the complete undo information.  The mxUndoManager also listens to the mxGraphView and stores it’s changes to the current root as insignificant undoable changes, so that drilling (step into, step up) is undone.

This means when you execute an atomic change on the model, then change the current root on the view and click undo, the change of the root will be undone together with the change of the model so that the display represents the state at which the model was changed.  However, these changes are not transmitted for sharing as they do not represent a state change.

Example

When adding an undo manager to a graph, make sure to add it to the model and the view as well to maintain a consistent display across multiple undo/redo steps.

var undoManager = new mxUndoManager();
-var listener = function(sender, evt)
+

mxUndoManager

Implements a command history.  When changing the graph model, an <mxUndoableChange> object is created at the start of the transaction (when model.beginUpdate is called).  All atomic changes are then added to this object until the last model.endUpdate call, at which point the mxUndoableEdit is dispatched in an event, and added to the history inside mxUndoManager.  This is done by an event listener in mxEditor.installUndoHandler.

Each atomic change of the model is represented by an object (eg.  mxRootChange, mxChildChange, mxTerminalChange etc) which contains the complete undo information.  The mxUndoManager also listens to the mxGraphView and stores it’s changes to the current root as insignificant undoable changes, so that drilling (step into, step up) is undone.

This means when you execute an atomic change on the model, then change the current root on the view and click undo, the change of the root will be undone together with the change of the model so that the display represents the state at which the model was changed.  However, these changes are not transmitted for sharing as they do not represent a state change.

Example

When adding an undo manager to a graph, make sure to add it to the model and the view as well to maintain a consistent display across multiple undo/redo steps.

let undoManager = new mxUndoManager();
+let listener = function(sender, evt)
 {
   undoManager.undoableEditHappened(evt.getProperty('edit'));
 };
@@ -66,7 +66,7 @@ graph.getView().addListener(mxEvent.UNDO, listener);

The co

diff --git a/docs/js-api/files/util/mxUndoableEdit-js.html b/docs/js-api/files/util/mxUndoableEdit-js.html index 19f3034e5..cb1d006d8 100644 --- a/docs/js-api/files/util/mxUndoableEdit-js.html +++ b/docs/js-api/files/util/mxUndoableEdit-js.html @@ -20,12 +20,12 @@ if (browserType) {document.write("
");if (browserV CustomChange.prototype.execute = function() { - var tmp = this.model.name; + let tmp = this.model.name; this.model.name = this.previous; this.previous = tmp; }; -var name = prompt('Enter name'); +let name = prompt('Enter name'); graph.model.execute(new CustomChange(graph.model, name));
Summary
mxUndoableEditImplements a composite undoable edit.
Events
mxEvent.EXECUTEDFires between START_EDIT and END_EDIT after an atomic change was executed.
mxEvent.START_EDITFires before a set of changes will be executed in undo or redo.
mxEvent.END_EDITFires after a set of changeswas executed in undo or redo.
Functions
mxUndoableEditConstructs a new undoable edit for the given source.
Variables
sourceSpecifies the source of the edit.
changesArray that contains the changes that make up this edit.
significantSpecifies if the undoable change is significant.
undoneSpecifies if this edit has been undone.
redoneSpecifies if this edit has been redone.
Functions
isEmptyReturns true if the this edit contains no changes.
isSignificantReturns significant.
addAdds the specified change to this edit.
notifyHook to notify any listeners of the changes after an undo or redo has been carried out.
dieHook to free resources after the edit has been removed from the command history.
undoUndoes all changes in this edit.
redoRedoes all changes in this edit.

Events

@@ -75,7 +75,7 @@ graph.model.execute(new CustomChange(graph.model, name));
diff --git a/docs/js-api/files/util/mxUrlConverter-js.html b/docs/js-api/files/util/mxUrlConverter-js.html index 07089411c..a8cd0d3cb 100644 --- a/docs/js-api/files/util/mxUrlConverter-js.html +++ b/docs/js-api/files/util/mxUrlConverter-js.html @@ -48,7 +48,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxUtils-js.html b/docs/js-api/files/util/mxUtils-js.html index 0b0e38238..a4d335141 100644 --- a/docs/js-api/files/util/mxUtils-js.html +++ b/docs/js-api/files/util/mxUtils-js.html @@ -61,7 +61,7 @@ if (browserType) {document.write("
");if (browserV

createMsXmlDocument

createMsXmlDocument: function()

Returns a new, empty Microsoft.XMLDOM document using ActiveXObject.

-

parseXml

parseXml: function()

Parses the specified XML string into a new XML document and returns the new document.

Example

var doc = mxUtils.parseXml(
+

parseXml

parseXml: function()

Parses the specified XML string into a new XML document and returns the new document.

Example

let doc = mxUtils.parseXml(
   '<mxGraphModel><root><MyDiagram id="0"><mxCell/></MyDiagram>'+
   '<MyLayer id="1"><mxCell parent="0" /></MyLayer><MyObject id="2">'+
   '<mxCell style="strokeColor=blue;fillColor=red" parent="1" vertex="1">'+
@@ -119,8 +119,8 @@ if (browserType) {document.write("
");if (browserV

load

load: function(url)

Loads the specified URL synchronously and returns the mxXmlRequest.  Throws an exception if the file cannot be loaded.  See mxUtils.get for an asynchronous implementation.

Example

try
 {
-  var req = mxUtils.load(filename);
-  var root = req.getDocumentElement();
+  let req = mxUtils.load(filename);
+  let root = req.getDocumentElement();
   // Process XML DOM...
 }
 catch (ex)
@@ -130,12 +130,12 @@ catch (ex)
 
 

get

get: function(url,
onload,
onerror,
binary,
timeout,
ontimeout,
headers)

Loads the specified URL asynchronously and invokes the given functions depending on the request status.  Returns the mxXmlRequest in use.  Both functions take the mxXmlRequest as the only parameter.  See mxUtils.load for a synchronous implementation.

Example

mxUtils.get(url, function(req)
 {
-   var node = req.getDocumentElement();
+   let node = req.getDocumentElement();
    // Process XML DOM...
 });

So for example, to load a diagram into an existing graph model, the following code is used.

mxUtils.get(url, function(req)
 {
-  var node = req.getDocumentElement();
-  var dec = new mxCodec(node.ownerDocument);
+  let node = req.getDocumentElement();
+  let dec = new mxCodec(node.ownerDocument);
   dec.decode(node, graph.getModel());
 });

Parameters

urlURL to get the data from.
onloadOptional function to execute for a successful response.
onerrorOptional function to execute on error.
binaryOptional boolean parameter that specifies if the request is binary.
timeoutOptional timeout in ms before calling ontimeout.
ontimeoutOptional function to execute on timeout.
headersOptional with headers, eg.  {‘Authorization’: ‘token xyz’}
@@ -208,7 +208,7 @@ mxUtils.extend(MyGraph, mxGraph);

Parameter

getScrollOrigin

getScrollOrigin: function(node,
includeAncestors,
includeDocument)

Returns the top, left corner of the viewrect as an mxPoint.

Parameters

nodeDOM node whose scroll origin should be returned.
includeAncestorsWhether the scroll origin of the ancestors should be included.  Default is false.
includeDocumentWhether the scroll origin of the document should be included.  Default is true.
-

convertPoint

convertPoint: function(container,
x,
y)

Converts the specified point (x, y) using the offset of the specified container and returns a new mxPoint with the result.

var pt = mxUtils.convertPoint(graph.container,
+

convertPoint

convertPoint: function(container,
x,
y)

Converts the specified point (x, y) using the offset of the specified container and returns a new mxPoint with the result.

let pt = mxUtils.convertPoint(graph.container,
   mxEvent.getClientX(evt), mxEvent.getClientY(evt));

Parameters

containerDOM node to use for the offset.
xX-coordinate of the point to be converted.
yY-coordinate of the point to be converted.

ltrim

ltrim: function(str,
chars)

Strips all whitespaces from the beginning of the string.  Without the second parameter, this will trim these characters:

  • ” “ (ASCII 32 (0x20)), an ordinary space
  • ”\t” (ASCII 9 (0x09)), a tab
  • ”\n” (ASCII 10 (0x0A)), a new line (line feed)
  • ”\r” (ASCII 13 (0x0D)), a carriage return
  • ”\0” (ASCII 0 (0x00)), the NUL-byte
  • ”\x0B” (ASCII 11 (0x0B)), a vertical tab
@@ -259,7 +259,7 @@ mxUtils.extend(MyGraph, mxGraph);

Parameter

setStyle

setStyle: function(style,
key,
value)

Adds or removes the given key, value pair to the style and returns the new style.  If value is null or zero length then the key is removed from the style.  This is for cell styles, not for CSS styles.

Parameters

styleString of the form [(stylename|key=value);].
keyKey of the style to be changed.
valueNew value for the given key.
-

setCellStyleFlags

setCellStyleFlags: function(model,
cells,
key,
flag,
value)

Sets or toggles the flag bit for the given key in the cell’s styles.  If value is null then the flag is toggled.

Example

var cells = graph.getSelectionCells();
+

setCellStyleFlags

setCellStyleFlags: function(model,
cells,
key,
flag,
value)

Sets or toggles the flag bit for the given key in the cell’s styles.  If value is null then the flag is toggled.

Example

let cells = graph.getSelectionCells();
 mxUtils.setCellStyleFlags(graph.model,
          cells,
          mxConstants.STYLE_FONTSTYLE,
@@ -269,8 +269,8 @@ mxUtils.setCellStyleFlags(graph.model,
 
 

getAlignmentAsPoint

getAlignmentAsPoint: function(align,
valign)

Returns an mxPoint that represents the horizontal and vertical alignment for numeric computations.  X is -0.5 for center, -1 for right and 0 for left alignment.  Y is -0.5 for middle, -1 for bottom and 0 for top alignment.  Default values for missing arguments is top, left.

-

getSizeForString

getSizeForString: function(text,
fontSize,
fontFamily,
textWidth,
fontStyle)

Returns an mxRectangle with the size (width and height in pixels) of the given string.  The string may contain HTML markup.  Newlines should be converted to br before calling this method.  The caller is responsible for sanitizing the HTML markup.

Example

var label = graph.getLabel(cell).replace(/\n/g, "<br>");
-var size = graph.getSizeForString(label);

Parameters

textString whose size should be returned.
fontSizeInteger that specifies the font size in pixels.  Default is mxConstants.DEFAULT_FONTSIZE.
fontFamilyString that specifies the name of the font family.  Default is mxConstants.DEFAULT_FONTFAMILY.
textWidthOptional width for text wrapping.
fontStyleOptional font style.
+

getSizeForString

getSizeForString: function(text,
fontSize,
fontFamily,
textWidth,
fontStyle)

Returns an mxRectangle with the size (width and height in pixels) of the given string.  The string may contain HTML markup.  Newlines should be converted to br before calling this method.  The caller is responsible for sanitizing the HTML markup.

Example

let label = graph.getLabel(cell).replace(/\n/g, "<br>");
+let size = graph.getSizeForString(label);

Parameters

textString whose size should be returned.
fontSizeInteger that specifies the font size in pixels.  Default is mxConstants.DEFAULT_FONTSIZE.
fontFamilyString that specifies the name of the font family.  Default is mxConstants.DEFAULT_FONTFAMILY.
textWidthOptional width for text wrapping.
fontStyleOptional font style.

getViewXml

getViewXml: function(graph,
scale,
cells,
x0,
y0)
@@ -290,12 +290,12 @@ var size = graph.getSizeForString(label);

P

error

error: function(message,
width,
close,
icon)

Displays the given error message in a new mxWindow of the given width.  If close is true then an additional close button is added to the window.  The optional icon specifies the icon to be used for the window.  Default is mxUtils.errorImage.

Parameters

messageString specifying the message to be displayed.
widthInteger specifying the width of the window.
closeOptional boolean indicating whether to add a close button.
iconOptional icon for the window decoration.
-

makeDraggable

makeDraggable: function(element,
graphF,
funct,
dragElement,
dx,
dy,
autoscroll,
scalePreview,
highlightDropTargets,
getDropTarget)

Configures the given DOM element to act as a drag source for the specified graph.  Returns a a new mxDragSource.  If <mxDragSource.guideEnabled> is enabled then the x and y arguments must be used in funct to match the preview location.

Example

var funct = function(graph, evt, cell, x, y)
+

makeDraggable

makeDraggable: function(element,
graphF,
funct,
dragElement,
dx,
dy,
autoscroll,
scalePreview,
highlightDropTargets,
getDropTarget)

Configures the given DOM element to act as a drag source for the specified graph.  Returns a a new mxDragSource.  If <mxDragSource.guideEnabled> is enabled then the x and y arguments must be used in funct to match the preview location.

Example

let funct = function(graph, evt, cell, x, y)
 {
   if (graph.canImportCell(cell))
   {
-    var parent = graph.getDefaultParent();
-    var vertex = null;
+    let parent = graph.getDefaultParent();
+    let vertex = null;
 
     graph.getModel().beginUpdate();
     try
@@ -311,7 +311,7 @@ var size = graph.getSizeForString(label);

P } } -var img = document.createElement('img'); +let img = document.createElement('img'); img.setAttribute('src', 'editors/images/rectangle.gif'); img.style.position = 'absolute'; img.style.left = '0px'; @@ -319,7 +319,7 @@ img.style.top = '0px'; img.style.width = '16px'; img.style.height = '16px'; -var dragImage = img.cloneNode(true); +let dragImage = img.cloneNode(true); dragImage.style.width = '32px'; dragImage.style.height = '32px'; mxUtils.makeDraggable(img, graph, funct, dragImage); @@ -332,7 +332,7 @@ document.body.appendChild(img);

Parameters< diff --git a/docs/js-api/files/util/mxVmlCanvas2D-js.html b/docs/js-api/files/util/mxVmlCanvas2D-js.html index 7c1b89776..49763fd3a 100644 --- a/docs/js-api/files/util/mxVmlCanvas2D-js.html +++ b/docs/js-api/files/util/mxVmlCanvas2D-js.html @@ -99,7 +99,7 @@ mxVmlCanvas2D.prototype.image = function(x, y, w, h, src, aspect, flipH, flipV) diff --git a/docs/js-api/files/util/mxWindow-js.html b/docs/js-api/files/util/mxWindow-js.html index fce8b5971..c93b295ee 100644 --- a/docs/js-api/files/util/mxWindow-js.html +++ b/docs/js-api/files/util/mxWindow-js.html @@ -11,17 +11,17 @@ if (browserType) {document.write("
");if (browserV -

mxWindow

Basic window inside a document.

Examples

Creating a simple window.

var tb = document.createElement('div');
-var wnd = new mxWindow('Title', tb, 100, 100, 200, 200, true, true);
-wnd.setVisible(true);

Creating a window that contains an iframe.

var frame = document.createElement('iframe');
+

mxWindow

Basic window inside a document.

Examples

Creating a simple window.

let tb = document.createElement('div');
+let wnd = new mxWindow('Title', tb, 100, 100, 200, 200, true, true);
+wnd.setVisible(true);

Creating a window that contains an iframe.

let frame = document.createElement('iframe');
 frame.setAttribute('width', '192px');
 frame.setAttribute('height', '172px');
 frame.setAttribute('src', 'http://www.example.com/');
 frame.style.backgroundColor = 'white';
 
-var w = document.body.clientWidth;
-var h = (document.body.clientHeight || document.documentElement.clientHeight);
-var wnd = new mxWindow('Title', frame, (w-200)/2, (h-200)/3, 200, 200);
+let w = document.body.clientWidth;
+let h = (document.body.clientHeight || document.documentElement.clientHeight);
+let wnd = new mxWindow('Title', frame, (w-200)/2, (h-200)/3, 200, 200);
 wnd.setVisible(true);

To limit the movement of a window, eg. to keep it from being moved beyond the top, left corner the following method can be overridden (recommended):

wnd.setLocation = function(x, y)
 {
   x = Math.max(0, x);
@@ -32,11 +32,11 @@ wnd.setVisible(true);

To limit the movement of a window, eg wnd.setLocation(Math.max(0, wnd.getX()), Math.max(0, wnd.getY())); });

To keep a window inside the current window

mxEvent.addListener(window, 'resize', mxUtils.bind(this, function()
 {
-  var iw = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
-  var ih = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
+  let iw = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
+  let ih = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
 
-  var x = this.window.getX();
-  var y = this.window.getY();
+  let x = this.window.getX();
+  let y = this.window.getY();
 
   if (x + this.window.table.clientWidth > iw)
   {
@@ -176,7 +176,7 @@ wnd.setVisible(true);

To limit the movement of a window, eg

diff --git a/docs/js-api/files/util/mxXmlCanvas2D-js.html b/docs/js-api/files/util/mxXmlCanvas2D-js.html index 1ce2990b3..a2a0a9287 100644 --- a/docs/js-api/files/util/mxXmlCanvas2D-js.html +++ b/docs/js-api/files/util/mxXmlCanvas2D-js.html @@ -122,7 +122,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/util/mxXmlRequest-js.html b/docs/js-api/files/util/mxXmlRequest-js.html index 41df23729..e7b0e8326 100644 --- a/docs/js-api/files/util/mxXmlRequest-js.html +++ b/docs/js-api/files/util/mxXmlRequest-js.html @@ -11,20 +11,20 @@ if (browserType) {document.write("
");if (browserV -

mxXmlRequest

XML HTTP request wrapper.  See also: mxUtils.get, mxUtils.post and mxUtils.load.  This class provides a cross-browser abstraction for Ajax requests.

Encoding

For encoding parameter values, the built-in encodeURIComponent JavaScript method must be used.  For automatic encoding of post data in mxEditor the mxEditor.escapePostData switch can be set to true (default).  The encoding will be carried out using the conte type of the page.  That is, the page containting the editor should contain a meta tag in the header, eg.  <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”>

Example

var onload = function(req)
+

mxXmlRequest

XML HTTP request wrapper.  See also: mxUtils.get, mxUtils.post and mxUtils.load.  This class provides a cross-browser abstraction for Ajax requests.

Encoding

For encoding parameter values, the built-in encodeURIComponent JavaScript method must be used.  For automatic encoding of post data in mxEditor the mxEditor.escapePostData switch can be set to true (default).  The encoding will be carried out using the conte type of the page.  That is, the page containting the editor should contain a meta tag in the header, eg.  <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”>

Example

let onload = function(req)
 {
   mxUtils.alert(req.getDocumentElement());
 }
 
-var onerror = function(req)
+let onerror = function(req)
 {
   mxUtils.alert('Error');
 }
-new mxXmlRequest(url, 'key=value').send(onload, onerror);

Sends an asynchronous POST request to the specified URL.

Example

var req = new mxXmlRequest(url, 'key=value', 'POST', false);
+new mxXmlRequest(url, 'key=value').send(onload, onerror);

Sends an asynchronous POST request to the specified URL.

Example

let req = new mxXmlRequest(url, 'key=value', 'POST', false);
 req.send();
-mxUtils.alert(req.getDocumentElement());

Sends a synchronous POST request to the specified URL.

Example

var encoder = new mxCodec();
-var result = encoder.encode(graph.getModel());
-var xml = encodeURIComponent(mxUtils.getXml(result));
+mxUtils.alert(req.getDocumentElement());

Sends a synchronous POST request to the specified URL.

Example

let encoder = new mxCodec();
+let result = encoder.encode(graph.getModel());
+let xml = encodeURIComponent(mxUtils.getXml(result));
 new mxXmlRequest(url, 'xml='+xml).send();

Sends an encoded graph model to the specified URL using xml as the parameter name.  The parameter can then be retrieved in C# as follows:

string xml = HttpUtility.UrlDecode(context.Request.Params["xml"]);

Or in Java as follows

String xml = URLDecoder.decode(request.getParameter("xml"), "UTF-8").replace("\n", "&#xa;");

Note that the linefeeds should only be replaced if the XML is processed in Java, for example when creating an image.

Summary
mxXmlRequestXML HTTP request wrapper.
Functions
mxXmlRequestConstructs an XML HTTP request.
Variables
urlHolds the target URL of the request.
paramsHolds the form encoded data for the POST request.
methodSpecifies the request method.
asyncBoolean indicating if the request is asynchronous.
binaryBoolean indicating if the request is binary.
withCredentialsSpecifies if withCredentials should be used in HTML5-compliant browsers.
usernameSpecifies the username to be used for authentication.
passwordSpecifies the password to be used for authentication.
requestHolds the inner, browser-specific request object.
decodeSimulateValuesSpecifies if request values should be decoded as URIs before setting the textarea value in simulate.
Functions
isBinaryReturns binary.
setBinarySets binary.
getTextReturns the response as a string.
isReadyReturns true if the response is ready.
getDocumentElementReturns the document element of the response XML document.
getXmlReturns the response as an XML document.
getStatusReturns the status as a number, eg.
createCreates and returns the inner request object.
sendSend the request to the target URL using the specified functions to process the response asychronously.
setRequestHeadersSets the headers for the given request and parameters.
simulateCreates and posts a request to the given target URL using a dynamically created form inside the given document.

Functions

@@ -93,7 +93,7 @@ new mxXmlRequest(url, 'xml='+xml).send();

Sends an encoded

diff --git a/docs/js-api/files/view/mxCellEditor-js.html b/docs/js-api/files/view/mxCellEditor-js.html index 2db77a84e..7de3c5d0a 100644 --- a/docs/js-api/files/view/mxCellEditor-js.html +++ b/docs/js-api/files/view/mxCellEditor-js.html @@ -13,7 +13,7 @@ if (browserType) {document.write("
");if (browserV

mxCellEditor

In-place editor for the graph.  To control this editor, use mxGraph.invokesStopCellEditing, mxGraph.enterStopsCellEditing and mxGraph.escapeEnabled.  If mxGraph.enterStopsCellEditing is true then ctrl-enter or shift-enter can be used to create a linefeed.  The F2 and escape keys can always be used to stop editing.

To customize the location of the textbox in the graph, override getEditorBounds as follows:

graph.cellEditor.getEditorBounds = function(state)
 {
-  var result = mxCellEditor.prototype.getEditorBounds.apply(this, arguments);
+  let result = mxCellEditor.prototype.getEditorBounds.apply(this, arguments);
 
   if (this.graph.getModel().isEdge(state.cell))
   {
@@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV } return result; -};

Note that this hook is only called if autoSize is false.  If autoSize is true, then mxShape.getLabelBounds is used to compute the current bounds of the textbox.

The textarea uses the mxCellEditor CSS class.  You can modify this class in your custom CSS.  Note: You should modify the CSS after loading the client in the page.

Example

To only allow numeric input in the in-place editor, use the following code.

var text = graph.cellEditor.textarea;
+};

Note that this hook is only called if autoSize is false.  If autoSize is true, then mxShape.getLabelBounds is used to compute the current bounds of the textbox.

The textarea uses the mxCellEditor CSS class.  You can modify this class in your custom CSS.  Note: You should modify the CSS after loading the client in the page.

Example

To only allow numeric input in the in-place editor, use the following code.

let text = graph.cellEditor.textarea;
 
 mxEvent.addListener(text, 'keydown', function (evt)
 {
@@ -43,7 +43,7 @@ mxEvent.addListener(text, 'keydown', function (evt)
       graph.cellEditor.textarea.value = String.fromCharCode(evt.which);
     }
   }
-}));

To allow focus for a DIV, and hence to receive key press events, some browsers require it to have a valid tabindex attribute.  In this case the following code may be used to keep the container focused.

var graphFireMouseEvent = graph.fireMouseEvent;
+}));

To allow focus for a DIV, and hence to receive key press events, some browsers require it to have a valid tabindex attribute.  In this case the following code may be used to keep the container focused.

let graphFireMouseEvent = graph.fireMouseEvent;
 graph.fireMouseEvent = function(evtName, me, sender)
 {
   if (evtName == mxEvent.MOUSE_DOWN)
@@ -149,7 +149,7 @@ graph.fireMouseEvent = function(evtName, me, sender)
 
 
 
 
diff --git a/docs/js-api/files/view/mxCellOverlay-js.html b/docs/js-api/files/view/mxCellOverlay-js.html
index 2c53dbf9b..44ba02092 100644
--- a/docs/js-api/files/view/mxCellOverlay-js.html
+++ b/docs/js-api/files/view/mxCellOverlay-js.html
@@ -11,11 +11,11 @@ if (browserType) {document.write("
");if (browserV -

mxCellOverlay

Extends mxEventSource to implement a graph overlay, represented by an icon and a tooltip.  Overlays can handle and fire <click> events and are added to the graph using mxGraph.addCellOverlay, and removed using mxGraph.removeCellOverlay, or mxGraph.removeCellOverlays to remove all overlays.  The mxGraph.getCellOverlays function returns the array of overlays for a given cell in a graph.  If multiple overlays exist for the same cell, then getBounds should be overridden in at least one of the overlays.

Overlays appear on top of all cells in a special layer.  If this is not desirable, then the image must be rendered as part of the shape or label of the cell instead.

Example

The following adds a new overlays for a given vertex and selects the cell if the overlay is clicked.

var overlay = new mxCellOverlay(img, html);
+

mxCellOverlay

Extends mxEventSource to implement a graph overlay, represented by an icon and a tooltip.  Overlays can handle and fire <click> events and are added to the graph using mxGraph.addCellOverlay, and removed using mxGraph.removeCellOverlay, or mxGraph.removeCellOverlays to remove all overlays.  The mxGraph.getCellOverlays function returns the array of overlays for a given cell in a graph.  If multiple overlays exist for the same cell, then getBounds should be overridden in at least one of the overlays.

Overlays appear on top of all cells in a special layer.  If this is not desirable, then the image must be rendered as part of the shape or label of the cell instead.

Example

The following adds a new overlays for a given vertex and selects the cell if the overlay is clicked.

let overlay = new mxCellOverlay(img, html);
 graph.addCellOverlay(vertex, overlay);
 overlay.addListener(mxEvent.CLICK, function(sender, evt)
 {
-  var cell = evt.getProperty('cell');
+  let cell = evt.getProperty('cell');
   graph.setSelectionCell(cell);
 });

For cell overlays to be printed use mxPrintPreview.printOverlays.

Summary
mxCellOverlayExtends mxEventSource to implement a graph overlay, represented by an icon and a tooltip.
Events
mxEvent.CLICKFires when the user clicks on the overlay.
Functions
mxCellOverlayConstructs a new overlay using the given image and tooltip.
Variables
imageHolds the mxImage to be used as the icon.
tooltipHolds the optional string to be used as the tooltip.
alignHolds the horizontal alignment for the overlay.
verticalAlignHolds the vertical alignment for the overlay.
offsetHolds the offset as an mxPoint.
cursorHolds the cursor for the overlay.
defaultOverlapDefines the overlapping for the overlay, that is, the proportional distance from the origin to the point defined by the alignment.
Functions
getBoundsReturns the bounds of the overlay for the given mxCellState as an mxRectangle.
toStringReturns the textual representation of the overlay to be used as the tooltip.
@@ -47,11 +47,11 @@ overlay.addListener(mxEvent.CLICK, function(sender, evt)

getBounds

mxCellOverlay.prototype.getBounds = function(state)

Returns the bounds of the overlay for the given mxCellState as an mxRectangle.  This should be overridden when using multiple overlays per cell so that the overlays do not overlap.

The following example will place the overlay along an edge (where x=[-1..1] from the start to the end of the edge and y is the orthogonal offset in px).

overlay.getBounds = function(state)
 {
-  var bounds = mxCellOverlay.prototype.getBounds.apply(this, arguments);
+  let bounds = mxCellOverlay.prototype.getBounds.apply(this, arguments);
 
   if (state.view.graph.getModel().isEdge(state.cell))
   {
-    var pt = state.view.getPoint(state, {x: 0, y: 0, relative: true});
+    let pt = state.view.getPoint(state, {x: 0, y: 0, relative: true});
 
     bounds.x = pt.x - bounds.width / 2;
     bounds.y = pt.y - bounds.height / 2;
@@ -69,7 +69,7 @@ overlay.addListener(mxEvent.CLICK, function(sender, evt)
 
 
 
 
diff --git a/docs/js-api/files/view/mxCellRenderer-js.html b/docs/js-api/files/view/mxCellRenderer-js.html
index f34fac15d..ae56436c0 100644
--- a/docs/js-api/files/view/mxCellRenderer-js.html
+++ b/docs/js-api/files/view/mxCellRenderer-js.html
@@ -126,7 +126,7 @@ for (var i in mxCellRenderer.defaultShapes)
 
 
 
 
diff --git a/docs/js-api/files/view/mxCellState-js.html b/docs/js-api/files/view/mxCellState-js.html
index 7507cc652..5a13791d1 100644
--- a/docs/js-api/files/view/mxCellState-js.html
+++ b/docs/js-api/files/view/mxCellState-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxCellState

Represents the current state of a cell in a given mxGraphView.

For edges, the edge label position is stored in absoluteOffset.

The size for oversize labels can be retrieved using the boundingBox property of the text field as shown below.

var bbox = (state.text != null) ? state.text.boundingBox : null;
Summary
mxCellStateRepresents the current state of a cell in a given mxGraphView.
Functions
mxCellStateConstructs a new object that represents the current state of the given cell in the specified view.
Variables
viewReference to the enclosing mxGraphView.
cellReference to the mxCell that is represented by this state.
styleContains an array of key, value pairs that represent the style of the cell.
invalidStyleSpecifies if the style is invalid.
invalidSpecifies if the state is invalid.
originmxPoint that holds the origin for all child cells.
absolutePointsHolds an array of mxPoints that represent the absolute points of an edge.
absoluteOffsetmxPoint that holds the absolute offset.
visibleSourceStateCaches the visible source terminal state.
visibleTargetStateCaches the visible target terminal state.
terminalDistanceCaches the distance between the end points for an edge.
lengthCaches the length of an edge.
segmentsArray of numbers that represent the cached length of each segment of the edge.
shapeHolds the mxShape that represents the cell graphically.
textHolds the mxText that represents the label of the cell.
unscaledWidthHolds the unscaled width of the state.
unscaledHeightHolds the unscaled height of the state.
Functions
getPerimeterBoundsReturns the mxRectangle that should be used as the perimeter of the cell.
setAbsoluteTerminalPointSets the first or last point in absolutePoints depending on isSource.
setCursorSets the given cursor on the shape and text shape.
getVisibleTerminalReturns the visible source or target terminal cell.
getVisibleTerminalStateReturns the visible source or target terminal state.
setVisibleTerminalStateSets the visible source or target terminal state.
getCellBoundsReturns the unscaled, untranslated bounds.
getPaintBoundsReturns the unscaled, untranslated paint bounds.
updateCachedBoundsUpdates the cellBounds and paintBounds.
setStateCopies all fields from the given state to this state.
cloneReturns a clone of this mxPoint.
destroyDestroys the state and all associated resources.
+

mxCellState

Represents the current state of a cell in a given mxGraphView.

For edges, the edge label position is stored in absoluteOffset.

The size for oversize labels can be retrieved using the boundingBox property of the text field as shown below.

let bbox = (state.text != null) ? state.text.boundingBox : null;
Summary
mxCellStateRepresents the current state of a cell in a given mxGraphView.
Functions
mxCellStateConstructs a new object that represents the current state of the given cell in the specified view.
Variables
viewReference to the enclosing mxGraphView.
cellReference to the mxCell that is represented by this state.
styleContains an array of key, value pairs that represent the style of the cell.
invalidStyleSpecifies if the style is invalid.
invalidSpecifies if the state is invalid.
originmxPoint that holds the origin for all child cells.
absolutePointsHolds an array of mxPoints that represent the absolute points of an edge.
absoluteOffsetmxPoint that holds the absolute offset.
visibleSourceStateCaches the visible source terminal state.
visibleTargetStateCaches the visible target terminal state.
terminalDistanceCaches the distance between the end points for an edge.
lengthCaches the length of an edge.
segmentsArray of numbers that represent the cached length of each segment of the edge.
shapeHolds the mxShape that represents the cell graphically.
textHolds the mxText that represents the label of the cell.
unscaledWidthHolds the unscaled width of the state.
unscaledHeightHolds the unscaled height of the state.
Functions
getPerimeterBoundsReturns the mxRectangle that should be used as the perimeter of the cell.
setAbsoluteTerminalPointSets the first or last point in absolutePoints depending on isSource.
setCursorSets the given cursor on the shape and text shape.
getVisibleTerminalReturns the visible source or target terminal cell.
getVisibleTerminalStateReturns the visible source or target terminal state.
setVisibleTerminalStateSets the visible source or target terminal state.
getCellBoundsReturns the unscaled, untranslated bounds.
getPaintBoundsReturns the unscaled, untranslated paint bounds.
updateCachedBoundsUpdates the cellBounds and paintBounds.
setStateCopies all fields from the given state to this state.
cloneReturns a clone of this mxPoint.
destroyDestroys the state and all associated resources.

Functions

@@ -86,7 +86,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/view/mxCellStatePreview-js.html b/docs/js-api/files/view/mxCellStatePreview-js.html index dd8fce91c..e7c23f2be 100644 --- a/docs/js-api/files/view/mxCellStatePreview-js.html +++ b/docs/js-api/files/view/mxCellStatePreview-js.html @@ -46,7 +46,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/view/mxConnectionConstraint-js.html b/docs/js-api/files/view/mxConnectionConstraint-js.html index 3fa212df8..6a4997d12 100644 --- a/docs/js-api/files/view/mxConnectionConstraint-js.html +++ b/docs/js-api/files/view/mxConnectionConstraint-js.html @@ -36,7 +36,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/view/mxEdgeStyle-js.html b/docs/js-api/files/view/mxEdgeStyle-js.html index d9d228a6c..ac87e6358 100644 --- a/docs/js-api/files/view/mxEdgeStyle-js.html +++ b/docs/js-api/files/view/mxEdgeStyle-js.html @@ -11,12 +11,12 @@ if (browserType) {document.write("
");if (browserV -

mxEdgeStyle

Provides various edge styles to be used as the values for mxConstants.STYLE_EDGE in a cell style.

Example

var style = stylesheet.getDefaultEdgeStyle();
+

mxEdgeStyle

Provides various edge styles to be used as the values for mxConstants.STYLE_EDGE in a cell style.

Example

let style = stylesheet.getDefaultEdgeStyle();
 style[mxConstants.STYLE_EDGE] = mxEdgeStyle.ElbowConnector;

Sets the default edge style to ElbowConnector.

Custom edge style

To write a custom edge style, a function must be added to the mxEdgeStyle object as follows:

mxEdgeStyle.MyStyle = function(state, source, target, points, result)
 {
   if (source != null && target != null)
   {
-    var pt = new mxPoint(target.getCenterX(), source.getCenterY());
+    let pt = new mxPoint(target.getCenterX(), source.getCenterY());
 
     if (mxUtils.contains(source, pt.x, pt.y))
     {
@@ -25,7 +25,7 @@ style[mxConstants.STYLE_EDGE] = mxEdgeStyle.ElbowConnector;

In the above example, a right angle is created using a point on the horizontal center of the target vertex and the vertical center of the source vertex.  The code checks if that point intersects the source vertex and makes the edge straight if it does.  The point is then added into the result array, which acts as the return value of the function.

The new edge style should then be registered in the mxStyleRegistry as follows

mxStyleRegistry.putValue('myEdgeStyle', mxEdgeStyle.MyStyle);

The custom edge style above can now be used in a specific edge as follows

model.setStyle(edge, 'edgeStyle=myEdgeStyle');

Note that the key of the mxStyleRegistry entry for the function should be used in string values, unless mxGraphView.allowEval is true, in which case you can also use mxEdgeStyle.MyStyle for the value in the cell style above.

Or it can be used for all edges in the graph as follows

var style = graph.getStylesheet().getDefaultEdgeStyle();
+};

In the above example, a right angle is created using a point on the horizontal center of the target vertex and the vertical center of the source vertex.  The code checks if that point intersects the source vertex and makes the edge straight if it does.  The point is then added into the result array, which acts as the return value of the function.

The new edge style should then be registered in the mxStyleRegistry as follows

mxStyleRegistry.putValue('myEdgeStyle', mxEdgeStyle.MyStyle);

The custom edge style above can now be used in a specific edge as follows

model.setStyle(edge, 'edgeStyle=myEdgeStyle');

Note that the key of the mxStyleRegistry entry for the function should be used in string values, unless mxGraphView.allowEval is true, in which case you can also use mxEdgeStyle.MyStyle for the value in the cell style above.

Or it can be used for all edges in the graph as follows

let style = graph.getStylesheet().getDefaultEdgeStyle();
 style[mxConstants.STYLE_EDGE] = mxEdgeStyle.MyStyle;

Note that the object can be used directly when programmatically setting the value, but the key in the mxStyleRegistry should be used when setting the value via a key, value pair in a cell style.

Summary
mxEdgeStyleProvides various edge styles to be used as the values for mxConstants.STYLE_EDGE in a cell style.
Functions
EntityRelationImplements an entity relation style for edges (as used in database schema diagrams).
LoopImplements a self-reference, aka.
ElbowConnectorUses either SideToSide or TopToBottom depending on the horizontal flag in the cell style.
SideToSideImplements a vertical elbow edge.
TopToBottomImplements a horizontal elbow edge.
SegmentConnectorImplements an orthogonal edge style.
scalePointArrayScales an array of mxPoint
scaleCellStateScales an mxCellState
OrthConnectorImplements a local orthogonal router between the given cells.

Functions

@@ -55,7 +55,7 @@ style[mxConstants.STYLE_EDGE] = mxEdgeStyle.MyStyle;

Note t

diff --git a/docs/js-api/files/view/mxGraph-js.html b/docs/js-api/files/view/mxGraph-js.html index 590aeedd2..072a098c7 100644 --- a/docs/js-api/files/view/mxGraph-js.html +++ b/docs/js-api/files/view/mxGraph-js.html @@ -11,39 +11,39 @@ if (browserType) {document.write("
");if (browserV -

mxGraph

Extends mxEventSource to implement a graph component for the browser.  This is the main class of the package.  To activate panning and connections use setPanning and setConnectable.  For rubberband selection you must create a new instance of mxRubberband.  The following listeners are added to mouseListeners by default:

These listeners will be called in the above order if they are enabled.

Background Images

To display a background image, set the image, image width and image height using setBackgroundImage.  If one of the above values has changed then the view’s mxGraphView.validate should be invoked.

Cell Images

To use images in cells, a shape must be specified in the default vertex style (or any named style).  Possible shapes are mxConstants.SHAPE_IMAGE and mxConstants.SHAPE_LABEL.  The code to change the shape used in the default vertex style, the following code is used:

var style = graph.getStylesheet().getDefaultVertexStyle();
+

mxGraph

Extends mxEventSource to implement a graph component for the browser.  This is the main class of the package.  To activate panning and connections use setPanning and setConnectable.  For rubberband selection you must create a new instance of mxRubberband.  The following listeners are added to mouseListeners by default:

These listeners will be called in the above order if they are enabled.

Background Images

To display a background image, set the image, image width and image height using setBackgroundImage.  If one of the above values has changed then the view’s mxGraphView.validate should be invoked.

Cell Images

To use images in cells, a shape must be specified in the default vertex style (or any named style).  Possible shapes are mxConstants.SHAPE_IMAGE and mxConstants.SHAPE_LABEL.  The code to change the shape used in the default vertex style, the following code is used:

let style = graph.getStylesheet().getDefaultVertexStyle();
 style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_IMAGE;

For the default vertex style, the image to be displayed can be specified in a cell’s style using the mxConstants.STYLE_IMAGE key and the image URL as a value, for example:

image=http://www.example.com/image.gif

For a named style, the the stylename must be the first element of the cell style:

stylename;image=http://www.example.com/image.gif

A cell style can have any number of key=value pairs added, divided by a semicolon as follows:

[stylename;|key=value;]

Labels

The cell labels are defined by getLabel which uses convertValueToString if labelsVisible is true.  If a label must be rendered as HTML markup, then isHtmlLabel should return true for the respective cell.  If all labels contain HTML markup, htmlLabels can be set to true.  NOTE: Enabling HTML labels carries a possible security risk (see the section on security in the manual).

If wrapping is needed for a label, then isHtmlLabel and isWrapping must return true for the cell whose label should be wrapped.  See isWrapping for an example.

If clipping is needed to keep the rendering of a HTML label inside the bounds of its vertex, then <isClipping> should return true for the respective cell.

By default, edge labels are movable and vertex labels are fixed.  This can be changed by setting edgeLabelsMovable and vertexLabelsMovable, or by overriding isLabelMovable.

In-place Editing

In-place editing is started with a doubleclick or by typing F2.  Programmatically, <edit> is used to check if the cell is editable (isCellEditable) and call startEditingAtCell, which invokes mxCellEditor.startEditing.  The editor uses the value returned by getEditingValue as the editing value.

After in-place editing, labelChanged is called, which invokes mxGraphModel.setValue, which in turn calls mxGraphModel.valueForCellChanged via mxValueChange.

The event that triggers in-place editing is passed through to the cellEditor, which may take special actions depending on the type of the event or mouse location, and is also passed to getEditingValue.  The event is then passed back to the event processing functions which can perform specific actions based on the trigger event.

Tooltips

Tooltips are implemented by getTooltip, which calls getTooltipForCell if a cell is under the mousepointer.  The default implementation checks if the cell has a getTooltip function and calls it if it exists.  Hence, in order to provide custom tooltips, the cell must provide a getTooltip function, or one of the two above functions must be overridden.

Typically, for custom cell tooltips, the latter function is overridden as follows:

graph.getTooltipForCell = function(cell)
 {
-  var label = this.convertValueToString(cell);
+  let label = this.convertValueToString(cell);
   return 'Tooltip for '+label;
 }

When using a config file, the function is overridden in the mxGraph section using the following entry:

<add as="getTooltipForCell"><![CDATA[
   function(cell)
   {
-    var label = this.convertValueToString(cell);
+    let label = this.convertValueToString(cell);
     return 'Tooltip for '+label;
   }
 ]]></add>

”this” refers to the graph in the implementation, so for example to check if a cell is an edge, you use this.getModel().isEdge(cell)

For replacing the default implementation of getTooltipForCell (rather than replacing the function on a specific instance), the following code should be used after loading the JavaScript files, but before creating a new mxGraph instance using mxGraph:

mxGraph.prototype.getTooltipForCell = function(cell)
 {
-  var label = this.convertValueToString(cell);
+  let label = this.convertValueToString(cell);
   return 'Tooltip for '+label;
-}

Shapes & Styles

The implementation of new shapes is demonstrated in the examples.  We’ll assume that we have implemented a custom shape with the name BoxShape which we want to use for drawing vertices.  To use this shape, it must first be registered in the cell renderer as follows:

mxCellRenderer.registerShape('box', BoxShape);

The code registers the BoxShape constructor under the name box in the cell renderer of the graph.  The shape can now be referenced using the shape-key in a style definition.  (The cell renderer contains a set of additional shapes, namely one for each constant with a SHAPE-prefix in mxConstants.)

Styles are a collection of key, value pairs and a stylesheet is a collection of named styles.  The names are referenced by the cellstyle, which is stored in mxCell.style with the following format: [stylename;|key=value;].  The string is resolved to a collection of key, value pairs, where the keys are overridden with the values in the string.

When introducing a new shape, the name under which the shape is registered must be used in the stylesheet.  There are three ways of doing this:

  • By changing the default style, so that all vertices will use the new shape
  • By defining a new style, so that only vertices with the respective cellstyle will use the new shape
  • By using shape=box in the cellstyle’s optional list of key, value pairs to be overridden

In the first case, the code to fetch and modify the default style for vertices is as follows:

var style = graph.getStylesheet().getDefaultVertexStyle();
-style[mxConstants.STYLE_SHAPE] = 'box';

The code takes the default vertex style, which is used for all vertices that do not have a specific cellstyle, and modifies the value for the shape-key in-place to use the new BoxShape for drawing vertices.  This is done by assigning the box value in the second line, which refers to the name of the BoxShape in the cell renderer.

In the second case, a collection of key, value pairs is created and then added to the stylesheet under a new name.  In order to distinguish the shapename and the stylename we’ll use boxstyle for the stylename:

var style = {};
+}

Shapes & Styles

The implementation of new shapes is demonstrated in the examples.  We’ll assume that we have implemented a custom shape with the name BoxShape which we want to use for drawing vertices.  To use this shape, it must first be registered in the cell renderer as follows:

mxCellRenderer.registerShape('box', BoxShape);

The code registers the BoxShape constructor under the name box in the cell renderer of the graph.  The shape can now be referenced using the shape-key in a style definition.  (The cell renderer contains a set of additional shapes, namely one for each constant with a SHAPE-prefix in mxConstants.)

Styles are a collection of key, value pairs and a stylesheet is a collection of named styles.  The names are referenced by the cellstyle, which is stored in mxCell.style with the following format: [stylename;|key=value;].  The string is resolved to a collection of key, value pairs, where the keys are overridden with the values in the string.

When introducing a new shape, the name under which the shape is registered must be used in the stylesheet.  There are three ways of doing this:

  • By changing the default style, so that all vertices will use the new shape
  • By defining a new style, so that only vertices with the respective cellstyle will use the new shape
  • By using shape=box in the cellstyle’s optional list of key, value pairs to be overridden

In the first case, the code to fetch and modify the default style for vertices is as follows:

let style = graph.getStylesheet().getDefaultVertexStyle();
+style[mxConstants.STYLE_SHAPE] = 'box';

The code takes the default vertex style, which is used for all vertices that do not have a specific cellstyle, and modifies the value for the shape-key in-place to use the new BoxShape for drawing vertices.  This is done by assigning the box value in the second line, which refers to the name of the BoxShape in the cell renderer.

In the second case, a collection of key, value pairs is created and then added to the stylesheet under a new name.  In order to distinguish the shapename and the stylename we’ll use boxstyle for the stylename:

let style = {};
 style[mxConstants.STYLE_SHAPE] = 'box';
 style[mxConstants.STYLE_STROKECOLOR] = '#000000';
 style[mxConstants.STYLE_FONTCOLOR] = '#000000';
-graph.getStylesheet().putCellStyle('boxstyle', style);

The code adds a new style with the name boxstyle to the stylesheet.  To use this style with a cell, it must be referenced from the cellstyle as follows:

var vertex = graph.insertVertex(parent, null, 'Hello, World!', 20, 20, 80, 20,
+graph.getStylesheet().putCellStyle('boxstyle', style);

The code adds a new style with the name boxstyle to the stylesheet.  To use this style with a cell, it must be referenced from the cellstyle as follows:

let vertex = graph.insertVertex(parent, null, 'Hello, World!', 20, 20, 80, 20,
              'boxstyle');

To summarize, each new shape must be registered in the mxCellRenderer with a unique name.  That name is then used as the value of the shape-key in a default or custom style.  If there are multiple custom shapes, then there should be a separate style for each shape.

Inheriting Styles

For fill-, stroke-, gradient-, font- and indicatorColors special keywords can be used.  The inherit keyword for one of these colors will inherit the color for the same key from the parent cell.  The swimlane keyword does the same, but inherits from the nearest swimlane in the ancestor hierarchy.  Finally, the indicated keyword will use the color of the indicator as the color for the given key.

Scrollbars

The <containers> overflow CSS property defines if scrollbars are used to display the graph.  For values of ‘auto’ or ‘scroll’, the scrollbars will be shown.  Note that the resizeContainer flag is normally not used together with scrollbars, as it will resize the container to match the size of the graph after each change.

Multiplicities and Validation

To control the possible connections in mxGraph, getEdgeValidationError is used.  The default implementation of the function uses multiplicities, which is an array of mxMultiplicity.  Using this class allows to establish simple multiplicities, which are enforced by the graph.

The mxMultiplicity uses <mxCell.is> to determine for which terminals it applies.  The default implementation of <mxCell.is> works with DOM nodes (XML nodes) and checks if the given type parameter matches the nodeName of the node (case insensitive).  Optionally, an attributename and value can be specified which are also checked.

getEdgeValidationError is called whenever the connectivity of an edge changes.  It returns an empty string or an error message if the edge is invalid or null if the edge is valid.  If the returned string is not empty then it is displayed as an error message.

mxMultiplicity allows to specify the multiplicity between a terminal and its possible neighbors.  For example, if any rectangle may only be connected to, say, a maximum of two circles you can add the following rule to multiplicities:

graph.multiplicities.push(new mxMultiplicity(
   true, 'rectangle', null, null, 0, 2, ['circle'],
   'Only 2 targets allowed',
   'Only shape targets allowed'));

This will display the first error message whenever a rectangle is connected to more than two circles and the second error message if a rectangle is connected to anything but a circle.

For certain multiplicities, such as a minimum of 1 connection, which cannot be enforced at cell creation time (unless the cell is created together with the connection), mxGraph offers <validate> which checks all multiplicities for all cells and displays the respective error messages in an overlay icon on the cells.

If a cell is collapsed and contains validation errors, a respective warning icon is attached to the collapsed cell.

Auto-Layout

For automatic layout, the <getLayout> hook is provided in mxLayoutManager.  It can be overridden to return a layout algorithm for the children of a given cell.

Unconnected edges

The default values for all switches are designed to meet the requirements of general diagram drawing applications.  A very typical set of settings to avoid edges that are not connected is the following:

graph.setAllowDanglingEdges(false);
-graph.setDisconnectOnMove(false);

Setting the cloneInvalidEdges switch to true is optional.  This switch controls if edges are inserted after a copy, paste or clone-drag if they are invalid.  For example, edges are invalid if copied or control-dragged without having selected the corresponding terminals and allowDanglingEdges is false, in which case the edges will not be cloned if the switch is false.

Output

To produce an XML representation for a diagram, the following code can be used.

var enc = new mxCodec(mxUtils.createXmlDocument());
-var node = enc.encode(graph.getModel());

This will produce an XML node than can be handled using the DOM API or turned into a string representation using the following code:

var xml = mxUtils.getXml(node);

To obtain a formatted string, mxUtils.getPrettyXml can be used instead.

This string can now be stored in a local persistent storage (for example using Google Gears) or it can be passed to a backend using mxUtils.post as follows.  The url variable is the URL of the Java servlet, PHP page or HTTP handler, depending on the server.

var xmlString = encodeURIComponent(mxUtils.getXml(node));
+graph.setDisconnectOnMove(false);

Setting the cloneInvalidEdges switch to true is optional.  This switch controls if edges are inserted after a copy, paste or clone-drag if they are invalid.  For example, edges are invalid if copied or control-dragged without having selected the corresponding terminals and allowDanglingEdges is false, in which case the edges will not be cloned if the switch is false.

Output

To produce an XML representation for a diagram, the following code can be used.

let enc = new mxCodec(mxUtils.createXmlDocument());
+let node = enc.encode(graph.getModel());

This will produce an XML node than can be handled using the DOM API or turned into a string representation using the following code:

let xml = mxUtils.getXml(node);

To obtain a formatted string, mxUtils.getPrettyXml can be used instead.

This string can now be stored in a local persistent storage (for example using Google Gears) or it can be passed to a backend using mxUtils.post as follows.  The url variable is the URL of the Java servlet, PHP page or HTTP handler, depending on the server.

let xmlString = encodeURIComponent(mxUtils.getXml(node));
 mxUtils.post(url, 'xml='+xmlString, function(req)
 {
   // Process server response using req of type mxXmlRequest
-});

Input

To load an XML representation of a diagram into an existing graph object mxUtils.load can be used as follows.  The url variable is the URL of the Java servlet, PHP page or HTTP handler that produces the XML string.

var xmlDoc = mxUtils.load(url).getXml();
-var node = xmlDoc.documentElement;
-var dec = new mxCodec(node.ownerDocument);
+});

Input

To load an XML representation of a diagram into an existing graph object mxUtils.load can be used as follows.  The url variable is the URL of the Java servlet, PHP page or HTTP handler that produces the XML string.

let xmlDoc = mxUtils.load(url).getXml();
+let node = xmlDoc.documentElement;
+let dec = new mxCodec(node.ownerDocument);
 dec.decode(node, graph.getModel());

For creating a page that loads the client and a diagram using a single request please refer to the deployment examples in the backends.

Functional dependencies

Resources

resources/graphLanguage resources for mxGraph
Summary
mxGraphExtends mxEventSource to implement a graph component for the browser.
Events
mxEvent.ROOTFires if the root in the model has changed.
mxEvent.ALIGN_CELLSFires between begin- and endUpdate in alignCells.
mxEvent.FLIP_EDGEFires between begin- and endUpdate in flipEdge.
mxEvent.ORDER_CELLSFires between begin- and endUpdate in orderCells.
mxEvent.CELLS_ORDEREDFires between begin- and endUpdate in cellsOrdered.
mxEvent.GROUP_CELLSFires between begin- and endUpdate in groupCells.
mxEvent.UNGROUP_CELLSFires between begin- and endUpdate in ungroupCells.
mxEvent.REMOVE_CELLS_FROM_PARENTFires between begin- and endUpdate in removeCellsFromParent.
mxEvent.ADD_CELLSFires between begin- and endUpdate in addCells.
mxEvent.CELLS_ADDEDFires between begin- and endUpdate in cellsAdded.
mxEvent.REMOVE_CELLSFires between begin- and endUpdate in removeCells.
mxEvent.CELLS_REMOVEDFires between begin- and endUpdate in cellsRemoved.
mxEvent.SPLIT_EDGEFires between begin- and endUpdate in splitEdge.
mxEvent.TOGGLE_CELLSFires between begin- and endUpdate in toggleCells.
mxEvent.FOLD_CELLSFires between begin- and endUpdate in foldCells.
mxEvent.CELLS_FOLDEDFires between begin- and endUpdate in cellsFolded.
mxEvent.UPDATE_CELL_SIZEFires between begin- and endUpdate in updateCellSize.
mxEvent.RESIZE_CELLSFires between begin- and endUpdate in resizeCells.
mxEvent.CELLS_RESIZEDFires between begin- and endUpdate in cellsResized.
mxEvent.MOVE_CELLSFires between begin- and endUpdate in moveCells.
mxEvent.CELLS_MOVEDFires between begin- and endUpdate in cellsMoved.
mxEvent.CONNECT_CELLFires between begin- and endUpdate in connectCell.
mxEvent.CELL_CONNECTEDFires between begin- and endUpdate in cellConnected.
mxEvent.REFRESHFires after refresh was executed.
mxEvent.CLICKFires in click after a click event.
mxEvent.DOUBLE_CLICKFires in dblClick after a double click.
mxEvent.GESTUREFires in fireGestureEvent after a touch gesture.
mxEvent.TAP_AND_HOLDFires in tapAndHold if a tap and hold event was detected.
mxEvent.FIRE_MOUSE_EVENTFires in fireMouseEvent before the mouse listeners are invoked.
mxEvent.SIZEFires after sizeDidChange was executed.
mxEvent.START_EDITINGFires before the in-place editor starts in startEditingAtCell.
mxEvent.EDITING_STARTEDFires after the in-place editor starts in startEditingAtCell.
mxEvent.EDITING_STOPPEDFires after the in-place editor stops in stopEditing.
mxEvent.LABEL_CHANGEDFires between begin- and endUpdate in cellLabelChanged.
mxEvent.ADD_OVERLAYFires after an overlay is added in addCellOverlay.
mxEvent.REMOVE_OVERLAYFires after an overlay is removed in removeCellOverlay and removeCellOverlays.
mxGraphConstructs a new mxGraph in the specified container.
Variables
mouseListenersHolds the mouse event listeners.
isMouseDownHolds the state of the mouse button.
modelHolds the mxGraphModel that contains the cells to be displayed.
viewHolds the mxGraphView that caches the mxCellStates for the cells.
stylesheetHolds the mxStylesheet that defines the appearance of the cells.
selectionModelHolds the mxGraphSelectionModel that models the current selection.
cellEditorHolds the mxCellEditor that is used as the in-place editing.
cellRendererHolds the mxCellRenderer for rendering the cells in the graph.
multiplicitiesAn array of mxMultiplicities describing the allowed connections in a graph.
renderHintRenderHint as it was passed to the constructor.
dialectDialect to be used for drawing the graph.
gridSizeSpecifies the grid size.
gridEnabledSpecifies if the grid is enabled.
portsEnabledSpecifies if ports are enabled.
nativeDoubleClickEnabledSpecifies if native double click events should be detected.
doubleTapEnabledSpecifies if double taps on touch-based devices should be handled as a double click.
doubleTapTimeoutSpecifies the timeout for double taps and non-native double clicks.
doubleTapToleranceSpecifies the tolerance for double taps and double clicks in quirks mode.
lastTouchXHolds the x-coordinate of the last touch event for double tap detection.
lastTouchXHolds the y-coordinate of the last touch event for double tap detection.
lastTouchTimeHolds the time of the last touch event for double click detection.
tapAndHoldEnabledSpecifies if tap and hold should be used for starting connections on touch-based devices.
tapAndHoldDelaySpecifies the time for a tap and hold.
tapAndHoldInProgressTrue if the timer for tap and hold events is running.
tapAndHoldValidTrue as long as the timer is running and the touch events stay within the given <tapAndHoldTolerance>.
initialTouchXHolds the x-coordinate of the intial touch event for tap and hold.
initialTouchYHolds the y-coordinate of the intial touch event for tap and hold.
toleranceTolerance for a move to be handled as a single click.
defaultOverlapValue returned by getOverlap if isAllowOverlapParent returns true for the given cell.
defaultParentSpecifies the default parent to be used to insert new cells.
alternateEdgeStyleSpecifies the alternate edge style to be used if the main control point on an edge is being doubleclicked.
backgroundImageSpecifies the mxImage to be returned by getBackgroundImage.
pageVisibleSpecifies if the background page should be visible.
pageBreaksVisibleSpecifies if a dashed line should be drawn between multiple pages.
pageBreakColorSpecifies the color for page breaks.
pageBreakDashedSpecifies the page breaks should be dashed.
minPageBreakDistSpecifies the minimum distance for page breaks to be visible.
preferPageSizeSpecifies if the graph size should be rounded to the next page number in sizeDidChange.
pageFormatSpecifies the page format for the background page.
pageScaleSpecifies the scale of the background page.
enabledSpecifies the return value for isEnabled.
escapeEnabledSpecifies if mxKeyHandler should invoke escape when the escape key is pressed.
invokesStopCellEditingIf true, when editing is to be stopped by way of selection changing, data in diagram changing or other means stopCellEditing is invoked, and changes are saved.
enterStopsCellEditingIf true, pressing the enter key without pressing control or shift will stop editing and accept the new value.
useScrollbarsForPanningSpecifies if scrollbars should be used for panning in panGraph if any scrollbars are available.
exportEnabledSpecifies the return value for canExportCell.
importEnabledSpecifies the return value for canImportCell.
cellsLockedSpecifies the return value for isCellLocked.
cellsCloneableSpecifies the return value for isCellCloneable.
foldingEnabledSpecifies if folding (collapse and expand via an image icon in the graph should be enabled).
cellsEditableSpecifies the return value for isCellEditable.
cellsDeletableSpecifies the return value for isCellDeletable.
cellsMovableSpecifies the return value for isCellMovable.
edgeLabelsMovableSpecifies the return value for edges in isLabelMovable.
vertexLabelsMovableSpecifies the return value for vertices in isLabelMovable.
dropEnabledSpecifies the return value for isDropEnabled.
splitEnabledSpecifies if dropping onto edges should be enabled.
cellsResizableSpecifies the return value for isCellResizable.
cellsBendableSpecifies the return value for isCellsBendable.
cellsSelectableSpecifies the return value for isCellSelectable.
cellsDisconnectableSpecifies the return value for <isCellDisconntable>.
autoSizeCellsSpecifies if the graph should automatically update the cell size after an edit.
autoSizeCellsOnAddSpecifies if autoSize style should be applied when cells are added.
autoScrollSpecifies if the graph should automatically scroll if the mouse goes near the container edge while dragging.
ignoreScrollbarsSpecifies if the graph should automatically scroll regardless of the scrollbars.
translateToScrollPositionSpecifies if the graph should automatically convert the current scroll position to a translate in the graph view when a mouseUp event is received.
timerAutoScrollSpecifies if autoscrolling should be carried out via mxPanningManager even if the container has scrollbars.
allowAutoPanningSpecifies if panning via panGraph should be allowed to implement autoscroll if no scrollbars are available in scrollPointToVisible.
autoExtendSpecifies if the size of the graph should be automatically extended if the mouse goes near the container edge while dragging.
maximumGraphBoundsmxRectangle that specifies the area in which all cells in the diagram should be placed.
minimumGraphSizemxRectangle that specifies the minimum size of the graph.
minimumContainerSizemxRectangle that specifies the minimum size of the <container> if resizeContainer is true.
maximumContainerSizemxRectangle that specifies the maximum size of the container if resizeContainer is true.
resizeContainerSpecifies if the container should be resized to the graph size when the graph size has changed.
borderBorder to be added to the bottom and right side when the container is being resized after the graph has been changed.
keepEdgesInForegroundSpecifies if edges should appear in the foreground regardless of their order in the model.
keepEdgesInBackgroundSpecifies if edges should appear in the background regardless of their order in the model.
allowNegativeCoordinatesSpecifies if negative coordinates for vertices are allowed.
constrainChildrenSpecifies if a child should be constrained inside the parent bounds after a move or resize of the child.
constrainRelativeChildrenSpecifies if child cells with relative geometries should be constrained inside the parent bounds, if constrainChildren is true, and/or the maximumGraphBounds.
extendParentsSpecifies if a parent should contain the child bounds after a resize of the child.
extendParentsOnAddSpecifies if parents should be extended according to the extendParents switch if cells are added.
extendParentsOnAddSpecifies if parents should be extended according to the extendParents switch if cells are added.
recursiveResizeSpecifies the return value for isRecursiveResize.
collapseToPreferredSizeSpecifies if the cell size should be changed to the preferred size when a cell is first collapsed.
zoomFactorSpecifies the factor used for zoomIn and zoomOut.
keepSelectionVisibleOnZoomSpecifies if the viewport should automatically contain the selection cells after a zoom operation.
centerZoomSpecifies if the zoom operations should go into the center of the actual diagram rather than going from top, left.
resetViewOnRootChangeSpecifies if the scale and translate should be reset if the root changes in the model.
resetEdgesOnResizeSpecifies if edge control points should be reset after the resize of a connected cell.
resetEdgesOnMoveSpecifies if edge control points should be reset after the move of a connected cell.
resetEdgesOnConnectSpecifies if edge control points should be reset after the the edge has been reconnected.
allowLoopsSpecifies if loops (aka self-references) are allowed.
defaultLoopStylemxEdgeStyle to be used for loops.
multigraphSpecifies if multiple edges in the same direction between the same pair of vertices are allowed.
connectableEdgesSpecifies if edges are connectable.
allowDanglingEdgesSpecifies if edges with disconnected terminals are allowed in the graph.
cloneInvalidEdgesSpecifies if edges that are cloned should be validated and only inserted if they are valid.
disconnectOnMoveSpecifies if edges should be disconnected from their terminals when they are moved.
labelsVisibleSpecifies if labels should be visible.
htmlLabelsSpecifies the return value for isHtmlLabel.
swimlaneSelectionEnabledSpecifies if swimlanes should be selectable via the content if the mouse is released.
swimlaneNestingSpecifies if nesting of swimlanes is allowed.
swimlaneIndicatorColorAttributeThe attribute used to find the color for the indicator if the indicator color is set to ‘swimlane’.
imageBundlesHolds the list of image bundles.
minFitScaleSpecifies the minimum scale to be applied in fit.
maxFitScaleSpecifies the maximum scale to be applied in fit.
panDxCurrent horizontal panning value.
panDyCurrent vertical panning value.
collapsedImageSpecifies the mxImage to indicate a collapsed state.
expandedImageSpecifies the mxImage to indicate a expanded state.
warningImageSpecifies the mxImage for the image to be used to display a warning overlay.
alreadyConnectedResourceSpecifies the resource key for the error message to be displayed in non-multigraphs when two vertices are already connected.
containsValidationErrorsResourceSpecifies the resource key for the warning message to be displayed when a collapsed cell contains validation errors.
collapseExpandResourceSpecifies the resource key for the tooltip on the collapse/expand icon.
initInitializes the <container> and creates the respective datastructures.
createHandlersCreates the tooltip-, panning-, connection- and graph-handler (in this order).
createTooltipHandlerCreates and returns a new mxTooltipHandler to be used in this graph.
createSelectionCellsHandlerCreates and returns a new mxTooltipHandler to be used in this graph.
createConnectionHandlerCreates and returns a new mxConnectionHandler to be used in this graph.
createGraphHandlerCreates and returns a new mxGraphHandler to be used in this graph.
createPanningHandlerCreates and returns a new mxPanningHandler to be used in this graph.
createPopupMenuHandlerCreates and returns a new mxPopupMenuHandler to be used in this graph.
createSelectionModelCreates a new mxGraphSelectionModel to be used in this graph.
createStylesheetCreates a new mxGraphSelectionModel to be used in this graph.
createGraphViewCreates a new mxGraphView to be used in this graph.
createCellRendererCreates a new mxCellRenderer to be used in this graph.
createCellEditorCreates a new mxCellEditor to be used in this graph.
getModelReturns the mxGraphModel that contains the cells.
getViewReturns the mxGraphView that contains the mxCellStates.
getStylesheetReturns the mxStylesheet that defines the style.
setStylesheetSets the mxStylesheet that defines the style.
getSelectionModelReturns the mxGraphSelectionModel that contains the selection.
setSelectionModelSets the <mxSelectionModel> that contains the selection.
getSelectionCellsForChangesReturns the cells to be selected for the given array of changes.
graphModelChangedCalled when the graph model changes.
updateSelectionRemoves selection cells that are not in the model from the selection.
processChangeProcesses the given change and invalidates the respective cached data in view.
removeStateForCellRemoves all cached information for the given cell and its descendants.
Overlays
addCellOverlayAdds an mxCellOverlay for the specified cell.
getCellOverlaysReturns the array of mxCellOverlays for the given cell or null, if no overlays are defined.
removeCellOverlayRemoves and returns the given mxCellOverlay from the given cell.
removeCellOverlaysRemoves all mxCellOverlays from the given cell.
clearCellOverlaysRemoves all mxCellOverlays in the graph for the given cell and all its descendants.
setCellWarningCreates an overlay for the given cell using the warning and image or warningImage and returns the new mxCellOverlay.
In-place editing
startEditingCalls startEditingAtCell using the given cell or the first selection cell.
startEditingAtCellFires a startEditing event and invokes mxCellEditor.startEditing on <editor>.
getEditingValueReturns the initial value for in-place editing.
stopEditingStops the current editing and fires a <editingStopped> event.
labelChangedSets the label of the specified cell to the given value using cellLabelChanged and fires mxEvent.LABEL_CHANGED while the transaction is in progress.
cellLabelChangedSets the new label for a cell.
Event processing
escapeProcesses an escape keystroke.
clickProcesses a singleclick on an optional cell and fires a click event.
isSiblingSelectedReturns true if any sibling of the given cell is selected.
dblClickProcesses a doubleclick on an optional cell and fires a <dblclick> event.
tapAndHoldHandles the mxMouseEvent by highlighting the mxCellState.
scrollPointToVisibleScrolls the graph to the given point, extending the graph container if specified.
createPanningManagerCreates and returns an mxPanningManager.
getBorderSizesReturns the size of the border and padding on all four sides of the container.
getPreferredPageSizeReturns the preferred size of the background page if preferPageSize is true.
fitScales the graph such that the complete diagram fits into <container> and returns the current scale in the view.
sizeDidChangeCalled when the size of the graph has changed.
doResizeContainerResizes the container for the given graph width and height.
updatePageBreaksInvokes from sizeDidChange to redraw the page breaks.
Cell styles
getCurrentCellStyleReturns the style for the given cell from the cell state, if one exists, or using getCellStyle.
getCellStyleReturns an array of key, value pairs representing the cell style for the given cell.
postProcessCellStyleTries to resolve the value for the image style in the image bundles and turns short data URIs as defined in mxImageBundle to data URIs as defined in RFC 2397 of the IETF.
setCellStyleSets the style of the specified cells.
toggleCellStyleToggles the boolean value for the given key in the style of the given cell and returns the new value as 0 or 1.
toggleCellStylesToggles the boolean value for the given key in the style of the given cells and returns the new value as 0 or 1.
setCellStylesSets the key to value in the styles of the given cells.
toggleCellStyleFlagsToggles the given bit for the given key in the styles of the specified cells.
setCellStyleFlagsSets or toggles the given bit for the given key in the styles of the specified cells.
Cell alignment and orientation
alignCellsAligns the given cells vertically or horizontally according to the given alignment using the optional parameter as the coordinate.
flipEdgeToggles the style of the given edge between null (or empty) and alternateEdgeStyle.
addImageBundleAdds the specified mxImageBundle.
removeImageBundleRemoves the specified mxImageBundle.
getImageFromBundlesSearches all imageBundles for the specified key and returns the value for the first match or null if the key is not found.
Order
orderCellsMoves the given cells to the front or back.
cellsOrderedMoves the given cells to the front or back.
Grouping
groupCellsAdds the cells into the given group.
getCellsForGroupReturns the cells with the same parent as the first cell in the given array.
getBoundsForGroupReturns the bounds to be used for the given group and children.
createGroupCellHook for creating the group cell to hold the given array of mxCells if no group cell was given to the <group> function.
ungroupCellsUngroups the given cells by moving the children the children to their parents parent and removing the empty groups.
getCellsForUngroupReturns the selection cells that can be ungrouped.
removeCellsAfterUngroupHook to remove the groups after ungroupCells.
removeCellsFromParentRemoves the specified cells from their parents and adds them to the default parent.
updateGroupBoundsUpdates the bounds of the given groups to include all children and returns the passed-in cells.
getBoundingBoxReturns the bounding box for the given array of mxCells.
Cell cloning, insertion and removal
cloneCellReturns the clone for the given cell.
cloneCellsReturns the clones for the given cells.
insertVertexAdds a new vertex into the given parent mxCell using value as the user object and the given coordinates as the mxGeometry of the new vertex.
createVertexHook method that creates the new vertex for insertVertex.
insertEdgeAdds a new edge into the given parent mxCell using value as the user object and the given source and target as the terminals of the new edge.
createEdgeHook method that creates the new edge for insertEdge.
addEdgeAdds the edge to the parent and connects it to the given source and target terminals.
addCellAdds the cell to the parent and connects it to the given source and target terminals.
addCellsAdds the cells to the parent at the given index, connecting each cell to the optional source and target terminal.
cellsAddedAdds the specified cells to the given parent.
autoSizeCellResizes the specified cell to just fit around the its label and/or children
removeCellsRemoves the given cells from the graph including all connected edges if includeEdges is true.
cellsRemovedRemoves the given cells from the model.
splitEdgeSplits the given edge by adding the newEdge between the previous source and the given cell and reconnecting the source of the given edge to the given cell.
Cell visibility
toggleCellsSets the visible state of the specified cells and all connected edges if includeEdges is true.
cellsToggledSets the visible state of the specified cells.
Folding
foldCellsSets the collapsed state of the specified cells and all descendants if recurse is true.
cellsFoldedSets the collapsed state of the specified cells.
swapBoundsSwaps the alternate and the actual bounds in the geometry of the given cell invoking updateAlternateBounds before carrying out the swap.
updateAlternateBoundsUpdates or sets the alternate bounds in the given geometry for the given cell depending on whether the cell is going to be collapsed.
addAllEdgesReturns an array with the given cells and all edges that are connected to a cell or one of its descendants.
getAllEdgesReturns all edges connected to the given cells or its descendants.
Cell sizing
updateCellSizeUpdates the size of the given cell in the model using cellSizeUpdated.
cellSizeUpdatedUpdates the size of the given cell in the model using getPreferredSizeForCell to get the new size.
getPreferredSizeForCellReturns the preferred width and height of the given mxCell as an mxRectangle.
resizeCellSets the bounds of the given cell using resizeCells.
resizeCellsSets the bounds of the given cells and fires a mxEvent.RESIZE_CELLS event while the transaction is in progress.
cellsResizedSets the bounds of the given cells and fires a mxEvent.CELLS_RESIZED event.
cellResizedResizes the parents recursively so that they contain the complete area of the resized child cell.
resizeChildCellsResizes the child cells of the given cell for the given new geometry with respect to the current geometry of the cell.
constrainChildCellsConstrains the children of the given cell using constrainChild.
scaleCellScales the points, position and size of the given cell according to the given vertical and horizontal scaling factors.
extendParentResizes the parents recursively so that they contain the complete area of the resized child cell.
Cell moving
importCellsClones and inserts the given cells into the graph using the move method and returns the inserted cells.
moveCellsMoves or clones the specified cells and moves the cells or clones by the given amount, adding them to the optional target cell.
cellsMovedMoves the specified cells by the given vector, disconnecting the cells using disconnectGraph is disconnect is true.
translateCellTranslates the geometry of the given cell and stores the new, translated geometry in the model as an atomic change.
getCellContainmentAreaReturns the mxRectangle inside which a cell is to be kept.
getMaximumGraphBoundsReturns the bounds inside which the diagram should be kept as an mxRectangle.
constrainChildKeeps the given cell inside the bounds returned by getCellContainmentArea for its parent, according to the rules defined by getOverlap and isConstrainChild.
resetEdgesResets the control points of the edges that are connected to the given cells if not both ends of the edge are in the given cells array.
resetEdgeResets the control points of the given edge.
Cell connecting and connection constraints
getOutlineConstraintReturns the constraint used to connect to the outline of the given state.
getAllConnectionConstraintsReturns an array of all mxConnectionConstraints for the given terminal.
getConnectionConstraintReturns an mxConnectionConstraint that describes the given connection point.
setConnectionConstraintSets the mxConnectionConstraint that describes the given connection point.
getConnectionPointReturns the nearest point in the list of absolute points or the center of the opposite terminal.
connectCellConnects the specified end of the given edge to the given terminal using cellConnected and fires mxEvent.CONNECT_CELL while the transaction is in progress.
cellConnectedSets the new terminal for the given edge and resets the edge points if resetEdgesOnConnect is true.
disconnectGraphDisconnects the given edges from the terminals which are not in the given array.
Drilldown
getCurrentRootReturns the current root of the displayed cell hierarchy.
getTranslateForRootReturns the translation to be used if the given cell is the root cell as an mxPoint.
isPortReturns true if the given cell is a “port”, that is, when connecting to it, the cell returned by getTerminalForPort should be used as the terminal and the port should be referenced by the ID in either the mxConstants.STYLE_SOURCE_PORT or the or the mxConstants.STYLE_TARGET_PORT.
getTerminalForPortReturns the terminal to be used for a given port.
getChildOffsetForCellReturns the offset to be used for the cells inside the given cell.
enterGroupUses the given cell as the root of the displayed cell hierarchy.
exitGroupChanges the current root to the next valid root in the displayed cell hierarchy.
homeUses the root of the model as the root of the displayed cell hierarchy and selects the previous root.
isValidRootReturns true if the given cell is a valid root for the cell display hierarchy.
Graph display
getGraphBoundsReturns the bounds of the visible graph.
getCellBoundsReturns the scaled, translated bounds for the given cell.
getBoundingBoxFromGeometryReturns the bounding box for the geometries of the vertices in the given array of cells.
refreshClears all cell states or the states for the hierarchy starting at the given cell and validates the graph.
snapSnaps the given numeric value to the grid if gridEnabled is true.
snapDeltaSnaps the given delta with the given scaled bounds.
panGraphShifts the graph display by the given amount.
zoomInZooms into the graph by zoomFactor.
zoomOutZooms out of the graph by zoomFactor.
zoomActualResets the zoom and panning in the view.
zoomToZooms the graph to the given scale with an optional boolean center argument, which is passd to zoom.
centerCenters the graph in the container.
zoomZooms the graph using the given factor.
zoomToRectZooms the graph to the specified rectangle.
scrollCellToVisiblePans the graph so that it shows the given cell.
scrollRectToVisiblePans the graph so that it shows the given rectangle.
getCellGeometryReturns the mxGeometry for the given cell.
isCellVisibleReturns true if the given cell is visible in this graph.
isCellCollapsedReturns true if the given cell is collapsed in this graph.
isCellConnectableReturns true if the given cell is connectable in this graph.
isOrthogonalReturns true if perimeter points should be computed such that the resulting edge has only horizontal or vertical segments.
isLoopReturns true if the given cell state is a loop.
isCloneEventReturns true if the given event is a clone event.
isTransparentClickEventHook for implementing click-through behaviour on selected cells.
isToggleEventReturns true if the given event is a toggle event.
isGridEnabledEventReturns true if the given mouse event should be aligned to the grid.
isConstrainedEventReturns true if the given mouse event should be aligned to the grid.
isIgnoreTerminalEventReturns true if the given mouse event should not allow any connections to be made.
Validation
validationAlertDisplays the given validation error in a dialog.
isEdgeValidChecks if the return value of getEdgeValidationError for the given arguments is null.
getEdgeValidationErrorReturns the validation error message to be displayed when inserting or changing an edges’ connectivity.
validateEdgeHook method for subclassers to return an error message for the given edge and terminals.
validateGraphValidates the graph by validating each descendant of the given cell or the root of the model.
getCellValidationErrorChecks all multiplicities that cannot be enforced while the graph is being modified, namely, all multiplicities that require a minimum of 1 edge.
validateCellHook method for subclassers to return an error message for the given cell and validation context.
Graph appearance
getBackgroundImageReturns the backgroundImage as an mxImage.
setBackgroundImageSets the new backgroundImage.
getFoldingImageReturns the mxImage used to display the collapsed state of the specified cell state.
convertValueToStringReturns the textual representation for the given cell.
getLabelReturns a string or DOM node that represents the label for the given cell.
isHtmlLabelReturns true if the label must be rendered as HTML markup.
isHtmlLabelsReturns htmlLabels.
setHtmlLabelsSets htmlLabels.
isWrappingThis enables wrapping for HTML labels.
isLabelClippedReturns true if the overflow portion of labels should be hidden.
getTooltipReturns the string or DOM node that represents the tooltip for the given state, node and coordinate pair.
getTooltipForCellReturns the string or DOM node to be used as the tooltip for the given cell.
getLinkForCellReturns the string to be used as the link for the given cell.
getCursorForMouseEventReturns the cursor value to be used for the CSS of the shape for the given event.
getCursorForCellReturns the cursor value to be used for the CSS of the shape for the given cell.
getStartSizeReturns the start size of the given swimlane, that is, the width or height of the part that contains the title, depending on the horizontal style.
getSwimlaneDirectionReturns the direction for the given swimlane style.
getActualStartSizeReturns the actual start size of the given swimlane taking into account direction and horizontal and vertial flip styles.
getImageReturns the image URL for the given cell state.
isTransparentStateReturns true if the given state has no stroke- or fillcolor and no image.
getVerticalAlignReturns the vertical alignment for the given cell state.
getIndicatorColorReturns the indicator color for the given cell state.
getIndicatorGradientColorReturns the indicator gradient color for the given cell state.
getIndicatorShapeReturns the indicator shape for the given cell state.
getIndicatorImageReturns the indicator image for the given cell state.
getBorderReturns the value of border.
setBorderSets the value of border.
isSwimlaneReturns true if the given cell is a swimlane in the graph.
Graph behaviour
isResizeContainerReturns resizeContainer.
setResizeContainerSets resizeContainer.
isEnabledReturns true if the graph is enabled.
setEnabledSpecifies if the graph should allow any interactions.
isEscapeEnabledReturns escapeEnabled.
setEscapeEnabledSets escapeEnabled.
isInvokesStopCellEditingReturns invokesStopCellEditing.
setInvokesStopCellEditingSets invokesStopCellEditing.
isEnterStopsCellEditingReturns enterStopsCellEditing.
setEnterStopsCellEditingSets enterStopsCellEditing.
isCellLockedReturns true if the given cell may not be moved, sized, bended, disconnected, edited or selected.
isCellsLockedReturns true if the given cell may not be moved, sized, bended, disconnected, edited or selected.
setCellsLockedSets if any cell may be moved, sized, bended, disconnected, edited or selected.
getCloneableCellsReturns the cells which may be exported in the given array of cells.
isCellCloneableReturns true if the given cell is cloneable.
isCellsCloneableReturns cellsCloneable, that is, if the graph allows cloning of cells by using control-drag.
setCellsCloneableSpecifies if the graph should allow cloning of cells by holding down the control key while cells are being moved.
getExportableCellsReturns the cells which may be exported in the given array of cells.
canExportCellReturns true if the given cell may be exported to the clipboard.
getImportableCellsReturns the cells which may be imported in the given array of cells.
canImportCellReturns true if the given cell may be imported from the clipboard.
isCellSelectableReturns true if the given cell is selectable.
isCellsSelectableReturns cellsSelectable.
setCellsSelectableSets cellsSelectable.
getDeletableCellsReturns the cells which may be exported in the given array of cells.
isCellDeletableReturns true if the given cell is moveable.
isCellsDeletableReturns cellsDeletable.
setCellsDeletableSets cellsDeletable.
isLabelMovableReturns true if the given edges’s label is moveable.
isCellRotatableReturns true if the given cell is rotatable.
getMovableCellsReturns the cells which are movable in the given array of cells.
isCellMovableReturns true if the given cell is moveable.
isCellsMovableReturns cellsMovable.
setCellsMovableSpecifies if the graph should allow moving of cells.
isGridEnabledReturns gridEnabled as a boolean.
setGridEnabledSpecifies if the grid should be enabled.
isPortsEnabledReturns portsEnabled as a boolean.
setPortsEnabledSpecifies if the ports should be enabled.
getGridSizeReturns gridSize.
setGridSizeSets gridSize.
getToleranceReturns tolerance.
setToleranceSets tolerance.
isVertexLabelsMovableReturns vertexLabelsMovable.
setVertexLabelsMovableSets vertexLabelsMovable.
isEdgeLabelsMovableReturns edgeLabelsMovable.
isEdgeLabelsMovableSets edgeLabelsMovable.
isSwimlaneNestingReturns swimlaneNesting as a boolean.
setSwimlaneNestingSpecifies if swimlanes can be nested by drag and drop.
isSwimlaneSelectionEnabledReturns swimlaneSelectionEnabled as a boolean.
setSwimlaneSelectionEnabledSpecifies if swimlanes should be selected if the mouse is released over their content area.
isMultigraphReturns multigraph as a boolean.
setMultigraphSpecifies if the graph should allow multiple connections between the same pair of vertices.
isAllowLoopsReturns allowLoops as a boolean.
setAllowDanglingEdgesSpecifies if dangling edges are allowed, that is, if edges are allowed that do not have a source and/or target terminal defined.
isAllowDanglingEdgesReturns allowDanglingEdges as a boolean.
setConnectableEdgesSpecifies if edges should be connectable.
isConnectableEdgesReturns connectableEdges as a boolean.
setCloneInvalidEdgesSpecifies if edges should be inserted when cloned but not valid wrt.
isCloneInvalidEdgesReturns cloneInvalidEdges as a boolean.
setAllowLoopsSpecifies if loops are allowed.
isDisconnectOnMoveReturns disconnectOnMove as a boolean.
setDisconnectOnMoveSpecifies if edges should be disconnected when moved.
isDropEnabledReturns dropEnabled as a boolean.
setDropEnabledSpecifies if the graph should allow dropping of cells onto or into other cells.
isSplitEnabledReturns splitEnabled as a boolean.
setSplitEnabledSpecifies if the graph should allow dropping of cells onto or into other cells.
isCellResizableReturns true if the given cell is resizable.
isCellsResizableReturns cellsResizable.
setCellsResizableSpecifies if the graph should allow resizing of cells.
isTerminalPointMovableReturns true if the given terminal point is movable.
isCellBendableReturns true if the given cell is bendable.
isCellsBendableReturns <cellsBenadable>.
setCellsBendableSpecifies if the graph should allow bending of edges.
isCellEditableReturns true if the given cell is editable.
isCellsEditableReturns cellsEditable.
setCellsEditableSpecifies if the graph should allow in-place editing for cell labels.
isCellDisconnectableReturns true if the given cell is disconnectable from the source or target terminal.
isCellsDisconnectableReturns cellsDisconnectable.
setCellsDisconnectableSets cellsDisconnectable.
isValidSourceReturns true if the given cell is a valid source for new connections.
isValidTargetReturns isValidSource for the given cell.
isValidConnectionReturns true if the given target cell is a valid target for source.
setConnectableSpecifies if the graph should allow new connections.
isConnectableReturns true if the <connectionHandler> is enabled.
setTooltipsSpecifies if tooltips should be enabled.
setPanningSpecifies if panning should be enabled.
isEditingReturns true if the given cell is currently being edited.
isAutoSizeCellReturns true if the size of the given cell should automatically be updated after a change of the label.
isAutoSizeCellsReturns autoSizeCells.
setAutoSizeCellsSpecifies if cell sizes should be automatically updated after a label change.
isExtendParentReturns true if the parent of the given cell should be extended if the child has been resized so that it overlaps the parent.
isExtendParentsReturns extendParents.
setExtendParentsSets extendParents.
isExtendParentsOnAddReturns extendParentsOnAdd.
setExtendParentsOnAddSets extendParentsOnAdd.
isExtendParentsOnMoveReturns <extendParentsOnMove>.
setExtendParentsOnMoveSets <extendParentsOnMove>.
isRecursiveResizeReturns recursiveResize.
setRecursiveResizeSets recursiveResize.
isConstrainChildReturns true if the given cell should be kept inside the bounds of its parent according to the rules defined by getOverlap and isAllowOverlapParent.
isConstrainChildrenReturns constrainChildren.
setConstrainChildrenSets constrainChildren.
isConstrainRelativeChildrenReturns constrainRelativeChildren.
setConstrainRelativeChildrenSets constrainRelativeChildren.
isConstrainChildrenReturns allowNegativeCoordinates.
setConstrainChildrenSets allowNegativeCoordinates.
getOverlapReturns a decimal number representing the amount of the width and height of the given cell that is allowed to overlap its parent.
isAllowOverlapParentReturns true if the given cell is allowed to be placed outside of the parents area.
getFoldableCellsReturns the cells which are movable in the given array of cells.
isCellFoldableReturns true if the given cell is foldable.
isValidDropTargetReturns true if the given cell is a valid drop target for the specified cells.
isSplitTargetReturns true if the given edge may be splitted into two edges with the given cell as a new terminal between the two.
getDropTargetReturns the given cell if it is a drop target for the given cells or the nearest ancestor that may be used as a drop target for the given cells.
Cell retrieval
getDefaultParentReturns defaultParent or mxGraphView.currentRoot or the first child child of mxGraphModel.root if both are null.
setDefaultParentSets the defaultParent to the given cell.
getSwimlaneReturns the nearest ancestor of the given cell which is a swimlane, or the given cell, if it is itself a swimlane.
getSwimlaneAtReturns the bottom-most swimlane that intersects the given point (x, y) in the cell hierarchy that starts at the given parent.
getCellAtReturns the bottom-most cell that intersects the given point (x, y) in the cell hierarchy starting at the given parent.
intersectsReturns the bottom-most cell that intersects the given point (x, y) in the cell hierarchy that starts at the given parent.
hitsSwimlaneContentReturns true if the given coordinate pair is inside the content are of the given swimlane.
getChildVerticesReturns the visible child vertices of the given parent.
getChildEdgesReturns the visible child edges of the given parent.
getChildCellsReturns the visible child vertices or edges in the given parent.
getConnectionsReturns all visible edges connected to the given cell without loops.
getIncomingEdgesReturns the visible incoming edges for the given cell.
getOutgoingEdgesReturns the visible outgoing edges for the given cell.
getEdgesReturns the incoming and/or outgoing edges for the given cell.
isValidAncestorReturns whether or not the specified parent is a valid ancestor of the specified cell, either direct or indirectly based on whether ancestor recursion is enabled.
getOppositesReturns all distinct visible opposite cells for the specified terminal on the given edges.
getEdgesBetweenReturns the edges between the given source and target.
getPointForEventReturns an mxPoint representing the given event in the unscaled, non-translated coordinate space of <container> and applies the grid.
getCellsReturns the child vertices and edges of the given parent that are contained in the given rectangle.
getCellsBeyondReturns the children of the given parent that are contained in the halfpane from the given point (x0, y0) rightwards or downwards depending on rightHalfpane and bottomHalfpane.
findTreeRootsReturns all children in the given parent which do not have incoming edges.
traverseTraverses the (directed) graph invoking the given function for each visited vertex and edge.
Selection
isCellSelectedReturns true if the given cell is selected.
isSelectionEmptyReturns true if the selection is empty.
clearSelectionClears the selection using mxGraphSelectionModel.clear.
getSelectionCountReturns the number of selected cells.
getSelectionCellReturns the first cell from the array of selected mxCells.
getSelectionCellsReturns the array of selected mxCells.
setSelectionCellSets the selection cell.
setSelectionCellsSets the selection cell.
addSelectionCellAdds the given cell to the selection.
addSelectionCellsAdds the given cells to the selection.
removeSelectionCellRemoves the given cell from the selection.
removeSelectionCellsRemoves the given cells from the selection.
selectRegionSelects and returns the cells inside the given rectangle for the specified event.
selectNextCellSelects the next cell.
selectPreviousCellSelects the previous cell.
selectParentCellSelects the parent cell.
selectChildCellSelects the first child cell.
selectCellSelects the next, parent, first child or previous cell, if all arguments are false.
selectAllSelects all children of the given parent cell or the children of the default parent if no parent is specified.
selectVerticesSelect all vertices inside the given parent or the default parent.
selectVerticesSelect all vertices inside the given parent or the default parent.
selectCellsSelects all vertices and/or edges depending on the given boolean arguments recursively, starting at the given parent or the default parent if no parent is specified.
selectCellForEventSelects the given cell by either adding it to the selection or replacing the selection depending on whether the given mouse event is a toggle event.
selectCellsForEventSelects the given cells by either adding them to the selection or replacing the selection depending on whether the given mouse event is a toggle event.
Selection state
createHandlerCreates a new handler for the given cell state.
createVertexHandlerHooks to create a new mxVertexHandler for the given mxCellState.
createEdgeHandlerHooks to create a new mxEdgeHandler for the given mxCellState.
createEdgeSegmentHandlerHooks to create a new <mxEdgeSegmentHandler> for the given mxCellState.
createElbowEdgeHandlerHooks to create a new mxElbowEdgeHandler for the given mxCellState.
Graph events
addMouseListenerAdds a listener to the graph event dispatch loop.
removeMouseListenerRemoves the specified graph listener.
updateMouseEventSets the graphX and graphY properties if the given mxMouseEvent if required and returned the event.
getStateForEventReturns the state for the given touch event.
isEventIgnoredReturns true if the event should be ignored in fireMouseEvent.
isSyntheticEventIgnoredHook for ignoring synthetic mouse events after touchend in Firefox.
isEventSourceIgnoredReturns true if the event should be ignored in fireMouseEvent.
getEventStateReturns the mxCellState to be used when firing the mouse event for the given state.
fireMouseEventDispatches the given event in the graph event dispatch loop.
consumeMouseEventConsumes the given mxMouseEvent if it’s a touchStart event.
fireGestureEventDispatches a mxEvent.GESTURE event.
destroyDestroys the graph and all its resources.

Events

@@ -120,8 +120,8 @@ dec.decode(node, graph.getModel());

For creating a page tha

mxEvent.REMOVE_OVERLAY

Fires after an overlay is removed in removeCellOverlay and removeCellOverlays.  The <code>cell</code> property contains the cell and the <code>overlay</code> property contains the mxCellOverlay that was removed.

-

mxGraph

function mxGraph(container,
model,
renderHint,
stylesheet)

Constructs a new mxGraph in the specified container.  Model is an optional mxGraphModel.  If no model is provided, a new mxGraphModel instance is used as the model.  The container must have a valid owner document prior to calling this function in Internet Explorer.  RenderHint is a string to affect the display performance and rendering in IE, but not in SVG-based browsers.  The parameter is mapped to dialect, which may be one of mxConstants.DIALECT_SVG for SVG-based browsers, mxConstants.DIALECT_STRICTHTML for fastest display mode, mxConstants.DIALECT_PREFERHTML for faster display mode, mxConstants.DIALECT_MIXEDHTML for fast and mxConstants.DIALECT_VML for exact display mode (slowest).  The dialects are defined in mxConstants.  The default values are DIALECT_SVG for SVG-based browsers and DIALECT_MIXED for IE.

The possible values for the renderingHint parameter are explained below

fastThe parameter is based on the fact that the display performance is highly improved in IE if the VML is not contained within a VML group element.  The lack of a group element only slightly affects the display while panning, but improves the performance by almost a factor of 2, while keeping the display sufficiently accurate.  This also allows to render certain shapes as HTML if the display accuracy is not affected, which is implemented by <mxShape.isMixedModeHtml>.  This is the default setting and is mapped to DIALECT_MIXEDHTML.
fasterSame as fast, but more expensive shapes are avoided.  This is controlled by <mxShape.preferModeHtml>.  The default implementation will avoid gradients and rounded rectangles, but more significant shapes, such as rhombus, ellipse, actor and cylinder will be rendered accurately.  This setting is mapped to DIALECT_PREFERHTML.
fastestAlmost anything will be rendered in Html.  This allows for rectangles, labels and images.  This setting is mapped to DIALECT_STRICTHTML.
exactIf accurate panning is required and if the diagram is small (up to 100 cells), then this value should be used.  In this mode, a group is created that contains the VML.  This allows for accurate panning and is mapped to DIALECT_VML.

Example

To create a graph inside a DOM node with an id of graph

var container = document.getElementById('graph');
-var graph = new mxGraph(container);

Parameters

containerOptional DOM node that acts as a container for the graph.  If this is null then the container can be initialized later using init.
modelOptional mxGraphModel that constitutes the graph data.
renderHintOptional string that specifies the display accuracy and performance.  Default is mxConstants.DIALECT_MIXEDHTML (for IE).
stylesheetOptional mxStylesheet to be used in the graph.
+

mxGraph

function mxGraph(container,
model,
renderHint,
stylesheet)

Constructs a new mxGraph in the specified container.  Model is an optional mxGraphModel.  If no model is provided, a new mxGraphModel instance is used as the model.  The container must have a valid owner document prior to calling this function in Internet Explorer.  RenderHint is a string to affect the display performance and rendering in IE, but not in SVG-based browsers.  The parameter is mapped to dialect, which may be one of mxConstants.DIALECT_SVG for SVG-based browsers, mxConstants.DIALECT_STRICTHTML for fastest display mode, mxConstants.DIALECT_PREFERHTML for faster display mode, mxConstants.DIALECT_MIXEDHTML for fast and mxConstants.DIALECT_VML for exact display mode (slowest).  The dialects are defined in mxConstants.  The default values are DIALECT_SVG for SVG-based browsers and DIALECT_MIXED for IE.

The possible values for the renderingHint parameter are explained below

fastThe parameter is based on the fact that the display performance is highly improved in IE if the VML is not contained within a VML group element.  The lack of a group element only slightly affects the display while panning, but improves the performance by almost a factor of 2, while keeping the display sufficiently accurate.  This also allows to render certain shapes as HTML if the display accuracy is not affected, which is implemented by <mxShape.isMixedModeHtml>.  This is the default setting and is mapped to DIALECT_MIXEDHTML.
fasterSame as fast, but more expensive shapes are avoided.  This is controlled by <mxShape.preferModeHtml>.  The default implementation will avoid gradients and rounded rectangles, but more significant shapes, such as rhombus, ellipse, actor and cylinder will be rendered accurately.  This setting is mapped to DIALECT_PREFERHTML.
fastestAlmost anything will be rendered in Html.  This allows for rectangles, labels and images.  This setting is mapped to DIALECT_STRICTHTML.
exactIf accurate panning is required and if the diagram is small (up to 100 cells), then this value should be used.  In this mode, a group is created that contains the VML.  This allows for accurate panning and is mapped to DIALECT_VML.

Example

To create a graph inside a DOM node with an id of graph

let container = document.getElementById('graph');
+let graph = new mxGraph(container);

Parameters

containerOptional DOM node that acts as a container for the graph.  If this is null then the container can be initialized later using init.
modelOptional mxGraphModel that constitutes the graph data.
renderHintOptional string that specifies the display accuracy and performance.  Default is mxConstants.DIALECT_MIXEDHTML (for IE).
stylesheetOptional mxStylesheet to be used in the graph.

Variables

@@ -133,9 +133,9 @@ var graph = new mxGraph(container);

Paramet

view

mxGraph.prototype.view

Holds the mxGraphView that caches the mxCellStates for the cells.

-

stylesheet

mxGraph.prototype.stylesheet

Holds the mxStylesheet that defines the appearance of the cells.

Example

Use the following code to read a stylesheet into an existing graph.

var req = mxUtils.load('stylesheet.xml');
-var root = req.getDocumentElement();
-var dec = new mxCodec(root.ownerDocument);
+

stylesheet

mxGraph.prototype.stylesheet

Holds the mxStylesheet that defines the appearance of the cells.

Example

Use the following code to read a stylesheet into an existing graph.

let req = mxUtils.load('stylesheet.xml');
+let root = req.getDocumentElement();
+let dec = new mxCodec(root.ownerDocument);
 dec.decode(root, graph.stylesheet);

selectionModel

mxGraph.prototype.selectionModel

Holds the mxGraphSelectionModel that models the current selection.

@@ -190,7 +190,7 @@ dec.decode(root, graph.stylesheet);

alternateEdgeStyle

mxGraph.prototype.alternateEdgeStyle

Specifies the alternate edge style to be used if the main control point on an edge is being doubleclicked.  Default is null.

-

backgroundImage

mxGraph.prototype.backgroundImage

Specifies the mxImage to be returned by getBackgroundImage.  Default is null.

Example

var img = new mxImage('http://www.example.com/maps/examplemap.jpg', 1024, 768);
+

backgroundImage

mxGraph.prototype.backgroundImage

Specifies the mxImage to be returned by getBackgroundImage.  Default is null.

Example

let img = new mxImage('http://www.example.com/maps/examplemap.jpg', 1024, 768);
 graph.setBackgroundImage(img);
 graph.view.validate();
@@ -434,11 +434,11 @@ graph.view.validate();

labelChanged

mxGraph.prototype.labelChanged = function(cell,
value,
evt)

Sets the label of the specified cell to the given value using cellLabelChanged and fires mxEvent.LABEL_CHANGED while the transaction is in progress.  Returns the cell whose label was changed.

Parameters

cellmxCell whose label should be changed.
valueNew label to be assigned.
evtOptional event that triggered the change.
-

cellLabelChanged

mxGraph.prototype.cellLabelChanged = function(cell,
value,
autoSize)

Sets the new label for a cell.  If autoSize is true then cellSizeUpdated will be called.

In the following example, the function is extended to map changes to attributes in an XML node, as shown in convertValueToString.  Alternatively, the handling of this can be implemented as shown in mxGraphModel.valueForCellChanged without the need to clone the user object.

var graphCellLabelChanged = graph.cellLabelChanged;
+

cellLabelChanged

mxGraph.prototype.cellLabelChanged = function(cell,
value,
autoSize)

Sets the new label for a cell.  If autoSize is true then cellSizeUpdated will be called.

In the following example, the function is extended to map changes to attributes in an XML node, as shown in convertValueToString.  Alternatively, the handling of this can be implemented as shown in mxGraphModel.valueForCellChanged without the need to clone the user object.

let graphCellLabelChanged = graph.cellLabelChanged;
 graph.cellLabelChanged = function(cell, newValue, autoSize)
 {
  // Cloned for correct undo/redo
- var elt = cell.value.cloneNode(true);
+ let elt = cell.value.cloneNode(true);
  elt.setAttribute('label', newValue);
 
  newValue = elt;
@@ -451,8 +451,8 @@ graph.cellLabelChanged = function(cell, newValue, autoSize)
 
 

click

mxGraph.prototype.click = function(me)

Processes a singleclick on an optional cell and fires a click event.  The click event is fired initially.  If the graph is enabled and the event has not been consumed, then the cell is selected using selectCellForEvent or the selection is cleared using clearSelection.  The events consumed state is set to true if the corresponding mxMouseEvent has been consumed.

To handle a click event, use the following code.

graph.addListener(mxEvent.CLICK, function(sender, evt)
 {
-  var e = evt.getProperty('event'); // mouse event
-  var cell = evt.getProperty('cell'); // cell may be null
+  let e = evt.getProperty('event'); // mouse event
+  let cell = evt.getProperty('cell'); // cell may be null
 
   if (cell != null)
   {
@@ -465,7 +465,7 @@ graph.cellLabelChanged = function(cell, newValue, autoSize)
 
 

dblClick

mxGraph.prototype.dblClick = function(evt,
cell)

Processes a doubleclick on an optional cell and fires a <dblclick> event.  The event is fired initially.  If the graph is enabled and the event has not been consumed, then <edit> is called with the given cell.  The event is ignored if no cell was specified.

Example for overriding this method.

graph.dblClick = function(evt, cell)
 {
-  var mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell', cell);
+  let mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell', cell);
   this.fireEvent(mxe);
 
   if (this.isEnabled() && !mxEvent.isConsumed(evt) && !mxe.isConsumed())
@@ -475,7 +475,7 @@ graph.cellLabelChanged = function(cell, newValue, autoSize)
   }
 }

Example listener for this event.

graph.addListener(mxEvent.DOUBLE_CLICK, function(sender, evt)
 {
-  var cell = evt.getProperty('cell');
+  let cell = evt.getProperty('cell');
   // do something with the cell and consume the
   // event to prevent in-place editing from start
 });

Parameters

evtMouseevent that represents the doubleclick.
cellOptional mxCell under the mousepointer.
@@ -492,15 +492,15 @@ graph.cellLabelChanged = function(cell, newValue, autoSize)

fit

mxGraph.prototype.fit = function(border,
keepOrigin,
margin,
enabled,
ignoreWidth,
ignoreHeight,
maxHeight)

Scales the graph such that the complete diagram fits into <container> and returns the current scale in the view.  To fit an initial graph prior to rendering, set mxGraphView.rendering to false prior to changing the model and execute the following after changing the model.

graph.fit();
 graph.view.rendering = true;
-graph.refresh();

To fit and center the graph, the following code can be used.

var margin = 2;
-var max = 3;
+graph.refresh();

To fit and center the graph, the following code can be used.

let margin = 2;
+let max = 3;
 
-var bounds = graph.getGraphBounds();
-var cw = graph.container.clientWidth - margin;
-var ch = graph.container.clientHeight - margin;
-var w = bounds.width / graph.view.scale;
-var h = bounds.height / graph.view.scale;
-var s = Math.min(max, Math.min(cw / w, ch / h));
+let bounds = graph.getGraphBounds();
+let cw = graph.container.clientWidth - margin;
+let ch = graph.container.clientHeight - margin;
+let w = bounds.width / graph.view.scale;
+let h = bounds.height / graph.view.scale;
+let s = Math.min(max, Math.min(cw / w, ch / h));
 
 graph.view.scaleAndTranslate(s,
   (margin + cw - w * s) / (2 * s) - bounds.x / graph.view.scale,
@@ -540,10 +540,10 @@ graph.view.scaleAndTranslate(s,
 {
   if (edge != null)
   {
-    var style = this.getCurrentCellStyle(edge);
-    var elbow = mxUtils.getValue(style, mxConstants.STYLE_ELBOW,
+    let style = this.getCurrentCellStyle(edge);
+    let elbow = mxUtils.getValue(style, mxConstants.STYLE_ELBOW,
         mxConstants.ELBOW_HORIZONTAL);
-    var value = (elbow == mxConstants.ELBOW_HORIZONTAL) ?
+    let value = (elbow == mxConstants.ELBOW_HORIZONTAL) ?
         mxConstants.ELBOW_VERTICAL : mxConstants.ELBOW_HORIZONTAL;
     this.setCellStyles(mxConstants.STYLE_ELBOW, value, [edge]);
   }
@@ -569,10 +569,10 @@ graph.view.scaleAndTranslate(s,
 
 

getBoundsForGroup

mxGraph.prototype.getBoundsForGroup = function(group,
children,
border)

Returns the bounds to be used for the given group and children.

-

createGroupCell

mxGraph.prototype.createGroupCell = function(cells)

Hook for creating the group cell to hold the given array of mxCells if no group cell was given to the <group> function.

The following code can be used to set the style of new group cells.

var graphCreateGroupCell = graph.createGroupCell;
+

createGroupCell

mxGraph.prototype.createGroupCell = function(cells)

Hook for creating the group cell to hold the given array of mxCells if no group cell was given to the <group> function.

The following code can be used to set the style of new group cells.

let graphCreateGroupCell = graph.createGroupCell;
 graph.createGroupCell = function(cells)
 {
-  var group = graphCreateGroupCell.apply(this, arguments);
+  let group = graphCreateGroupCell.apply(this, arguments);
   group.setStyle('group');
 
   return group;
@@ -596,8 +596,8 @@ graph.createGroupCell = function(cells)
 
 

cloneCells

mxGraph.prototype.cloneCells = function(cells,
allowInvalidEdges,
mapping,
keepPosition)

Returns the clones for the given cells.  The clones are created recursively using mxGraphModel.cloneCells.  If the terminal of an edge is not in the given array, then the respective end is assigned a terminal point and the terminal is removed.

Parameters

cellsArray of mxCells to be cloned.
allowInvalidEdgesOptional boolean that specifies if invalid edges should be cloned.  Default is true.
mappingOptional mapping for existing clones.
keepPositionOptional boolean indicating if the position of the cells should be updated to reflect the lost parent cell.  Default is false.
-

insertVertex

mxGraph.prototype.insertVertex = function(parent,
id,
value,
x,
y,
width,
height,
style,
relative)

Adds a new vertex into the given parent mxCell using value as the user object and the given coordinates as the mxGeometry of the new vertex.  The id and style are used for the respective properties of the new mxCell, which is returned.

When adding new vertices from a mouse event, one should take into account the offset of the graph container and the scale and translation of the view in order to find the correct unscaled, untranslated coordinates using mxGraph.getPointForEvent as follows:

var pt = graph.getPointForEvent(evt);
-var parent = graph.getDefaultParent();
+

insertVertex

mxGraph.prototype.insertVertex = function(parent,
id,
value,
x,
y,
width,
height,
style,
relative)

Adds a new vertex into the given parent mxCell using value as the user object and the given coordinates as the mxGeometry of the new vertex.  The id and style are used for the respective properties of the new mxCell, which is returned.

When adding new vertices from a mouse event, one should take into account the offset of the graph container and the scale and translation of the view in order to find the correct unscaled, untranslated coordinates using mxGraph.getPointForEvent as follows:

let pt = graph.getPointForEvent(evt);
+let parent = graph.getDefaultParent();
 graph.insertVertex(parent, null,
          'Hello, World!', x, y, 220, 30);

For adding image cells, the style parameter can be assigned as

stylename;image=imageUrl

See mxGraph for more information on using images.

Parameters

parentmxCell that specifies the parent of the new vertex.
idOptional string that defines the Id of the new vertex.
valueObject to be used as the user object.
xInteger that defines the x coordinate of the vertex.
yInteger that defines the y coordinate of the vertex.
widthInteger that defines the width of the vertex.
heightInteger that defines the height of the vertex.
styleOptional string that defines the cell style.
relativeOptional boolean that specifies if the geometry is relative.  Default is false.
@@ -649,11 +649,11 @@ graph.insertVertex(parent, null,

cellSizeUpdated

mxGraph.prototype.cellSizeUpdated = function(cell,
ignoreChildren)

Updates the size of the given cell in the model using getPreferredSizeForCell to get the new size.

Parameters

cellmxCell for which the size should be changed.
-

getPreferredSizeForCell

mxGraph.prototype.getPreferredSizeForCell = function(cell,
textWidth)

Returns the preferred width and height of the given mxCell as an mxRectangle.  To implement a minimum width, add a new style eg. minWidth in the vertex and override this method as follows.

var graphGetPreferredSizeForCell = graph.getPreferredSizeForCell;
+

getPreferredSizeForCell

mxGraph.prototype.getPreferredSizeForCell = function(cell,
textWidth)

Returns the preferred width and height of the given mxCell as an mxRectangle.  To implement a minimum width, add a new style eg. minWidth in the vertex and override this method as follows.

let graphGetPreferredSizeForCell = graph.getPreferredSizeForCell;
 graph.getPreferredSizeForCell = function(cell)
 {
-  var result = graphGetPreferredSizeForCell.apply(this, arguments);
-  var style = this.getCellStyle(cell);
+  let result = graphGetPreferredSizeForCell.apply(this, arguments);
+  let style = this.getCellStyle(cell);
 
   if (style['minWidth'] > 0)
   {
@@ -669,20 +669,20 @@ graph.getPreferredSizeForCell = function(cell)
 
 

cellsResized

mxGraph.prototype.cellsResized = function(cells,
bounds,
recurse)

Sets the bounds of the given cells and fires a mxEvent.CELLS_RESIZED event.  If extendParents is true, then the parent is extended if a child size is changed so that it overlaps with the parent.

The following example shows how to control group resizes to make sure that all child cells stay within the group.

graph.addListener(mxEvent.CELLS_RESIZED, function(sender, evt)
 {
-  var cells = evt.getProperty('cells');
+  let cells = evt.getProperty('cells');
 
   if (cells != null)
   {
-    for (var i = 0; i < cells.length; i++)
+    for (let i = 0; i < cells.length; i++)
     {
       if (graph.getModel().getChildCount(cells[i]) > 0)
       {
-        var geo = graph.getCellGeometry(cells[i]);
+        let geo = graph.getCellGeometry(cells[i]);
 
         if (geo != null)
         {
-          var children = graph.getChildCells(cells[i], true, true);
-          var bounds = graph.getBoundingBoxFromGeometry(children, true);
+          let children = graph.getChildCells(cells[i], true, true);
+          let bounds = graph.getBoundingBoxFromGeometry(children, true);
 
           geo = geo.clone();
           geo.width = Math.max(geo.width, bounds.width);
@@ -747,11 +747,11 @@ graph.getPreferredSizeForCell = function(cell)
 
 

getCurrentRoot

mxGraph.prototype.getCurrentRoot = function()

Returns the current root of the displayed cell hierarchy.  This is a shortcut to mxGraphView.currentRoot in view.

-

getTranslateForRoot

mxGraph.prototype.getTranslateForRoot = function(cell)

Returns the translation to be used if the given cell is the root cell as an mxPoint.  This implementation returns null.

Example

To keep the children at their absolute position while stepping into groups, this function can be overridden as follows.

var offset = new mxPoint(0, 0);
+

getTranslateForRoot

mxGraph.prototype.getTranslateForRoot = function(cell)

Returns the translation to be used if the given cell is the root cell as an mxPoint.  This implementation returns null.

Example

To keep the children at their absolute position while stepping into groups, this function can be overridden as follows.

let offset = new mxPoint(0, 0);
 
 while (cell != null)
 {
-  var geo = this.model.getGeometry(cell);
+  let geo = this.model.getGeometry(cell);
 
   if (geo != null)
   {
@@ -766,7 +766,7 @@ return offset;

Parameters

isPort

mxGraph.prototype.isPort = function(cell)

Returns true if the given cell is a “port”, that is, when connecting to it, the cell returned by getTerminalForPort should be used as the terminal and the port should be referenced by the ID in either the mxConstants.STYLE_SOURCE_PORT or the or the mxConstants.STYLE_TARGET_PORT.  Note that a port should not be movable.  This implementation always returns false.

A typical implementation is the following

graph.isPort = function(cell)
 {
-  var geo = this.getCellGeometry(cell);
+  let geo = this.getCellGeometry(cell);
 
   return (geo != null) ? geo.relative : false;
 };

Parameters

cellmxCell that represents the port.
@@ -789,8 +789,8 @@ return offset;

Parameters

getCellBounds

mxGraph.prototype.getCellBounds = function(cell,
includeEdges,
includeDescendants)

Returns the scaled, translated bounds for the given cell.  See mxGraphView.getBounds for arrays.

Parameters

cellmxCell whose bounds should be returned.
includeEdgeOptional boolean that specifies if the bounds of the connected edges should be included.  Default is false.
includeDescendantsOptional boolean that specifies if the bounds of all descendants should be included.  Default is false.
-

getBoundingBoxFromGeometry

mxGraph.prototype.getBoundingBoxFromGeometry = function(cells,
includeEdges)

Returns the bounding box for the geometries of the vertices in the given array of cells.  This can be used to find the graph bounds during a layout operation (ie. before the last endUpdate) as follows:

var cells = graph.getChildCells(graph.getDefaultParent(), true, true);
-var bounds = graph.getBoundingBoxFromGeometry(cells, true);

This can then be used to move cells to the origin

if (bounds.x < 0 || bounds.y < 0)
+

getBoundingBoxFromGeometry

mxGraph.prototype.getBoundingBoxFromGeometry = function(cells,
includeEdges)

Returns the bounding box for the geometries of the vertices in the given array of cells.  This can be used to find the graph bounds during a layout operation (ie. before the last endUpdate) as follows:

let cells = graph.getChildCells(graph.getDefaultParent(), true, true);
+let bounds = graph.getBoundingBoxFromGeometry(cells, true);

This can then be used to move cells to the origin

if (bounds.x < 0 || bounds.y < 0)
 {
   graph.moveCells(cells, -Math.min(bounds.x, 0), -Math.min(bounds.y, 0))
 }

Or to translate the graph view

if (bounds.x < 0 || bounds.y < 0)
@@ -820,7 +820,7 @@ var bounds = graph.getBoundingBoxFromGeometry(cells, true);

zoomToRect

mxGraph.prototype.zoomToRect = function(rect)

Zooms the graph to the specified rectangle.  If the rectangle does not have same aspect ratio as the display container, it is increased in the smaller relative dimension only until the aspect match.  The original rectangle is centralised within this expanded one.

Note that the input rectangular must be un-scaled and un-translated.

Parameters

rectThe un-scaled and un-translated rectangluar region that should be just visible after the operation
-

scrollCellToVisible

mxGraph.prototype.scrollCellToVisible = function(cell,
center)

Pans the graph so that it shows the given cell.  Optionally the cell may be centered in the container.

To center a given graph if the <container> has no scrollbars, use the following code.

[code] var bounds = graph.getGraphBounds(); graph.view.setTranslate(-bounds.x - (bounds.width - container.clientWidth) / 2, -bounds.y - (bounds.height - container.clientHeight) / 2); [/code]

Parameters

cellmxCell to be made visible.
centerOptional boolean flag.  Default is false.
+

scrollCellToVisible

mxGraph.prototype.scrollCellToVisible = function(cell,
center)

Pans the graph so that it shows the given cell.  Optionally the cell may be centered in the container.

To center a given graph if the <container> has no scrollbars, use the following code.

[code] let bounds = graph.getGraphBounds(); graph.view.setTranslate(-bounds.x - (bounds.width - container.clientWidth) / 2, -bounds.y - (bounds.height - container.clientHeight) / 2); [/code]

Parameters

cellmxCell to be made visible.
centerOptional boolean flag.  Default is false.

scrollRectToVisible

mxGraph.prototype.scrollRectToVisible = function(rect)

Pans the graph so that it shows the given rectangle.

Parameters

rectmxRectangle to be made visible.
@@ -893,15 +893,15 @@ var bounds = graph.getBoundingBoxFromGeometry(cells, true);

getLabel

mxGraph.prototype.getLabel = function(cell)

Returns a string or DOM node that represents the label for the given cell.  This implementation uses convertValueToString if labelsVisible is true.  Otherwise it returns an empty string.

To truncate a label to match the size of the cell, the following code can be used.

graph.getLabel = function(cell)
 {
-  var label = mxGraph.prototype.getLabel.apply(this, arguments);
+  let label = mxGraph.prototype.getLabel.apply(this, arguments);
 
   if (label != null && this.model.isVertex(cell))
   {
-    var geo = this.getCellGeometry(cell);
+    let geo = this.getCellGeometry(cell);
 
     if (geo != null)
     {
-      var max = parseInt(geo.width / 8);
+      let max = parseInt(geo.width / 8);
 
       if (label.length > max)
       {
@@ -912,9 +912,9 @@ var bounds = graph.getBoundingBoxFromGeometry(cells, true);

A resize listener is needed in the graph to force a repaint of the label after a resize.

graph.addListener(mxEvent.RESIZE_CELLS, function(sender, evt)
 {
-  var cells = evt.getProperty('cells');
+  let cells = evt.getProperty('cells');
 
-  for (var i = 0; i < cells.length; i++)
+  for (let i = 0; i < cells.length; i++)
   {
     this.view.removeState(cells[i]);
   }
@@ -928,7 +928,7 @@ var bounds = graph.getBoundingBoxFromGeometry(cells, true);

isWrapping

mxGraph.prototype.isWrapping = function(cell)

This enables wrapping for HTML labels.

Returns true if no white-space CSS style directive should be used for displaying the given cells label.  This implementation returns true if mxConstants.STYLE_WHITE_SPACE in the style of the given cell is ‘wrap’.

This is used as a workaround for IE ignoring the white-space directive of child elements if the directive appears in a parent element.  It should be overridden to return true if a white-space directive is used in the HTML markup that represents the given cells label.  In order for HTML markup to work in labels, isHtmlLabel must also return true for the given cell.

Example

graph.getLabel = function(cell)
 {
-  var tmp = mxGraph.prototype.getLabel.apply(this, arguments); // "supercall"
+  let tmp = mxGraph.prototype.getLabel.apply(this, arguments); // "supercall"
 
   if (this.model.isEdge(cell))
   {
@@ -1030,7 +1030,7 @@ graph.isWrapping = function(state)
 
 

isCellSelectable

mxGraph.prototype.isCellSelectable = function(cell)

Returns true if the given cell is selectable.  This implementation returns cellsSelectable.

To add a new style for making cells (un)selectable, use the following code.

mxGraph.prototype.isCellSelectable = function(cell)
 {
-  var style = this.getCurrentCellStyle(cell);
+  let style = this.getCurrentCellStyle(cell);
 
   return this.isCellsSelectable() && !this.isCellLocked(cell) && style['selectable'] != 0;
 };

You can then use the new style as shown in this example.

graph.insertVertex(parent, null, 'Hello,', 20, 20, 80, 30, 'selectable=0');

Parameters

cellmxCell whose selectable state should be returned.
@@ -1262,7 +1262,7 @@ graph.isWrapping = function(state)

findTreeRoots

mxGraph.prototype.findTreeRoots = function(parent,
isolate,
invert)

Returns all children in the given parent which do not have incoming edges.  If the result is empty then the with the greatest difference between incoming and outgoing edges is returned.

Parameters

parentmxCell whose children should be checked.
isolateOptional boolean that specifies if edges should be ignored if the opposite end is not a child of the given parent cell.  Default is false.
invertOptional boolean that specifies if outgoing or incoming edges should be counted for a tree root.  If false then outgoing edges will be counted.  Default is false.

traverse

mxGraph.prototype.traverse = function(vertex,
directed,
func,
edge,
visited,
inverse)

Traverses the (directed) graph invoking the given function for each visited vertex and edge.  The function is invoked with the current vertex and the incoming edge as a parameter.  This implementation makes sure each vertex is only visited once.  The function may return false if the traversal should stop at the given vertex.

Example

mxLog.show();
-var cell = graph.getSelectionCell();
+let cell = graph.getSelectionCell();
 graph.traverse(cell, false, function(vertex, edge)
 {
   mxLog.debug(graph.getLabel(vertex));
@@ -1354,20 +1354,20 @@ graph.traverse(cell, false, function(vertex, edge)
 
 

fireGestureEvent

mxGraph.prototype.fireGestureEvent = function(evt,
cell)

Dispatches a mxEvent.GESTURE event.  The following example will resize the cell under the mouse based on the scale property of the native touch event.

graph.addListener(mxEvent.GESTURE, function(sender, eo)
 {
-  var evt = eo.getProperty('event');
-  var state = graph.view.getState(eo.getProperty('cell'));
+  let evt = eo.getProperty('event');
+  let state = graph.view.getState(eo.getProperty('cell'));
 
   if (graph.isEnabled() && graph.isCellResizable(state.cell) && Math.abs(1 - evt.scale) > 0.2)
   {
-    var scale = graph.view.scale;
-    var tr = graph.view.translate;
+    let scale = graph.view.scale;
+    let tr = graph.view.translate;
 
-    var w = state.width * evt.scale;
-    var h = state.height * evt.scale;
-    var x = state.x - (w - state.width) / 2;
-    var y = state.y - (h - state.height) / 2;
+    let w = state.width * evt.scale;
+    let h = state.height * evt.scale;
+    let x = state.x - (w - state.width) / 2;
+    let y = state.y - (h - state.height) / 2;
 
-    var bounds = new mxRectangle(graph.snap(x / scale) - tr.x,
+    let bounds = new mxRectangle(graph.snap(x / scale) - tr.x,
          graph.snap(y / scale) - tr.y, graph.snap(w / scale), graph.snap(h / scale));
     graph.resizeCell(state.cell, bounds);
     eo.consume();
@@ -1383,7 +1383,7 @@ graph.traverse(cell, false, function(vertex, edge)
 
 
 
 
diff --git a/docs/js-api/files/view/mxGraphSelectionModel-js.html b/docs/js-api/files/view/mxGraphSelectionModel-js.html
index 550572000..f86a5eca3 100644
--- a/docs/js-api/files/view/mxGraphSelectionModel-js.html
+++ b/docs/js-api/files/view/mxGraphSelectionModel-js.html
@@ -13,9 +13,9 @@ if (browserType) {document.write("
");if (browserV

mxGraphSelectionModel

Implements the selection model for a graph.  Here is a listener that handles all removed selection cells.

graph.getSelectionModel().addListener(mxEvent.CHANGE, function(sender, evt)
 {
-  var cells = evt.getProperty('added');
+  let cells = evt.getProperty('added');
 
-  for (var i = 0; i < cells.length; i++)
+  for (let i = 0; i < cells.length; i++)
   {
     // Handle cells[i]...
   }
@@ -88,7 +88,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/view/mxGraphView-js.html b/docs/js-api/files/view/mxGraphView-js.html index 2b2dc2e33..9687e1cb6 100644 --- a/docs/js-api/files/view/mxGraphView-js.html +++ b/docs/js-api/files/view/mxGraphView-js.html @@ -173,21 +173,21 @@ if (browserType) {document.write("
");if (browserV

getRoutingCenterY

mxGraphView.prototype.getRoutingCenterY = (state) =>

Returns the y-coordinate of the center point for automatic routing.

-

getPerimeterBounds

mxGraphView.prototype.getPerimeterBounds = function(terminal,
border)

Returns the perimeter bounds for the given terminal, edge pair as an mxRectangle.

If you have a model where each terminal has a relative child that should act as the graphical endpoint for a connection from/to the terminal, then this method can be replaced as follows:

var oldGetPerimeterBounds = mxGraphView.prototype.getPerimeterBounds;
+

getPerimeterBounds

mxGraphView.prototype.getPerimeterBounds = function(terminal,
border)

Returns the perimeter bounds for the given terminal, edge pair as an mxRectangle.

If you have a model where each terminal has a relative child that should act as the graphical endpoint for a connection from/to the terminal, then this method can be replaced as follows:

let oldGetPerimeterBounds = mxGraphView.prototype.getPerimeterBounds;
 mxGraphView.prototype.getPerimeterBounds = function(terminal, edge, isSource)
 {
-  var model = this.graph.getModel();
-  var childCount = model.getChildCount(terminal.cell);
+  let model = this.graph.getModel();
+  let childCount = model.getChildCount(terminal.cell);
 
   if (childCount > 0)
   {
-    var child = model.getChildAt(terminal.cell, 0);
-    var geo = model.getGeometry(child);
+    let child = model.getChildAt(terminal.cell, 0);
+    let geo = model.getGeometry(child);
 
     if (geo != null &&
         geo.relative)
     {
-      var state = this.getState(child);
+      let state = this.getState(child);
 
       if (state != null)
       {
@@ -282,7 +282,7 @@ mxGraphView.prototype.getPerimeterBounds = function(terminal, edge, isSource)
 
 
 
 
diff --git a/docs/js-api/files/view/mxLayoutManager-js.html b/docs/js-api/files/view/mxLayoutManager-js.html
index 57a3f2234..6dc5dc2d2 100644
--- a/docs/js-api/files/view/mxLayoutManager-js.html
+++ b/docs/js-api/files/view/mxLayoutManager-js.html
@@ -11,7 +11,7 @@ if (browserType) {document.write("
");if (browserV -

mxLayoutManager

Implements a layout manager that runs a given layout after any changes to the graph

Example

var layoutMgr = new mxLayoutManager(graph);
+

mxLayoutManager

Implements a layout manager that runs a given layout after any changes to the graph

Example

let layoutMgr = new mxLayoutManager(graph);
 layoutMgr.getLayout = function(cell, eventName)
 {
   return layout;
@@ -88,7 +88,7 @@ layoutMgr.getLayout = function(cell, eventName)
 
 
 
 
diff --git a/docs/js-api/files/view/mxMultiplicity-js.html b/docs/js-api/files/view/mxMultiplicity-js.html
index 7c25a165f..d0e72df3b 100644
--- a/docs/js-api/files/view/mxMultiplicity-js.html
+++ b/docs/js-api/files/view/mxMultiplicity-js.html
@@ -59,7 +59,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/view/mxOutline-js.html b/docs/js-api/files/view/mxOutline-js.html index 1018ce060..ccd7a7834 100644 --- a/docs/js-api/files/view/mxOutline-js.html +++ b/docs/js-api/files/view/mxOutline-js.html @@ -11,11 +11,11 @@ if (browserType) {document.write("
");if (browserV -

mxOutline

Implements an outline (aka overview) for a graph.  Set updateOnPan to true to enable updates while the source graph is panning.

Example

var outline = new mxOutline(graph, div);

If an outline is used in an mxWindow in IE8 standards mode, the following code makes sure that the shadow filter is not inherited and that any transparent elements in the graph do not show the page background, but the background of the graph container.

if (document.documentMode == 8)
+

mxOutline

Implements an outline (aka overview) for a graph.  Set updateOnPan to true to enable updates while the source graph is panning.

Example

let outline = new mxOutline(graph, div);

If an outline is used in an mxWindow in IE8 standards mode, the following code makes sure that the shadow filter is not inherited and that any transparent elements in the graph do not show the page background, but the background of the graph container.

if (document.documentMode == 8)
 {
   container.style.filter = 'progid:DXImageTransform.Microsoft.alpha(opacity=100)';
-}

To move the graph to the top, left corner the following code can be used.

var scale = graph.view.scale;
-var bounds = graph.getGraphBounds();
+}

To move the graph to the top, left corner the following code can be used.

let scale = graph.view.scale;
+let bounds = graph.getGraphBounds();
 graph.view.setTranslate(-bounds.x / scale, -bounds.y / scale);

To toggle the suspended mode, the following can be used.

outline.suspended = !outln.suspended;
 if (!outline.suspended)
 {
@@ -89,11 +89,11 @@ if (!nav.suspended)
 
 

getTranslateForEvent

mxOutline.prototype.getTranslateForEvent = function(me)

Gets the translate for the given mouse event.  Here is an example to limit the outline to stay within positive coordinates:

outline.getTranslateForEvent = function(me)
 {
-  var pt = new mxPoint(me.getX() - this.startX, me.getY() - this.startY);
+  let pt = new mxPoint(me.getX() - this.startX, me.getY() - this.startY);
 
   if (!this.zoom)
   {
-    var tr = this.source.view.translate;
+    let tr = this.source.view.translate;
     pt.x = Math.max(tr.x * this.outline.view.scale, pt.x);
     pt.y = Math.max(tr.y * this.outline.view.scale, pt.y);
   }
@@ -112,7 +112,7 @@ if (!nav.suspended)
 
 
 
 
diff --git a/docs/js-api/files/view/mxPerimeter-js.html b/docs/js-api/files/view/mxPerimeter-js.html
index eb6337c72..a5e6be13a 100644
--- a/docs/js-api/files/view/mxPerimeter-js.html
+++ b/docs/js-api/files/view/mxPerimeter-js.html
@@ -13,11 +13,11 @@ if (browserType) {document.write("
");if (browserV

mxPerimeter

Provides various perimeter functions to be used in a style as the value of mxConstants.STYLE_PERIMETER.  Perimeters for rectangle, circle, rhombus and triangle are available.

Example

<add as="perimeter">mxPerimeter.RectanglePerimeter</add>

Or programmatically

style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;

When adding new perimeter functions, it is recommended to use the mxPerimeter-namespace as follows:

mxPerimeter.CustomPerimeter = (bounds, vertex, next, orthogonal) =>
 {
-  var x = 0; // Calculate x-coordinate
-  var y = 0; // Calculate y-coordainte
+  let x = 0; // Calculate x-coordinate
+  let y = 0; // Calculate y-coordainte
 
   return new mxPoint(x, y);
-}

The new perimeter should then be registered in the mxStyleRegistry as follows

mxStyleRegistry.putValue('customPerimeter', mxPerimeter.CustomPerimeter);

The custom perimeter above can now be used in a specific vertex as follows

model.setStyle(vertex, 'perimeter=customPerimeter');

Note that the key of the mxStyleRegistry entry for the function should be used in string values, unless mxGraphView.allowEval is true, in which case you can also use mxPerimeter.CustomPerimeter for the value in the cell style above.

Or it can be used for all vertices in the graph as follows

var style = graph.getStylesheet().getDefaultVertexStyle();
+}

The new perimeter should then be registered in the mxStyleRegistry as follows

mxStyleRegistry.putValue('customPerimeter', mxPerimeter.CustomPerimeter);

The custom perimeter above can now be used in a specific vertex as follows

model.setStyle(vertex, 'perimeter=customPerimeter');

Note that the key of the mxStyleRegistry entry for the function should be used in string values, unless mxGraphView.allowEval is true, in which case you can also use mxPerimeter.CustomPerimeter for the value in the cell style above.

Or it can be used for all vertices in the graph as follows

let style = graph.getStylesheet().getDefaultVertexStyle();
 style[mxConstants.STYLE_PERIMETER] = mxPerimeter.CustomPerimeter;

Note that the object can be used directly when programmatically setting the value, but the key in the mxStyleRegistry should be used when setting the value via a key, value pair in a cell style.

The parameters are explained in RectanglePerimeter.

Summary
mxPerimeterProvides various perimeter functions to be used in a style as the value of mxConstants.STYLE_PERIMETER.
Functions
RectanglePerimeterDescribes a rectangular perimeter for the given bounds.
EllipsePerimeterDescribes an elliptic perimeter.
RhombusPerimeterDescribes a rhombus (aka diamond) perimeter.
TrianglePerimeterDescribes a triangle perimeter.
HexagonPerimeterDescribes a hexagon perimeter.

Functions

@@ -39,7 +39,7 @@ style[mxConstants.STYLE_PERIMETER] = mxPerimeter.CustomPerimeter;
diff --git a/docs/js-api/files/view/mxPrintPreview-js.html b/docs/js-api/files/view/mxPrintPreview-js.html index 6394281b5..c74b8c800 100644 --- a/docs/js-api/files/view/mxPrintPreview-js.html +++ b/docs/js-api/files/view/mxPrintPreview-js.html @@ -11,15 +11,15 @@ if (browserType) {document.write("
");if (browserV -

mxPrintPreview

Implements printing of a diagram across multiple pages.  The following opens a print preview for an existing graph:

var preview = new mxPrintPreview(graph);
-preview.open();

Use mxUtils.getScaleForPageCount as follows in order to print the graph across a given number of pages:

var pageCount = mxUtils.prompt('Enter page count', '1');
+

mxPrintPreview

Implements printing of a diagram across multiple pages.  The following opens a print preview for an existing graph:

let preview = new mxPrintPreview(graph);
+preview.open();

Use mxUtils.getScaleForPageCount as follows in order to print the graph across a given number of pages:

let pageCount = mxUtils.prompt('Enter page count', '1');
 
 if (pageCount != null)
 {
-  var scale = mxUtils.getScaleForPageCount(pageCount, graph);
-  var preview = new mxPrintPreview(graph, scale);
+  let scale = mxUtils.getScaleForPageCount(pageCount, graph);
+  let preview = new mxPrintPreview(graph, scale);
   preview.open();
-}

Additional pages

To add additional pages before and after the output, getCoverPages and getAppendices can be used, respectively.

var preview = new mxPrintPreview(graph, 1);
+}

Additional pages

To add additional pages before and after the output, getCoverPages and getAppendices can be used, respectively.

let preview = new mxPrintPreview(graph, 1);
 
 preview.getCoverPages = function(w, h)
 {
@@ -37,7 +37,7 @@ preview.getAppendices = function(w, h)
   }))];
 };
 
-preview.open();

CSS

The CSS from the original page is not carried over to the print preview.  To add CSS to the page, use the css argument in the open function or override writeHead to add the respective link tags as follows:

var writeHead = preview.writeHead;
+preview.open();

CSS

The CSS from the original page is not carried over to the print preview.  To add CSS to the page, use the css argument in the open function or override writeHead to add the respective link tags as follows:

let writeHead = preview.writeHead;
 preview.writeHead = function(doc, css)
 {
   writeHead.apply(this, arguments);
@@ -51,12 +51,12 @@ preview.writeHead = function(doc, css)
   doc.writeln('  body > div { padding-top:30px;padding-left:40px;box-sizing:content-box; }');
   doc.writeln('}');
   doc.writeln('</style>');
-};

Headers

Apart from setting the title argument in the mxPrintPreview constructor you can override renderPage as follows to add a header to any page:

var oldRenderPage = mxPrintPreview.prototype.renderPage;
+};

Headers

Apart from setting the title argument in the mxPrintPreview constructor you can override renderPage as follows to add a header to any page:

let oldRenderPage = mxPrintPreview.prototype.renderPage;
 mxPrintPreview.prototype.renderPage = function(w, h, x, y, content, pageNumber)
 {
-  var div = oldRenderPage.apply(this, arguments);
+  let div = oldRenderPage.apply(this, arguments);
 
-  var header = document.createElement('div');
+  let header = document.createElement('div');
   header.style.position = 'absolute';
   header.style.top = '0px';
   header.style.width = '100%';
@@ -67,7 +67,7 @@ mxPrintPreview.prototype.renderPage = function(w, h, x, y, content, pageNumber)
   return div;
 };

The pageNumber argument contains the number of the current page, starting at 1.  To display a header on the first page only, check pageNumber and add a vertical offset in the constructor call for the height of the header.

Page Format

For landscape printing, use <mxConstants.PAGE_FORMAT_A4_LANDSCAPE> as the pageFormat in mxUtils.getScaleForPageCount and mxPrintPreview.  Keep in mind that one can not set the defaults for the print dialog of the operating system from JavaScript so the user must manually choose a page format that matches this setting.

You can try passing the following CSS directive to open to set the page format in the print dialog to landscape.  However, this CSS directive seems to be ignored in most major browsers, including IE.

@page {
   size: landscape;
-}

Note that the print preview behaves differently in IE when used from the filesystem or via HTTP so printing should always be tested via HTTP.

If you are using a DOCTYPE in the source page you can override <getDoctype> and provide the same DOCTYPE for the print preview if required.  Here is an example for IE8 standards mode.

var preview = new mxPrintPreview(graph);
+}

Note that the print preview behaves differently in IE when used from the filesystem or via HTTP so printing should always be tested via HTTP.

If you are using a DOCTYPE in the source page you can override <getDoctype> and provide the same DOCTYPE for the print preview if required.  Here is an example for IE8 standards mode.

let preview = new mxPrintPreview(graph);
 preview.getDoctype = function()
 {
   return '<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=5,IE=8" ><![endif]-->';
@@ -167,7 +167,7 @@ preview.open();
diff --git a/docs/js-api/files/view/mxStyleRegistry-js.html b/docs/js-api/files/view/mxStyleRegistry-js.html index 614c78c49..71fdf3ef4 100644 --- a/docs/js-api/files/view/mxStyleRegistry-js.html +++ b/docs/js-api/files/view/mxStyleRegistry-js.html @@ -32,7 +32,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/view/mxStylesheet-js.html b/docs/js-api/files/view/mxStylesheet-js.html index a0a1cd097..4d083b401 100644 --- a/docs/js-api/files/view/mxStylesheet-js.html +++ b/docs/js-api/files/view/mxStylesheet-js.html @@ -11,9 +11,9 @@ if (browserType) {document.write("
");if (browserV -

mxStylesheet

Defines the appearance of the cells in a graph.  See putCellStyle for an example of creating a new cell style.  It is recommended to use objects, not arrays for holding cell styles.  Existing styles can be cloned using mxUtils.clone and turned into a string for debugging using mxUtils.toString.

Default Styles

The stylesheet contains two built-in styles, which are used if no style is defined for a cell:

defaultVertexDefault style for vertices
defaultEdgeDefault style for edges

Example

var vertexStyle = stylesheet.getDefaultVertexStyle();
+

mxStylesheet

Defines the appearance of the cells in a graph.  See putCellStyle for an example of creating a new cell style.  It is recommended to use objects, not arrays for holding cell styles.  Existing styles can be cloned using mxUtils.clone and turned into a string for debugging using mxUtils.toString.

Default Styles

The stylesheet contains two built-in styles, which are used if no style is defined for a cell:

defaultVertexDefault style for vertices
defaultEdgeDefault style for edges

Example

let vertexStyle = stylesheet.getDefaultVertexStyle();
 vertexStyle[mxConstants.STYLE_ROUNDED] = true;
-var edgeStyle = stylesheet.getDefaultEdgeStyle();
+let edgeStyle = stylesheet.getDefaultEdgeStyle();
 edgeStyle[mxConstants.STYLE_EDGE] = mxEdgeStyle.EntityRelation;

Modifies the built-in default styles.

To avoid the default style for a cell, add a leading semicolon to the style definition, eg.

;shadow=1

Removing keys

For removing a key in a cell style of the form [stylename;|key=value;] the special value none can be used, eg. highlight;fillColor=none

See also the helper methods in mxUtils to modify strings of this format, namely mxUtils.setStyle, mxUtils.indexOfStylename, mxUtils.addStylename, mxUtils.removeStylename, mxUtils.removeAllStylenames and mxUtils.setStyleFlag.

Summary
mxStylesheetDefines the appearance of the cells in a graph.
Functions
mxStylesheetConstructs a new stylesheet and assigns default styles.
stylesMaps from names to cell styles.
createDefaultVertexStyleCreates and returns the default vertex style.
createDefaultEdgeStyleCreates and returns the default edge style.
putDefaultVertexStyleSets the default style for vertices using defaultVertex as the stylename.
putDefaultEdgeStyleSets the default style for edges using defaultEdge as the stylename.
getDefaultVertexStyleReturns the default style for vertices.
getDefaultEdgeStyleSets the default style for edges.
putCellStyleStores the given map of key, value pairs under the given name in styles.
getCellStyleReturns the cell style for the specified stylename or the given defaultStyle if no style can be found for the given stylename.

Functions

@@ -34,7 +34,7 @@ edgeStyle[mxConstants.STYLE_EDGE] = mxEdgeStyle.EntityRelation;

getDefaultEdgeStyle

mxStylesheet.prototype.getDefaultEdgeStyle = function()

Sets the default style for edges.

-

putCellStyle

mxStylesheet.prototype.putCellStyle = function(name,
style)

Stores the given map of key, value pairs under the given name in styles.

Example

The following example adds a new style called ‘rounded’ into an existing stylesheet:

var style = {};
+

putCellStyle

mxStylesheet.prototype.putCellStyle = function(name,
style)

Stores the given map of key, value pairs under the given name in styles.

Example

The following example adds a new style called ‘rounded’ into an existing stylesheet:

let style = {};
 style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE;
 style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
 style[mxConstants.STYLE_ROUNDED] = true;
@@ -49,7 +49,7 @@ graph.getStylesheet().putCellStyle('rounded', style);

In th

diff --git a/docs/js-api/files/view/mxSwimlaneManager-js.html b/docs/js-api/files/view/mxSwimlaneManager-js.html index e00165209..ce3dabe18 100644 --- a/docs/js-api/files/view/mxSwimlaneManager-js.html +++ b/docs/js-api/files/view/mxSwimlaneManager-js.html @@ -76,7 +76,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/files/view/mxTemporaryCellStates-js.html b/docs/js-api/files/view/mxTemporaryCellStates-js.html index b3f17c76e..e291915ee 100644 --- a/docs/js-api/files/view/mxTemporaryCellStates-js.html +++ b/docs/js-api/files/view/mxTemporaryCellStates-js.html @@ -34,7 +34,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Classes.html b/docs/js-api/index/Classes.html index 576e116a6..14ec79b65 100644 --- a/docs/js-api/index/Classes.html +++ b/docs/js-api/index/Classes.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Classes2.html b/docs/js-api/index/Classes2.html index 5d977f002..d3a7c9866 100644 --- a/docs/js-api/index/Classes2.html +++ b/docs/js-api/index/Classes2.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Cookies.html b/docs/js-api/index/Cookies.html index b674e4112..8478fdd10 100644 --- a/docs/js-api/index/Cookies.html +++ b/docs/js-api/index/Cookies.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Events.html b/docs/js-api/index/Events.html index a32519363..18be076d0 100644 --- a/docs/js-api/index/Events.html +++ b/docs/js-api/index/Events.html @@ -86,7 +86,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Files.html b/docs/js-api/index/Files.html index 75374317e..81afdf877 100644 --- a/docs/js-api/index/Files.html +++ b/docs/js-api/index/Files.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions.html b/docs/js-api/index/Functions.html index a825af26a..78b80ea54 100644 --- a/docs/js-api/index/Functions.html +++ b/docs/js-api/index/Functions.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions10.html b/docs/js-api/index/Functions10.html index 5048405ef..8eb1a9ca4 100644 --- a/docs/js-api/index/Functions10.html +++ b/docs/js-api/index/Functions10.html @@ -30,7 +30,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions11.html b/docs/js-api/index/Functions11.html index b5a02e19c..944c8a28b 100644 --- a/docs/js-api/index/Functions11.html +++ b/docs/js-api/index/Functions11.html @@ -13,7 +13,7 @@ if (browserType) {document.write("
");if (browserV
Function Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
M
 makeDraggable, mxUtils
 map, mxDictionary
 mark
 markCell, mxCellMarker
 maxChainDfs, mxSwimlaneModel
 MedianCellSorter, MedianCellSorter
 medianPos, mxCoordinateAssignment
 medianRank, mxMedianHybridCrossingReduction
 medianValue, mxMedianHybridCrossingReduction
 medianXValue, mxCoordinateAssignment
 merge, mxCompactTreeLayout
 mergeChildren, mxGraphModel
 minNode, mxCoordinateAssignment
 minPath, mxCoordinateAssignment
 mod, mxUtils
 mouseDown
 mouseMove
 mouseUp
 move, mxGuide
 moveCell
 moveCells
 moveChildren, mxVertexHandler
 moveLabel
 moveNode, mxCompactTreeLayout
 moveState, mxCellStatePreview
 moveTo
 moveToFront, mxVertexHandler
 mxAbstractCanvas2D, mxAbstractCanvas2D
 mxActor, mxActor
 mxAnimation, mxAnimation
 mxArrow, mxArrow
 mxArrowConnector, mxArrowConnector
 mxAutoSaveManager, mxAutoSaveManager
 mxCell, mxCell
 mxCellAttributeChange, mxCellAttributeChange
 mxCellEditor, mxCellEditor
 mxCellHighlight, mxCellHighlight
 mxCellMarker, mxCellMarker
 mxCellOverlay, mxCellOverlay
 mxCellRenderer, mxCellRenderer
 mxCellState, mxCellState
 mxCellStatePreview, mxCellStatePreview
 mxCellTracker, mxCellTracker
 mxChildChange, mxChildChange
 mxCircleLayout, mxCircleLayout
 mxCloud, mxCloud
 mxCodec, mxCodec
 mxCollapseChange, mxCollapseChange
 mxCompactTreeLayout
 mxCompositeLayout, mxCompositeLayout
 mxConnectionConstraint, mxConnectionConstraint
 mxConnectionHandler, mxConnectionHandler
 mxConnector, mxConnector
 mxConstraintHandler, mxConstraintHandler
 mxCoordinateAssignment, mxCoordinateAssignment
 mxCurrentRootChange
 mxCylinder, mxCylinder
 mxDefaultKeyHandler, mxDefaultKeyHandler
 mxDefaultPopupMenu, mxDefaultPopupMenu
 mxDefaultToolbar, mxDefaultToolbar
 mxDivResizer, mxDivResizer
 mxDoubleEllipse, mxDoubleEllipse
 mxDragSource, mxDragSource
 mxEdgeHandler
 mxEdgeLabelLayout, mxEdgeLabelLayout
 mxEditor, mxEditor
 mxEllipse, mxEllipse
 mxEventObject, mxEventObject
 mxEventSource
 mxForm, mxForm
 mxGenericChangeCodec, mxGenericChangeCodec
 mxGeometry, mxGeometry
 mxGeometryChange, mxGeometryChange
 mxGraph, mxGraph
 mxGraphAbstractHierarchyCell, mxGraphAbstractHierarchyCell
 mxGraphHandler, mxGraphHandler
 mxGraphHierarchyEdge, mxGraphHierarchyEdge
 mxGraphHierarchyModel, mxGraphHierarchyModel
 mxGraphHierarchyNode, mxGraphHierarchyNode
 mxGraphLayout, mxGraphLayout
 mxGraphModel, mxGraphModel
 mxGraphSelectionModel, mxGraphSelectionModel
 mxGraphView, mxGraphView
 mxGuide, mxGuide
 mxHandle, mxHandle
 mxHexagon, mxHexagon
 mxHierarchicalLayout, mxHierarchicalLayout
 mxHierarchicalLayoutStage, mxHierarchicalLayoutStage
 mxImage, mxImage
 mxImageExport, mxImageExport
 mxImageShape, mxImageShape
 mxKeyHandler, mxKeyHandler
 mxLabel, mxLabel
 mxLayoutManager, mxLayoutManager
 mxLine, mxLine
 mxMedianHybridCrossingReduction, mxMedianHybridCrossingReduction
 mxMinimumCycleRemover, mxMinimumCycleRemover
 mxMorphing, mxMorphing
 mxMouseEvent, mxMouseEvent
 mxMultiplicity, mxMultiplicity
 mxObjectCodec, mxObjectCodec
 mxOutline, mxOutline
 mxPanningHandler, mxPanningHandler
 mxParallelEdgeLayout, mxParallelEdgeLayout
 mxPartitionLayout, mxPartitionLayout
 mxPoint, mxPoint
 mxPolyline, mxPolyline
 mxPopupMenu, mxPopupMenu
 mxPopupMenuHandler, mxPopupMenuHandler
 mxPrintPreview, mxPrintPreview
 mxRadialTreeLayout, mxRadialTreeLayout
 mxRectangle, mxRectangle
 mxRectangleShape, mxRectangleShape
 mxRhombus, mxRhombus
 mxRootChange, mxRootChange
 mxRubberband, mxRubberband
 mxShape, mxShape
 mxStackLayout, mxStackLayout
 mxStencil, mxStencil
 mxStyleChange, mxStyleChange
 mxStylesheet, mxStylesheet
 mxSvgCanvas2D, mxSvgCanvas2D
 mxSwimlane, mxSwimlane
 mxSwimlaneLayout, mxSwimlaneLayout
 mxSwimlaneManager, mxSwimlaneManager
 mxSwimlaneModel, mxSwimlaneModel
 mxSwimlaneOrdering, mxSwimlaneOrdering
 mxTerminalChange, mxTerminalChange
 mxText, mxText
 mxToolbar, mxToolbar
 mxTooltipHandler, mxTooltipHandler
 mxTriangle, mxTriangle
 mxUndoableEdit, mxUndoableEdit
 mxUndoManager, mxUndoManager
 mxValueChange, mxValueChange
 mxVertexHandler, mxVertexHandler
 mxVisibleChange, mxVisibleChange
 mxWindow, mxWindow
 mxXmlCanvas2D, mxXmlCanvas2D
 mxXmlRequest, mxXmlRequest
-
makeDraggable: function(element,
graphF,
funct,
dragElement,
dx,
dy,
autoscroll,
scalePreview,
highlightDropTargets,
getDropTarget)
Configures the given DOM element to act as a drag source for the specified graph.
Stores the (key, value) pairs in this dictionary.
Marks the markedState and fires a mark event.
mxCellMarker.prototype.mark = function()
Marks the markedState and fires a mark event.
mxCellMarker.prototype.markCell = function(cell,
color)
Marks the given cell using the given color, or validColor if no color is specified.
mxSwimlaneModel.prototype.maxChainDfs = function(parent,
root,
connectingEdge,
seen,
chainCount)
Performs a depth first search on the internal hierarchy model.
function MedianCellSorter()
Constructs a new median cell sorter.
mxCoordinateAssignment.prototype.medianPos = function(i,
model)
Performs one median positioning sweep in one direction
mxMedianHybridCrossingReduction.prototype.medianRank = function(rankValue,
downwardSweep)
Attempts to minimise the median placement of connected cells on this rank and one of the adjacent ranks
mxMedianHybridCrossingReduction.prototype.medianValue = function(
   connectedCells,
   rankValue
)
Calculates the median rank order positioning for the specified cell using the connected cells on the specified rank.
mxCoordinateAssignment.prototype.medianXValue = function(connectedCells,
rankValue)
Calculates the median position of the connected cell on the specified rank
mxCompactTreeLayout.prototype.merge = function(p1,
p2)
mxGraphModel.prototype.mergeChildren = function(from,
to,
cloneAllEdges)
Merges the children of the given cell into the given target cell inside this model.
mxCoordinateAssignment.prototype.minNode = function(model)
Performs one median positioning sweep in both directions
mxCoordinateAssignment.prototype.minPath = function(graph,
model)
Straightens out chains of virtual nodes where possibleacade to those stored after this layout processing step has completed.
mod: function(n,
m)
Returns the remainder of division of n by m.
mxCellTracker.prototype.mouseDown = function(sender,
me)
Ignores the event.
mxConnectionHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating a new connection.
mxDragSource.prototype.mouseDown = function(evt)
Returns the drop target for the given graph and coordinates.
mxEdgeHandler.prototype.mouseDown = function(sender,
me)
Handles the event by checking if a special element of the handler was clicked, in which case the index parameter is non-null.
mxGraphHandler.prototype.mouseDown = function(sender,
me)
Handles the event by selecing the given cell and creating a handle for it.
mxOutline.prototype.mouseDown = function(sender,
me)
Handles the event by starting a translation or zoom.
mxPanningHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating the panning.
mxPopupMenuHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating the panning.
mxRubberband.prototype.mouseDown = function(sender,
me)
Handles the event by initiating a rubberband selection.
mxSelectionCellsHandler.prototype.mouseDown = function(sender,
me)
Redirects the given event to the handlers.
mxTooltipHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating a rubberband selection.
mxVertexHandler.prototype.mouseDown = function(sender,
me)
Handles the event if a handle has been clicked.
mxCellTracker.prototype.mouseMove = function(sender,
me)
Handles the event by highlighting the cell under the mousepointer if it is over the hotspot region of the cell.
mxConnectionHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the preview edge or by highlighting a possible source or target terminal.
mxDragSource.prototype.mouseMove = function(evt)
Gets the graph for the given event using getGraphForEvent, updates the currentGraph, calling dragEnter and dragExit on the new and old graph, respectively, and invokes dragOver if currentGraph is not null.
mxEdgeHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the preview.
mxGraphHandler.prototype.mouseMove = function(sender,
me)
Handles the event by highlighting possible drop targets and updating the preview.
mxOutline.prototype.mouseMove = function(sender,
me)
Handles the event by previewing the viewrect in graph and updating the rectangle that represents the viewrect in the outline.
mxPanningHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the panning on the graph.
mxPopupMenuHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the panning on the graph.
mxRubberband.prototype.mouseMove = function(sender,
me)
Handles the event by updating therubberband selection.
mxSelectionCellsHandler.prototype.mouseMove = function(sender,
me)
Redirects the given event to the handlers.
mxTooltipHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the rubberband selection.
mxVertexHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the preview.
mxCellTracker.prototype.mouseUp = function(sender,
me)
Handles the event by reseting the highlight.
mxConnectionHandler.prototype.mouseUp = function(sender,
me)
Handles the event by inserting the new connection.
mxDragSource.prototype.mouseUp = function(evt)
Processes the mouse up event and invokes drop, dragExit and stopDrag as required.
mxEdgeHandler.prototype.mouseUp = function(sender,
me)
Handles the event to applying the previewed changes on the edge by using moveLabel, connect or changePoints.
mxGraphHandler.prototype.mouseUp = function(sender,
me)
Handles the event by applying the changes to the selection cells.
mxOutline.prototype.mouseUp = function(sender,
me)
Handles the event by applying the translation or zoom to graph.
mxPanningHandler.prototype.mouseUp = function(sender,
me)
Handles the event by setting the translation on the view or showing the popupmenu.
mxPopupMenuHandler.prototype.mouseUp = function(sender,
me)
Handles the event by setting the translation on the view or showing the popupmenu.
mxRubberband.prototype.mouseUp = function(sender,
me)
Handles the event by selecting the region of the rubberband using mxGraph.selectRegion.
mxSelectionCellsHandler.prototype.mouseUp = function(sender,
me)
Redirects the given event to the handlers.
mxTooltipHandler.prototype.mouseUp = function(sender,
me)
Handles the event by resetting the tooltip timer or hiding the existing tooltip.
mxVertexHandler.prototype.mouseUp = function(sender,
me)
Handles the event by applying the changes to the geometry.
mxGuide.prototype.move = function(bounds,
delta,
gridEnabled,
clone)
Moves the bounds by the given mxPoint and returnt the snapped point.
mxCompositeLayout.prototype.moveCell = function(cell,
x,
y)
Implements mxGraphLayout.moveCell by calling move on master or the first layout in layouts.
mxGraphLayout.prototype.moveCell = function(cell,
x,
y)
Notified when a cell is being moved in a parent that has automatic layout to update the cell state (eg.
mxPartitionLayout.prototype.moveCell = function(cell,
x,
y)
Implements mxGraphLayout.moveCell.
mxStackLayout.prototype.moveCell = function(cell,
x,
y)
Implements mxGraphLayout.moveCell.
mxGraph.prototype.moveCells = function(cells,
dx,
dy,
clone,
target,
evt,
mapping)
Moves or clones the specified cells and moves the cells or clones by the given amount, adding them to the optional target cell.
mxGraphHandler.prototype.moveCells = function(cells,
dx,
dy,
clone,
target,
evt)
Moves the given cells by the specified amount.
mxVertexHandler.prototype.moveChildren = function(cell,
dx,
dy)
Moves the children of the given cell by the given vector.
mxEdgeHandler.prototype.moveLabel = function(edgeState,
x,
y)
Changes the coordinates for the label of the given edge.
mxVertexHandler.prototype.moveLabel = function(me)
Moves the label.
mxCompactTreeLayout.prototype.moveNode = function(node,
dx,
dy)
Moves the specified node and all of its children by the given amount.
mxCellStatePreview.prototype.moveState = function(state,
dx,
dy,
add,
includeEdges)
mxAbstractCanvas2D.prototype.moveTo = function(x,
y)
Moves the current path the given coordinates.
mxXmlCanvas2D.prototype.moveTo = function(x,
y)
Moves the current path the given point.
mxVertexHandler.prototype.moveToFront = function()
Handles the event by applying the changes to the geometry.
function mxAbstractCanvas2D()
Constructs a new abstract canvas.
function mxActor(bounds,
fill,
stroke,
strokewidth)
Constructs a new actor shape.
function mxAnimation(delay)
Constructs an animation.
function mxArrow(points,
fill,
stroke,
strokewidth,
arrowWidth,
spacing,
endSize)
Constructs a new arrow shape.
function mxArrowConnector(points,
fill,
stroke,
strokewidth,
arrowWidth,
spacing,
endSize)
Constructs a new arrow shape.
function mxAutoSaveManager(graph)
Constructs a new automatic layout for the given graph.
function mxCell(value,
geometry,
style)
Constructs a new cell to be used in a graph model.
function mxCellAttributeChange(cell,
attribute,
value)
Constructs a change of a attribute of the DOM node stored as the value of the given mxCell.
function mxCellEditor(graph)
Constructs a new in-place editor for the specified graph.
function mxCellHighlight(graph,
highlightColor,
strokeWidth,
dashed)
Constructs a cell highlight.
function mxCellMarker(graph,
validColor,
invalidColor,
hotspot)
Constructs a new cell marker.
function mxCellOverlay(image,
tooltip,
align,
verticalAlign,
offset,
cursor)
Constructs a new overlay using the given image and tooltip.
function mxCellRenderer()
arrow, rectangle, ellipse, rhombus, image, line, label, cylinder, swimlane, connector, actor and cloud.
function mxCellState(view,
cell,
style)
Constructs a new object that represents the current state of the given cell in the specified view.
function mxCellStatePreview(graph)
Constructs a move preview for the given graph.
function mxCellTracker(graph,
color,
funct)
Constructs an event handler that highlights cells.
function mxChildChange(model,
parent,
child,
index)
Constructs a change of a child in the specified model.
function mxCircleLayout(graph,
radius)
Constructs a new circular layout for the specified radius.
function mxCloud(bounds,
fill,
stroke,
strokewidth)
Constructs a new cloud shape.
function mxCodec(document)
Constructs an XML encoder/decoder for the specified owner document.
function mxCollapseChange(model,
cell,
collapsed)
Constructs a change of a collapsed state in the specified model.
function mxCompactTreeLayout(graph,
horizontal,
invert)
Constructs a new compact tree layout for the specified graph and orientation.
Constructs a new fast organic layout for the specified graph.
function mxCompositeLayout(graph,
layouts,
master)
Constructs a new layout using the given layouts.
function mxConnectionConstraint(point,
perimeter,
name,
dx,
dy)
Constructs a new connection constraint for the given point and boolean arguments.
function mxConnectionHandler(graph,
factoryMethod)
Constructs an event handler that connects vertices using the specified factory method to create the new edges.
function mxConnector(points,
stroke,
strokewidth)
Constructs a new connector shape.
function mxConstraintHandler(graph)
Constructs an new constraint handler.
function mxCoordinateAssignment(layout,
intraCellSpacing,
interRankCellSpacing,
orientation,
initialX,
parallelEdgeSpacing)
Creates a coordinate assignment.
function mxCurrentRootChange(view,
root)
Constructs a change of the current root in the given view.
Constructs a change of the current root in the given view.
function mxCylinder(bounds,
fill,
stroke,
strokewidth)
Constructs a new cylinder shape.
function mxDefaultKeyHandler(editor)
Constructs a new default key handler for the mxEditor.graph in the given mxEditor.
function mxDefaultPopupMenu(config)
Constructs a new popupmenu-factory based on given configuration.
function mxDefaultToolbar(container,
editor)
Constructs a new toolbar for the given container and editor.
function mxDivResizer(div,
container)
Constructs an object that maintains the size of a div element when the window is being resized.
function mxDoubleEllipse(bounds,
fill,
stroke,
strokewidth)
Constructs a new ellipse shape.
function mxDragSource(element,
dropHandler)
Constructs a new drag source for the given element.
function mxEdgeHandler(state)
Constructs an edge handler for the specified mxCellState.
Constructs an edge handler for the specified mxCellState.
function mxEdgeLabelLayout(graph,
radius)
Constructs a new edge label layout.
function mxEditor(config)
Constructs a new editor.
function mxEllipse(bounds,
fill,
stroke,
strokewidth)
Constructs a new ellipse shape.
function mxEventObject(name)
Constructs a new event object with the specified name.
Constructs a new dictionary which allows object to be used as keys.
function mxEventSource(eventSource)
Constructs a new event source.
function mxForm(className)
Creates a HTML table using the specified classname.
var mxGenericChangeCodec = function(obj,
variable)
Factory function that creates a mxObjectCodec for the specified change and fieldname.
function mxGeometry(x,
y,
width,
height)
Constructs a new object to describe the size and location of a vertex or the control points of an edge.
function mxGeometryChange(model,
cell,
geometry)
Constructs a change of a geometry in the specified model.
function mxGraph(container,
model,
renderHint,
stylesheet)
Constructs a new mxGraph in the specified container.
function mxGraphAbstractHierarchyCell()
Constructs a new hierarchical layout algorithm.
function mxGraphHandler(graph)
Constructs an event handler that creates handles for the selection cells.
function mxGraphHierarchyEdge(edges)
Constructs a hierarchy edge
function mxGraphHierarchyModel(layout,
vertices,
roots,
parent,
tightenToSource)
Creates an internal ordered graph model using the vertices passed in.
function mxGraphHierarchyNode(cell)
Constructs an internal node to represent the specified real graph cell
function mxGraphLayout(graph)
Constructs a new layout using the given layouts.
function mxGraphModel(root)
Constructs a new graph model.
function mxGraphSelectionModel(graph)
Constructs a new graph selection model for the given mxGraph.
function mxGraphView(graph)
Constructs a new view for the given mxGraph.
function mxGuide(graph,
states)
Constructs a new guide object.
function mxHandle(state,
cursor,
image,
shape)
Constructs a new handle for the given state.
function mxHexagon()
Constructs a new hexagon shape.
function mxHierarchicalLayout(graph,
orientation,
deterministic)
Constructs a new hierarchical layout algorithm.
function mxHierarchicalLayoutStage()
Constructs a new hierarchical layout stage.
function mxImage(src,
width,
height)
Constructs a new image.
function mxImageExport()
Constructs a new image export.
function mxImageShape(bounds,
image,
fill,
stroke,
strokewidth)
Constructs a new image shape.
function mxKeyHandler(graph,
target)
Constructs an event handler that executes functions bound to specific keystrokes.
function mxLabel(bounds,
fill,
stroke,
strokewidth)
Constructs a new label shape.
function mxLayoutManager(graph)
Constructs a new automatic layout for the given graph.
function mxLine(bounds,
stroke,
strokewidth,
vertical)
Constructs a new line shape.
function mxMedianHybridCrossingReduction(layout)
Creates a coordinate assignment.
function mxMinimumCycleRemover(layout)
Creates a cycle remover for the given internal model.
function mxMorphing(graph,
steps,
ease,
delay)
Constructs an animation.
function mxMouseEvent(evt,
state)
Constructs a new event object for the given arguments.
function mxMultiplicity(source,
type,
attr,
value,
min,
max,
validNeighbors,
countError,
typeError,
validNeighborsAllowed)
Instantiate class mxMultiplicity in order to describe allowed connections in a graph.
function mxObjectCodec(template,
exclude,
idrefs,
mapping)
Constructs a new codec for the specified template object.
function mxOutline(source,
container)
Constructs a new outline for the specified graph inside the given container.
Constructs an event handler that creates a mxPopupMenu and pans the graph.
function mxParallelEdgeLayout(graph)
Constructs a new parallel edge layout for the specified graph.
function mxPartitionLayout(graph,
horizontal,
spacing,
border)
Constructs a new stack layout layout for the specified graph, spacing, orientation and offset.
function mxPoint(x,
y)
Constructs a new point for the optional x and y coordinates.
function mxPolyline(points,
stroke,
strokewidth)
Constructs a new polyline shape.
Constructs a popupmenu.
function mxPopupMenuHandler(graph,
factoryMethod)
Constructs an event handler that creates a mxPopupMenu.
function mxPrintPreview(graph,
scale,
pageFormat,
border,
x0,
y0,
borderColor,
title,
pageSelector)
Constructs a new print preview for the given parameters.
function mxRadialTreeLayout(graph)
Constructs a new radial tree layout for the specified graph
function mxRectangle(x,
y,
width,
height)
Constructs a new rectangle for the optional parameters.
function mxRectangleShape(bounds,
fill,
stroke,
strokewidth)
Constructs a new rectangle shape.
function mxRhombus(bounds,
fill,
stroke,
strokewidth)
Constructs a new rhombus shape.
function mxRootChange(model,
root)
Constructs a change of the root in the specified model.
function mxRubberband(graph)
Constructs an event handler that selects rectangular regions in the graph using rubberband selection.
function mxShape(stencil)
Constructs a new shape.
function mxStackLayout(graph,
horizontal,
spacing,
x0,
y0,
border)
Constructs a new stack layout layout for the specified graph, spacing, orientation and offset.
function mxStencil(desc)
Constructs a new generic shape by setting desc to the given XML node and invoking parseDescription and parseConstraints.
function mxStyleChange(model,
cell,
style)
Constructs a change of a style in the specified model.
function mxStylesheet()
Constructs a new stylesheet and assigns default styles.
function mxSvgCanvas2D(root,
styleEnabled)
Constructs a new SVG canvas.
function mxSwimlane(bounds,
fill,
stroke,
strokewidth)
Constructs a new swimlane shape.
function mxSwimlaneLayout(graph,
orientation,
deterministic)
Constructs a new hierarchical layout algorithm.
function mxSwimlaneManager(graph,
horizontal,
addEnabled,
resizeEnabled)
Constructs a new swimlane manager for the given graph.
function mxSwimlaneModel(layout,
vertices,
roots,
parent,
tightenToSource)
Creates an internal ordered graph model using the vertices passed in.
function mxSwimlaneOrdering(layout)
Creates a cycle remover for the given internal model.
function mxTerminalChange(model,
cell,
terminal,
source)
Constructs a change of a terminal in the specified model.
function mxText(value,
bounds,
align,
valign,
color,
family,
size,
fontStyle,
spacing,
spacingTop,
spacingRight,
spacingBottom,
spacingLeft,
horizontal,
background,
border,
wrap,
clipped,
overflow,
labelPadding,
textDirection)
Constructs a new text shape.
function mxToolbar(container)
Constructs a toolbar in the specified container.
function mxTooltipHandler(graph,
delay)
Constructs an event handler that displays tooltips with the specified delay (in milliseconds).
function mxTriangle()
Constructs a new triangle shape.
function mxUndoableEdit(source,
significant)
Constructs a new undoable edit for the given source.
function mxUndoManager(size)
Constructs a new undo manager with the given history size.
function mxValueChange(model,
cell,
value)
Constructs a change of a user object in the specified model.
function mxVertexHandler(state)
Constructs an event handler that allows to resize vertices and groups.
function mxVisibleChange(model,
cell,
visible)
Constructs a change of a visible state in the specified model.
function mxWindow(title,
content,
x,
y,
width,
height,
minimizable,
movable,
replaceNode,
style)
Constructs a new window with the given dimension and title to display the specified content.
function mxXmlCanvas2D(root)
Constructs a new abstract canvas.
function mxXmlRequest(url,
params,
method,
async,
username,
password)
Constructs an XML HTTP request.
+
makeDraggable: function(element,
graphF,
funct,
dragElement,
dx,
dy,
autoscroll,
scalePreview,
highlightDropTargets,
getDropTarget)
Configures the given DOM element to act as a drag source for the specified graph.
Stores the (key, value) pairs in this dictionary.
Marks the markedState and fires a mark event.
mxCellMarker.prototype.mark = function()
Marks the markedState and fires a mark event.
mxCellMarker.prototype.markCell = function(cell,
color)
Marks the given cell using the given color, or validColor if no color is specified.
mxSwimlaneModel.prototype.maxChainDfs = function(parent,
root,
connectingEdge,
seen,
chainCount)
Performs a depth first search on the internal hierarchy model.
function MedianCellSorter()
Constructs a new median cell sorter.
mxCoordinateAssignment.prototype.medianPos = function(i,
model)
Performs one median positioning sweep in one direction
mxMedianHybridCrossingReduction.prototype.medianRank = function(rankValue,
downwardSweep)
Attempts to minimise the median placement of connected cells on this rank and one of the adjacent ranks
mxMedianHybridCrossingReduction.prototype.medianValue = function(
   connectedCells,
   rankValue
)
Calculates the median rank order positioning for the specified cell using the connected cells on the specified rank.
mxCoordinateAssignment.prototype.medianXValue = function(connectedCells,
rankValue)
Calculates the median position of the connected cell on the specified rank
mxCompactTreeLayout.prototype.merge = function(p1,
p2)
mxGraphModel.prototype.mergeChildren = function(from,
to,
cloneAllEdges)
Merges the children of the given cell into the given target cell inside this model.
mxCoordinateAssignment.prototype.minNode = function(model)
Performs one median positioning sweep in both directions
mxCoordinateAssignment.prototype.minPath = function(graph,
model)
Straightens out chains of virtual nodes where possibleacade to those stored after this layout processing step has completed.
mod: function(n,
m)
Returns the remainder of division of n by m.
mxCellTracker.prototype.mouseDown = function(sender,
me)
Ignores the event.
mxConnectionHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating a new connection.
mxDragSource.prototype.mouseDown = function(evt)
Returns the drop target for the given graph and coordinates.
mxEdgeHandler.prototype.mouseDown = function(sender,
me)
Handles the event by checking if a special element of the handler was clicked, in which case the index parameter is non-null.
mxGraphHandler.prototype.mouseDown = function(sender,
me)
Handles the event by selecing the given cell and creating a handle for it.
mxOutline.prototype.mouseDown = function(sender,
me)
Handles the event by starting a translation or zoom.
mxPanningHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating the panning.
mxPopupMenuHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating the panning.
mxRubberband.prototype.mouseDown = function(sender,
me)
Handles the event by initiating a rubberband selection.
mxSelectionCellsHandler.prototype.mouseDown = function(sender,
me)
Redirects the given event to the handlers.
mxTooltipHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating a rubberband selection.
mxVertexHandler.prototype.mouseDown = function(sender,
me)
Handles the event if a handle has been clicked.
mxCellTracker.prototype.mouseMove = function(sender,
me)
Handles the event by highlighting the cell under the mousepointer if it is over the hotspot region of the cell.
mxConnectionHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the preview edge or by highlighting a possible source or target terminal.
mxDragSource.prototype.mouseMove = function(evt)
Gets the graph for the given event using getGraphForEvent, updates the currentGraph, calling dragEnter and dragExit on the new and old graph, respectively, and invokes dragOver if currentGraph is not null.
mxEdgeHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the preview.
mxGraphHandler.prototype.mouseMove = function(sender,
me)
Handles the event by highlighting possible drop targets and updating the preview.
mxOutline.prototype.mouseMove = function(sender,
me)
Handles the event by previewing the viewrect in graph and updating the rectangle that represents the viewrect in the outline.
mxPanningHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the panning on the graph.
mxPopupMenuHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the panning on the graph.
mxRubberband.prototype.mouseMove = function(sender,
me)
Handles the event by updating therubberband selection.
mxSelectionCellsHandler.prototype.mouseMove = function(sender,
me)
Redirects the given event to the handlers.
mxTooltipHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the rubberband selection.
mxVertexHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the preview.
mxCellTracker.prototype.mouseUp = function(sender,
me)
Handles the event by reseting the highlight.
mxConnectionHandler.prototype.mouseUp = function(sender,
me)
Handles the event by inserting the new connection.
mxDragSource.prototype.mouseUp = function(evt)
Processes the mouse up event and invokes drop, dragExit and stopDrag as required.
mxEdgeHandler.prototype.mouseUp = function(sender,
me)
Handles the event to applying the previewed changes on the edge by using moveLabel, connect or changePoints.
mxGraphHandler.prototype.mouseUp = function(sender,
me)
Handles the event by applying the changes to the selection cells.
mxOutline.prototype.mouseUp = function(sender,
me)
Handles the event by applying the translation or zoom to graph.
mxPanningHandler.prototype.mouseUp = function(sender,
me)
Handles the event by setting the translation on the view or showing the popupmenu.
mxPopupMenuHandler.prototype.mouseUp = function(sender,
me)
Handles the event by setting the translation on the view or showing the popupmenu.
mxRubberband.prototype.mouseUp = function(sender,
me)
Handles the event by selecting the region of the rubberband using mxGraph.selectRegion.
mxSelectionCellsHandler.prototype.mouseUp = function(sender,
me)
Redirects the given event to the handlers.
mxTooltipHandler.prototype.mouseUp = function(sender,
me)
Handles the event by resetting the tooltip timer or hiding the existing tooltip.
mxVertexHandler.prototype.mouseUp = function(sender,
me)
Handles the event by applying the changes to the geometry.
mxGuide.prototype.move = function(bounds,
delta,
gridEnabled,
clone)
Moves the bounds by the given mxPoint and returnt the snapped point.
mxCompositeLayout.prototype.moveCell = function(cell,
x,
y)
Implements mxGraphLayout.moveCell by calling move on master or the first layout in layouts.
mxGraphLayout.prototype.moveCell = function(cell,
x,
y)
Notified when a cell is being moved in a parent that has automatic layout to update the cell state (eg.
mxPartitionLayout.prototype.moveCell = function(cell,
x,
y)
Implements mxGraphLayout.moveCell.
mxStackLayout.prototype.moveCell = function(cell,
x,
y)
Implements mxGraphLayout.moveCell.
mxGraph.prototype.moveCells = function(cells,
dx,
dy,
clone,
target,
evt,
mapping)
Moves or clones the specified cells and moves the cells or clones by the given amount, adding them to the optional target cell.
mxGraphHandler.prototype.moveCells = function(cells,
dx,
dy,
clone,
target,
evt)
Moves the given cells by the specified amount.
mxVertexHandler.prototype.moveChildren = function(cell,
dx,
dy)
Moves the children of the given cell by the given vector.
mxEdgeHandler.prototype.moveLabel = function(edgeState,
x,
y)
Changes the coordinates for the label of the given edge.
mxVertexHandler.prototype.moveLabel = function(me)
Moves the label.
mxCompactTreeLayout.prototype.moveNode = function(node,
dx,
dy)
Moves the specified node and all of its children by the given amount.
mxCellStatePreview.prototype.moveState = function(state,
dx,
dy,
add,
includeEdges)
mxAbstractCanvas2D.prototype.moveTo = function(x,
y)
Moves the current path the given coordinates.
mxXmlCanvas2D.prototype.moveTo = function(x,
y)
Moves the current path the given point.
mxVertexHandler.prototype.moveToFront = function()
Handles the event by applying the changes to the geometry.
function mxAbstractCanvas2D()
Constructs a new abstract canvas.
function mxActor(bounds,
fill,
stroke,
strokewidth)
Constructs a new actor shape.
function mxAnimation(delay)
Constructs an animation.
function mxArrow(points,
fill,
stroke,
strokewidth,
arrowWidth,
spacing,
endSize)
Constructs a new arrow shape.
function mxArrowConnector(points,
fill,
stroke,
strokewidth,
arrowWidth,
spacing,
endSize)
Constructs a new arrow shape.
function mxAutoSaveManager(graph)
Constructs a new automatic layout for the given graph.
function mxCell(value,
geometry,
style)
Constructs a new cell to be used in a graph model.
function mxCellAttributeChange(cell,
attribute,
value)
Constructs a change of a attribute of the DOM node stored as the value of the given mxCell.
function mxCellEditor(graph)
Constructs a new in-place editor for the specified graph.
function mxCellHighlight(graph,
highlightColor,
strokeWidth,
dashed)
Constructs a cell highlight.
function mxCellMarker(graph,
validColor,
invalidColor,
hotspot)
Constructs a new cell marker.
function mxCellOverlay(image,
tooltip,
align,
verticalAlign,
offset,
cursor)
Constructs a new overlay using the given image and tooltip.
function mxCellRenderer()
arrow, rectangle, ellipse, rhombus, image, line, label, cylinder, swimlane, connector, actor and cloud.
function mxCellState(view,
cell,
style)
Constructs a new object that represents the current state of the given cell in the specified view.
function mxCellStatePreview(graph)
Constructs a move preview for the given graph.
function mxCellTracker(graph,
color,
funct)
Constructs an event handler that highlights cells.
function mxChildChange(model,
parent,
child,
index)
Constructs a change of a child in the specified model.
function mxCircleLayout(graph,
radius)
Constructs a new circular layout for the specified radius.
function mxCloud(bounds,
fill,
stroke,
strokewidth)
Constructs a new cloud shape.
function mxCodec(document)
Constructs an XML encoder/decoder for the specified owner document.
function mxCollapseChange(model,
cell,
collapsed)
Constructs a change of a collapsed state in the specified model.
function mxCompactTreeLayout(graph,
horizontal,
invert)
Constructs a new compact tree layout for the specified graph and orientation.
Constructs a new fast organic layout for the specified graph.
function mxCompositeLayout(graph,
layouts,
master)
Constructs a new layout using the given layouts.
function mxConnectionConstraint(point,
perimeter,
name,
dx,
dy)
Constructs a new connection constraint for the given point and boolean arguments.
function mxConnectionHandler(graph,
factoryMethod)
Constructs an event handler that connects vertices using the specified factory method to create the new edges.
function mxConnector(points,
stroke,
strokewidth)
Constructs a new connector shape.
function mxConstraintHandler(graph)
Constructs an new constraint handler.
function mxCoordinateAssignment(layout,
intraCellSpacing,
interRankCellSpacing,
orientation,
initialX,
parallelEdgeSpacing)
Creates a coordinate assignment.
function mxCurrentRootChange(view,
root)
Constructs a change of the current root in the given view.
Constructs a change of the current root in the given view.
function mxCylinder(bounds,
fill,
stroke,
strokewidth)
Constructs a new cylinder shape.
function mxDefaultKeyHandler(editor)
Constructs a new default key handler for the mxEditor.graph in the given mxEditor.
function mxDefaultPopupMenu(config)
Constructs a new popupmenu-factory based on given configuration.
function mxDefaultToolbar(container,
editor)
Constructs a new toolbar for the given container and editor.
function mxDivResizer(div,
container)
Constructs an object that maintains the size of a div element when the window is being resized.
function mxDoubleEllipse(bounds,
fill,
stroke,
strokewidth)
Constructs a new ellipse shape.
function mxDragSource(element,
dropHandler)
Constructs a new drag source for the given element.
function mxEdgeHandler(state)
Constructs an edge handler for the specified mxCellState.
Constructs an edge handler for the specified mxCellState.
function mxEdgeLabelLayout(graph,
radius)
Constructs a new edge label layout.
function mxEditor(config)
Constructs a new editor.
function mxEllipse(bounds,
fill,
stroke,
strokewidth)
Constructs a new ellipse shape.
function mxEventObject(name)
Constructs a new event object with the specified name.
Constructs a new dictionary which allows object to be used as keys.
function mxEventSource(eventSource)
Constructs a new event source.
function mxForm(className)
Creates a HTML table using the specified classname.
let mxGenericChangeCodec = function(obj,
variable)
Factory function that creates a mxObjectCodec for the specified change and fieldname.
function mxGeometry(x,
y,
width,
height)
Constructs a new object to describe the size and location of a vertex or the control points of an edge.
function mxGeometryChange(model,
cell,
geometry)
Constructs a change of a geometry in the specified model.
function mxGraph(container,
model,
renderHint,
stylesheet)
Constructs a new mxGraph in the specified container.
function mxGraphAbstractHierarchyCell()
Constructs a new hierarchical layout algorithm.
function mxGraphHandler(graph)
Constructs an event handler that creates handles for the selection cells.
function mxGraphHierarchyEdge(edges)
Constructs a hierarchy edge
function mxGraphHierarchyModel(layout,
vertices,
roots,
parent,
tightenToSource)
Creates an internal ordered graph model using the vertices passed in.
function mxGraphHierarchyNode(cell)
Constructs an internal node to represent the specified real graph cell
function mxGraphLayout(graph)
Constructs a new layout using the given layouts.
function mxGraphModel(root)
Constructs a new graph model.
function mxGraphSelectionModel(graph)
Constructs a new graph selection model for the given mxGraph.
function mxGraphView(graph)
Constructs a new view for the given mxGraph.
function mxGuide(graph,
states)
Constructs a new guide object.
function mxHandle(state,
cursor,
image,
shape)
Constructs a new handle for the given state.
function mxHexagon()
Constructs a new hexagon shape.
function mxHierarchicalLayout(graph,
orientation,
deterministic)
Constructs a new hierarchical layout algorithm.
function mxHierarchicalLayoutStage()
Constructs a new hierarchical layout stage.
function mxImage(src,
width,
height)
Constructs a new image.
function mxImageExport()
Constructs a new image export.
function mxImageShape(bounds,
image,
fill,
stroke,
strokewidth)
Constructs a new image shape.
function mxKeyHandler(graph,
target)
Constructs an event handler that executes functions bound to specific keystrokes.
function mxLabel(bounds,
fill,
stroke,
strokewidth)
Constructs a new label shape.
function mxLayoutManager(graph)
Constructs a new automatic layout for the given graph.
function mxLine(bounds,
stroke,
strokewidth,
vertical)
Constructs a new line shape.
function mxMedianHybridCrossingReduction(layout)
Creates a coordinate assignment.
function mxMinimumCycleRemover(layout)
Creates a cycle remover for the given internal model.
function mxMorphing(graph,
steps,
ease,
delay)
Constructs an animation.
function mxMouseEvent(evt,
state)
Constructs a new event object for the given arguments.
function mxMultiplicity(source,
type,
attr,
value,
min,
max,
validNeighbors,
countError,
typeError,
validNeighborsAllowed)
Instantiate class mxMultiplicity in order to describe allowed connections in a graph.
function mxObjectCodec(template,
exclude,
idrefs,
mapping)
Constructs a new codec for the specified template object.
function mxOutline(source,
container)
Constructs a new outline for the specified graph inside the given container.
Constructs an event handler that creates a mxPopupMenu and pans the graph.
function mxParallelEdgeLayout(graph)
Constructs a new parallel edge layout for the specified graph.
function mxPartitionLayout(graph,
horizontal,
spacing,
border)
Constructs a new stack layout layout for the specified graph, spacing, orientation and offset.
function mxPoint(x,
y)
Constructs a new point for the optional x and y coordinates.
function mxPolyline(points,
stroke,
strokewidth)
Constructs a new polyline shape.
Constructs a popupmenu.
function mxPopupMenuHandler(graph,
factoryMethod)
Constructs an event handler that creates a mxPopupMenu.
function mxPrintPreview(graph,
scale,
pageFormat,
border,
x0,
y0,
borderColor,
title,
pageSelector)
Constructs a new print preview for the given parameters.
function mxRadialTreeLayout(graph)
Constructs a new radial tree layout for the specified graph
function mxRectangle(x,
y,
width,
height)
Constructs a new rectangle for the optional parameters.
function mxRectangleShape(bounds,
fill,
stroke,
strokewidth)
Constructs a new rectangle shape.
function mxRhombus(bounds,
fill,
stroke,
strokewidth)
Constructs a new rhombus shape.
function mxRootChange(model,
root)
Constructs a change of the root in the specified model.
function mxRubberband(graph)
Constructs an event handler that selects rectangular regions in the graph using rubberband selection.
function mxShape(stencil)
Constructs a new shape.
function mxStackLayout(graph,
horizontal,
spacing,
x0,
y0,
border)
Constructs a new stack layout layout for the specified graph, spacing, orientation and offset.
function mxStencil(desc)
Constructs a new generic shape by setting desc to the given XML node and invoking parseDescription and parseConstraints.
function mxStyleChange(model,
cell,
style)
Constructs a change of a style in the specified model.
function mxStylesheet()
Constructs a new stylesheet and assigns default styles.
function mxSvgCanvas2D(root,
styleEnabled)
Constructs a new SVG canvas.
function mxSwimlane(bounds,
fill,
stroke,
strokewidth)
Constructs a new swimlane shape.
function mxSwimlaneLayout(graph,
orientation,
deterministic)
Constructs a new hierarchical layout algorithm.
function mxSwimlaneManager(graph,
horizontal,
addEnabled,
resizeEnabled)
Constructs a new swimlane manager for the given graph.
function mxSwimlaneModel(layout,
vertices,
roots,
parent,
tightenToSource)
Creates an internal ordered graph model using the vertices passed in.
function mxSwimlaneOrdering(layout)
Creates a cycle remover for the given internal model.
function mxTerminalChange(model,
cell,
terminal,
source)
Constructs a change of a terminal in the specified model.
function mxText(value,
bounds,
align,
valign,
color,
family,
size,
fontStyle,
spacing,
spacingTop,
spacingRight,
spacingBottom,
spacingLeft,
horizontal,
background,
border,
wrap,
clipped,
overflow,
labelPadding,
textDirection)
Constructs a new text shape.
function mxToolbar(container)
Constructs a toolbar in the specified container.
function mxTooltipHandler(graph,
delay)
Constructs an event handler that displays tooltips with the specified delay (in milliseconds).
function mxTriangle()
Constructs a new triangle shape.
function mxUndoableEdit(source,
significant)
Constructs a new undoable edit for the given source.
function mxUndoManager(size)
Constructs a new undo manager with the given history size.
function mxValueChange(model,
cell,
value)
Constructs a change of a user object in the specified model.
function mxVertexHandler(state)
Constructs an event handler that allows to resize vertices and groups.
function mxVisibleChange(model,
cell,
visible)
Constructs a change of a visible state in the specified model.
function mxWindow(title,
content,
x,
y,
width,
height,
minimizable,
movable,
replaceNode,
style)
Constructs a new window with the given dimension and title to display the specified content.
function mxXmlCanvas2D(root)
Constructs a new abstract canvas.
function mxXmlRequest(url,
params,
method,
async,
username,
password)
Constructs an XML HTTP request.
@@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions12.html b/docs/js-api/index/Functions12.html index 0c4c089ef..eb4177d79 100644 --- a/docs/js-api/index/Functions12.html +++ b/docs/js-api/index/Functions12.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions13.html b/docs/js-api/index/Functions13.html index de11b37c4..bdb133df8 100644 --- a/docs/js-api/index/Functions13.html +++ b/docs/js-api/index/Functions13.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions14.html b/docs/js-api/index/Functions14.html index ec7b3cc03..a2831e213 100644 --- a/docs/js-api/index/Functions14.html +++ b/docs/js-api/index/Functions14.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions15.html b/docs/js-api/index/Functions15.html index 8c0c909e7..0c5cd3fef 100644 --- a/docs/js-api/index/Functions15.html +++ b/docs/js-api/index/Functions15.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions16.html b/docs/js-api/index/Functions16.html index 3914eeb2f..7aeab5752 100644 --- a/docs/js-api/index/Functions16.html +++ b/docs/js-api/index/Functions16.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions17.html b/docs/js-api/index/Functions17.html index 6f8b824f2..07040518e 100644 --- a/docs/js-api/index/Functions17.html +++ b/docs/js-api/index/Functions17.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions18.html b/docs/js-api/index/Functions18.html index 0eea0c87c..d12075574 100644 --- a/docs/js-api/index/Functions18.html +++ b/docs/js-api/index/Functions18.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions19.html b/docs/js-api/index/Functions19.html index 9bd610e85..8259a2972 100644 --- a/docs/js-api/index/Functions19.html +++ b/docs/js-api/index/Functions19.html @@ -30,7 +30,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions2.html b/docs/js-api/index/Functions2.html index 81d46244e..4abe34ddd 100644 --- a/docs/js-api/index/Functions2.html +++ b/docs/js-api/index/Functions2.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions3.html b/docs/js-api/index/Functions3.html index ef6a8d4ac..84b73b7cf 100644 --- a/docs/js-api/index/Functions3.html +++ b/docs/js-api/index/Functions3.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions4.html b/docs/js-api/index/Functions4.html index 892425136..0795dd275 100644 --- a/docs/js-api/index/Functions4.html +++ b/docs/js-api/index/Functions4.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions5.html b/docs/js-api/index/Functions5.html index bb9547d4a..ca1234cff 100644 --- a/docs/js-api/index/Functions5.html +++ b/docs/js-api/index/Functions5.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions6.html b/docs/js-api/index/Functions6.html index 7b4baeacd..1e808a34d 100644 --- a/docs/js-api/index/Functions6.html +++ b/docs/js-api/index/Functions6.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions7.html b/docs/js-api/index/Functions7.html index 5f60039e0..9762ff78d 100644 --- a/docs/js-api/index/Functions7.html +++ b/docs/js-api/index/Functions7.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions8.html b/docs/js-api/index/Functions8.html index 36f881ec0..d46a03256 100644 --- a/docs/js-api/index/Functions8.html +++ b/docs/js-api/index/Functions8.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Functions9.html b/docs/js-api/index/Functions9.html index 5b6b4a391..43eefbcfb 100644 --- a/docs/js-api/index/Functions9.html +++ b/docs/js-api/index/Functions9.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General.html b/docs/js-api/index/General.html index 238eefd3c..78bc042e8 100644 --- a/docs/js-api/index/General.html +++ b/docs/js-api/index/General.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General10.html b/docs/js-api/index/General10.html index 973309d92..cc6dcb8a2 100644 --- a/docs/js-api/index/General10.html +++ b/docs/js-api/index/General10.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General11.html b/docs/js-api/index/General11.html index f3f86ab60..d5ff1b6a9 100644 --- a/docs/js-api/index/General11.html +++ b/docs/js-api/index/General11.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General12.html b/docs/js-api/index/General12.html index 2a39d0866..bd7caaabb 100644 --- a/docs/js-api/index/General12.html +++ b/docs/js-api/index/General12.html @@ -13,7 +13,7 @@ if (browserType) {document.write("
");if (browserV
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
M
 maintainEdgeParent, mxGraphModel
 maintainParentLocation
 maintainSwimlanes, mxEditor
 makeDraggable, mxUtils
 manageLabelHandle, mxEdgeHandler
 manageSizers, mxVertexHandler
 map, mxDictionary
 mapping, mxObjectCodec
 marginBottom
 marginLeft, mxStackLayout
 marginRight, mxStackLayout
 marginTop
 mark
 MARK
 markCell, mxCellMarker
 markedState, mxCellMarker
 marker
 markers, mxMarker
 master, mxCompositeLayout
 matchHtmlAlignment, mxSvgCanvas2D
 max, mxMultiplicity
 MAX_HOTSPOT_SIZE, mxConstants
 maxCells, mxGraphHandler
 maxChainDfs, mxSwimlaneModel
 maxDistanceLimit, mxFastOrganicLayout
 maxFitScale, mxGraph
 maxHandlers, mxSelectionCellsHandler
 maxHeight, mxCylinder
 MAXIMIZE
 maximizeImage, mxWindow
 maximumContainerSize, mxGraph
 maximumGraphBounds, mxGraph
 maxIterations
 maxLivePreview, mxGraphHandler
 maxNoImprovementIterations, mxMedianHybridCrossingReduction
 maxRank
 maxRankHeight, mxCompactTreeLayout
 maxScale, mxPanningHandler
 MedianCellSorter
 medianPos, mxCoordinateAssignment
 medianRank, mxMedianHybridCrossingReduction
 medianValue
 medianXValue, mxCoordinateAssignment
 merge, mxCompactTreeLayout
 mergeChildren, mxGraphModel
 mergeRemoveEnabled, mxEdgeHandler
 method, mxXmlRequest
 min, mxMultiplicity
 MIN_HOTSPOT_SIZE, mxConstants
 minDistanceLimit, mxFastOrganicLayout
 minDistanceLimitSquared, mxFastOrganicLayout
 minEdgeJetty
 minFitScale, mxGraph
 MINIMIZE
 minimizeImage, mxWindow
 minimumContainerSize, mxGraph
 minimumGraphSize, mxGraph
 minimumSize
 minNode, mxCoordinateAssignment
 minPageBreakDist, mxGraph
 minPath, mxCoordinateAssignment
 minRank, mxGraphAbstractHierarchyCell
 minResize, mxCellEditor
 minScale
 minStrokeWidth, mxSvgCanvas2D
 minSvgStrokeWidth
 mod, mxUtils
 model
 modified
 MOUSE_DOWN, mxEvent
 MOUSE_MOVE, mxEvent
 MOUSE_UP, mxEvent
 mouseDown
 mouseDownCounter, mxConnectionHandler
 mouseListeners, mxGraph
 mouseMove
 mouseUp
 move, mxGuide
 MOVE
 MOVE_CELLS
 MOVE_END
 MOVE_START
 moveCell
 moveCells
 moveChildren, mxVertexHandler
 moveCircle, mxCircleLayout
 moveEnabled, mxGraphHandler
 moveHandler
 moveIconBack, mxConnectionHandler
 moveIconFront, mxConnectionHandler
 moveLabel
 moveNode, mxCompactTreeLayout
 moveOp
 moveParent
 movePreviewAway, mxConnectionHandler
 movePreviewToFront, mxVertexHandler
 movePropertiesDialog, mxEditor
 moveState, mxCellStatePreview
 moveTo
 moveToFront, mxVertexHandler
 moveTree, mxCompactTreeLayout
 multigraph, mxGraph
 multiplicities, mxGraph
 mxAbstractCanvas2D
 mxActor
 mxAnimation
 mxArrow
 mxArrowConnector
 mxAutoSaveManager
 mxCell
 mxCellAttributeChange
 mxCellCodec
 mxCellEditor
 mxCellHighlight
 mxCellMarker
 mxCellOverlay
 mxCellPath
 mxCellRenderer
 mxCellState
 mxCellStatePreview
 mxCellTracker
 mxChildChange
 mxChildChangeCodec
 mxCircleLayout
 mxClient
 mxClipboard
 mxCloud
 mxCodec
 mxCodecRegistry
 mxCollapseChange
 mxCompactTreeLayout
 mxCompositeLayout
 mxConnectionConstraint
 mxConnectionHandler
 mxConnector
 mxConstants
 mxConstraintHandler
 mxCoordinateAssignment
 mxCurrentRootChange
 mxCylinder
 mxDefaultKeyHandler
 mxDefaultKeyHandlerCodec
 mxDefaultPopupMenu
 mxDefaultPopupMenuCodec
 mxDefaultToolbar
 mxDefaultToolbarCodec
 mxDictionary
 mxDivResizer
 mxDoubleEllipse
 mxDragSource
 mxEdgeHandler
 mxEdgeLabelLayout
 mxEdgeSegmentHandler.js
 mxEdgeStyle
 mxEditor
 mxEditorCodec
 mxEffects
 mxElbowEdgeHandler
 mxEllipse
 mxEvent
 mxEventObject
 mxEventSource
 mxFastOrganicLayout
 mxForceIncludes, mxClient
 mxForm
 mxGenericChangeCodec
 mxGeometry
 mxGeometryChange
 mxGraph
 mxgraph=seen
 mxGraphAbstractHierarchyCell
 mxGraphCodec
 mxGraphHandler
 mxGraphHierarchyEdge
 mxGraphHierarchyModel
 mxGraphHierarchyNode
 mxGraphLayout
 mxGraphModel
 mxGraphSelectionModel
 mxGraphView
 mxGraphViewCodec
 mxGuide
 mxHandle
 mxHexagon
 mxHierarchicalLayout
 mxHierarchicalLayoutStage
 mxImage
 mxImageBundle
 mxImageExport
 mxImageShape
 mxKeyHandler
 mxLabel
 mxLayoutManager
 mxLine
 mxLoadResources, mxClient
 mxLoadStylesheets, mxClient
 mxLog
 mxMarker
 mxMedianHybridCrossingReduction
 mxMinimumCycleRemover
 mxModelCodec
 mxMorphing
 mxMouseEvent
 mxMultiplicity
 mxObjectCodec
 mxObjectIdentity
 mxOutline
 mxPanningHandler
 mxPanningManager
 mxParallelEdgeLayout
 mxPartitionLayout
 mxPerimeter
 mxPoint
 mxPolyline
 mxPopupMenu
 mxPopupMenuHandler
 mxPrintPreview
 mxRadialTreeLayout
 mxRectangle
 mxRectangleShape
 mxResourceExtension, mxClient
 mxResources
 mxRhombus
 mxRootChange
 mxRootChangeCodec
 mxRubberband
 mxSelectionCellsHandler
 mxSelectionChange
 mxShape
 mxStackLayout
 mxStencil
 mxStencilRegistry
 mxStyleChange
 mxStyleRegistry
 mxStylesheet
 mxStylesheetCodec
 mxSvgCanvas2D
 mxSwimlane
 mxSwimlaneLayout
 mxSwimlaneManager
 mxSwimlaneModel
 mxSwimlaneOrdering
 mxTemporaryCellStates
 mxTerminalChange
 mxTerminalChangeCodec
 mxText
 mxToolbar
 mxTooltipHandler
 mxTransient, mxCell
 mxTriangle
 mxUndoableEdit
 mxUndoManager
 mxUrlConverter
 mxUtils
 mxValueChange
 mxVertexHandler
 mxVisibleChange
 mxVmlCanvas2D
 mxWindow
 mxXmlCanvas2D
 mxXmlRequest
-
mxGraphModel.prototype.maintainEdgeParent
Specifies if edges should automatically be moved into the nearest common ancestor of their terminals.
mxCompactTreeLayout.prototype.maintainParentLocation
Specifies if the parent location should be maintained, so that the top, left corner stays the same before and after execution of the layout.
mxHierarchicalLayout.prototype.maintainParentLocation
Specifies if the parent location should be maintained, so that the top, left corner stays the same before and after execution of the layout.
mxSwimlaneLayout.prototype.maintainParentLocation
Specifies if the parent location should be maintained, so that the top, left corner stays the same before and after execution of the layout.
mxEditor.prototype.maintainSwimlanes
Specifies if the swimlanes should be kept at the same width or height depending on the setting of horizontalFlow.
makeDraggable: function(element,
graphF,
funct,
dragElement,
dx,
dy,
autoscroll,
scalePreview,
highlightDropTargets,
getDropTarget)
Configures the given DOM element to act as a drag source for the specified graph.
mxEdgeHandler.prototype.manageLabelHandle
Specifies if the label handle should be moved if it intersects with another handle.
mxVertexHandler.prototype.manageSizers
Specifies if sizers should be hidden and spaced if the vertex is small.
Stores the (key, value) pairs in this dictionary.
mxObjectCodec.prototype.mapping
Maps from from fieldnames to XML attribute names.
mxPrintPreview.prototype.marginBottom
The margin at the bottom of the page (number).
mxStackLayout.prototype.marginBottom
Top margin for the child area.
mxStackLayout.prototype.marginLeft
Top margin for the child area.
mxStackLayout.prototype.marginRight
Top margin for the child area.
mxPrintPreview.prototype.marginTop
The margin at the top of the page (number).
mxStackLayout.prototype.marginTop
Top margin for the child area.
Marks the markedState and fires a mark event.
mxCellMarker.prototype.mark = function()
Marks the markedState and fires a mark event.
Fires after a cell has been marked or unmarked.
MARK: 'mark'
Specifies the event name for mark.
mxCellMarker.prototype.markCell = function(cell,
color)
Marks the given cell using the given color, or validColor if no color is specified.
mxCellMarker.prototype.markedState
Holds the marked mxCellState.
mxConnectionHandler.prototype.marker
Holds the mxTerminalMarker used for finding source and target cells.
mxEdgeHandler.prototype.marker
Holds the mxTerminalMarker which is used for highlighting terminals.
markers: []
Maps from markers names to functions to paint the markers.
mxCompositeLayout.prototype.master
Reference to the mxGraphLayouts that handles moves.
mxSvgCanvas2D.prototype.matchHtmlAlignment
Specifies if plain text output should match the vertical HTML alignment.
mxMultiplicity.prototype.max
Defines the maximum number of connections for which this rule applies.
MAX_HOTSPOT_SIZE: 0
Defines the maximum size in pixels of the portion of the cell which is to be used as a connectable region.
mxGraphHandler.prototype.maxCells
Defines the maximum number of cells to paint subhandles for.
mxSwimlaneModel.prototype.maxChainDfs = function(parent,
root,
connectingEdge,
seen,
chainCount)
Performs a depth first search on the internal hierarchy model.
mxFastOrganicLayout.prototype.maxDistanceLimit
Maximal distance limit.
mxGraph.prototype.maxFitScale
Specifies the maximum scale to be applied in fit.
mxSelectionCellsHandler.prototype.maxHandlers
Defines the maximum number of handlers to paint individually.
mxCylinder.prototype.maxHeight
Defines the maximum height of the top and bottom part of the cylinder shape.
MAXIMIZE: 'maximize'
Specifies the event name for maximize.
Fires after the window is maximized.
mxWindow.prototype.maximizeImage
URL of the image to be used for the maximize icon in the titlebar.
mxGraph.prototype.maximumContainerSize
mxRectangle that specifies the maximum size of the container if resizeContainer is true.
mxGraph.prototype.maximumGraphBounds
mxRectangle that specifies the area in which all cells in the diagram should be placed.
mxCoordinateAssignment.prototype.maxIterations
The number of heuristic iterations to run.
mxFastOrganicLayout.prototype.maxIterations
Total number of iterations to run the layout though.
mxMedianHybridCrossingReduction.prototype.maxIterations
The maximum number of iterations to perform whilst reducing edge crossings.
mxGraphHandler.prototype.maxLivePreview
Maximum number of cells for which live preview should be used.
mxMedianHybridCrossingReduction.prototype.maxNoImprovementIterations
The total number of crossings found in the best configuration so far
mxGraphAbstractHierarchyCell.prototype.maxRank
The maximum rank this cell occupies.
mxGraphHierarchyModel.prototype.maxRank
Stores the largest rank number allocated
mxSwimlaneModel.prototype.maxRank
Stores the largest rank number allocated
mxCompactTreeLayout.prototype.maxRankHeight
An array of the maximum height of cells (relative to the layout direction) per rank
mxPanningHandler.prototype.maxScale
Specifies the maximum scale.
A utility class used to track cells whilst sorting occurs on the median values.
function MedianCellSorter()
Constructs a new median cell sorter.
mxCoordinateAssignment.prototype.medianPos = function(i,
model)
Performs one median positioning sweep in one direction
mxMedianHybridCrossingReduction.prototype.medianRank = function(rankValue,
downwardSweep)
Attempts to minimise the median placement of connected cells on this rank and one of the adjacent ranks
MedianCellSorter.prototype.medianValue
The weighted value of the cell stored.
mxMedianHybridCrossingReduction.prototype.medianValue = function(
   connectedCells,
   rankValue
)
Calculates the median rank order positioning for the specified cell using the connected cells on the specified rank.
mxCoordinateAssignment.prototype.medianXValue = function(connectedCells,
rankValue)
Calculates the median position of the connected cell on the specified rank
mxCompactTreeLayout.prototype.merge = function(p1,
p2)
mxGraphModel.prototype.mergeChildren = function(from,
to,
cloneAllEdges)
Merges the children of the given cell into the given target cell inside this model.
mxEdgeHandler.prototype.mergeRemoveEnabled
Specifies if removing bends by dropping them on other bends is enabled.
mxXmlRequest.prototype.method
Specifies the request method.
mxMultiplicity.prototype.min
Defines the minimum number of connections for which this rule applies.
MIN_HOTSPOT_SIZE: 8
Defines the minimum size in pixels of the portion of the cell which is to be used as a connectable region.
mxFastOrganicLayout.prototype.minDistanceLimit
Minimal distance limit.
mxFastOrganicLayout.prototype.minDistanceLimitSquared
Cached version of minDistanceLimit squared.
mxCompactTreeLayout.prototype.minEdgeJetty
The minimum distance for an edge jetty from a vertex.
mxCoordinateAssignment.prototype.minEdgeJetty
The minimum distance for an edge jetty from a vertex Default is 12.
mxGraph.prototype.minFitScale
Specifies the minimum scale to be applied in fit.
MINIMIZE: 'minimize'
Specifies the event name for minimize.
Fires after the window is minimized.
mxWindow.prototype.minimizeImage
URL of the image to be used for the minimize icon in the titlebar.
mxGraph.prototype.minimumContainerSize
mxRectangle that specifies the minimum size of the container if resizeContainer is true.
mxGraph.prototype.minimumGraphSize
mxRectangle that specifies the minimum size of the graph.
mxGraphHandler.prototype.minimumSize
Specifies the minimum number of pixels for the width and height of a selection border.
mxWindow.prototype.minimumSize
mxRectangle that specifies the minimum width and height of the window.
mxCoordinateAssignment.prototype.minNode = function(model)
Performs one median positioning sweep in both directions
mxGraph.prototype.minPageBreakDist
Specifies the minimum distance for page breaks to be visible.
mxCoordinateAssignment.prototype.minPath = function(graph,
model)
Straightens out chains of virtual nodes where possibleacade to those stored after this layout processing step has completed.
mxGraphAbstractHierarchyCell.prototype.minRank
The minimum rank this cell occupies.
mxCellEditor.prototype.minResize
Defines the minimum width and height to be used in resize.
mxOutline.prototype.minScale
Minimum scale to be used.
mxPanningHandler.prototype.minScale
Specifies the minimum scale.
mxSvgCanvas2D.prototype.minStrokeWidth
Minimum stroke width for output.
mxCellRenderer.prototype.minSvgStrokeWidth
Minimum stroke width for SVG output.
mxShape.prototype.minSvgStrokeWidth
Minimum stroke width for SVG output.
mod: function(n,
m)
Returns the remainder of division of n by m.
mxGraph.prototype.model
Holds the mxGraphModel that contains the cells to be displayed.
mxHierarchicalLayout.prototype.model
The internal mxGraphHierarchyModel formed of the layout.
mxSwimlaneLayout.prototype.model
The internal mxSwimlaneModel formed of the layout.
mxCellEditor.prototype.modified
Specifies if the label has been modified.
mxEditor.prototype.modified
True if the graph has been modified since it was last saved.
MOUSE_DOWN: 'mouseDown'
Specifies the event name for mouseDown.
MOUSE_MOVE: 'mouseMove'
Specifies the event name for mouseMove.
MOUSE_UP: 'mouseUp'
Specifies the event name for mouseUp.
mxCellTracker.prototype.mouseDown = function(sender,
me)
Ignores the event.
mxConnectionHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating a new connection.
mxDragSource.prototype.mouseDown = function(evt)
Returns the drop target for the given graph and coordinates.
mxEdgeHandler.prototype.mouseDown = function(sender,
me)
Handles the event by checking if a special element of the handler was clicked, in which case the index parameter is non-null.
mxGraphHandler.prototype.mouseDown = function(sender,
me)
Handles the event by selecing the given cell and creating a handle for it.
mxOutline.prototype.mouseDown = function(sender,
me)
Handles the event by starting a translation or zoom.
mxPanningHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating the panning.
mxPopupMenuHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating the panning.
mxRubberband.prototype.mouseDown = function(sender,
me)
Handles the event by initiating a rubberband selection.
mxSelectionCellsHandler.prototype.mouseDown = function(sender,
me)
Redirects the given event to the handlers.
mxTooltipHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating a rubberband selection.
mxVertexHandler.prototype.mouseDown = function(sender,
me)
Handles the event if a handle has been clicked.
mxConnectionHandler.prototype.mouseDownCounter
Counts the number of mouseDown events since the start.
mxGraph.prototype.mouseListeners
Holds the mouse event listeners.
mxCellTracker.prototype.mouseMove = function(sender,
me)
Handles the event by highlighting the cell under the mousepointer if it is over the hotspot region of the cell.
mxConnectionHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the preview edge or by highlighting a possible source or target terminal.
mxDragSource.prototype.mouseMove = function(evt)
Gets the graph for the given event using getGraphForEvent, updates the currentGraph, calling dragEnter and dragExit on the new and old graph, respectively, and invokes dragOver if currentGraph is not null.
mxEdgeHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the preview.
mxGraphHandler.prototype.mouseMove = function(sender,
me)
Handles the event by highlighting possible drop targets and updating the preview.
mxOutline.prototype.mouseMove = function(sender,
me)
Handles the event by previewing the viewrect in graph and updating the rectangle that represents the viewrect in the outline.
mxPanningHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the panning on the graph.
mxPopupMenuHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the panning on the graph.
mxRubberband.prototype.mouseMove = function(sender,
me)
Handles the event by updating therubberband selection.
mxSelectionCellsHandler.prototype.mouseMove = function(sender,
me)
Redirects the given event to the handlers.
mxTooltipHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the rubberband selection.
mxVertexHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the preview.
mxCellTracker.prototype.mouseUp = function(sender,
me)
Handles the event by reseting the highlight.
mxConnectionHandler.prototype.mouseUp = function(sender,
me)
Handles the event by inserting the new connection.
mxDragSource.prototype.mouseUp = function(evt)
Processes the mouse up event and invokes drop, dragExit and stopDrag as required.
mxEdgeHandler.prototype.mouseUp = function(sender,
me)
Handles the event to applying the previewed changes on the edge by using moveLabel, connect or changePoints.
mxGraphHandler.prototype.mouseUp = function(sender,
me)
Handles the event by applying the changes to the selection cells.
mxOutline.prototype.mouseUp = function(sender,
me)
Handles the event by applying the translation or zoom to graph.
mxPanningHandler.prototype.mouseUp = function(sender,
me)
Handles the event by setting the translation on the view or showing the popupmenu.
mxPopupMenuHandler.prototype.mouseUp = function(sender,
me)
Handles the event by setting the translation on the view or showing the popupmenu.
mxRubberband.prototype.mouseUp = function(sender,
me)
Handles the event by selecting the region of the rubberband using mxGraph.selectRegion.
mxSelectionCellsHandler.prototype.mouseUp = function(sender,
me)
Redirects the given event to the handlers.
mxTooltipHandler.prototype.mouseUp = function(sender,
me)
Handles the event by resetting the tooltip timer or hiding the existing tooltip.
mxVertexHandler.prototype.mouseUp = function(sender,
me)
Handles the event by applying the changes to the geometry.
mxGuide.prototype.move = function(bounds,
delta,
gridEnabled,
clone)
Moves the bounds by the given mxPoint and returnt the snapped point.
MOVE: 'move'
Specifies the event name for move.
Fires while the window is being moved.
MOVE_CELLS: 'moveCells'
Specifies the event name for moveCells.
Fires between begin- and endUpdate in moveCells.
MOVE_END: 'moveEnd'
Specifies the event name for moveEnd.
Fires after the window is moved.
MOVE_START: 'moveStart'
Specifies the event name for moveStart.
Fires before the window is moved.
mxCompositeLayout.prototype.moveCell = function(cell,
x,
y)
Implements mxGraphLayout.moveCell by calling move on master or the first layout in layouts.
mxGraphLayout.prototype.moveCell = function(cell,
x,
y)
Notified when a cell is being moved in a parent that has automatic layout to update the cell state (eg.
mxPartitionLayout.prototype.moveCell = function(cell,
x,
y)
Implements mxGraphLayout.moveCell.
mxStackLayout.prototype.moveCell = function(cell,
x,
y)
Implements mxGraphLayout.moveCell.
mxGraph.prototype.moveCells = function(cells,
dx,
dy,
clone,
target,
evt,
mapping)
Moves or clones the specified cells and moves the cells or clones by the given amount, adding them to the optional target cell.
mxGraphHandler.prototype.moveCells = function(cells,
dx,
dy,
clone,
target,
evt)
Moves the given cells by the specified amount.
mxVertexHandler.prototype.moveChildren = function(cell,
dx,
dy)
Moves the children of the given cell by the given vector.
mxCircleLayout.prototype.moveCircle
Boolean specifying if the circle should be moved to the top, left corner specified by x0 and y0.
mxGraphHandler.prototype.moveEnabled
Specifies if moving is enabled.
mxLayoutManager.prototype.moveHandler
Holds the function that handles the move event.
Holds the function that handles the move event.
mxConnectionHandler.prototype.moveIconBack
Specifies if icons should be moved to the back of the overlay pane.
mxConnectionHandler.prototype.moveIconFront
Specifies if icons should be displayed inside the graph container instead of the overlay pane.
mxEdgeHandler.prototype.moveLabel = function(edgeState,
x,
y)
Changes the coordinates for the label of the given edge.
mxVertexHandler.prototype.moveLabel = function(me)
Moves the label.
mxCompactTreeLayout.prototype.moveNode = function(node,
dx,
dy)
Moves the specified node and all of its children by the given amount.
mxAbstractCanvas2D.prototype.moveOp
Contains the string used for moving in paths.
mxVmlCanvas2D.prototype.moveOp
Contains the string used for moving in paths.
mxHierarchicalLayout.prototype.moveParent
Specifies if the parent should be moved if resizeParent is enabled.
mxSwimlaneLayout.prototype.moveParent
Specifies if the parent should be moved if resizeParent is enabled.
mxConnectionHandler.prototype.movePreviewAway
Switch to enable moving the preview away from the mousepointer.
mxVertexHandler.prototype.movePreviewToFront
Specifies if the live preview should be moved to the front.
mxEditor.prototype.movePropertiesDialog
Specifies if the properties dialog should be automatically moved near the cell it is displayed for, otherwise the dialog is not moved.
mxCellStatePreview.prototype.moveState = function(state,
dx,
dy,
add,
includeEdges)
mxAbstractCanvas2D.prototype.moveTo = function(x,
y)
Moves the current path the given coordinates.
mxXmlCanvas2D.prototype.moveTo = function(x,
y)
Moves the current path the given point.
mxVertexHandler.prototype.moveToFront = function()
Handles the event by applying the changes to the geometry.
mxCompactTreeLayout.prototype.moveTree
Specifies if the tree should be moved to the top, left corner if it is inside a top-level layer.
mxGraph.prototype.multigraph
Specifies if multiple edges in the same direction between the same pair of vertices are allowed.
mxGraph.prototype.multiplicities
An array of mxMultiplicities describing the allowed connections in a graph.
Base class for all canvases.
function mxAbstractCanvas2D()
Constructs a new abstract canvas.
Extends mxShape to implement an actor shape.
function mxActor(bounds,
fill,
stroke,
strokewidth)
Constructs a new actor shape.
Implements a basic animation in JavaScript.
function mxAnimation(delay)
Constructs an animation.
Extends mxShape to implement an arrow shape.
function mxArrow(points,
fill,
stroke,
strokewidth,
arrowWidth,
spacing,
endSize)
Constructs a new arrow shape.
Extends mxShape to implement an new rounded arrow shape with support for waypoints and double arrows.
function mxArrowConnector(points,
fill,
stroke,
strokewidth,
arrowWidth,
spacing,
endSize)
Constructs a new arrow shape.
Manager for automatically saving diagrams.
function mxAutoSaveManager(graph)
Constructs a new automatic layout for the given graph.
Cells are the elements of the graph model.
function mxCell(value,
geometry,
style)
Constructs a new cell to be used in a graph model.
Action to change the attribute of a cell’s user object.
function mxCellAttributeChange(cell,
attribute,
value)
Constructs a change of a attribute of the DOM node stored as the value of the given mxCell.
Codec for mxCells.
In-place editor for the graph.
function mxCellEditor(graph)
Constructs a new in-place editor for the specified graph.
A helper class to highlight cells.
function mxCellHighlight(graph,
highlightColor,
strokeWidth,
dashed)
Constructs a cell highlight.
A helper class to process mouse locations and highlight cells.
function mxCellMarker(graph,
validColor,
invalidColor,
hotspot)
Constructs a new cell marker.
Extends mxEventSource to implement a graph overlay, represented by an icon and a tooltip.
function mxCellOverlay(image,
tooltip,
align,
verticalAlign,
offset,
cursor)
Constructs a new overlay using the given image and tooltip.
Implements a mechanism for temporary cell Ids.
Renders cells into a document object model.
function mxCellRenderer()
arrow, rectangle, ellipse, rhombus, image, line, label, cylinder, swimlane, connector, actor and cloud.
Represents the current state of a cell in a given mxGraphView.
function mxCellState(view,
cell,
style)
Constructs a new object that represents the current state of the given cell in the specified view.
Implements a live preview for moving cells.
function mxCellStatePreview(graph)
Constructs a move preview for the given graph.
Event handler that highlights cells.
function mxCellTracker(graph,
color,
funct)
Constructs an event handler that highlights cells.
Action to add or remove a child in a model.
function mxChildChange(model,
parent,
child,
index)
Constructs a change of a child in the specified model.
Codec for mxChildChanges.
Extends mxGraphLayout to implement a circluar layout for a given radius.
function mxCircleLayout(graph,
radius)
Constructs a new circular layout for the specified radius.
Bootstrapping mechanism for the mxGraph thin client.
Singleton that implements a clipboard for graph cells.
Extends mxActor to implement a cloud shape.
function mxCloud(bounds,
fill,
stroke,
strokewidth)
Constructs a new cloud shape.
XML codec for JavaScript object graphs.
function mxCodec(document)
Constructs an XML encoder/decoder for the specified owner document.
Singleton class that acts as a global registry for codecs.
Action to change a cell’s collapsed state in a model.
function mxCollapseChange(model,
cell,
collapsed)
Constructs a change of a collapsed state in the specified model.
Extends mxGraphLayout to implement a compact tree (Moen) algorithm.
function mxCompactTreeLayout(graph,
horizontal,
invert)
Constructs a new compact tree layout for the specified graph and orientation.
Constructs a new fast organic layout for the specified graph.
Allows to compose multiple layouts into a single layout.
function mxCompositeLayout(graph,
layouts,
master)
Constructs a new layout using the given layouts.
Defines an object that contains the constraints about how to connect one side of an edge to its terminal.
function mxConnectionConstraint(point,
perimeter,
name,
dx,
dy)
Constructs a new connection constraint for the given point and boolean arguments.
Graph event handler that creates new connections.
function mxConnectionHandler(graph,
factoryMethod)
Constructs an event handler that connects vertices using the specified factory method to create the new edges.
Extends mxShape to implement a connector shape.
function mxConnector(points,
stroke,
strokewidth)
Constructs a new connector shape.
Defines various global constants.
Handles constraints on connection targets.
function mxConstraintHandler(graph)
Constructs an new constraint handler.
Sets the horizontal locations of node and edge dummy nodes on each layer.
function mxCoordinateAssignment(layout,
intraCellSpacing,
interRankCellSpacing,
orientation,
initialX,
parallelEdgeSpacing)
Creates a coordinate assignment.
Action to change the current root in a view.
function mxCurrentRootChange(view,
root)
Constructs a change of the current root in the given view.
Constructs a change of the current root in the given view.
Extends mxShape to implement an cylinder shape.
function mxCylinder(bounds,
fill,
stroke,
strokewidth)
Constructs a new cylinder shape.
Binds keycodes to actionnames in an editor.
function mxDefaultKeyHandler(editor)
Constructs a new default key handler for the mxEditor.graph in the given mxEditor.
Custom codec for configuring mxDefaultKeyHandlers.
Creates popupmenus for mouse events.
function mxDefaultPopupMenu(config)
Constructs a new popupmenu-factory based on given configuration.
Custom codec for configuring mxDefaultPopupMenus.
Toolbar for the editor.
function mxDefaultToolbar(container,
editor)
Constructs a new toolbar for the given container and editor.
Custom codec for configuring mxDefaultToolbars.
A wrapper class for an associative array with object keys.
Maintains the size of a div element in Internet Explorer.
function mxDivResizer(div,
container)
Constructs an object that maintains the size of a div element when the window is being resized.
Extends mxShape to implement a double ellipse shape.
function mxDoubleEllipse(bounds,
fill,
stroke,
strokewidth)
Constructs a new ellipse shape.
Wrapper to create a drag source from a DOM element so that the element can be dragged over a graph and dropped into the graph as a new cell.
function mxDragSource(element,
dropHandler)
Constructs a new drag source for the given element.
Graph event handler that reconnects edges and modifies control points and the edge label location.
function mxEdgeHandler(state)
Constructs an edge handler for the specified mxCellState.
Constructs an edge handler for the specified mxCellState.
Extends mxGraphLayout to implement an edge label layout.
function mxEdgeLabelLayout(graph,
radius)
Constructs a new edge label layout.
Provides various edge styles to be used as the values for mxConstants.STYLE_EDGE in a cell style.
Extends mxEventSource to implement an application wrapper for a graph that adds actions, I/O using mxCodec, auto-layout using mxLayoutManager, command history using undoManager, and standard dialogs and widgets, eg.
function mxEditor(config)
Constructs a new editor.
Codec for mxEditors.
Provides animation effects.
Graph event handler that reconnects edges and modifies control points and the edge label location.
Extends mxShape to implement an ellipse shape.
function mxEllipse(bounds,
fill,
stroke,
strokewidth)
Constructs a new ellipse shape.
Cross-browser DOM event support.
The mxEventObject is a wrapper for all properties of a single event.
function mxEventObject(name)
Constructs a new event object with the specified name.
Base class for objects that dispatch named events.
Constructs a new dictionary which allows object to be used as keys.
function mxEventSource(eventSource)
Constructs a new event source.
Extends mxGraphLayout to implement a fast organic layout algorithm.
Optional global config variable to force loading the JavaScript files in development mode.
A simple class for creating HTML forms.
function mxForm(className)
Creates a HTML table using the specified classname.
Codec for mxValueChanges, mxStyleChanges, mxGeometryChanges, mxCollapseChanges and mxVisibleChanges.
var mxGenericChangeCodec = function(obj,
variable)
Factory function that creates a mxObjectCodec for the specified change and fieldname.
Extends mxRectangle to represent the geometry of a cell.
function mxGeometry(x,
y,
width,
height)
Constructs a new object to describe the size and location of a vertex or the control points of an edge.
Action to change a cell’s geometry in a model.
function mxGeometryChange(model,
cell,
geometry)
Constructs a change of a geometry in the specified model.
Extends mxEventSource to implement a graph component for the browser.
function mxGraph(container,
model,
renderHint,
stylesheet)
Constructs a new mxGraph in the specified container.
Set when the editor is started.
An abstraction of an internal hierarchy node or edge
function mxGraphAbstractHierarchyCell()
Constructs a new hierarchical layout algorithm.
Codec for mxGraphs.
Graph event handler that handles selection.
function mxGraphHandler(graph)
Constructs an event handler that creates handles for the selection cells.
An abstraction of a hierarchical edge for the hierarchy layout
function mxGraphHierarchyEdge(edges)
Constructs a hierarchy edge
Internal model of a hierarchical graph.
function mxGraphHierarchyModel(layout,
vertices,
roots,
parent,
tightenToSource)
Creates an internal ordered graph model using the vertices passed in.
An abstraction of a hierarchical edge for the hierarchy layout
function mxGraphHierarchyNode(cell)
Constructs an internal node to represent the specified real graph cell
Base class for all layout algorithms in mxGraph.
function mxGraphLayout(graph)
Constructs a new layout using the given layouts.
Extends mxEventSource to implement a graph model.
function mxGraphModel(root)
Constructs a new graph model.
Implements the selection model for a graph.
function mxGraphSelectionModel(graph)
Constructs a new graph selection model for the given mxGraph.
Extends mxEventSource to implement a view for a graph.
function mxGraphView(graph)
Constructs a new view for the given mxGraph.
Custom encoder for mxGraphViews.
Implements the alignment of selection cells to other cells in the graph.
function mxGuide(graph,
states)
Constructs a new guide object.
Implements a single custom handle for vertices.
function mxHandle(state,
cursor,
image,
shape)
Constructs a new handle for the given state.
Implementation of the hexagon shape.
function mxHexagon()
Constructs a new hexagon shape.
A hierarchical layout algorithm.
function mxHierarchicalLayout(graph,
orientation,
deterministic)
Constructs a new hierarchical layout algorithm.
The specific layout interface for hierarchical layouts.
function mxHierarchicalLayoutStage()
Constructs a new hierarchical layout stage.
Encapsulates the URL, width and height of an image.
function mxImage(src,
width,
height)
Constructs a new image.
Maps from keys to base64 encoded images or file locations.
Creates a new image export instance to be used with an export canvas.
function mxImageExport()
Constructs a new image export.
Extends mxShape to implement an image shape.
function mxImageShape(bounds,
image,
fill,
stroke,
strokewidth)
Constructs a new image shape.
Event handler that listens to keystroke events.
function mxKeyHandler(graph,
target)
Constructs an event handler that executes functions bound to specific keystrokes.
Extends mxShape to implement an image shape with a label.
function mxLabel(bounds,
fill,
stroke,
strokewidth)
Constructs a new label shape.
function mxLayoutManager(graph)
Constructs a new automatic layout for the given graph.
Extends mxShape to implement a horizontal line shape.
function mxLine(bounds,
stroke,
strokewidth,
vertical)
Constructs a new line shape.
Optional global config variable to toggle loading of the two resource files in mxGraph and mxEditor.
Optional global config variable to toggle loading of the CSS files when the library is initialized.
A singleton class that implements a simple console.
A static class that implements all markers for VML and SVG using a registry.
Sets the horizontal locations of node and edge dummy nodes on each layer.
function mxMedianHybridCrossingReduction(layout)
Creates a coordinate assignment.
An implementation of the first stage of the Sugiyama layout.
function mxMinimumCycleRemover(layout)
Creates a cycle remover for the given internal model.
Codec for mxGraphModels.
Implements animation for morphing cells.
function mxMorphing(graph,
steps,
ease,
delay)
Constructs an animation.
Base class for all mouse events in mxGraph.
function mxMouseEvent(evt,
state)
Constructs a new event object for the given arguments.
Defines invalid connections along with the error messages that they produce.
function mxMultiplicity(source,
type,
attr,
value,
min,
max,
validNeighbors,
countError,
typeError,
validNeighborsAllowed)
Instantiate class mxMultiplicity in order to describe allowed connections in a graph.
Generic codec for JavaScript objects that implements a mapping between JavaScript objects and XML nodes that maps each field or element to an attribute or child node, and vice versa.
function mxObjectCodec(template,
exclude,
idrefs,
mapping)
Constructs a new codec for the specified template object.
Identity for JavaScript objects and functions.
Implements an outline (aka overview) for a graph.
function mxOutline(source,
container)
Constructs a new outline for the specified graph inside the given container.
Event handler that pans and creates popupmenus.
Constructs an event handler that creates a mxPopupMenu and pans the graph.
Implements a handler for panning.
Extends mxGraphLayout for arranging parallel edges.
function mxParallelEdgeLayout(graph)
Constructs a new parallel edge layout for the specified graph.
Extends mxGraphLayout for partitioning the parent cell vertically or horizontally by filling the complete area with the child cells.
function mxPartitionLayout(graph,
horizontal,
spacing,
border)
Constructs a new stack layout layout for the specified graph, spacing, orientation and offset.
Provides various perimeter functions to be used in a style as the value of mxConstants.STYLE_PERIMETER.
Implements a 2-dimensional vector with double precision coordinates.
function mxPoint(x,
y)
Constructs a new point for the optional x and y coordinates.
Extends mxShape to implement a polyline (a line with multiple points).
function mxPolyline(points,
stroke,
strokewidth)
Constructs a new polyline shape.
Basic popup menu.
Constructs a popupmenu.
Event handler that creates popupmenus.
function mxPopupMenuHandler(graph,
factoryMethod)
Constructs an event handler that creates a mxPopupMenu.
Implements printing of a diagram across multiple pages.
function mxPrintPreview(graph,
scale,
pageFormat,
border,
x0,
y0,
borderColor,
title,
pageSelector)
Constructs a new print preview for the given parameters.
Extends mxGraphLayout to implement a radial tree algorithm.
function mxRadialTreeLayout(graph)
Constructs a new radial tree layout for the specified graph
Extends mxPoint to implement a 2-dimensional rectangle with double precision coordinates.
function mxRectangle(x,
y,
width,
height)
Constructs a new rectangle for the optional parameters.
Extends mxShape to implement a rectangle shape.
function mxRectangleShape(bounds,
fill,
stroke,
strokewidth)
Constructs a new rectangle shape.
Optional global config variable to specify the extension of resource files.
Implements internationalization.
Extends mxShape to implement a rhombus (aka diamond) shape.
function mxRhombus(bounds,
fill,
stroke,
strokewidth)
Constructs a new rhombus shape.
Action to change the root in a model.
function mxRootChange(model,
root)
Constructs a change of the root in the specified model.
Codec for mxRootChanges.
Event handler that selects rectangular regions.
function mxRubberband(graph)
Constructs an event handler that selects rectangular regions in the graph using rubberband selection.
An event handler that manages cell handlers and invokes their mouse event processing functions.
Action to change the current root in a view.
Base class for all shapes.
function mxShape(stencil)
Constructs a new shape.
Extends mxGraphLayout to create a horizontal or vertical stack of the child vertices.
function mxStackLayout(graph,
horizontal,
spacing,
x0,
y0,
border)
Constructs a new stack layout layout for the specified graph, spacing, orientation and offset.
Implements a generic shape which is based on a XML node as a description.
function mxStencil(desc)
Constructs a new generic shape by setting desc to the given XML node and invoking parseDescription and parseConstraints.
A singleton class that provides a registry for stencils and the methods for painting those stencils onto a canvas or into a DOM.
Action to change a cell’s style in a model.
function mxStyleChange(model,
cell,
style)
Constructs a change of a style in the specified model.
Singleton class that acts as a global converter from string to object values in a style.
Defines the appearance of the cells in a graph.
function mxStylesheet()
Constructs a new stylesheet and assigns default styles.
Codec for mxStylesheets.
Extends mxAbstractCanvas2D to implement a canvas for SVG.
function mxSvgCanvas2D(root,
styleEnabled)
Constructs a new SVG canvas.
Extends mxShape to implement a swimlane shape.
function mxSwimlane(bounds,
fill,
stroke,
strokewidth)
Constructs a new swimlane shape.
A hierarchical layout algorithm.
function mxSwimlaneLayout(graph,
orientation,
deterministic)
Constructs a new hierarchical layout algorithm.
Manager for swimlanes and nested swimlanes that sets the size of newly added swimlanes to that of their siblings, and propagates changes to the size of a swimlane to its siblings, if siblings is true, and its ancestors, if bubbling is true.
function mxSwimlaneManager(graph,
horizontal,
addEnabled,
resizeEnabled)
Constructs a new swimlane manager for the given graph.
Internal model of a hierarchical graph.
function mxSwimlaneModel(layout,
vertices,
roots,
parent,
tightenToSource)
Creates an internal ordered graph model using the vertices passed in.
An implementation of the first stage of the Sugiyama layout.
function mxSwimlaneOrdering(layout)
Creates a cycle remover for the given internal model.
Creates a temporary set of cell states.
Action to change a terminal in a model.
function mxTerminalChange(model,
cell,
terminal,
source)
Constructs a change of a terminal in the specified model.
Codec for mxTerminalChanges.
Extends mxShape to implement a text shape.
function mxText(value,
bounds,
align,
valign,
color,
family,
size,
fontStyle,
spacing,
spacingTop,
spacingRight,
spacingBottom,
spacingLeft,
horizontal,
background,
border,
wrap,
clipped,
overflow,
labelPadding,
textDirection)
Constructs a new text shape.
Creates a toolbar inside a given DOM node.
function mxToolbar(container)
Constructs a toolbar in the specified container.
Graph event handler that displays tooltips.
function mxTooltipHandler(graph,
delay)
Constructs an event handler that displays tooltips with the specified delay (in milliseconds).
mxCell.prototype.mxTransient
List of members that should not be cloned inside clone.
Implementation of the triangle shape.
function mxTriangle()
Constructs a new triangle shape.
Implements a composite undoable edit.
function mxUndoableEdit(source,
significant)
Constructs a new undoable edit for the given source.
Implements a command history.
function mxUndoManager(size)
Constructs a new undo manager with the given history size.
Converts relative and absolute URLs to absolute URLs with protocol and domain.
A singleton class that provides cross-browser helper methods.
Action to change a user object in a model.
function mxValueChange(model,
cell,
value)
Constructs a change of a user object in the specified model.
Event handler for resizing cells.
function mxVertexHandler(state)
Constructs an event handler that allows to resize vertices and groups.
Action to change a cell’s visible state in a model.
function mxVisibleChange(model,
cell,
visible)
Constructs a change of a visible state in the specified model.
Implements a canvas to be used for rendering VML.
Basic window inside a document.
function mxWindow(title,
content,
x,
y,
width,
height,
minimizable,
movable,
replaceNode,
style)
Constructs a new window with the given dimension and title to display the specified content.
Base class for all canvases.
function mxXmlCanvas2D(root)
Constructs a new abstract canvas.
XML HTTP request wrapper.
function mxXmlRequest(url,
params,
method,
async,
username,
password)
Constructs an XML HTTP request.
+
mxGraphModel.prototype.maintainEdgeParent
Specifies if edges should automatically be moved into the nearest common ancestor of their terminals.
mxCompactTreeLayout.prototype.maintainParentLocation
Specifies if the parent location should be maintained, so that the top, left corner stays the same before and after execution of the layout.
mxHierarchicalLayout.prototype.maintainParentLocation
Specifies if the parent location should be maintained, so that the top, left corner stays the same before and after execution of the layout.
mxSwimlaneLayout.prototype.maintainParentLocation
Specifies if the parent location should be maintained, so that the top, left corner stays the same before and after execution of the layout.
mxEditor.prototype.maintainSwimlanes
Specifies if the swimlanes should be kept at the same width or height depending on the setting of horizontalFlow.
makeDraggable: function(element,
graphF,
funct,
dragElement,
dx,
dy,
autoscroll,
scalePreview,
highlightDropTargets,
getDropTarget)
Configures the given DOM element to act as a drag source for the specified graph.
mxEdgeHandler.prototype.manageLabelHandle
Specifies if the label handle should be moved if it intersects with another handle.
mxVertexHandler.prototype.manageSizers
Specifies if sizers should be hidden and spaced if the vertex is small.
Stores the (key, value) pairs in this dictionary.
mxObjectCodec.prototype.mapping
Maps from from fieldnames to XML attribute names.
mxPrintPreview.prototype.marginBottom
The margin at the bottom of the page (number).
mxStackLayout.prototype.marginBottom
Top margin for the child area.
mxStackLayout.prototype.marginLeft
Top margin for the child area.
mxStackLayout.prototype.marginRight
Top margin for the child area.
mxPrintPreview.prototype.marginTop
The margin at the top of the page (number).
mxStackLayout.prototype.marginTop
Top margin for the child area.
Marks the markedState and fires a mark event.
mxCellMarker.prototype.mark = function()
Marks the markedState and fires a mark event.
Fires after a cell has been marked or unmarked.
MARK: 'mark'
Specifies the event name for mark.
mxCellMarker.prototype.markCell = function(cell,
color)
Marks the given cell using the given color, or validColor if no color is specified.
mxCellMarker.prototype.markedState
Holds the marked mxCellState.
mxConnectionHandler.prototype.marker
Holds the mxTerminalMarker used for finding source and target cells.
mxEdgeHandler.prototype.marker
Holds the mxTerminalMarker which is used for highlighting terminals.
markers: []
Maps from markers names to functions to paint the markers.
mxCompositeLayout.prototype.master
Reference to the mxGraphLayouts that handles moves.
mxSvgCanvas2D.prototype.matchHtmlAlignment
Specifies if plain text output should match the vertical HTML alignment.
mxMultiplicity.prototype.max
Defines the maximum number of connections for which this rule applies.
MAX_HOTSPOT_SIZE: 0
Defines the maximum size in pixels of the portion of the cell which is to be used as a connectable region.
mxGraphHandler.prototype.maxCells
Defines the maximum number of cells to paint subhandles for.
mxSwimlaneModel.prototype.maxChainDfs = function(parent,
root,
connectingEdge,
seen,
chainCount)
Performs a depth first search on the internal hierarchy model.
mxFastOrganicLayout.prototype.maxDistanceLimit
Maximal distance limit.
mxGraph.prototype.maxFitScale
Specifies the maximum scale to be applied in fit.
mxSelectionCellsHandler.prototype.maxHandlers
Defines the maximum number of handlers to paint individually.
mxCylinder.prototype.maxHeight
Defines the maximum height of the top and bottom part of the cylinder shape.
MAXIMIZE: 'maximize'
Specifies the event name for maximize.
Fires after the window is maximized.
mxWindow.prototype.maximizeImage
URL of the image to be used for the maximize icon in the titlebar.
mxGraph.prototype.maximumContainerSize
mxRectangle that specifies the maximum size of the container if resizeContainer is true.
mxGraph.prototype.maximumGraphBounds
mxRectangle that specifies the area in which all cells in the diagram should be placed.
mxCoordinateAssignment.prototype.maxIterations
The number of heuristic iterations to run.
mxFastOrganicLayout.prototype.maxIterations
Total number of iterations to run the layout though.
mxMedianHybridCrossingReduction.prototype.maxIterations
The maximum number of iterations to perform whilst reducing edge crossings.
mxGraphHandler.prototype.maxLivePreview
Maximum number of cells for which live preview should be used.
mxMedianHybridCrossingReduction.prototype.maxNoImprovementIterations
The total number of crossings found in the best configuration so far
mxGraphAbstractHierarchyCell.prototype.maxRank
The maximum rank this cell occupies.
mxGraphHierarchyModel.prototype.maxRank
Stores the largest rank number allocated
mxSwimlaneModel.prototype.maxRank
Stores the largest rank number allocated
mxCompactTreeLayout.prototype.maxRankHeight
An array of the maximum height of cells (relative to the layout direction) per rank
mxPanningHandler.prototype.maxScale
Specifies the maximum scale.
A utility class used to track cells whilst sorting occurs on the median values.
function MedianCellSorter()
Constructs a new median cell sorter.
mxCoordinateAssignment.prototype.medianPos = function(i,
model)
Performs one median positioning sweep in one direction
mxMedianHybridCrossingReduction.prototype.medianRank = function(rankValue,
downwardSweep)
Attempts to minimise the median placement of connected cells on this rank and one of the adjacent ranks
MedianCellSorter.prototype.medianValue
The weighted value of the cell stored.
mxMedianHybridCrossingReduction.prototype.medianValue = function(
   connectedCells,
   rankValue
)
Calculates the median rank order positioning for the specified cell using the connected cells on the specified rank.
mxCoordinateAssignment.prototype.medianXValue = function(connectedCells,
rankValue)
Calculates the median position of the connected cell on the specified rank
mxCompactTreeLayout.prototype.merge = function(p1,
p2)
mxGraphModel.prototype.mergeChildren = function(from,
to,
cloneAllEdges)
Merges the children of the given cell into the given target cell inside this model.
mxEdgeHandler.prototype.mergeRemoveEnabled
Specifies if removing bends by dropping them on other bends is enabled.
mxXmlRequest.prototype.method
Specifies the request method.
mxMultiplicity.prototype.min
Defines the minimum number of connections for which this rule applies.
MIN_HOTSPOT_SIZE: 8
Defines the minimum size in pixels of the portion of the cell which is to be used as a connectable region.
mxFastOrganicLayout.prototype.minDistanceLimit
Minimal distance limit.
mxFastOrganicLayout.prototype.minDistanceLimitSquared
Cached version of minDistanceLimit squared.
mxCompactTreeLayout.prototype.minEdgeJetty
The minimum distance for an edge jetty from a vertex.
mxCoordinateAssignment.prototype.minEdgeJetty
The minimum distance for an edge jetty from a vertex Default is 12.
mxGraph.prototype.minFitScale
Specifies the minimum scale to be applied in fit.
MINIMIZE: 'minimize'
Specifies the event name for minimize.
Fires after the window is minimized.
mxWindow.prototype.minimizeImage
URL of the image to be used for the minimize icon in the titlebar.
mxGraph.prototype.minimumContainerSize
mxRectangle that specifies the minimum size of the container if resizeContainer is true.
mxGraph.prototype.minimumGraphSize
mxRectangle that specifies the minimum size of the graph.
mxGraphHandler.prototype.minimumSize
Specifies the minimum number of pixels for the width and height of a selection border.
mxWindow.prototype.minimumSize
mxRectangle that specifies the minimum width and height of the window.
mxCoordinateAssignment.prototype.minNode = function(model)
Performs one median positioning sweep in both directions
mxGraph.prototype.minPageBreakDist
Specifies the minimum distance for page breaks to be visible.
mxCoordinateAssignment.prototype.minPath = function(graph,
model)
Straightens out chains of virtual nodes where possibleacade to those stored after this layout processing step has completed.
mxGraphAbstractHierarchyCell.prototype.minRank
The minimum rank this cell occupies.
mxCellEditor.prototype.minResize
Defines the minimum width and height to be used in resize.
mxOutline.prototype.minScale
Minimum scale to be used.
mxPanningHandler.prototype.minScale
Specifies the minimum scale.
mxSvgCanvas2D.prototype.minStrokeWidth
Minimum stroke width for output.
mxCellRenderer.prototype.minSvgStrokeWidth
Minimum stroke width for SVG output.
mxShape.prototype.minSvgStrokeWidth
Minimum stroke width for SVG output.
mod: function(n,
m)
Returns the remainder of division of n by m.
mxGraph.prototype.model
Holds the mxGraphModel that contains the cells to be displayed.
mxHierarchicalLayout.prototype.model
The internal mxGraphHierarchyModel formed of the layout.
mxSwimlaneLayout.prototype.model
The internal mxSwimlaneModel formed of the layout.
mxCellEditor.prototype.modified
Specifies if the label has been modified.
mxEditor.prototype.modified
True if the graph has been modified since it was last saved.
MOUSE_DOWN: 'mouseDown'
Specifies the event name for mouseDown.
MOUSE_MOVE: 'mouseMove'
Specifies the event name for mouseMove.
MOUSE_UP: 'mouseUp'
Specifies the event name for mouseUp.
mxCellTracker.prototype.mouseDown = function(sender,
me)
Ignores the event.
mxConnectionHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating a new connection.
mxDragSource.prototype.mouseDown = function(evt)
Returns the drop target for the given graph and coordinates.
mxEdgeHandler.prototype.mouseDown = function(sender,
me)
Handles the event by checking if a special element of the handler was clicked, in which case the index parameter is non-null.
mxGraphHandler.prototype.mouseDown = function(sender,
me)
Handles the event by selecing the given cell and creating a handle for it.
mxOutline.prototype.mouseDown = function(sender,
me)
Handles the event by starting a translation or zoom.
mxPanningHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating the panning.
mxPopupMenuHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating the panning.
mxRubberband.prototype.mouseDown = function(sender,
me)
Handles the event by initiating a rubberband selection.
mxSelectionCellsHandler.prototype.mouseDown = function(sender,
me)
Redirects the given event to the handlers.
mxTooltipHandler.prototype.mouseDown = function(sender,
me)
Handles the event by initiating a rubberband selection.
mxVertexHandler.prototype.mouseDown = function(sender,
me)
Handles the event if a handle has been clicked.
mxConnectionHandler.prototype.mouseDownCounter
Counts the number of mouseDown events since the start.
mxGraph.prototype.mouseListeners
Holds the mouse event listeners.
mxCellTracker.prototype.mouseMove = function(sender,
me)
Handles the event by highlighting the cell under the mousepointer if it is over the hotspot region of the cell.
mxConnectionHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the preview edge or by highlighting a possible source or target terminal.
mxDragSource.prototype.mouseMove = function(evt)
Gets the graph for the given event using getGraphForEvent, updates the currentGraph, calling dragEnter and dragExit on the new and old graph, respectively, and invokes dragOver if currentGraph is not null.
mxEdgeHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the preview.
mxGraphHandler.prototype.mouseMove = function(sender,
me)
Handles the event by highlighting possible drop targets and updating the preview.
mxOutline.prototype.mouseMove = function(sender,
me)
Handles the event by previewing the viewrect in graph and updating the rectangle that represents the viewrect in the outline.
mxPanningHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the panning on the graph.
mxPopupMenuHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the panning on the graph.
mxRubberband.prototype.mouseMove = function(sender,
me)
Handles the event by updating therubberband selection.
mxSelectionCellsHandler.prototype.mouseMove = function(sender,
me)
Redirects the given event to the handlers.
mxTooltipHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the rubberband selection.
mxVertexHandler.prototype.mouseMove = function(sender,
me)
Handles the event by updating the preview.
mxCellTracker.prototype.mouseUp = function(sender,
me)
Handles the event by reseting the highlight.
mxConnectionHandler.prototype.mouseUp = function(sender,
me)
Handles the event by inserting the new connection.
mxDragSource.prototype.mouseUp = function(evt)
Processes the mouse up event and invokes drop, dragExit and stopDrag as required.
mxEdgeHandler.prototype.mouseUp = function(sender,
me)
Handles the event to applying the previewed changes on the edge by using moveLabel, connect or changePoints.
mxGraphHandler.prototype.mouseUp = function(sender,
me)
Handles the event by applying the changes to the selection cells.
mxOutline.prototype.mouseUp = function(sender,
me)
Handles the event by applying the translation or zoom to graph.
mxPanningHandler.prototype.mouseUp = function(sender,
me)
Handles the event by setting the translation on the view or showing the popupmenu.
mxPopupMenuHandler.prototype.mouseUp = function(sender,
me)
Handles the event by setting the translation on the view or showing the popupmenu.
mxRubberband.prototype.mouseUp = function(sender,
me)
Handles the event by selecting the region of the rubberband using mxGraph.selectRegion.
mxSelectionCellsHandler.prototype.mouseUp = function(sender,
me)
Redirects the given event to the handlers.
mxTooltipHandler.prototype.mouseUp = function(sender,
me)
Handles the event by resetting the tooltip timer or hiding the existing tooltip.
mxVertexHandler.prototype.mouseUp = function(sender,
me)
Handles the event by applying the changes to the geometry.
mxGuide.prototype.move = function(bounds,
delta,
gridEnabled,
clone)
Moves the bounds by the given mxPoint and returnt the snapped point.
MOVE: 'move'
Specifies the event name for move.
Fires while the window is being moved.
MOVE_CELLS: 'moveCells'
Specifies the event name for moveCells.
Fires between begin- and endUpdate in moveCells.
MOVE_END: 'moveEnd'
Specifies the event name for moveEnd.
Fires after the window is moved.
MOVE_START: 'moveStart'
Specifies the event name for moveStart.
Fires before the window is moved.
mxCompositeLayout.prototype.moveCell = function(cell,
x,
y)
Implements mxGraphLayout.moveCell by calling move on master or the first layout in layouts.
mxGraphLayout.prototype.moveCell = function(cell,
x,
y)
Notified when a cell is being moved in a parent that has automatic layout to update the cell state (eg.
mxPartitionLayout.prototype.moveCell = function(cell,
x,
y)
Implements mxGraphLayout.moveCell.
mxStackLayout.prototype.moveCell = function(cell,
x,
y)
Implements mxGraphLayout.moveCell.
mxGraph.prototype.moveCells = function(cells,
dx,
dy,
clone,
target,
evt,
mapping)
Moves or clones the specified cells and moves the cells or clones by the given amount, adding them to the optional target cell.
mxGraphHandler.prototype.moveCells = function(cells,
dx,
dy,
clone,
target,
evt)
Moves the given cells by the specified amount.
mxVertexHandler.prototype.moveChildren = function(cell,
dx,
dy)
Moves the children of the given cell by the given vector.
mxCircleLayout.prototype.moveCircle
Boolean specifying if the circle should be moved to the top, left corner specified by x0 and y0.
mxGraphHandler.prototype.moveEnabled
Specifies if moving is enabled.
mxLayoutManager.prototype.moveHandler
Holds the function that handles the move event.
Holds the function that handles the move event.
mxConnectionHandler.prototype.moveIconBack
Specifies if icons should be moved to the back of the overlay pane.
mxConnectionHandler.prototype.moveIconFront
Specifies if icons should be displayed inside the graph container instead of the overlay pane.
mxEdgeHandler.prototype.moveLabel = function(edgeState,
x,
y)
Changes the coordinates for the label of the given edge.
mxVertexHandler.prototype.moveLabel = function(me)
Moves the label.
mxCompactTreeLayout.prototype.moveNode = function(node,
dx,
dy)
Moves the specified node and all of its children by the given amount.
mxAbstractCanvas2D.prototype.moveOp
Contains the string used for moving in paths.
mxVmlCanvas2D.prototype.moveOp
Contains the string used for moving in paths.
mxHierarchicalLayout.prototype.moveParent
Specifies if the parent should be moved if resizeParent is enabled.
mxSwimlaneLayout.prototype.moveParent
Specifies if the parent should be moved if resizeParent is enabled.
mxConnectionHandler.prototype.movePreviewAway
Switch to enable moving the preview away from the mousepointer.
mxVertexHandler.prototype.movePreviewToFront
Specifies if the live preview should be moved to the front.
mxEditor.prototype.movePropertiesDialog
Specifies if the properties dialog should be automatically moved near the cell it is displayed for, otherwise the dialog is not moved.
mxCellStatePreview.prototype.moveState = function(state,
dx,
dy,
add,
includeEdges)
mxAbstractCanvas2D.prototype.moveTo = function(x,
y)
Moves the current path the given coordinates.
mxXmlCanvas2D.prototype.moveTo = function(x,
y)
Moves the current path the given point.
mxVertexHandler.prototype.moveToFront = function()
Handles the event by applying the changes to the geometry.
mxCompactTreeLayout.prototype.moveTree
Specifies if the tree should be moved to the top, left corner if it is inside a top-level layer.
mxGraph.prototype.multigraph
Specifies if multiple edges in the same direction between the same pair of vertices are allowed.
mxGraph.prototype.multiplicities
An array of mxMultiplicities describing the allowed connections in a graph.
Base class for all canvases.
function mxAbstractCanvas2D()
Constructs a new abstract canvas.
Extends mxShape to implement an actor shape.
function mxActor(bounds,
fill,
stroke,
strokewidth)
Constructs a new actor shape.
Implements a basic animation in JavaScript.
function mxAnimation(delay)
Constructs an animation.
Extends mxShape to implement an arrow shape.
function mxArrow(points,
fill,
stroke,
strokewidth,
arrowWidth,
spacing,
endSize)
Constructs a new arrow shape.
Extends mxShape to implement an new rounded arrow shape with support for waypoints and double arrows.
function mxArrowConnector(points,
fill,
stroke,
strokewidth,
arrowWidth,
spacing,
endSize)
Constructs a new arrow shape.
Manager for automatically saving diagrams.
function mxAutoSaveManager(graph)
Constructs a new automatic layout for the given graph.
Cells are the elements of the graph model.
function mxCell(value,
geometry,
style)
Constructs a new cell to be used in a graph model.
Action to change the attribute of a cell’s user object.
function mxCellAttributeChange(cell,
attribute,
value)
Constructs a change of a attribute of the DOM node stored as the value of the given mxCell.
Codec for mxCells.
In-place editor for the graph.
function mxCellEditor(graph)
Constructs a new in-place editor for the specified graph.
A helper class to highlight cells.
function mxCellHighlight(graph,
highlightColor,
strokeWidth,
dashed)
Constructs a cell highlight.
A helper class to process mouse locations and highlight cells.
function mxCellMarker(graph,
validColor,
invalidColor,
hotspot)
Constructs a new cell marker.
Extends mxEventSource to implement a graph overlay, represented by an icon and a tooltip.
function mxCellOverlay(image,
tooltip,
align,
verticalAlign,
offset,
cursor)
Constructs a new overlay using the given image and tooltip.
Implements a mechanism for temporary cell Ids.
Renders cells into a document object model.
function mxCellRenderer()
arrow, rectangle, ellipse, rhombus, image, line, label, cylinder, swimlane, connector, actor and cloud.
Represents the current state of a cell in a given mxGraphView.
function mxCellState(view,
cell,
style)
Constructs a new object that represents the current state of the given cell in the specified view.
Implements a live preview for moving cells.
function mxCellStatePreview(graph)
Constructs a move preview for the given graph.
Event handler that highlights cells.
function mxCellTracker(graph,
color,
funct)
Constructs an event handler that highlights cells.
Action to add or remove a child in a model.
function mxChildChange(model,
parent,
child,
index)
Constructs a change of a child in the specified model.
Codec for mxChildChanges.
Extends mxGraphLayout to implement a circluar layout for a given radius.
function mxCircleLayout(graph,
radius)
Constructs a new circular layout for the specified radius.
Bootstrapping mechanism for the mxGraph thin client.
Singleton that implements a clipboard for graph cells.
Extends mxActor to implement a cloud shape.
function mxCloud(bounds,
fill,
stroke,
strokewidth)
Constructs a new cloud shape.
XML codec for JavaScript object graphs.
function mxCodec(document)
Constructs an XML encoder/decoder for the specified owner document.
Singleton class that acts as a global registry for codecs.
Action to change a cell’s collapsed state in a model.
function mxCollapseChange(model,
cell,
collapsed)
Constructs a change of a collapsed state in the specified model.
Extends mxGraphLayout to implement a compact tree (Moen) algorithm.
function mxCompactTreeLayout(graph,
horizontal,
invert)
Constructs a new compact tree layout for the specified graph and orientation.
Constructs a new fast organic layout for the specified graph.
Allows to compose multiple layouts into a single layout.
function mxCompositeLayout(graph,
layouts,
master)
Constructs a new layout using the given layouts.
Defines an object that contains the constraints about how to connect one side of an edge to its terminal.
function mxConnectionConstraint(point,
perimeter,
name,
dx,
dy)
Constructs a new connection constraint for the given point and boolean arguments.
Graph event handler that creates new connections.
function mxConnectionHandler(graph,
factoryMethod)
Constructs an event handler that connects vertices using the specified factory method to create the new edges.
Extends mxShape to implement a connector shape.
function mxConnector(points,
stroke,
strokewidth)
Constructs a new connector shape.
Defines various global constants.
Handles constraints on connection targets.
function mxConstraintHandler(graph)
Constructs an new constraint handler.
Sets the horizontal locations of node and edge dummy nodes on each layer.
function mxCoordinateAssignment(layout,
intraCellSpacing,
interRankCellSpacing,
orientation,
initialX,
parallelEdgeSpacing)
Creates a coordinate assignment.
Action to change the current root in a view.
function mxCurrentRootChange(view,
root)
Constructs a change of the current root in the given view.
Constructs a change of the current root in the given view.
Extends mxShape to implement an cylinder shape.
function mxCylinder(bounds,
fill,
stroke,
strokewidth)
Constructs a new cylinder shape.
Binds keycodes to actionnames in an editor.
function mxDefaultKeyHandler(editor)
Constructs a new default key handler for the mxEditor.graph in the given mxEditor.
Custom codec for configuring mxDefaultKeyHandlers.
Creates popupmenus for mouse events.
function mxDefaultPopupMenu(config)
Constructs a new popupmenu-factory based on given configuration.
Custom codec for configuring mxDefaultPopupMenus.
Toolbar for the editor.
function mxDefaultToolbar(container,
editor)
Constructs a new toolbar for the given container and editor.
Custom codec for configuring mxDefaultToolbars.
A wrapper class for an associative array with object keys.
Maintains the size of a div element in Internet Explorer.
function mxDivResizer(div,
container)
Constructs an object that maintains the size of a div element when the window is being resized.
Extends mxShape to implement a double ellipse shape.
function mxDoubleEllipse(bounds,
fill,
stroke,
strokewidth)
Constructs a new ellipse shape.
Wrapper to create a drag source from a DOM element so that the element can be dragged over a graph and dropped into the graph as a new cell.
function mxDragSource(element,
dropHandler)
Constructs a new drag source for the given element.
Graph event handler that reconnects edges and modifies control points and the edge label location.
function mxEdgeHandler(state)
Constructs an edge handler for the specified mxCellState.
Constructs an edge handler for the specified mxCellState.
Extends mxGraphLayout to implement an edge label layout.
function mxEdgeLabelLayout(graph,
radius)
Constructs a new edge label layout.
Provides various edge styles to be used as the values for mxConstants.STYLE_EDGE in a cell style.
Extends mxEventSource to implement an application wrapper for a graph that adds actions, I/O using mxCodec, auto-layout using mxLayoutManager, command history using undoManager, and standard dialogs and widgets, eg.
function mxEditor(config)
Constructs a new editor.
Codec for mxEditors.
Provides animation effects.
Graph event handler that reconnects edges and modifies control points and the edge label location.
Extends mxShape to implement an ellipse shape.
function mxEllipse(bounds,
fill,
stroke,
strokewidth)
Constructs a new ellipse shape.
Cross-browser DOM event support.
The mxEventObject is a wrapper for all properties of a single event.
function mxEventObject(name)
Constructs a new event object with the specified name.
Base class for objects that dispatch named events.
Constructs a new dictionary which allows object to be used as keys.
function mxEventSource(eventSource)
Constructs a new event source.
Extends mxGraphLayout to implement a fast organic layout algorithm.
Optional global config variable to force loading the JavaScript files in development mode.
A simple class for creating HTML forms.
function mxForm(className)
Creates a HTML table using the specified classname.
Codec for mxValueChanges, mxStyleChanges, mxGeometryChanges, mxCollapseChanges and mxVisibleChanges.
let mxGenericChangeCodec = function(obj,
variable)
Factory function that creates a mxObjectCodec for the specified change and fieldname.
Extends mxRectangle to represent the geometry of a cell.
function mxGeometry(x,
y,
width,
height)
Constructs a new object to describe the size and location of a vertex or the control points of an edge.
Action to change a cell’s geometry in a model.
function mxGeometryChange(model,
cell,
geometry)
Constructs a change of a geometry in the specified model.
Extends mxEventSource to implement a graph component for the browser.
function mxGraph(container,
model,
renderHint,
stylesheet)
Constructs a new mxGraph in the specified container.
Set when the editor is started.
An abstraction of an internal hierarchy node or edge
function mxGraphAbstractHierarchyCell()
Constructs a new hierarchical layout algorithm.
Codec for mxGraphs.
Graph event handler that handles selection.
function mxGraphHandler(graph)
Constructs an event handler that creates handles for the selection cells.
An abstraction of a hierarchical edge for the hierarchy layout
function mxGraphHierarchyEdge(edges)
Constructs a hierarchy edge
Internal model of a hierarchical graph.
function mxGraphHierarchyModel(layout,
vertices,
roots,
parent,
tightenToSource)
Creates an internal ordered graph model using the vertices passed in.
An abstraction of a hierarchical edge for the hierarchy layout
function mxGraphHierarchyNode(cell)
Constructs an internal node to represent the specified real graph cell
Base class for all layout algorithms in mxGraph.
function mxGraphLayout(graph)
Constructs a new layout using the given layouts.
Extends mxEventSource to implement a graph model.
function mxGraphModel(root)
Constructs a new graph model.
Implements the selection model for a graph.
function mxGraphSelectionModel(graph)
Constructs a new graph selection model for the given mxGraph.
Extends mxEventSource to implement a view for a graph.
function mxGraphView(graph)
Constructs a new view for the given mxGraph.
Custom encoder for mxGraphViews.
Implements the alignment of selection cells to other cells in the graph.
function mxGuide(graph,
states)
Constructs a new guide object.
Implements a single custom handle for vertices.
function mxHandle(state,
cursor,
image,
shape)
Constructs a new handle for the given state.
Implementation of the hexagon shape.
function mxHexagon()
Constructs a new hexagon shape.
A hierarchical layout algorithm.
function mxHierarchicalLayout(graph,
orientation,
deterministic)
Constructs a new hierarchical layout algorithm.
The specific layout interface for hierarchical layouts.
function mxHierarchicalLayoutStage()
Constructs a new hierarchical layout stage.
Encapsulates the URL, width and height of an image.
function mxImage(src,
width,
height)
Constructs a new image.
Maps from keys to base64 encoded images or file locations.
Creates a new image export instance to be used with an export canvas.
function mxImageExport()
Constructs a new image export.
Extends mxShape to implement an image shape.
function mxImageShape(bounds,
image,
fill,
stroke,
strokewidth)
Constructs a new image shape.
Event handler that listens to keystroke events.
function mxKeyHandler(graph,
target)
Constructs an event handler that executes functions bound to specific keystrokes.
Extends mxShape to implement an image shape with a label.
function mxLabel(bounds,
fill,
stroke,
strokewidth)
Constructs a new label shape.
function mxLayoutManager(graph)
Constructs a new automatic layout for the given graph.
Extends mxShape to implement a horizontal line shape.
function mxLine(bounds,
stroke,
strokewidth,
vertical)
Constructs a new line shape.
Optional global config variable to toggle loading of the two resource files in mxGraph and mxEditor.
Optional global config variable to toggle loading of the CSS files when the library is initialized.
A singleton class that implements a simple console.
A static class that implements all markers for VML and SVG using a registry.
Sets the horizontal locations of node and edge dummy nodes on each layer.
function mxMedianHybridCrossingReduction(layout)
Creates a coordinate assignment.
An implementation of the first stage of the Sugiyama layout.
function mxMinimumCycleRemover(layout)
Creates a cycle remover for the given internal model.
Codec for mxGraphModels.
Implements animation for morphing cells.
function mxMorphing(graph,
steps,
ease,
delay)
Constructs an animation.
Base class for all mouse events in mxGraph.
function mxMouseEvent(evt,
state)
Constructs a new event object for the given arguments.
Defines invalid connections along with the error messages that they produce.
function mxMultiplicity(source,
type,
attr,
value,
min,
max,
validNeighbors,
countError,
typeError,
validNeighborsAllowed)
Instantiate class mxMultiplicity in order to describe allowed connections in a graph.
Generic codec for JavaScript objects that implements a mapping between JavaScript objects and XML nodes that maps each field or element to an attribute or child node, and vice versa.
function mxObjectCodec(template,
exclude,
idrefs,
mapping)
Constructs a new codec for the specified template object.
Identity for JavaScript objects and functions.
Implements an outline (aka overview) for a graph.
function mxOutline(source,
container)
Constructs a new outline for the specified graph inside the given container.
Event handler that pans and creates popupmenus.
Constructs an event handler that creates a mxPopupMenu and pans the graph.
Implements a handler for panning.
Extends mxGraphLayout for arranging parallel edges.
function mxParallelEdgeLayout(graph)
Constructs a new parallel edge layout for the specified graph.
Extends mxGraphLayout for partitioning the parent cell vertically or horizontally by filling the complete area with the child cells.
function mxPartitionLayout(graph,
horizontal,
spacing,
border)
Constructs a new stack layout layout for the specified graph, spacing, orientation and offset.
Provides various perimeter functions to be used in a style as the value of mxConstants.STYLE_PERIMETER.
Implements a 2-dimensional vector with double precision coordinates.
function mxPoint(x,
y)
Constructs a new point for the optional x and y coordinates.
Extends mxShape to implement a polyline (a line with multiple points).
function mxPolyline(points,
stroke,
strokewidth)
Constructs a new polyline shape.
Basic popup menu.
Constructs a popupmenu.
Event handler that creates popupmenus.
function mxPopupMenuHandler(graph,
factoryMethod)
Constructs an event handler that creates a mxPopupMenu.
Implements printing of a diagram across multiple pages.
function mxPrintPreview(graph,
scale,
pageFormat,
border,
x0,
y0,
borderColor,
title,
pageSelector)
Constructs a new print preview for the given parameters.
Extends mxGraphLayout to implement a radial tree algorithm.
function mxRadialTreeLayout(graph)
Constructs a new radial tree layout for the specified graph
Extends mxPoint to implement a 2-dimensional rectangle with double precision coordinates.
function mxRectangle(x,
y,
width,
height)
Constructs a new rectangle for the optional parameters.
Extends mxShape to implement a rectangle shape.
function mxRectangleShape(bounds,
fill,
stroke,
strokewidth)
Constructs a new rectangle shape.
Optional global config variable to specify the extension of resource files.
Implements internationalization.
Extends mxShape to implement a rhombus (aka diamond) shape.
function mxRhombus(bounds,
fill,
stroke,
strokewidth)
Constructs a new rhombus shape.
Action to change the root in a model.
function mxRootChange(model,
root)
Constructs a change of the root in the specified model.
Codec for mxRootChanges.
Event handler that selects rectangular regions.
function mxRubberband(graph)
Constructs an event handler that selects rectangular regions in the graph using rubberband selection.
An event handler that manages cell handlers and invokes their mouse event processing functions.
Action to change the current root in a view.
Base class for all shapes.
function mxShape(stencil)
Constructs a new shape.
Extends mxGraphLayout to create a horizontal or vertical stack of the child vertices.
function mxStackLayout(graph,
horizontal,
spacing,
x0,
y0,
border)
Constructs a new stack layout layout for the specified graph, spacing, orientation and offset.
Implements a generic shape which is based on a XML node as a description.
function mxStencil(desc)
Constructs a new generic shape by setting desc to the given XML node and invoking parseDescription and parseConstraints.
A singleton class that provides a registry for stencils and the methods for painting those stencils onto a canvas or into a DOM.
Action to change a cell’s style in a model.
function mxStyleChange(model,
cell,
style)
Constructs a change of a style in the specified model.
Singleton class that acts as a global converter from string to object values in a style.
Defines the appearance of the cells in a graph.
function mxStylesheet()
Constructs a new stylesheet and assigns default styles.
Codec for mxStylesheets.
Extends mxAbstractCanvas2D to implement a canvas for SVG.
function mxSvgCanvas2D(root,
styleEnabled)
Constructs a new SVG canvas.
Extends mxShape to implement a swimlane shape.
function mxSwimlane(bounds,
fill,
stroke,
strokewidth)
Constructs a new swimlane shape.
A hierarchical layout algorithm.
function mxSwimlaneLayout(graph,
orientation,
deterministic)
Constructs a new hierarchical layout algorithm.
Manager for swimlanes and nested swimlanes that sets the size of newly added swimlanes to that of their siblings, and propagates changes to the size of a swimlane to its siblings, if siblings is true, and its ancestors, if bubbling is true.
function mxSwimlaneManager(graph,
horizontal,
addEnabled,
resizeEnabled)
Constructs a new swimlane manager for the given graph.
Internal model of a hierarchical graph.
function mxSwimlaneModel(layout,
vertices,
roots,
parent,
tightenToSource)
Creates an internal ordered graph model using the vertices passed in.
An implementation of the first stage of the Sugiyama layout.
function mxSwimlaneOrdering(layout)
Creates a cycle remover for the given internal model.
Creates a temporary set of cell states.
Action to change a terminal in a model.
function mxTerminalChange(model,
cell,
terminal,
source)
Constructs a change of a terminal in the specified model.
Codec for mxTerminalChanges.
Extends mxShape to implement a text shape.
function mxText(value,
bounds,
align,
valign,
color,
family,
size,
fontStyle,
spacing,
spacingTop,
spacingRight,
spacingBottom,
spacingLeft,
horizontal,
background,
border,
wrap,
clipped,
overflow,
labelPadding,
textDirection)
Constructs a new text shape.
Creates a toolbar inside a given DOM node.
function mxToolbar(container)
Constructs a toolbar in the specified container.
Graph event handler that displays tooltips.
function mxTooltipHandler(graph,
delay)
Constructs an event handler that displays tooltips with the specified delay (in milliseconds).
mxCell.prototype.mxTransient
List of members that should not be cloned inside clone.
Implementation of the triangle shape.
function mxTriangle()
Constructs a new triangle shape.
Implements a composite undoable edit.
function mxUndoableEdit(source,
significant)
Constructs a new undoable edit for the given source.
Implements a command history.
function mxUndoManager(size)
Constructs a new undo manager with the given history size.
Converts relative and absolute URLs to absolute URLs with protocol and domain.
A singleton class that provides cross-browser helper methods.
Action to change a user object in a model.
function mxValueChange(model,
cell,
value)
Constructs a change of a user object in the specified model.
Event handler for resizing cells.
function mxVertexHandler(state)
Constructs an event handler that allows to resize vertices and groups.
Action to change a cell’s visible state in a model.
function mxVisibleChange(model,
cell,
visible)
Constructs a change of a visible state in the specified model.
Implements a canvas to be used for rendering VML.
Basic window inside a document.
function mxWindow(title,
content,
x,
y,
width,
height,
minimizable,
movable,
replaceNode,
style)
Constructs a new window with the given dimension and title to display the specified content.
Base class for all canvases.
function mxXmlCanvas2D(root)
Constructs a new abstract canvas.
XML HTTP request wrapper.
function mxXmlRequest(url,
params,
method,
async,
username,
password)
Constructs an XML HTTP request.
@@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General13.html b/docs/js-api/index/General13.html index 7cc9ab561..bfe0b778c 100644 --- a/docs/js-api/index/General13.html +++ b/docs/js-api/index/General13.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General14.html b/docs/js-api/index/General14.html index 21a15874a..11e8085d8 100644 --- a/docs/js-api/index/General14.html +++ b/docs/js-api/index/General14.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General15.html b/docs/js-api/index/General15.html index 1d821107c..75072b353 100644 --- a/docs/js-api/index/General15.html +++ b/docs/js-api/index/General15.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General16.html b/docs/js-api/index/General16.html index 3e28fde7b..43c8da673 100644 --- a/docs/js-api/index/General16.html +++ b/docs/js-api/index/General16.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General17.html b/docs/js-api/index/General17.html index 32fd31a0e..65c961ba3 100644 --- a/docs/js-api/index/General17.html +++ b/docs/js-api/index/General17.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General18.html b/docs/js-api/index/General18.html index af197947e..8b8c94e92 100644 --- a/docs/js-api/index/General18.html +++ b/docs/js-api/index/General18.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General19.html b/docs/js-api/index/General19.html index d0119598c..60ed2a278 100644 --- a/docs/js-api/index/General19.html +++ b/docs/js-api/index/General19.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General2.html b/docs/js-api/index/General2.html index 7f6004a81..c7a1ca96a 100644 --- a/docs/js-api/index/General2.html +++ b/docs/js-api/index/General2.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General20.html b/docs/js-api/index/General20.html index c953e7ff7..67241df98 100644 --- a/docs/js-api/index/General20.html +++ b/docs/js-api/index/General20.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General21.html b/docs/js-api/index/General21.html index bd834369c..4b3b43e4a 100644 --- a/docs/js-api/index/General21.html +++ b/docs/js-api/index/General21.html @@ -34,7 +34,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General3.html b/docs/js-api/index/General3.html index 7bd2c9966..64997be1d 100644 --- a/docs/js-api/index/General3.html +++ b/docs/js-api/index/General3.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General4.html b/docs/js-api/index/General4.html index e2801c61c..c36eaa2c5 100644 --- a/docs/js-api/index/General4.html +++ b/docs/js-api/index/General4.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General5.html b/docs/js-api/index/General5.html index e4db38f9d..fe9fb8ffc 100644 --- a/docs/js-api/index/General5.html +++ b/docs/js-api/index/General5.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General6.html b/docs/js-api/index/General6.html index 83f5b5737..0632ab233 100644 --- a/docs/js-api/index/General6.html +++ b/docs/js-api/index/General6.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General7.html b/docs/js-api/index/General7.html index f22fcedf5..33f259593 100644 --- a/docs/js-api/index/General7.html +++ b/docs/js-api/index/General7.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General8.html b/docs/js-api/index/General8.html index 33838235b..d72686776 100644 --- a/docs/js-api/index/General8.html +++ b/docs/js-api/index/General8.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/General9.html b/docs/js-api/index/General9.html index 64a004f79..991859464 100644 --- a/docs/js-api/index/General9.html +++ b/docs/js-api/index/General9.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables.html b/docs/js-api/index/Variables.html index 9f2c0d7b9..70ec903ac 100644 --- a/docs/js-api/index/Variables.html +++ b/docs/js-api/index/Variables.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables10.html b/docs/js-api/index/Variables10.html index ecf417e8a..bab57495e 100644 --- a/docs/js-api/index/Variables10.html +++ b/docs/js-api/index/Variables10.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables11.html b/docs/js-api/index/Variables11.html index 7106a2733..415a205ad 100644 --- a/docs/js-api/index/Variables11.html +++ b/docs/js-api/index/Variables11.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables12.html b/docs/js-api/index/Variables12.html index 97cf83fbd..d8cd1f717 100644 --- a/docs/js-api/index/Variables12.html +++ b/docs/js-api/index/Variables12.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables13.html b/docs/js-api/index/Variables13.html index 3ef9eaf17..443879236 100644 --- a/docs/js-api/index/Variables13.html +++ b/docs/js-api/index/Variables13.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables14.html b/docs/js-api/index/Variables14.html index 5d1435d61..44df92aa2 100644 --- a/docs/js-api/index/Variables14.html +++ b/docs/js-api/index/Variables14.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables15.html b/docs/js-api/index/Variables15.html index a448a06b6..89ed47774 100644 --- a/docs/js-api/index/Variables15.html +++ b/docs/js-api/index/Variables15.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables16.html b/docs/js-api/index/Variables16.html index 89169bbff..cf7624441 100644 --- a/docs/js-api/index/Variables16.html +++ b/docs/js-api/index/Variables16.html @@ -30,7 +30,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables17.html b/docs/js-api/index/Variables17.html index a54afc450..55565482b 100644 --- a/docs/js-api/index/Variables17.html +++ b/docs/js-api/index/Variables17.html @@ -30,7 +30,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables2.html b/docs/js-api/index/Variables2.html index 0a7f707a8..98dd11bae 100644 --- a/docs/js-api/index/Variables2.html +++ b/docs/js-api/index/Variables2.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables3.html b/docs/js-api/index/Variables3.html index b04649370..ff58eff49 100644 --- a/docs/js-api/index/Variables3.html +++ b/docs/js-api/index/Variables3.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables4.html b/docs/js-api/index/Variables4.html index 5fcab153d..9d7cfaebd 100644 --- a/docs/js-api/index/Variables4.html +++ b/docs/js-api/index/Variables4.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables5.html b/docs/js-api/index/Variables5.html index 4b9732664..bc7fc3491 100644 --- a/docs/js-api/index/Variables5.html +++ b/docs/js-api/index/Variables5.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables6.html b/docs/js-api/index/Variables6.html index 7ddf6aae6..c20d5865a 100644 --- a/docs/js-api/index/Variables6.html +++ b/docs/js-api/index/Variables6.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables7.html b/docs/js-api/index/Variables7.html index 172f0e0b6..4a9fba594 100644 --- a/docs/js-api/index/Variables7.html +++ b/docs/js-api/index/Variables7.html @@ -22,7 +22,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables8.html b/docs/js-api/index/Variables8.html index ed874ae0b..affd262b1 100644 --- a/docs/js-api/index/Variables8.html +++ b/docs/js-api/index/Variables8.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/index/Variables9.html b/docs/js-api/index/Variables9.html index cade04461..7e4b76a9d 100644 --- a/docs/js-api/index/Variables9.html +++ b/docs/js-api/index/Variables9.html @@ -26,7 +26,7 @@ if (browserType) {document.write("
");if (browserV diff --git a/docs/js-api/javascript/main.js b/docs/js-api/javascript/main.js index 3f42acde6..9e8b13173 100644 --- a/docs/js-api/javascript/main.js +++ b/docs/js-api/javascript/main.js @@ -1,4 +1,4 @@ -// This file is part of Natural Docs, which is Copyright © 2003-2010 Greg Valure +// This file is part of Natural Docs, which is Copyright � 2003-2010 Greg Valure // Natural Docs is licensed under version 3 of the GNU Affero General Public License (AGPL) // Refer to License.txt for the complete details @@ -72,7 +72,7 @@ else if (agt.indexOf("gecko") != -1) function GetXPosition(item) { - var position = 0; + let position = 0; if (item.offsetWidth != null) { @@ -89,7 +89,7 @@ function GetXPosition(item) function GetYPosition(item) { - var position = 0; + let position = 0; if (item.offsetWidth != null) { @@ -131,7 +131,7 @@ function ToggleMenu(id) if (!window.document.getElementById) { return; }; - var display = window.document.getElementById(id).style.display; + let display = window.document.getElementById(id).style.display; if (display == "none") { display = "block"; } @@ -146,7 +146,7 @@ function HideAllBut(ids, max) if (document.getElementById) { ids.sort( function(a,b) { return a - b; } ); - var number = 1; + let number = 1; while (number < max) { @@ -168,17 +168,17 @@ function HideAllBut(ids, max) // ____________________________________________________________________________ -var tooltipTimer = 0; +let tooltipTimer = 0; function ShowTip(event, tooltipID, linkID) { if (tooltipTimer) { clearTimeout(tooltipTimer); }; - var docX = event.clientX + window.pageXOffset; - var docY = event.clientY + window.pageYOffset; + let docX = event.clientX + window.pageXOffset; + let docY = event.clientY + window.pageYOffset; - var showCommand = "ReallyShowTip('" + tooltipID + "', '" + linkID + "', " + docX + ", " + docY + ")"; + let showCommand = "ReallyShowTip('" + tooltipID + "', '" + linkID + "', " + docX + ", " + docY + ")"; tooltipTimer = setTimeout(showCommand, 1000); } @@ -203,8 +203,8 @@ function ReallyShowTip(tooltipID, linkID, docX, docY) */ if (tooltip) { - var left = GetXPosition(link); - var top = GetYPosition(link); + let left = GetXPosition(link); + let top = GetYPosition(link); top += link.offsetHeight; @@ -226,8 +226,8 @@ function ReallyShowTip(tooltipID, linkID, docX, docY) if (tooltip.offsetWidth != null) { - var width = tooltip.offsetWidth; - var docWidth = document.body.clientWidth; + let width = tooltip.offsetWidth; + let docWidth = document.body.clientWidth; if (left + width > docWidth) { left = docWidth - width - 1; } @@ -271,7 +271,7 @@ function NDOnLoad() { if (browserVer == "IE6") { - var scrollboxes = document.getElementsByTagName('blockquote'); + let scrollboxes = document.getElementsByTagName('blockquote'); if (scrollboxes.item(0)) { @@ -282,7 +282,7 @@ function NDOnLoad() }; -var resizeTimer = 0; +let resizeTimer = 0; function NDOnResize() { @@ -295,7 +295,7 @@ function NDOnResize() function NDDoResize() { - var scrollboxes = document.getElementsByTagName('blockquote'); + let scrollboxes = document.getElementsByTagName('blockquote'); var i; var item; @@ -459,7 +459,7 @@ function SearchPanel(name, mode, resultsPath) this.keyTimeout = 0; }; - var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); + let searchValue = this.DOMSearchField().value.replace(/ +/g, ""); if (searchValue != this.lastSearchValue) { @@ -493,7 +493,7 @@ function SearchPanel(name, mode, resultsPath) */ this.OnSearchTypeChange = function() { - var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); + let searchValue = this.DOMSearchField().value.replace(/ +/g, ""); if (searchValue != "") { @@ -526,10 +526,10 @@ function SearchPanel(name, mode, resultsPath) { this.keyTimeout = 0; - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - var searchTopic = this.DOMSearchType().value; + let searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + let searchTopic = this.DOMSearchType().value; - var pageExtension = searchValue.substr(0,1); + let pageExtension = searchValue.substr(0,1); if (pageExtension.match(/^[a-z]/i)) { pageExtension = pageExtension.toUpperCase(); } @@ -591,14 +591,14 @@ function SearchPanel(name, mode, resultsPath) }; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + let domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); if (this.mode == "HTML" && domPopupSearchResultsWindow.style.display != "block") { - var domSearchType = this.DOMSearchType(); + let domSearchType = this.DOMSearchType(); - var left = GetXPosition(domSearchType); - var top = GetYPosition(domSearchType) + domSearchType.offsetHeight; + let left = GetXPosition(domSearchType); + let top = GetYPosition(domSearchType) + domSearchType.offsetHeight; MoveToPosition(domPopupSearchResultsWindow, left, top); domPopupSearchResultsWindow.style.display = 'block'; @@ -640,7 +640,7 @@ function SearchPanel(name, mode, resultsPath) this.DOMSearchPanel().className = 'MSearchPanelActive'; - var searchField = this.DOMSearchField(); + let searchField = this.DOMSearchField(); if (searchField.value == 'Search') { searchField.value = ""; } @@ -713,9 +713,9 @@ function SearchResults(name, mode) if (this.mode == "FramedHTML") { return; }; - var parentElement = document.getElementById(id); + let parentElement = document.getElementById(id); - var element = parentElement.firstChild; + let element = parentElement.firstChild; while (element && element != parentElement) { @@ -801,17 +801,17 @@ function SearchResults(name, mode) search = search.replace(/[^a-z0-9\_]i/gi, "_zzz"); }; - var resultRows = document.getElementsByTagName("div"); - var matches = 0; + let resultRows = document.getElementsByTagName("div"); + let matches = 0; - var i = 0; + let i = 0; while (i < resultRows.length) { - var row = resultRows.item(i); + let row = resultRows.item(i); if (row.className == "SRResult") { - var rowMatchName = row.id.toLowerCase(); + let rowMatchName = row.id.toLowerCase(); rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); if (search.length <= rowMatchName.length && rowMatchName.substr(0, search.length) == search) diff --git a/docs/js-api/javascript/prettify.js b/docs/js-api/javascript/prettify.js index cf9da1c3d..a5bd8c94d 100644 --- a/docs/js-api/javascript/prettify.js +++ b/docs/js-api/javascript/prettify.js @@ -103,7 +103,7 @@ window['PR_normalizedHtml'] /** browser detection. @extern @returns false if not IE, otherwise the major version. */ window['_pr_isIE6'] = () => { - var ieVersion = navigator && navigator.userAgent && + let ieVersion = navigator && navigator.userAgent && navigator.userAgent.match(/\bMSIE ([678])\./); ieVersion = ieVersion ? +ieVersion[1] : false; window['_pr_isIE6'] = () => { return ieVersion; }; @@ -113,78 +113,78 @@ window['_pr_isIE6'] = () => { (function () { // Keyword lists for various languages. - var FLOW_CONTROL_KEYWORDS = + let FLOW_CONTROL_KEYWORDS = "break continue do else for if return while "; - var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " + + let C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " + "double enum extern float goto int long register short signed sizeof " + "static struct switch typedef union unsigned void volatile "; - var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " + + let COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " + "new operator private protected public this throw true try typeof "; - var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " + + let CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " + "concept concept_map const_cast constexpr decltype " + "dynamic_cast explicit export friend inline late_check " + "mutable namespace nullptr reinterpret_cast static_assert static_cast " + "template typeid typename using virtual wchar_t where "; - var JAVA_KEYWORDS = COMMON_KEYWORDS + + let JAVA_KEYWORDS = COMMON_KEYWORDS + "abstract boolean byte extends final finally implements import " + "instanceof null native package strictfp super synchronized throws " + "transient "; - var CSHARP_KEYWORDS = JAVA_KEYWORDS + + let CSHARP_KEYWORDS = JAVA_KEYWORDS + "as base by checked decimal delegate descending event " + "fixed foreach from group implicit in interface internal into is lock " + "object out override orderby params partial readonly ref sbyte sealed " + "stackalloc string select uint ulong unchecked unsafe ushort var "; - var JSCRIPT_KEYWORDS = COMMON_KEYWORDS + + let JSCRIPT_KEYWORDS = COMMON_KEYWORDS + "debugger eval export function get null set undefined var with " + "Infinity NaN "; - var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " + + let PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " + "goto if import last local my next no our print package redo require " + "sub undef unless until use wantarray while BEGIN END "; - var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " + + let PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " + "elif except exec finally from global import in is lambda " + "nonlocal not or pass print raise try with yield " + "False True None "; - var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" + + let RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" + " defined elsif end ensure false in module next nil not or redo rescue " + "retry self super then true undef unless until when yield BEGIN END "; - var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " + + let SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " + "function in local set then until "; - var ALL_KEYWORDS = ( + let ALL_KEYWORDS = ( CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS + PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS); // token style names. correspond to css classes /** token style for a string literal */ - var PR_STRING = 'str'; + let PR_STRING = 'str'; /** token style for a keyword */ - var PR_KEYWORD = 'kwd'; + let PR_KEYWORD = 'kwd'; /** token style for a comment */ - var PR_COMMENT = 'com'; + let PR_COMMENT = 'com'; /** token style for a type */ - var PR_TYPE = 'typ'; + let PR_TYPE = 'typ'; /** token style for a literal value. e.g. 1, null, true. */ - var PR_LITERAL = 'lit'; + let PR_LITERAL = 'lit'; /** token style for a punctuation string. */ - var PR_PUNCTUATION = 'pun'; + let PR_PUNCTUATION = 'pun'; /** token style for a punctuation string. */ - var PR_PLAIN = 'pln'; + let PR_PLAIN = 'pln'; /** token style for an sgml tag. */ - var PR_TAG = 'tag'; + let PR_TAG = 'tag'; /** token style for a markup declaration such as a DOCTYPE. */ - var PR_DECLARATION = 'dec'; + let PR_DECLARATION = 'dec'; /** token style for embedded source. */ - var PR_SOURCE = 'src'; + let PR_SOURCE = 'src'; /** token style for an sgml attribute name. */ - var PR_ATTRIB_NAME = 'atn'; + let PR_ATTRIB_NAME = 'atn'; /** token style for an sgml attribute value. */ - var PR_ATTRIB_VALUE = 'atv'; + let PR_ATTRIB_VALUE = 'atv'; /** * A class that indicates a section of markup that is not code, e.g. to allow * embedding of line numbers within code listings. */ - var PR_NOCODE = 'nocode'; + let PR_NOCODE = 'nocode'; /** A set of tokens that can precede a regular expression literal in * javascript. @@ -203,8 +203,8 @@ window['_pr_isIE6'] = () => { * * @private */ - var REGEXP_PRECEDER_PATTERN = () => { - var preceders = [ + let REGEXP_PRECEDER_PATTERN = () => { + let preceders = [ "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=", "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=", "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";", @@ -216,8 +216,8 @@ window['_pr_isIE6'] = () => { "do", "else", "finally", "instanceof", "return", "throw", "try", "typeof" ]; - var pattern = '(?:^^|[+-]'; - for (var i = 0; i < preceders.length; ++i) { + let pattern = '(?:^^|[+-]'; + for (let i = 0; i < preceders.length; ++i) { pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1'); } pattern += ')\\s*'; // matches at end, and matches empty string @@ -233,10 +233,10 @@ window['_pr_isIE6'] = () => { // object each time the function containing them is called. // The language spec requires a new object created even if you don't access // the $1 members. - var pr_amp = /&/g; - var pr_lt = //g; - var pr_quot = /\"/g; + let pr_amp = /&/g; + let pr_lt = //g; + let pr_quot = /\"/g; /** like textToHtml but escapes double quotes to be attribute safe. */ function attribToHtml(str) { return str.replace(pr_amp, '&') @@ -253,29 +253,29 @@ window['_pr_isIE6'] = () => { } - var pr_ltEnt = /</g; - var pr_gtEnt = />/g; - var pr_aposEnt = /'/g; - var pr_quotEnt = /"/g; - var pr_ampEnt = /&/g; - var pr_nbspEnt = / /g; + let pr_ltEnt = /</g; + let pr_gtEnt = />/g; + let pr_aposEnt = /'/g; + let pr_quotEnt = /"/g; + let pr_ampEnt = /&/g; + let pr_nbspEnt = / /g; /** unescapes html to plain text. */ function htmlToText(html) { - var pos = html.indexOf('&'); + let pos = html.indexOf('&'); if (pos < 0) { return html; } // Handle numeric entities specially. We can't use functional substitution // since that doesn't work in older versions of Safari. // These should be rare since most browsers convert them to normal chars. for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) { - var end = html.indexOf(';', pos); + let end = html.indexOf(';', pos); if (end >= 0) { - var num = html.substring(pos + 3, end); - var radix = 10; + let num = html.substring(pos + 3, end); + let radix = 10; if (num && num.charAt(0) === 'x') { num = num.substring(1); radix = 16; } - var codePoint = parseInt(num, radix); + let codePoint = parseInt(num, radix); if (!isNaN(codePoint)) { html = (html.substring(0, pos) + String.fromCharCode(codePoint) + html.substring(end + 1)); @@ -296,7 +296,7 @@ window['_pr_isIE6'] = () => { return 'XMP' === node.tagName; } - var newlineRe = /[\r\n]/g; + let newlineRe = /[\r\n]/g; /** * Are newlines and adjacent spaces significant in the given node's innerHTML? */ @@ -305,7 +305,7 @@ window['_pr_isIE6'] = () => { // unnecessary computed style objects. if ('PRE' === node.tagName) { return true; } if (!newlineRe.test(content)) { return true; } // Don't care - var whitespace = ''; + let whitespace = ''; // For disconnected nodes, IE has no currentStyle. if (node.currentStyle) { whitespace = node.currentStyle.whiteSpace; @@ -320,16 +320,16 @@ window['_pr_isIE6'] = () => { function normalizedHtml(node, out) { switch (node.nodeType) { case 1: // an element - var name = node.tagName.toLowerCase(); + let name = node.tagName.toLowerCase(); out.push('<', name); - for (var i = 0; i < node.attributes.length; ++i) { - var attr = node.attributes[i]; + for (let i = 0; i < node.attributes.length; ++i) { + let attr = node.attributes[i]; if (!attr.specified) { continue; } out.push(' '); normalizedHtml(attr, out); } out.push('>'); - for (var child = node.firstChild; child; child = child.nextSibling) { + for (let child = node.firstChild; child; child = child.nextSibling) { normalizedHtml(child, out); } if (node.firstChild || !/^(?:br|link|img)$/.test(name)) { @@ -354,12 +354,12 @@ window['_pr_isIE6'] = () => { * @return {RegExp} a global regex. */ function combinePrefixPatterns(regexs) { - var capturedGroupIndex = 0; + let capturedGroupIndex = 0; - var needToFoldCase = false; - var ignoreCase = false; - for (var i = 0, n = regexs.length; i < n; ++i) { - var regex = regexs[i]; + let needToFoldCase = false; + let ignoreCase = false; + for (let i = 0, n = regexs.length; i < n; ++i) { + let regex = regexs[i]; if (regex.ignoreCase) { ignoreCase = true; } else if (/[a-z]/i.test(regex.source.replace( @@ -393,7 +393,7 @@ window['_pr_isIE6'] = () => { if (charCode < 0x20) { return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16); } - var ch = String.fromCharCode(charCode); + let ch = String.fromCharCode(charCode); if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') { ch = '\\' + ch; } @@ -401,7 +401,7 @@ window['_pr_isIE6'] = () => { } function caseFoldCharset(charSet) { - var charsetParts = charSet.substring(1, charSet.length - 1).match( + let charsetParts = charSet.substring(1, charSet.length - 1).match( new RegExp( '\\\\u[0-9A-Fa-f]{4}' + '|\\\\x[0-9A-Fa-f]{2}' @@ -411,11 +411,11 @@ window['_pr_isIE6'] = () => { + '|-' + '|[^-\\\\]', 'g')); - var groups = []; - var ranges = []; - var inverse = charsetParts[0] === '^'; - for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) { - var p = charsetParts[i]; + let groups = []; + let ranges = []; + let inverse = charsetParts[0] === '^'; + for (let i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) { + let p = charsetParts[i]; switch (p) { case '\\B': case '\\b': case '\\D': case '\\d': @@ -424,7 +424,7 @@ window['_pr_isIE6'] = () => { groups.push(p); continue; } - var start = decodeEscape(p); + let start = decodeEscape(p); var end; if (i + 2 < n && '-' === charsetParts[i + 1]) { end = decodeEscape(charsetParts[i + 2]); @@ -447,10 +447,10 @@ window['_pr_isIE6'] = () => { // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]] // -> [[1, 12], [14, 14], [16, 17]] ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1] - a[1]); }); - var consolidatedRanges = []; - var lastRange = [NaN, NaN]; - for (var i = 0; i < ranges.length; ++i) { - var range = ranges[i]; + let consolidatedRanges = []; + let lastRange = [NaN, NaN]; + for (let i = 0; i < ranges.length; ++i) { + let range = ranges[i]; if (range[0] <= lastRange[1] + 1) { lastRange[1] = Math.max(lastRange[1], range[1]); } else { @@ -458,11 +458,11 @@ window['_pr_isIE6'] = () => { } } - var out = ['[']; + let out = ['[']; if (inverse) { out.push('^'); } out.push.apply(out, groups); - for (var i = 0; i < consolidatedRanges.length; ++i) { - var range = consolidatedRanges[i]; + for (let i = 0; i < consolidatedRanges.length; ++i) { + let range = consolidatedRanges[i]; out.push(encodeEscape(range[0])); if (range[1] > range[0]) { if (range[1] + 1 > range[0]) { out.push('-'); } @@ -477,7 +477,7 @@ window['_pr_isIE6'] = () => { // Split into character sets, escape sequences, punctuation strings // like ('(', '(?:', ')', '^'), and runs of characters that do not // include any of the above. - var parts = regex.source.match( + let parts = regex.source.match( new RegExp( '(?:' + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]' // a character set @@ -490,22 +490,22 @@ window['_pr_isIE6'] = () => { + '|[^\\x5B\\x5C\\(\\)\\^]+' // run of other characters + ')', 'g')); - var n = parts.length; + let n = parts.length; // Maps captured group numbers to the number they will occupy in // the output or to -1 if that has not been determined, or to // undefined if they need not be capturing in the output. - var capturedGroups = []; + let capturedGroups = []; // Walk over and identify back references to build the capturedGroups // mapping. - for (var i = 0, groupIndex = 0; i < n; ++i) { - var p = parts[i]; + for (let i = 0, groupIndex = 0; i < n; ++i) { + let p = parts[i]; if (p === '(') { // groups are 1-indexed, so max group index is count of '(' ++groupIndex; } else if ('\\' === p.charAt(0)) { - var decimalValue = +p.substring(1); + let decimalValue = +p.substring(1); if (decimalValue && decimalValue <= groupIndex) { capturedGroups[decimalValue] = -1; } @@ -514,20 +514,20 @@ window['_pr_isIE6'] = () => { // Renumber groups and reduce capturing groups to non-capturing groups // where possible. - for (var i = 1; i < capturedGroups.length; ++i) { + for (let i = 1; i < capturedGroups.length; ++i) { if (-1 === capturedGroups[i]) { capturedGroups[i] = ++capturedGroupIndex; } } - for (var i = 0, groupIndex = 0; i < n; ++i) { - var p = parts[i]; + for (let i = 0, groupIndex = 0; i < n; ++i) { + let p = parts[i]; if (p === '(') { ++groupIndex; if (capturedGroups[groupIndex] === undefined) { parts[i] = '(?:'; } } else if ('\\' === p.charAt(0)) { - var decimalValue = +p.substring(1); + let decimalValue = +p.substring(1); if (decimalValue && decimalValue <= groupIndex) { parts[i] = '\\' + capturedGroups[groupIndex]; } @@ -536,15 +536,15 @@ window['_pr_isIE6'] = () => { // Remove any prefix anchors so that the output will match anywhere. // ^^ really does mean an anchored match though. - for (var i = 0, groupIndex = 0; i < n; ++i) { + for (let i = 0, groupIndex = 0; i < n; ++i) { if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; } } // Expand letters to groupts to handle mixing of case-sensitive and // case-insensitive patterns if necessary. if (regex.ignoreCase && needToFoldCase) { - for (var i = 0; i < n; ++i) { - var p = parts[i]; + for (let i = 0; i < n; ++i) { + let p = parts[i]; var ch0 = p.charAt(0); if (p.length >= 2 && ch0 === '[') { parts[i] = caseFoldCharset(p); @@ -553,7 +553,7 @@ window['_pr_isIE6'] = () => { parts[i] = p.replace( /[a-zA-Z]/g, function (ch) { - var cc = ch.charCodeAt(0); + let cc = ch.charCodeAt(0); return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']'; }); } @@ -563,9 +563,9 @@ window['_pr_isIE6'] = () => { return parts.join(''); } - var rewritten = []; - for (var i = 0, n = regexs.length; i < n; ++i) { - var regex = regexs[i]; + let rewritten = []; + for (let i = 0, n = regexs.length; i < n; ++i) { + let regex = regexs[i]; if (regex.global || regex.multiline) { throw new Error('' + regex); } rewritten.push( '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')'); @@ -574,20 +574,20 @@ window['_pr_isIE6'] = () => { return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g'); } - var PR_innerHtmlWorks = null; + let PR_innerHtmlWorks = null; function getInnerHtml(node) { // inner html is hopelessly broken in Safari 2.0.4 when the content is // an html description of well formed XML and the containing tag is a PRE // tag, so we detect that case and emulate innerHTML. if (null === PR_innerHtmlWorks) { - var testNode = document.createElement('PRE'); + let testNode = document.createElement('PRE'); testNode.appendChild( document.createTextNode('\n')); PR_innerHtmlWorks = !/ { return content; } - var out = []; - for (var child = node.firstChild; child; child = child.nextSibling) { + let out = []; + for (let child = node.firstChild; child; child = child.nextSibling) { normalizedHtml(child, out); } return out.join(''); @@ -613,17 +613,17 @@ window['_pr_isIE6'] = () => { * @private */ function makeTabExpander(tabWidth) { - var SPACES = ' '; - var charInLine = 0; + let SPACES = ' '; + let charInLine = 0; return function (plainText) { // walk over each character looking for tabs and newlines. // On tabs, expand them. On newlines, reset charInLine. // Otherwise increment charInLine - var out = null; - var pos = 0; - for (var i = 0, n = plainText.length; i < n; ++i) { - var ch = plainText.charAt(i); + let out = null; + let pos = 0; + for (let i = 0, n = plainText.length; i < n; ++i) { + let ch = plainText.charAt(i); switch (ch) { case '\t': @@ -633,7 +633,7 @@ window['_pr_isIE6'] = () => { // nSpaces is the amount of padding -- the number of spaces needed // to move us to the next column, where columns occur at factors of // tabWidth. - var nSpaces = tabWidth - (charInLine % tabWidth); + let nSpaces = tabWidth - (charInLine % tabWidth); charInLine += nSpaces; for (; nSpaces >= 0; nSpaces -= SPACES.length) { out.push(SPACES.substring(0, nSpaces)); @@ -653,7 +653,7 @@ window['_pr_isIE6'] = () => { }; } - var pr_chunkPattern = new RegExp( + let pr_chunkPattern = new RegExp( '[^<]+' // A run of characters other than '<' + '|<\!--[\\s\\S]*?--\>' // an HTML comment + '|' // a CDATA section @@ -661,10 +661,10 @@ window['_pr_isIE6'] = () => { + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>' + '|<', // A '<' that does not begin a larger chunk 'g'); - var pr_commentPrefix = /^<\!--/; - var pr_cdataPrefix = /^ { // since the pattern has the 'g' modifier and defines no capturing groups, // this will return a list of all chunks which we then classify and wrap as // PR_Tokens - var matches = s.match(pr_chunkPattern); - var sourceBuf = []; - var sourceBufLen = 0; - var extractedTags = []; + let matches = s.match(pr_chunkPattern); + let sourceBuf = []; + let sourceBufLen = 0; + let extractedTags = []; if (matches) { - for (var i = 0, n = matches.length; i < n; ++i) { - var match = matches[i]; + for (let i = 0, n = matches.length; i < n; ++i) { + let match = matches[i]; if (match.length > 1 && match.charAt(0) === '<') { if (pr_commentPrefix.test(match)) { continue; } if (pr_cdataPrefix.test(match)) { @@ -701,8 +701,8 @@ window['_pr_isIE6'] = () => { // A will start a section that should be // ignored. Continue walking the list until we see a matching end // tag. - var name = match.match(pr_tagNameRe)[2]; - var depth = 1; + let name = match.match(pr_tagNameRe)[2]; + let depth = 1; var j; end_tag_loop: for (j = i + 1; j < n; ++j) { @@ -727,7 +727,7 @@ window['_pr_isIE6'] = () => { } } } else { - var literalText = htmlToText(match); + let literalText = htmlToText(match); sourceBuf.push(literalText); sourceBufLen += literalText.length; } @@ -754,7 +754,7 @@ window['_pr_isIE6'] = () => { */ function appendDecorations(basePos, sourceCode, langHandler, out) { if (!sourceCode) { return; } - var job = { + let job = { source: sourceCode, basePos: basePos }; @@ -809,22 +809,22 @@ window['_pr_isIE6'] = () => { * function that takes source code and returns a list of decorations. */ function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) { - var shortcuts = {}; + let shortcuts = {}; var tokenizer; (function () { - var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns); - var allRegexs = []; - var regexKeys = {}; - for (var i = 0, n = allPatterns.length; i < n; ++i) { - var patternParts = allPatterns[i]; - var shortcutChars = patternParts[3]; + let allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns); + let allRegexs = []; + let regexKeys = {}; + for (let i = 0, n = allPatterns.length; i < n; ++i) { + let patternParts = allPatterns[i]; + let shortcutChars = patternParts[3]; if (shortcutChars) { - for (var c = shortcutChars.length; --c >= 0;) { + for (let c = shortcutChars.length; --c >= 0;) { shortcuts[shortcutChars.charAt(c)] = patternParts; } } - var regex = patternParts[1]; - var k = '' + regex; + let regex = patternParts[1]; + let k = '' + regex; if (!regexKeys.hasOwnProperty(k)) { allRegexs.push(regex); regexKeys[k] = null; @@ -834,8 +834,8 @@ window['_pr_isIE6'] = () => { tokenizer = combinePrefixPatterns(allRegexs); })(); - var nPatterns = fallthroughStylePatterns.length; - var notWs = /\S/; + let nPatterns = fallthroughStylePatterns.length; + let notWs = /\S/; /** * Lexes job.source and produces an output array job.decorations of style @@ -848,33 +848,33 @@ window['_pr_isIE6'] = () => { * sourceCode. * } */ - var decorate = (job) => { - var sourceCode = job.source, basePos = job.basePos; + let decorate = (job) => { + let sourceCode = job.source, basePos = job.basePos; /** Even entries are positions in source in ascending order. Odd enties * are style markers (e.g., PR_COMMENT) that run from that position until * the end. * @type {Array.} */ - var decorations = [basePos, PR_PLAIN]; - var pos = 0; // index into sourceCode - var tokens = sourceCode.match(tokenizer) || []; - var styleCache = {}; + let decorations = [basePos, PR_PLAIN]; + let pos = 0; // index into sourceCode + let tokens = sourceCode.match(tokenizer) || []; + let styleCache = {}; - for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) { - var token = tokens[ti]; - var style = styleCache[token]; - var match = void 0; + for (let ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) { + let token = tokens[ti]; + let style = styleCache[token]; + let match = void 0; var isEmbedded; if (typeof style === 'string') { isEmbedded = false; } else { - var patternParts = shortcuts[token.charAt(0)]; + let patternParts = shortcuts[token.charAt(0)]; if (patternParts) { match = token.match(patternParts[1]); style = patternParts[0]; } else { - for (var i = 0; i < nPatterns; ++i) { + for (let i = 0; i < nPatterns; ++i) { patternParts = fallthroughStylePatterns[i]; match = token.match(patternParts[1]); if (match) { @@ -897,15 +897,15 @@ window['_pr_isIE6'] = () => { if (!isEmbedded) { styleCache[token] = style; } } - var tokenStart = pos; + let tokenStart = pos; pos += token.length; if (!isEmbedded) { decorations.push(basePos + tokenStart, style); } else { // Treat group 1 as an embedded block of source code. - var embeddedSource = match[1]; - var embeddedSourceStart = token.indexOf(embeddedSource); - var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length; + let embeddedSource = match[1]; + let embeddedSourceStart = token.indexOf(embeddedSource); + let embeddedSourceEnd = embeddedSourceStart + embeddedSource.length; if (match[2]) { // If embeddedSource can be blank, then it would match at the // beginning which would cause us to infinitely recurse on the @@ -913,7 +913,7 @@ window['_pr_isIE6'] = () => { embeddedSourceEnd = token.length - match[2].length; embeddedSourceStart = embeddedSourceEnd - embeddedSource.length; } - var lang = style.substring(5); + let lang = style.substring(5); // Decorate the left of the embedded source appendDecorations( basePos + tokenStart, @@ -953,7 +953,7 @@ window['_pr_isIE6'] = () => { * in the input job and builds the decoration list. */ function sourceDecorator(options) { - var shortcutStylePatterns = [], fallthroughStylePatterns = []; + let shortcutStylePatterns = [], fallthroughStylePatterns = []; if (options['tripleQuotedStrings']) { // '''multi-line-string''', 'single-line-string', and double-quoted shortcutStylePatterns.push( @@ -996,7 +996,7 @@ window['_pr_isIE6'] = () => { [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]); } if (options['regexLiterals']) { - var REGEX_LITERAL = ( + let REGEX_LITERAL = ( // A regular expression literal starts with a slash that is // not followed by * or / so that it is not confused with // comments. @@ -1015,7 +1015,7 @@ window['_pr_isIE6'] = () => { ]); } - var keywords = options['keywords'].replace(/^\s+|\s+$/g, ''); + let keywords = options['keywords'].replace(/^\s+|\s+$/g, ''); if (keywords.length) { fallthroughStylePatterns.push( [PR_KEYWORD, @@ -1046,7 +1046,7 @@ window['_pr_isIE6'] = () => { return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns); } - var decorateSource = sourceDecorator({ + let decorateSource = sourceDecorator({ 'keywords': ALL_KEYWORDS, 'hashComments': true, 'cStyleComments': true, @@ -1068,25 +1068,25 @@ window['_pr_isIE6'] = () => { * @private */ function recombineTagsAndDecorations(job) { - var sourceText = job.source; - var extractedTags = job.extractedTags; - var decorations = job.decorations; + let sourceText = job.source; + let extractedTags = job.extractedTags; + let decorations = job.decorations; - var html = []; + let html = []; // index past the last char in sourceText written to html - var outputIdx = 0; + let outputIdx = 0; - var openDecoration = null; - var currentDecoration = null; - var tagPos = 0; // index into extractedTags - var decPos = 0; // index into decorations - var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']); + let openDecoration = null; + let currentDecoration = null; + let tagPos = 0; // index into extractedTags + let decPos = 0; // index into decorations + let tabExpander = makeTabExpander(window['PR_TAB_WIDTH']); - var adjacentSpaceRe = /([\r\n ]) /g; - var startOrSpaceRe = /(^| ) /gm; - var newlineRe = /\r\n?|\n/g; - var trailingSpaceRe = /[ \r\n]$/; - var lastWasSpace = true; // the last text chunk emitted ended with a space. + let adjacentSpaceRe = /([\r\n ]) /g; + let startOrSpaceRe = /(^| ) /gm; + let newlineRe = /\r\n?|\n/g; + let trailingSpaceRe = /[ \r\n]$/; + let lastWasSpace = true; // the last text chunk emitted ended with a space. // A helper function that is responsible for opening sections of decoration // and outputing properly escaped chunks of source @@ -1108,7 +1108,7 @@ window['_pr_isIE6'] = () => { // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html // and it serves to undo the conversion of
s to newlines done in // chunkify. - var htmlChunk = textToHtml( + let htmlChunk = textToHtml( tabExpander(sourceText.substring(outputIdx, sourceIdx))) .replace(lastWasSpace ? startOrSpaceRe @@ -1118,7 +1118,7 @@ window['_pr_isIE6'] = () => { lastWasSpace = trailingSpaceRe.test(htmlChunk); // IE collapses multiple adjacient
s into 1 line break. // Prefix every
with ' ' can prevent such IE's behavior. - var lineBreakHtml = window['_pr_isIE6']() ? ' 
' : '
'; + let lineBreakHtml = window['_pr_isIE6']() ? ' 
' : '
'; html.push(htmlChunk.replace(newlineRe, lineBreakHtml)); outputIdx = sourceIdx; } @@ -1166,7 +1166,7 @@ window['_pr_isIE6'] = () => { } /** Maps language-specific file extensions to handlers. */ - var langHandlerRegistry = {}; + let langHandlerRegistry = {}; /** Register a language handler for the given file extensions. * @param {function (Object)} handler a function from source code to a list * of decorations. Takes a single argument job which describes the @@ -1184,8 +1184,8 @@ window['_pr_isIE6'] = () => { * @param {Array.} fileExtensions */ function registerLangHandler(handler, fileExtensions) { - for (var i = fileExtensions.length; --i >= 0;) { - var ext = fileExtensions[i]; + for (let i = fileExtensions.length; --i >= 0;) { + let ext = fileExtensions[i]; if (!langHandlerRegistry.hasOwnProperty(ext)) { langHandlerRegistry[ext] = handler; } else if ('console' in window) { @@ -1294,17 +1294,17 @@ window['_pr_isIE6'] = () => { createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']); function applyDecorator(job) { - var sourceCodeHtml = job.sourceCodeHtml; - var opt_langExtension = job.langExtension; + let sourceCodeHtml = job.sourceCodeHtml; + let opt_langExtension = job.langExtension; // Prepopulate output in case processing fails with an exception. job.prettyPrintedHtml = sourceCodeHtml; try { // Extract tags, and convert the source code to plain text. - var sourceAndExtractedTags = extractTags(sourceCodeHtml); + let sourceAndExtractedTags = extractTags(sourceCodeHtml); /** Plain text. @type {string} */ - var source = sourceAndExtractedTags.source; + let source = sourceAndExtractedTags.source; job.source = source; job.basePos = 0; @@ -1328,7 +1328,7 @@ window['_pr_isIE6'] = () => { } function prettyPrintOne(sourceCodeHtml, opt_langExtension) { - var job = { + let job = { sourceCodeHtml: sourceCodeHtml, langExtension: opt_langExtension }; @@ -1338,51 +1338,51 @@ window['_pr_isIE6'] = () => { function prettyPrint(opt_whenDone) { var isIE678 = window['_pr_isIE6'](); - var ieNewline = isIE678 === 6 ? '\r\n' : '\r'; + let ieNewline = isIE678 === 6 ? '\r\n' : '\r'; // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7- // fetch a list of nodes to rewrite - var codeSegments = [ + let codeSegments = [ document.getElementsByTagName('pre'), document.getElementsByTagName('code'), document.getElementsByTagName('td'), /* ND Change: Add tables to support prototypes. */ document.getElementsByTagName('xmp') ]; - var elements = []; - for (var i = 0; i < codeSegments.length; ++i) { - for (var j = 0, n = codeSegments[i].length; j < n; ++j) { + let elements = []; + for (let i = 0; i < codeSegments.length; ++i) { + for (let j = 0, n = codeSegments[i].length; j < n; ++j) { elements.push(codeSegments[i][j]); } } codeSegments = null; - var clock = Date; + let clock = Date; if (!clock['now']) { clock = { 'now': function () { return (new Date).getTime(); } }; } // The loop is broken into a series of continuations to make sure that we // don't make the browser unresponsive when rewriting a large page. - var k = 0; + let k = 0; var prettyPrintingJob; function doWork() { - var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ? + let endTime = (window['PR_SHOULD_USE_CONTINUATION'] ? clock.now() + 250 /* ms */ : Infinity); for (; k < elements.length && clock.now() < endTime; k++) { - var cs = elements[k]; + let cs = elements[k]; if (cs.className && cs.className.indexOf('prettyprint') >= 0) { // If the classes includes a language extensions, use it. // Language extensions can be specified like //
           // the language extension "cpp" is used to find a language handler as
           // passed to PR_registerLangHandler.
-          var langExtension = cs.className.match(/\blang-(\w+)\b/);
+          let langExtension = cs.className.match(/\blang-(\w+)\b/);
           if (langExtension) { langExtension = langExtension[1]; }
 
           // make sure this is not nested in an already prettified element
-          var nested = false;
-          for (var p = cs.parentNode; p; p = p.parentNode) {
+          let nested = false;
+          for (let p = cs.parentNode; p; p = p.parentNode) {
             if ((p.tagName === 'pre' || p.tagName === 'code' ||
                  p.tagName === 'xmp' || p.tagName === 'td') &&  /* ND Change: Add tables to support prototypes */
                 p.className && p.className.indexOf('prettyprint') >= 0) {
@@ -1393,7 +1393,7 @@ window['_pr_isIE6'] = () => {
           if (!nested) {
             // fetch the content as a snippet of properly escaped HTML.
             // Firefox adds newlines at the end.
-            var content = getInnerHtml(cs);
+            let content = getInnerHtml(cs);
             content = content.replace(/(?:\r\n?|\n)$/, '');
 
 	  		/* ND Change: we need to preserve  s so change them to a special character instead of a space. */
@@ -1419,13 +1419,13 @@ window['_pr_isIE6'] = () => {
     }
 
     function replaceWithPrettyPrintedHtml() {
-      var newContent = prettyPrintingJob.prettyPrintedHtml;
+      let newContent = prettyPrintingJob.prettyPrintedHtml;
       if (!newContent) { return; }
 
       /* ND Change: Restore the preserved  s.  */
 	  newContent = newContent.replace(/\x11/g, ' ');
 
-      var cs = prettyPrintingJob.sourceNode;
+      let cs = prettyPrintingJob.sourceNode;
 
       // push the prettified html back into the tag.
       if (!isRawContent(cs)) {
@@ -1435,11 +1435,11 @@ window['_pr_isIE6'] = () => {
         // we need to change the tag to a 
 since s do not allow
         // embedded tags such as the span tags used to attach styles to
         // sections of source code.
-        var pre = document.createElement('PRE');
-        for (var i = 0; i < cs.attributes.length; ++i) {
-          var a = cs.attributes[i];
+        let pre = document.createElement('PRE');
+        for (let i = 0; i < cs.attributes.length; ++i) {
+          let a = cs.attributes[i];
           if (a.specified) {
-            var aname = a.name.toLowerCase();
+            let aname = a.name.toLowerCase();
             if (aname === 'class') {
               pre.className = a.value;  // For IE 6
             } else {
@@ -1460,9 +1460,9 @@ window['_pr_isIE6'] = () => {
       // treated as two newlines on Firefox, and doing this also slows
       // down rendering.
       if (isIE678 && cs.tagName === 'PRE') {
-        var lineBreaks = cs.getElementsByTagName('br');
-        for (var j = lineBreaks.length; --j >= 0;) {
-          var lineBreak = lineBreaks[j];
+        let lineBreaks = cs.getElementsByTagName('br');
+        for (let j = lineBreaks.length; --j >= 0;) {
+          let lineBreak = lineBreaks[j];
           lineBreak.parentNode.replaceChild(
               document.createTextNode(ieNewline), lineBreak);
         }
diff --git a/docs/js-api/javascript/searchdata.js b/docs/js-api/javascript/searchdata.js
index 2b5ba4752..e1c9ecd94 100644
--- a/docs/js-api/javascript/searchdata.js
+++ b/docs/js-api/javascript/searchdata.js
@@ -1,4 +1,4 @@
-var indexSectionsWithContent = {
+let indexSectionsWithContent = {
    "Events": {
       "Symbols": false,
       "Numbers": false,
diff --git a/docs/js-api/search/ClassesM.html b/docs/js-api/search/ClassesM.html
index 6e8f41256..973add31d 100644
--- a/docs/js-api/search/ClassesM.html
+++ b/docs/js-api/search/ClassesM.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_MedianCellSorter><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#MedianCellSorter" target=_parent class=ISymbol>MedianCellSorter</a></div></div><div class=SRResult id=SR_mxAbstractCanvas2D><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D" target=_parent class=ISymbol>mxAbstractCanvas2D</a></div></div><div class=SRResult id=SR_mxActor><div class=IEntry><a href="../files/shape/mxActor-js.html#mxActor" target=_parent class=ISymbol>mxActor</a></div></div><div class=SRResult id=SR_mxAnimation><div class=IEntry><a href="../files/util/mxAnimation-js.html#mxAnimation" target=_parent class=ISymbol>mxAnimation</a></div></div><div class=SRResult id=SR_mxArrow><div class=IEntry><a href="../files/shape/mxArrow-js.html#mxArrow" target=_parent class=ISymbol>mxArrow</a></div></div><div class=SRResult id=SR_mxArrowConnector><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector" target=_parent class=ISymbol>mxArrowConnector</a></div></div><div class=SRResult id=SR_mxAutoSaveManager><div class=IEntry><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager" target=_parent class=ISymbol>mxAutoSaveManager</a></div></div><div class=SRResult id=SR_mxCell><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell" target=_parent class=ISymbol>mxCell</a></div></div><div class=SRResult id=SR_mxCellAttributeChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxCellAttributeChange" target=_parent class=ISymbol>mxCellAttributeChange</a></div></div><div class=SRResult id=SR_mxCellCodec><div class=IEntry><a href="../files/io/mxCellCodec-js.html#mxCellCodec" target=_parent class=ISymbol>mxCellCodec</a></div></div><div class=SRResult id=SR_mxCellEditor><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor" target=_parent class=ISymbol>mxCellEditor</a></div></div><div class=SRResult id=SR_mxCellHighlight><div class=IEntry><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight" target=_parent class=ISymbol>mxCellHighlight</a></div></div><div class=SRResult id=SR_mxCellMarker><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker" target=_parent class=ISymbol>mxCellMarker</a></div></div><div class=SRResult id=SR_mxCellOverlay><div class=IEntry><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay" target=_parent class=ISymbol>mxCellOverlay</a></div></div><div class=SRResult id=SR_mxCellPath><div class=IEntry><a href="../files/model/mxCellPath-js.html#mxCellPath" target=_parent class=ISymbol>mxCellPath</a></div></div><div class=SRResult id=SR_mxCellRenderer><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer" target=_parent class=ISymbol>mxCellRenderer</a></div></div><div class=SRResult id=SR_mxCellState><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState" target=_parent class=ISymbol>mxCellState</a></div></div><div class=SRResult id=SR_mxCellStatePreview><div class=IEntry><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview" target=_parent class=ISymbol>mxCellStatePreview</a></div></div><div class=SRResult id=SR_mxCellTracker><div class=IEntry><a href="../files/handler/mxCellTracker-js.html#mxCellTracker" target=_parent class=ISymbol>mxCellTracker</a></div></div><div class=SRResult id=SR_mxChildChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxChildChange" target=_parent class=ISymbol>mxChildChange</a></div></div><div class=SRResult id=SR_mxChildChangeCodec><div class=IEntry><a href="../files/io/mxChildChangeCodec-js.html#mxChildChangeCodec" target=_parent class=ISymbol>mxChildChangeCodec</a></div></div><div class=SRResult id=SR_mxCircleLayout><div class=IEntry><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout" target=_parent class=ISymbol>mxCircleLayout</a></div></div><div class=SRResult id=SR_mxClient><div class=IEntry><a href="../files/mxClient-js.html#mxClient" target=_parent class=ISymbol>mxClient</a></div></div><div class=SRResult id=SR_mxClipboard><div class=IEntry><a href="../files/util/mxClipboard-js.html#mxClipboard" target=_parent class=ISymbol>mxClipboard</a></div></div><div class=SRResult id=SR_mxCloud><div class=IEntry><a href="../files/shape/mxCloud-js.html#mxCloud" target=_parent class=ISymbol>mxCloud</a></div></div><div class=SRResult id=SR_mxCodec><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec" target=_parent class=ISymbol>mxCodec</a></div></div><div class=SRResult id=SR_mxCodecRegistry><div class=IEntry><a href="../files/io/mxCodecRegistry-js.html#mxCodecRegistry" target=_parent class=ISymbol>mxCodecRegistry</a></div></div><div class=SRResult id=SR_mxCollapseChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxCollapseChange" target=_parent class=ISymbol>mxCollapseChange</a></div></div><div class=SRResult id=SR_mxCompactTreeLayout><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout" target=_parent class=ISymbol>mxCompactTreeLayout</a></div></div><div class=SRResult id=SR_mxCompositeLayout><div class=IEntry><a href="../files/layout/mxCompositeLayout-js.html#mxCompositeLayout" target=_parent class=ISymbol>mxCompositeLayout</a></div></div><div class=SRResult id=SR_mxConnectionConstraint><div class=IEntry><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint" target=_parent class=ISymbol>mxConnectionConstraint</a></div></div><div class=SRResult id=SR_mxConnectionHandler><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler" target=_parent class=ISymbol>mxConnectionHandler</a></div></div><div class=SRResult id=SR_mxConnector><div class=IEntry><a href="../files/shape/mxConnector-js.html#mxConnector" target=_parent class=ISymbol>mxConnector</a></div></div><div class=SRResult id=SR_mxConstants><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants" target=_parent class=ISymbol>mxConstants</a></div></div><div class=SRResult id=SR_mxConstraintHandler><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler" target=_parent class=ISymbol>mxConstraintHandler</a></div></div><div class=SRResult id=SR_mxCoordinateAssignment><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment" target=_parent class=ISymbol>mxCoordinateAssignment</a></div></div><div class=SRResult id=SR_mxCurrentRootChange><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxCurrentRootChange" target=_parent class=ISymbol>mxCurrentRootChange</a></div></div><div class=SRResult id=SR_mxCylinder><div class=IEntry><a href="../files/shape/mxCylinder-js.html#mxCylinder" target=_parent class=ISymbol>mxCylinder</a></div></div><div class=SRResult id=SR_mxDefaultKeyHandler><div class=IEntry><a href="../files/editor/mxDefaultKeyHandler-js.html#mxDefaultKeyHandler" target=_parent class=ISymbol>mxDefaultKeyHandler</a></div></div><div class=SRResult id=SR_mxDefaultKeyHandlerCodec><div class=IEntry><a href="../files/io/mxDefaultKeyHandlerCodec-js.html#mxDefaultKeyHandlerCodec" target=_parent class=ISymbol>mxDefaultKeyHandlerCodec</a></div></div><div class=SRResult id=SR_mxDefaultPopupMenu><div class=IEntry><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu" target=_parent class=ISymbol>mxDefaultPopupMenu</a></div></div><div class=SRResult id=SR_mxDefaultPopupMenuCodec><div class=IEntry><a href="../files/io/mxDefaultPopupMenuCodec-js.html#mxDefaultPopupMenuCodec" target=_parent class=ISymbol>mxDefaultPopupMenuCodec</a></div></div><div class=SRResult id=SR_mxDefaultToolbar><div class=IEntry><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar" target=_parent class=ISymbol>mxDefaultToolbar</a></div></div><div class=SRResult id=SR_mxDefaultToolbarCodec><div class=IEntry><a href="../files/io/mxDefaultToolbarCodec-js.html#mxDefaultToolbarCodec" target=_parent class=ISymbol>mxDefaultToolbarCodec</a></div></div><div class=SRResult id=SR_mxDictionary><div class=IEntry><a href="../files/util/mxDictionary-js.html#mxDictionary" target=_parent class=ISymbol>mxDictionary</a></div></div><div class=SRResult id=SR_mxDivResizer><div class=IEntry><a href="../files/util/mxDivResizer-js.html#mxDivResizer" target=_parent class=ISymbol>mxDivResizer</a></div></div><div class=SRResult id=SR_mxDoubleEllipse><div class=IEntry><a href="../files/shape/mxDoubleEllipse-js.html#mxDoubleEllipse" target=_parent class=ISymbol>mxDoubleEllipse</a></div></div><div class=SRResult id=SR_mxDragSource><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource" target=_parent class=ISymbol>mxDragSource</a></div></div><div class=SRResult id=SR_mxEdgeHandler><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler" target=_parent class=ISymbol>mxEdgeHandler</a></div></div><div class=SRResult id=SR_mxEdgeLabelLayout><div class=IEntry><a href="../files/layout/mxEdgeLabelLayout-js.html#mxEdgeLabelLayout" target=_parent class=ISymbol>mxEdgeLabelLayout</a></div></div><div class=SRResult id=SR_mxEdgeStyle><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle" target=_parent class=ISymbol>mxEdgeStyle</a></div></div><div class=SRResult id=SR_mxEditor><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor" target=_parent class=ISymbol>mxEditor</a></div></div><div class=SRResult id=SR_mxEditorCodec><div class=IEntry><a href="../files/io/mxEditorCodec-js.html#mxEditorCodec" target=_parent class=ISymbol>mxEditorCodec</a></div></div><div class=SRResult id=SR_mxEffects><div class=IEntry><a href="../files/util/mxEffects-js.html#mxEffects" target=_parent class=ISymbol>mxEffects</a></div></div><div class=SRResult id=SR_mxElbowEdgeHandler><div class=IEntry><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler" target=_parent class=ISymbol>mxElbowEdgeHandler</a></div></div><div class=SRResult id=SR_mxEllipse><div class=IEntry><a href="../files/shape/mxEllipse-js.html#mxEllipse" target=_parent class=ISymbol>mxEllipse</a></div></div><div class=SRResult id=SR_mxEvent><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent" target=_parent class=ISymbol>mxEvent</a></div></div><div class=SRResult id=SR_mxEventObject><div class=IEntry><a href="../files/util/mxEventObject-js.html#mxEventObject" target=_parent class=ISymbol>mxEventObject</a></div></div><div class=SRResult id=SR_mxEventSource><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource" target=_parent class=ISymbol>mxEventSource</a></div></div><div class=SRResult id=SR_mxFastOrganicLayout><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout" target=_parent class=ISymbol>mxFastOrganicLayout</a></div></div><div class=SRResult id=SR_mxForm><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm" target=_parent class=ISymbol>mxForm</a></div></div><div class=SRResult id=SR_mxGenericChangeCodec><div class=IEntry><a href="../files/io/mxGenericChangeCodec-js.html#mxGenericChangeCodec" target=_parent class=ISymbol>mxGenericChangeCodec</a></div></div><div class=SRResult id=SR_mxGeometry><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry" target=_parent class=ISymbol>mxGeometry</a></div></div><div class=SRResult id=SR_mxGeometryChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGeometryChange" target=_parent class=ISymbol>mxGeometryChange</a></div></div><div class=SRResult id=SR_mxGraph><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph" target=_parent class=ISymbol>mxGraph</a></div></div><div class=SRResult id=SR_mxGraphAbstractHierarchyCell><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell" target=_parent class=ISymbol>mxGraphAbstractHierarchyCell</a></div></div><div class=SRResult id=SR_mxGraphCodec><div class=IEntry><a href="../files/io/mxGraphCodec-js.html#mxGraphCodec" target=_parent class=ISymbol>mxGraphCodec</a></div></div><div class=SRResult id=SR_mxGraphHandler><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler" target=_parent class=ISymbol>mxGraphHandler</a></div></div><div class=SRResult id=SR_mxGraphHierarchyEdge><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge" target=_parent class=ISymbol>mxGraphHierarchyEdge</a></div></div><div class=SRResult id=SR_mxGraphHierarchyModel><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel" target=_parent class=ISymbol>mxGraphHierarchyModel</a></div></div><div class=SRResult id=SR_mxGraphHierarchyNode><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode" target=_parent class=ISymbol>mxGraphHierarchyNode</a></div></div><div class=SRResult id=SR_mxGraphLayout><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout" target=_parent class=ISymbol>mxGraphLayout</a></div></div><div class=SRResult id=SR_mxGraphModel><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel" target=_parent class=ISymbol>mxGraphModel</a></div></div><div class=SRResult id=SR_mxGraphSelectionModel><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel" target=_parent class=ISymbol>mxGraphSelectionModel</a></div></div><div class=SRResult id=SR_mxGraphView><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView" target=_parent class=ISymbol>mxGraphView</a></div></div><div class=SRResult id=SR_mxGraphViewCodec><div class=IEntry><a href="../files/io/mxGraphViewCodec-js.html#mxGraphViewCodec" target=_parent class=ISymbol>mxGraphViewCodec</a></div></div><div class=SRResult id=SR_mxGuide><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide" target=_parent class=ISymbol>mxGuide</a></div></div><div class=SRResult id=SR_mxHandle><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle" target=_parent class=ISymbol>mxHandle</a></div></div><div class=SRResult id=SR_mxHexagon><div class=IEntry><a href="../files/shape/mxHexagon-js.html#mxHexagon" target=_parent class=ISymbol>mxHexagon</a></div></div><div class=SRResult id=SR_mxHierarchicalLayout><div class=IEntry><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout" target=_parent class=ISymbol>mxHierarchicalLayout</a></div></div><div class=SRResult id=SR_mxHierarchicalLayoutStage><div class=IEntry><a href="../files/layout/hierarchical/stage/mxHierarchicalLayoutStage-js.html#mxHierarchicalLayoutStage" target=_parent class=ISymbol>mxHierarchicalLayoutStage</a></div></div><div class=SRResult id=SR_mxImage><div class=IEntry><a href="../files/util/mxImage-js.html#mxImage" target=_parent class=ISymbol>mxImage</a></div></div><div class=SRResult id=SR_mxImageBundle><div class=IEntry><a href="../files/util/mxImageBundle-js.html#mxImageBundle" target=_parent class=ISymbol>mxImageBundle</a></div></div><div class=SRResult id=SR_mxImageExport><div class=IEntry><a href="../files/util/mxImageExport-js.html#mxImageExport" target=_parent class=ISymbol>mxImageExport</a></div></div><div class=SRResult id=SR_mxImageShape><div class=IEntry><a href="../files/shape/mxImageShape-js.html#mxImageShape" target=_parent class=ISymbol>mxImageShape</a></div></div><div class=SRResult id=SR_mxKeyHandler><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler" target=_parent class=ISymbol>mxKeyHandler</a></div></div><div class=SRResult id=SR_mxLabel><div class=IEntry><a href="../files/shape/mxLabel-js.html#mxLabel" target=_parent class=ISymbol>mxLabel</a></div></div><div class=SRResult id=SR_mxLayoutManager><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager" target=_parent class=ISymbol>mxLayoutManager</a></div></div><div class=SRResult id=SR_mxLine><div class=IEntry><a href="../files/shape/mxLine-js.html#mxLine" target=_parent class=ISymbol>mxLine</a></div></div><div class=SRResult id=SR_mxLog><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog" target=_parent class=ISymbol>mxLog</a></div></div><div class=SRResult id=SR_mxMarker><div class=IEntry><a href="../files/shape/mxMarker-js.html#mxMarker" target=_parent class=ISymbol>mxMarker</a></div></div><div class=SRResult id=SR_mxMedianHybridCrossingReduction><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction" target=_parent class=ISymbol>mxMedianHybridCrossingReduction</a></div></div><div class=SRResult id=SR_mxMinimumCycleRemover><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMinimumCycleRemover-js.html#mxMinimumCycleRemover" target=_parent class=ISymbol>mxMinimumCycleRemover</a></div></div><div class=SRResult id=SR_mxModelCodec><div class=IEntry><a href="../files/io/mxModelCodec-js.html#mxModelCodec" target=_parent class=ISymbol>mxModelCodec</a></div></div><div class=SRResult id=SR_mxMorphing><div class=IEntry><a href="../files/util/mxMorphing-js.html#mxMorphing" target=_parent class=ISymbol>mxMorphing</a></div></div><div class=SRResult id=SR_mxMouseEvent><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent" target=_parent class=ISymbol>mxMouseEvent</a></div></div><div class=SRResult id=SR_mxMultiplicity><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity" target=_parent class=ISymbol>mxMultiplicity</a></div></div><div class=SRResult id=SR_mxObjectCodec><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec" target=_parent class=ISymbol>mxObjectCodec</a></div></div><div class=SRResult id=SR_mxObjectIdentity><div class=IEntry><a href="../files/util/mxObjectIdentity-js.html#mxObjectIdentity" target=_parent class=ISymbol>mxObjectIdentity</a></div></div><div class=SRResult id=SR_mxOutline><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline" target=_parent class=ISymbol>mxOutline</a></div></div><div class=SRResult id=SR_mxPanningHandler><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler" target=_parent class=ISymbol>mxPanningHandler</a></div></div><div class=SRResult id=SR_mxPanningManager><div class=IEntry><a href="../files/util/mxPanningManager-js.html#mxPanningManager" target=_parent class=ISymbol>mxPanningManager</a></div></div><div class=SRResult id=SR_mxParallelEdgeLayout><div class=IEntry><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout" target=_parent class=ISymbol>mxParallelEdgeLayout</a></div></div><div class=SRResult id=SR_mxPartitionLayout><div class=IEntry><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout" target=_parent class=ISymbol>mxPartitionLayout</a></div></div><div class=SRResult id=SR_mxPerimeter><div class=IEntry><a href="../files/view/mxPerimeter-js.html#mxPerimeter" target=_parent class=ISymbol>mxPerimeter</a></div></div><div class=SRResult id=SR_mxPoint><div class=IEntry><a href="../files/util/mxPoint-js.html#mxPoint" target=_parent class=ISymbol>mxPoint</a></div></div><div class=SRResult id=SR_mxPolyline><div class=IEntry><a href="../files/shape/mxPolyline-js.html#mxPolyline" target=_parent class=ISymbol>mxPolyline</a></div></div><div class=SRResult id=SR_mxPopupMenu><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu" target=_parent class=ISymbol>mxPopupMenu</a></div></div><div class=SRResult id=SR_mxPopupMenuHandler><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler" target=_parent class=ISymbol>mxPopupMenuHandler</a></div></div><div class=SRResult id=SR_mxPrintPreview><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview" target=_parent class=ISymbol>mxPrintPreview</a></div></div><div class=SRResult id=SR_mxRadialTreeLayout><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout" target=_parent class=ISymbol>mxRadialTreeLayout</a></div></div><div class=SRResult id=SR_mxRectangle><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle" target=_parent class=ISymbol>mxRectangle</a></div></div><div class=SRResult id=SR_mxRectangleShape><div class=IEntry><a href="../files/shape/mxRectangleShape-js.html#mxRectangleShape" target=_parent class=ISymbol>mxRectangleShape</a></div></div><div class=SRResult id=SR_mxResources><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources" target=_parent class=ISymbol>mxResources</a></div></div><div class=SRResult id=SR_mxRhombus><div class=IEntry><a href="../files/shape/mxRhombus-js.html#mxRhombus" target=_parent class=ISymbol>mxRhombus</a></div></div><div class=SRResult id=SR_mxRootChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxRootChange" target=_parent class=ISymbol>mxRootChange</a></div></div><div class=SRResult id=SR_mxRootChangeCodec><div class=IEntry><a href="../files/io/mxRootChangeCodec-js.html#mxRootChangeCodec" target=_parent class=ISymbol>mxRootChangeCodec</a></div></div><div class=SRResult id=SR_mxRubberband><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband" target=_parent class=ISymbol>mxRubberband</a></div></div><div class=SRResult id=SR_mxSelectionCellsHandler><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler" target=_parent class=ISymbol>mxSelectionCellsHandler</a></div></div><div class=SRResult id=SR_mxSelectionChange><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxSelectionChange" target=_parent class=ISymbol>mxSelectionChange</a></div></div><div class=SRResult id=SR_mxShape><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape" target=_parent class=ISymbol>mxShape</a></div></div><div class=SRResult id=SR_mxStackLayout><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout" target=_parent class=ISymbol>mxStackLayout</a></div></div><div class=SRResult id=SR_mxStencil><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil" target=_parent class=ISymbol>mxStencil</a></div></div><div class=SRResult id=SR_mxStencilRegistry><div class=IEntry><a href="../files/shape/mxStencilRegistry-js.html#mxStencilRegistry" target=_parent class=ISymbol>mxStencilRegistry</a></div></div><div class=SRResult id=SR_mxStyleChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxStyleChange" target=_parent class=ISymbol>mxStyleChange</a></div></div><div class=SRResult id=SR_mxStyleRegistry><div class=IEntry><a href="../files/view/mxStyleRegistry-js.html#mxStyleRegistry" target=_parent class=ISymbol>mxStyleRegistry</a></div></div><div class=SRResult id=SR_mxStylesheet><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet" target=_parent class=ISymbol>mxStylesheet</a></div></div><div class=SRResult id=SR_mxStylesheetCodec><div class=IEntry><a href="../files/io/mxStylesheetCodec-js.html#mxStylesheetCodec" target=_parent class=ISymbol>mxStylesheetCodec</a></div></div><div class=SRResult id=SR_mxSvgCanvas2D><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D" target=_parent class=ISymbol>mxSvgCanvas2D</a></div></div><div class=SRResult id=SR_mxSwimlane><div class=IEntry><a href="../files/shape/mxSwimlane-js.html#mxSwimlane" target=_parent class=ISymbol>mxSwimlane</a></div></div><div class=SRResult id=SR_mxSwimlaneLayout><div class=IEntry><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout" target=_parent class=ISymbol>mxSwimlaneLayout</a></div></div><div class=SRResult id=SR_mxSwimlaneManager><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager" target=_parent class=ISymbol>mxSwimlaneManager</a></div></div><div class=SRResult id=SR_mxSwimlaneModel><div class=IEntry><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel" target=_parent class=ISymbol>mxSwimlaneModel</a></div></div><div class=SRResult id=SR_mxSwimlaneOrdering><div class=IEntry><a href="../files/layout/hierarchical/stage/mxSwimlaneOrdering-js.html#mxSwimlaneOrdering" target=_parent class=ISymbol>mxSwimlaneOrdering</a></div></div><div class=SRResult id=SR_mxTemporaryCellStates><div class=IEntry><a href="../files/view/mxTemporaryCellStates-js.html#mxTemporaryCellStates" target=_parent class=ISymbol>mxTemporaryCellStates</a></div></div><div class=SRResult id=SR_mxTerminalChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxTerminalChange" target=_parent class=ISymbol>mxTerminalChange</a></div></div><div class=SRResult id=SR_mxTerminalChangeCodec><div class=IEntry><a href="../files/io/mxTerminalChangeCodec-js.html#mxTerminalChangeCodec" target=_parent class=ISymbol>mxTerminalChangeCodec</a></div></div><div class=SRResult id=SR_mxText><div class=IEntry><a href="../files/shape/mxText-js.html#mxText" target=_parent class=ISymbol>mxText</a></div></div><div class=SRResult id=SR_mxToolbar><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar" target=_parent class=ISymbol>mxToolbar</a></div></div><div class=SRResult id=SR_mxTooltipHandler><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler" target=_parent class=ISymbol>mxTooltipHandler</a></div></div><div class=SRResult id=SR_mxTriangle><div class=IEntry><a href="../files/shape/mxTriangle-js.html#mxTriangle" target=_parent class=ISymbol>mxTriangle</a></div></div><div class=SRResult id=SR_mxUndoableEdit><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit" target=_parent class=ISymbol>mxUndoableEdit</a></div></div><div class=SRResult id=SR_mxUndoManager><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager" target=_parent class=ISymbol>mxUndoManager</a></div></div><div class=SRResult id=SR_mxUrlConverter><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter" target=_parent class=ISymbol>mxUrlConverter</a></div></div><div class=SRResult id=SR_mxUtils><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils" target=_parent class=ISymbol>mxUtils</a></div></div><div class=SRResult id=SR_mxValueChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxValueChange" target=_parent class=ISymbol>mxValueChange</a></div></div><div class=SRResult id=SR_mxVertexHandler><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler" target=_parent class=ISymbol>mxVertexHandler</a></div></div><div class=SRResult id=SR_mxVisibleChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxVisibleChange" target=_parent class=ISymbol>mxVisibleChange</a></div></div><div class=SRResult id=SR_mxVmlCanvas2D><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D" target=_parent class=ISymbol>mxVmlCanvas2D</a></div></div><div class=SRResult id=SR_mxWindow><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow" target=_parent class=ISymbol>mxWindow</a></div></div><div class=SRResult id=SR_mxXmlCanvas2D><div class=IEntry><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D" target=_parent class=ISymbol>mxXmlCanvas2D</a></div></div><div class=SRResult id=SR_mxXmlRequest><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest" target=_parent class=ISymbol>mxXmlRequest</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/ClassesW.html b/docs/js-api/search/ClassesW.html
index ae41034f5..9213d162f 100644
--- a/docs/js-api/search/ClassesW.html
+++ b/docs/js-api/search/ClassesW.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_WeightedCellSorter><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter" target=_parent class=ISymbol>WeightedCellSorter</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/CookiesM.html b/docs/js-api/search/CookiesM.html
index 03fc81b4c..d8c71844c 100644
--- a/docs/js-api/search/CookiesM.html
+++ b/docs/js-api/search/CookiesM.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_mxgraph_equseen><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxgraph=seen" target=_parent class=ISymbol>mxgraph=seen</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsA.html b/docs/js-api/search/EventsA.html
index 68aecf8dc..d5f1424ab 100644
--- a/docs/js-api/search/EventsA.html
+++ b/docs/js-api/search/EventsA.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_ACTIVATE><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.ACTIVATE" target=_parent class=ISymbol>ACTIVATE</a>, <span class=IParent>mxWindow.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_ADD><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ADD')" class=ISymbol>ADD</a><div class=ISubIndex><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.mxEvent.ADD" target=_parent class=IParent>mxSelectionCellsHandler.<wbr>mxEvent</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.mxEvent.ADD" target=_parent class=IParent>mxUndoManager.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_ADD_undCELLS><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.ADD_CELLS" target=_parent class=ISymbol>ADD_CELLS</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_ADD_undOVERLAY><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.ADD_OVERLAY" target=_parent class=ISymbol>ADD_OVERLAY</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_ADD_undVERTEX><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.ADD_VERTEX" target=_parent class=ISymbol>ADD_VERTEX</a>, <span class=IParent>mxEditor.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_AFTER_undADD_undVERTEX><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.AFTER_ADD_VERTEX" target=_parent class=ISymbol>AFTER_ADD_VERTEX</a>, <span class=IParent>mxEditor.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_ALIGN_undCELLS><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.ALIGN_CELLS" target=_parent class=ISymbol>ALIGN_CELLS</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsB.html b/docs/js-api/search/EventsB.html
index 7a197d6dc..9cbbd1e72 100644
--- a/docs/js-api/search/EventsB.html
+++ b/docs/js-api/search/EventsB.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_BEFORE_undADD_undVERTEX><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.BEFORE_ADD_VERTEX" target=_parent class=ISymbol>BEFORE_ADD_VERTEX</a>, <span class=IParent>mxEditor.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_BEFORE_undUNDO><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.BEFORE_UNDO" target=_parent class=ISymbol>BEFORE_UNDO</a>, <span class=IParent>mxGraphModel.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_BEGIN_undUPDATE><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.BEGIN_UPDATE" target=_parent class=ISymbol>BEGIN_UPDATE</a>, <span class=IParent>mxGraphModel.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsC.html b/docs/js-api/search/EventsC.html
index e838082a6..709b7c42a 100644
--- a/docs/js-api/search/EventsC.html
+++ b/docs/js-api/search/EventsC.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_CELL_undCONNECTED><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CELL_CONNECTED" target=_parent class=ISymbol>CELL_CONNECTED</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_CELLS_undADDED><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CELLS_ADDED" target=_parent class=ISymbol>CELLS_ADDED</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_CELLS_undFOLDED><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CELLS_FOLDED" target=_parent class=ISymbol>CELLS_FOLDED</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_CELLS_undMOVED><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CELLS_MOVED" target=_parent class=ISymbol>CELLS_MOVED</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_CELLS_undORDERED><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CELLS_ORDERED" target=_parent class=ISymbol>CELLS_ORDERED</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_CELLS_undREMOVED><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CELLS_REMOVED" target=_parent class=ISymbol>CELLS_REMOVED</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_CELLS_undRESIZED><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CELLS_RESIZED" target=_parent class=ISymbol>CELLS_RESIZED</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_CHANGE><div class=IEntry><a href="javascript:searchResults.Toggle('SR_CHANGE')" class=ISymbol>CHANGE</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.CHANGE" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.mxEvent.CHANGE" target=_parent class=IParent>mxGraphSelectionModel.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_CLEAR><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.mxEvent.CLEAR" target=_parent class=ISymbol>CLEAR</a>, <span class=IParent>mxUndoManager.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_CLICK><div class=IEntry><a href="javascript:searchResults.Toggle('SR_CLICK')" class=ISymbol>CLICK</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.mxEvent.CLICK" target=_parent class=IParent>mxCellOverlay.<wbr>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CLICK" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_CLOSE><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.CLOSE" target=_parent class=ISymbol>CLOSE</a>, <span class=IParent>mxWindow.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_CONNECT><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mxEvent.CONNECT" target=_parent class=ISymbol>CONNECT</a>, <span class=IParent>mxConnectionHandler.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_CONNECT_undCELL><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CONNECT_CELL" target=_parent class=ISymbol>CONNECT_CELL</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsD.html b/docs/js-api/search/EventsD.html
index 151b1f6aa..2953aa25a 100644
--- a/docs/js-api/search/EventsD.html
+++ b/docs/js-api/search/EventsD.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_DESTROY><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.DESTROY" target=_parent class=ISymbol>DESTROY</a>, <span class=IParent>mxWindow.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_DOUBLE_undCLICK><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.DOUBLE_CLICK" target=_parent class=ISymbol>DOUBLE_CLICK</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsE.html b/docs/js-api/search/EventsE.html
index e758f5fc9..f0752738d 100644
--- a/docs/js-api/search/EventsE.html
+++ b/docs/js-api/search/EventsE.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_EDITING_undSTARTED><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.EDITING_STARTED" target=_parent class=ISymbol>EDITING_STARTED</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_EDITING_undSTOPPED><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.EDITING_STOPPED" target=_parent class=ISymbol>EDITING_STOPPED</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_END_undEDIT><div class=IEntry><a href="javascript:searchResults.Toggle('SR_END_undEDIT')" class=ISymbol>END_EDIT</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.END_EDIT" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.mxEvent.END_EDIT" target=_parent class=IParent>mxUndoableEdit.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_END_undUPDATE><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.END_UPDATE" target=_parent class=ISymbol>END_UPDATE</a>, <span class=IParent>mxGraphModel.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_ESCAPE><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.ESCAPE" target=_parent class=ISymbol>ESCAPE</a>, <span class=IParent>mxEditor.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_EXECUTE><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.EXECUTE" target=_parent class=ISymbol>EXECUTE</a>, <span class=IParent>mxGraphModel.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_EXECUTED><div class=IEntry><a href="javascript:searchResults.Toggle('SR_EXECUTED')" class=ISymbol>EXECUTED</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.EXECUTED" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.mxEvent.EXECUTED" target=_parent class=IParent>mxUndoableEdit.<wbr>mxEvent</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsF.html b/docs/js-api/search/EventsF.html
index 96cf29604..eb868b936 100644
--- a/docs/js-api/search/EventsF.html
+++ b/docs/js-api/search/EventsF.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_FIRE_undMOUSE_undEVENT><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.FIRE_MOUSE_EVENT" target=_parent class=ISymbol>FIRE_MOUSE_EVENT</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_FLIP_undEDGE><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.FLIP_EDGE" target=_parent class=ISymbol>FLIP_EDGE</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_FOLD_undCELLS><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.FOLD_CELLS" target=_parent class=ISymbol>FOLD_CELLS</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsG.html b/docs/js-api/search/EventsG.html
index 0fa9121b8..55e069a68 100644
--- a/docs/js-api/search/EventsG.html
+++ b/docs/js-api/search/EventsG.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_GESTURE><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.GESTURE" target=_parent class=ISymbol>GESTURE</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_GROUP_undCELLS><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.GROUP_CELLS" target=_parent class=ISymbol>GROUP_CELLS</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsH.html b/docs/js-api/search/EventsH.html
index d2c608b0c..9c4905444 100644
--- a/docs/js-api/search/EventsH.html
+++ b/docs/js-api/search/EventsH.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_HIDE><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.HIDE" target=_parent class=ISymbol>HIDE</a>, <span class=IParent>mxWindow.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsL.html b/docs/js-api/search/EventsL.html
index 0f404a70f..e9b41886d 100644
--- a/docs/js-api/search/EventsL.html
+++ b/docs/js-api/search/EventsL.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_LABEL_undCHANGED><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.LABEL_CHANGED" target=_parent class=ISymbol>LABEL_CHANGED</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_LAYOUT_undCELLS><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.mxEvent.LAYOUT_CELLS" target=_parent class=ISymbol>LAYOUT_CELLS</a>, <span class=IParent>mxLayoutManager.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsM.html b/docs/js-api/search/EventsM.html
index e95433c0d..05936ea1a 100644
--- a/docs/js-api/search/EventsM.html
+++ b/docs/js-api/search/EventsM.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_MARK><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.mxEvent.MARK" target=_parent class=ISymbol>MARK</a>, <span class=IParent>mxCellMarker.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_MAXIMIZE><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.MAXIMIZE" target=_parent class=ISymbol>MAXIMIZE</a>, <span class=IParent>mxWindow.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_MINIMIZE><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.MINIMIZE" target=_parent class=ISymbol>MINIMIZE</a>, <span class=IParent>mxWindow.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_MOVE><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.MOVE" target=_parent class=ISymbol>MOVE</a>, <span class=IParent>mxWindow.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_MOVE_undCELLS><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.MOVE_CELLS" target=_parent class=ISymbol>MOVE_CELLS</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_MOVE_undEND><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.MOVE_END" target=_parent class=ISymbol>MOVE_END</a>, <span class=IParent>mxWindow.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_MOVE_undSTART><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.MOVE_START" target=_parent class=ISymbol>MOVE_START</a>, <span class=IParent>mxWindow.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsN.html b/docs/js-api/search/EventsN.html
index ed6f2b33d..fe3e7b235 100644
--- a/docs/js-api/search/EventsN.html
+++ b/docs/js-api/search/EventsN.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_NORMALIZE><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.NORMALIZE" target=_parent class=ISymbol>NORMALIZE</a>, <span class=IParent>mxWindow.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_NOTIFY><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.NOTIFY" target=_parent class=ISymbol>NOTIFY</a>, <span class=IParent>mxGraphModel.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsO.html b/docs/js-api/search/EventsO.html
index c76230ba7..83ff61722 100644
--- a/docs/js-api/search/EventsO.html
+++ b/docs/js-api/search/EventsO.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_OPEN><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.OPEN" target=_parent class=ISymbol>OPEN</a>, <span class=IParent>mxEditor.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_ORDER_undCELLS><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.ORDER_CELLS" target=_parent class=ISymbol>ORDER_CELLS</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsP.html b/docs/js-api/search/EventsP.html
index bf0693565..b370e00e6 100644
--- a/docs/js-api/search/EventsP.html
+++ b/docs/js-api/search/EventsP.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_PAN><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.mxEvent.PAN" target=_parent class=ISymbol>PAN</a>, <span class=IParent>mxPanningHandler.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_PAN_undEND><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.mxEvent.PAN_END" target=_parent class=ISymbol>PAN_END</a>, <span class=IParent>mxPanningHandler.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_PAN_undSTART><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.mxEvent.PAN_START" target=_parent class=ISymbol>PAN_START</a>, <span class=IParent>mxPanningHandler.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_POST><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.POST" target=_parent class=ISymbol>POST</a>, <span class=IParent>mxEditor.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsR.html b/docs/js-api/search/EventsR.html
index 62521d8f8..791ae66b2 100644
--- a/docs/js-api/search/EventsR.html
+++ b/docs/js-api/search/EventsR.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_REDO><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.mxEvent.REDO" target=_parent class=ISymbol>REDO</a>, <span class=IParent>mxUndoManager.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_REFRESH><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.REFRESH" target=_parent class=ISymbol>REFRESH</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_REMOVE><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.mxEvent.REMOVE" target=_parent class=ISymbol>REMOVE</a>, <span class=IParent>mxSelectionCellsHandler.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_REMOVE_undCELLS><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.REMOVE_CELLS" target=_parent class=ISymbol>REMOVE_CELLS</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_REMOVE_undCELLS_undFROM_undPARENT><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.REMOVE_CELLS_FROM_PARENT" target=_parent class=ISymbol>REMOVE_CELLS_FROM_PARENT</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_REMOVE_undOVERLAY><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.REMOVE_OVERLAY" target=_parent class=ISymbol>REMOVE_OVERLAY</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_RESET><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mxEvent.RESET" target=_parent class=ISymbol>RESET</a>, <span class=IParent>mxConnectionHandler.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_RESIZE><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.RESIZE" target=_parent class=ISymbol>RESIZE</a>, <span class=IParent>mxWindow.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_RESIZE_undCELLS><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.RESIZE_CELLS" target=_parent class=ISymbol>RESIZE_CELLS</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_RESIZE_undEND><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.RESIZE_END" target=_parent class=ISymbol>RESIZE_END</a>, <span class=IParent>mxWindow.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_RESIZE_undSTART><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.RESIZE_START" target=_parent class=ISymbol>RESIZE_START</a>, <span class=IParent>mxWindow.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_ROOT><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ROOT')" class=ISymbol>ROOT</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.ROOT" target=_parent class=IParent>mxEditor.<wbr>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.ROOT" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsS.html b/docs/js-api/search/EventsS.html
index a48a0c468..1ed6a0eb1 100644
--- a/docs/js-api/search/EventsS.html
+++ b/docs/js-api/search/EventsS.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_SAVE><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.SAVE" target=_parent class=ISymbol>SAVE</a>, <span class=IParent>mxEditor.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_SCALE><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.mxEvent.SCALE" target=_parent class=ISymbol>SCALE</a>, <span class=IParent>mxGraphView.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_SCALE_undAND_undTRANSLATE><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.mxEvent.SCALE_AND_TRANSLATE" target=_parent class=ISymbol>SCALE_AND_TRANSLATE</a>, <span class=IParent>mxGraphView.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_SELECT><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.mxEvent.SELECT" target=_parent class=ISymbol>SELECT</a>, <span class=IParent>mxToolbar.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_SHOW><div class=IEntry><a href="javascript:searchResults.Toggle('SR_SHOW')" class=ISymbol>SHOW</a><div class=ISubIndex><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.mxEvent.SHOW" target=_parent class=IParent>mxPopupMenu.<wbr>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.SHOW" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_SIZE><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.SIZE" target=_parent class=ISymbol>SIZE</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_SPLIT_undEDGE><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.SPLIT_EDGE" target=_parent class=ISymbol>SPLIT_EDGE</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_START><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mxEvent.START" target=_parent class=ISymbol>START</a>, <span class=IParent>mxConnectionHandler.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_START_undEDIT><div class=IEntry><a href="javascript:searchResults.Toggle('SR_START_undEDIT')" class=ISymbol>START_EDIT</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.START_EDIT" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.mxEvent.START_EDIT" target=_parent class=IParent>mxUndoableEdit.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_START_undEDITING><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.START_EDITING" target=_parent class=ISymbol>START_EDITING</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsT.html b/docs/js-api/search/EventsT.html
index d4d0eca91..c7f5f9d04 100644
--- a/docs/js-api/search/EventsT.html
+++ b/docs/js-api/search/EventsT.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_TAP_undAND_undHOLD><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.TAP_AND_HOLD" target=_parent class=ISymbol>TAP_AND_HOLD</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_TOGGLE_undCELLS><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.TOGGLE_CELLS" target=_parent class=ISymbol>TOGGLE_CELLS</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_TRANSLATE><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.mxEvent.TRANSLATE" target=_parent class=ISymbol>TRANSLATE</a>, <span class=IParent>mxGraphView.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/EventsU.html b/docs/js-api/search/EventsU.html
index 6f444af1e..623d68c8c 100644
--- a/docs/js-api/search/EventsU.html
+++ b/docs/js-api/search/EventsU.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_UNDO><div class=IEntry><a href="javascript:searchResults.Toggle('SR_UNDO')" class=ISymbol>UNDO</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.UNDO" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.mxEvent.UNDO" target=_parent class=IParent>mxGraphSelectionModel.<wbr>mxEvent</a><a href="../files/view/mxGraphView-js.html#mxGraphView.mxEvent.UNDO" target=_parent class=IParent>mxGraphView.<wbr>mxEvent</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.mxEvent.UNDO" target=_parent class=IParent>mxUndoManager.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_UNGROUP_undCELLS><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.UNGROUP_CELLS" target=_parent class=ISymbol>UNGROUP_CELLS</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div><div class=SRResult id=SR_UP><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.mxEvent.DOWN_and_mxEvent.UP" target=_parent class=ISymbol>UP</a>, <span class=IParent>mxGraphView.<wbr>mxEvent.<wbr>DOWN and mxEvent</span></div></div><div class=SRResult id=SR_UPDATE_undCELL_undSIZE><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.UPDATE_CELL_SIZE" target=_parent class=ISymbol>UPDATE_CELL_SIZE</a>, <span class=IParent>mxGraph.<wbr>mxEvent</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FilesA.html b/docs/js-api/search/FilesA.html
index 3c0797828..fe148976c 100644
--- a/docs/js-api/search/FilesA.html
+++ b/docs/js-api/search/FilesA.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_API_spcSpecification><div class=IEntry><a href="../files/index-txt.html#API_Specification" target=_parent class=ISymbol>API Specification</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FilesM.html b/docs/js-api/search/FilesM.html
index 4561e6a2a..d33c16e57 100644
--- a/docs/js-api/search/FilesM.html
+++ b/docs/js-api/search/FilesM.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_mxEdgeSegmentHandler_perjs><div class=IEntry><a href="../files/handler/mxEdgeSegmentHandler-js.html#mxEdgeSegmentHandler.js" target=_parent class=ISymbol>mxEdgeSegmentHandler.js</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsA.html b/docs/js-api/search/FunctionsA.html
index 9bd4934c5..f5097d1da 100644
--- a/docs/js-api/search/FunctionsA.html
+++ b/docs/js-api/search/FunctionsA.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_activate><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.activate" target=_parent class=ISymbol>activate</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_add><div class=IEntry><a href="javascript:searchResults.Toggle('SR_add')" class=ISymbol>add</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.add" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxRectangle-js.html#mxRectangle.add" target=_parent class=IParent>mxRectangle</a><a href="../files/util/mxResources-js.html#mxResources.add" target=_parent class=IParent>mxResources</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.add" target=_parent class=IParent>mxUndoableEdit</a></div></div></div><div class=SRResult id=SR_addAction><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addAction')" class=ISymbol>addAction</a><div class=ISubIndex><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.addAction" target=_parent class=IParent>mxDefaultPopupMenu</a><a href="../files/editor/mxEditor-js.html#mxEditor.addAction" target=_parent class=IParent>mxEditor</a></div></div></div><div class=SRResult id=SR_addActionCombo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addActionCombo')" class=ISymbol>addActionCombo</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addActionCombo" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/util/mxToolbar-js.html#mxToolbar.addActionCombo" target=_parent class=IParent>mxToolbar</a></div></div></div><div class=SRResult id=SR_addActionOption><div class=IEntry><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addActionOption" target=_parent class=ISymbol>addActionOption</a>, <span class=IParent>mxDefaultToolbar</span></div></div><div class=SRResult id=SR_addActions><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.addActions" target=_parent class=ISymbol>addActions</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_addAlias><div class=IEntry><a href="../files/io/mxCodecRegistry-js.html#mxCodecRegistry.addAlias" target=_parent class=ISymbol>addAlias</a>, <span class=IParent>mxCodecRegistry</span></div></div><div class=SRResult id=SR_addAllEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.addAllEdges" target=_parent class=ISymbol>addAllEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_addAncestorsWithLayout><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.addAncestorsWithLayout" target=_parent class=ISymbol>addAncestorsWithLayout</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_addBreak><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.addBreak" target=_parent class=ISymbol>addBreak</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_addButton><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.addButton" target=_parent class=ISymbol>addButton</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_addButtons><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.addButtons" target=_parent class=ISymbol>addButtons</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_addCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addCell')" class=ISymbol>addCell</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.addCell" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.addCell" target=_parent class=IParent>mxGraphSelectionModel</a></div></div></div><div class=SRResult id=SR_addCellOverlay><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.addCellOverlay" target=_parent class=ISymbol>addCellOverlay</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_addCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addCells')" class=ISymbol>addCells</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.addCells" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.addCells" target=_parent class=IParent>mxGraphSelectionModel</a></div></div></div><div class=SRResult id=SR_addCellsWithLayout><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.addCellsWithLayout" target=_parent class=ISymbol>addCellsWithLayout</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_addCheckbox><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.addCheckbox" target=_parent class=ISymbol>addCheckbox</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_addCombo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addCombo')" class=ISymbol>addCombo</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addCombo" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/util/mxForm-js.html#mxForm.addCombo" target=_parent class=IParent>mxForm</a><a href="../files/util/mxToolbar-js.html#mxToolbar.addCombo" target=_parent class=IParent>mxToolbar</a></div></div></div><div class=SRResult id=SR_addDescendantsWithLayout><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.addDescendantsWithLayout" target=_parent class=ISymbol>addDescendantsWithLayout</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_addEdge><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.addEdge" target=_parent class=ISymbol>addEdge</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_addEdges><div class=IEntry><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.addEdges" target=_parent class=ISymbol>addEdges</a>, <span class=IParent>mxCellStatePreview</span></div></div><div class=SRResult id=SR_addElement><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.addElement" target=_parent class=ISymbol>addElement</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_addField><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.addField" target=_parent class=ISymbol>addField</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_addForeignObject><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.addForeignObject" target=_parent class=ISymbol>addForeignObject</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_addGestureListeners><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.addGestureListeners" target=_parent class=ISymbol>addGestureListeners</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_addGraphFragment><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.addGraphFragment" target=_parent class=ISymbol>addGraphFragment</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_addImageBundle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.addImageBundle" target=_parent class=ISymbol>addImageBundle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_addItem><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addItem')" class=ISymbol>addItem</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addItem" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.addItem" target=_parent class=IParent>mxPopupMenu</a><a href="../files/util/mxToolbar-js.html#mxToolbar.addItem" target=_parent class=IParent>mxToolbar</a></div></div></div><div class=SRResult id=SR_addItems><div class=IEntry><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.addItems" target=_parent class=ISymbol>addItems</a>, <span class=IParent>mxDefaultPopupMenu</span></div></div><div class=SRResult id=SR_addLine><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.addLine" target=_parent class=ISymbol>addLine</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_addListener><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addListener')" class=ISymbol>addListener</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.addListener" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxEventSource-js.html#mxEventSource.addListener" target=_parent class=IParent>mxEventSource</a></div></div></div><div class=SRResult id=SR_addMarker><div class=IEntry><a href="../files/shape/mxMarker-js.html#mxMarker.addMarker" target=_parent class=ISymbol>addMarker</a>, <span class=IParent>mxMarker</span></div></div><div class=SRResult id=SR_addMode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addMode')" class=ISymbol>addMode</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addMode" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/util/mxToolbar-js.html#mxToolbar.addMode" target=_parent class=IParent>mxToolbar</a></div></div></div><div class=SRResult id=SR_addMouseListener><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.addMouseListener" target=_parent class=ISymbol>addMouseListener</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_addNode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addNode')" class=ISymbol>addNode</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.addNode" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.addNode" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_addObjectValue><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.addObjectValue" target=_parent class=ISymbol>addObjectValue</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_addOp><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.addOp" target=_parent class=ISymbol>addOp</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_addOption><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addOption')" class=ISymbol>addOption</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addOption" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/util/mxForm-js.html#mxForm.addOption" target=_parent class=IParent>mxForm</a><a href="../files/util/mxToolbar-js.html#mxToolbar.addOption" target=_parent class=IParent>mxToolbar</a></div></div></div><div class=SRResult id=SR_addPageBreak><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.addPageBreak" target=_parent class=ISymbol>addPageBreak</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_addPoint><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.addPoint" target=_parent class=ISymbol>addPoint</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_addPointAt><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.addPointAt" target=_parent class=ISymbol>addPointAt</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_addPoints><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.addPoints" target=_parent class=ISymbol>addPoints</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_addPrototype><div class=IEntry><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addPrototype" target=_parent class=ISymbol>addPrototype</a>, <span class=IParent>mxDefaultToolbar</span></div></div><div class=SRResult id=SR_addSelectionCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.addSelectionCell" target=_parent class=ISymbol>addSelectionCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_addSelectionCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.addSelectionCells" target=_parent class=ISymbol>addSelectionCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_addSeparator><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addSeparator')" class=ISymbol>addSeparator</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addSeparator" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.addSeparator" target=_parent class=IParent>mxPopupMenu</a><a href="../files/util/mxToolbar-js.html#mxToolbar.addSeparator" target=_parent class=IParent>mxToolbar</a></div></div></div><div class=SRResult id=SR_addStates><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.addStates" target=_parent class=ISymbol>addStates</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_addStencil><div class=IEntry><a href="../files/shape/mxStencilRegistry-js.html#mxStencilRegistry.addStencil" target=_parent class=ISymbol>addStencil</a>, <span class=IParent>mxStencilRegistry</span></div></div><div class=SRResult id=SR_addStylename><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.addStylename" target=_parent class=ISymbol>addStylename</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_addSwitchMode><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.addSwitchMode" target=_parent class=ISymbol>addSwitchMode</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_addTemplate><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.addTemplate" target=_parent class=ISymbol>addTemplate</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_addText><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.addText" target=_parent class=ISymbol>addText</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_addTextarea><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.addTextarea" target=_parent class=ISymbol>addTextarea</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_addTextBackground><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.addTextBackground" target=_parent class=ISymbol>addTextBackground</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_addTransparentBackgroundFilter><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.addTransparentBackgroundFilter" target=_parent class=ISymbol>addTransparentBackgroundFilter</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_addVertex><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.addVertex" target=_parent class=ISymbol>addVertex</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_addWaypoint><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.addWaypoint" target=_parent class=ISymbol>addWaypoint</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_adjustParents><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.adjustParents" target=_parent class=ISymbol>adjustParents</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_afterDecode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_afterDecode')" class=ISymbol>afterDecode</a><div class=ISubIndex><a href="../files/io/mxChildChangeCodec-js.html#mxChildChangeCodec.afterDecode" target=_parent class=IParent>mxChildChangeCodec</a><a href="../files/io/mxGenericChangeCodec-js.html#mxGenericChangeCodec.afterDecode" target=_parent class=IParent>mxGenericChangeCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.afterDecode" target=_parent class=IParent>mxObjectCodec</a><a href="../files/io/mxRootChangeCodec-js.html#mxRootChangeCodec.afterDecode" target=_parent class=IParent>mxRootChangeCodec</a><a href="../files/io/mxTerminalChangeCodec-js.html#mxTerminalChangeCodec.afterDecode" target=_parent class=IParent>mxTerminalChangeCodec</a></div></div></div><div class=SRResult id=SR_afterEncode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_afterEncode')" class=ISymbol>afterEncode</a><div class=ISubIndex><a href="../files/io/mxCellCodec-js.html#mxCellCodec.afterEncode" target=_parent class=IParent>mxCellCodec</a><a href="../files/io/mxChildChangeCodec-js.html#mxChildChangeCodec.afterEncode" target=_parent class=IParent>mxChildChangeCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.afterEncode" target=_parent class=IParent>mxObjectCodec</a></div></div></div><div class=SRResult id=SR_afterPaint><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.afterPaint" target=_parent class=ISymbol>afterPaint</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_alert><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.alert" target=_parent class=ISymbol>alert</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_alignCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.alignCells" target=_parent class=ISymbol>alignCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_allowEval><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.allowEval" target=_parent class=ISymbol>allowEval</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_animateCell><div class=IEntry><a href="../files/util/mxMorphing-js.html#mxMorphing.animateCell" target=_parent class=ISymbol>animateCell</a>, <span class=IParent>mxMorphing</span></div></div><div class=SRResult id=SR_animateChanges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_animateChanges')" class=ISymbol>animateChanges</a><div class=ISubIndex><a href="../files/util/mxEffects-js.html#mxEffects.animateChanges" target=_parent class=IParent>mxEffects</a><a href="../files/util/mxUtils-js.html#mxUtils.animateChanges" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_appendGraph><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.appendGraph" target=_parent class=ISymbol>appendGraph</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_apply><div class=IEntry><a href="javascript:searchResults.Toggle('SR_apply')" class=ISymbol>apply</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.apply" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/shape/mxImageShape-js.html#mxImageShape.apply" target=_parent class=IParent>mxImageShape</a><a href="../files/shape/mxShape-js.html#mxShape.apply" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.apply" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_applyValue><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.applyValue" target=_parent class=ISymbol>applyValue</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_arcTo><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.arcTo" target=_parent class=ISymbol>arcTo</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_arcToCurves><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.arcToCurves" target=_parent class=ISymbol>arcToCurves</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_arrangeGroups><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.arrangeGroups" target=_parent class=ISymbol>arrangeGroups</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_attachParent><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.attachParent" target=_parent class=ISymbol>attachParent</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_augmentBoundingBox><div class=IEntry><a href="javascript:searchResults.Toggle('SR_augmentBoundingBox')" class=ISymbol>augmentBoundingBox</a><div class=ISubIndex><a href="../files/shape/mxArrow-js.html#mxArrow.augmentBoundingBox" target=_parent class=IParent>mxArrow</a><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.augmentBoundingBox" target=_parent class=IParent>mxArrowConnector</a><a href="../files/shape/mxConnector-js.html#mxConnector.augmentBoundingBox" target=_parent class=IParent>mxConnector</a><a href="../files/shape/mxShape-js.html#mxShape.augmentBoundingBox" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_autoSizeCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.autoSizeCell" target=_parent class=ISymbol>autoSizeCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_avoid><div class=IEntry><a href="../files/layout/mxEdgeLabelLayout-js.html#mxEdgeLabelLayout.avoid" target=_parent class=ISymbol>avoid</a>, <span class=IParent>mxEdgeLabelLayout</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsB.html b/docs/js-api/search/FunctionsB.html
index 90d293cfa..d20253709 100644
--- a/docs/js-api/search/FunctionsB.html
+++ b/docs/js-api/search/FunctionsB.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_beforeDecode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_beforeDecode')" class=ISymbol>beforeDecode</a><div class=ISubIndex><a href="../files/io/mxCellCodec-js.html#mxCellCodec.beforeDecode" target=_parent class=IParent>mxCellCodec</a><a href="../files/io/mxChildChangeCodec-js.html#mxChildChangeCodec.beforeDecode" target=_parent class=IParent>mxChildChangeCodec</a><a href="../files/io/mxEditorCodec-js.html#mxEditorCodec.beforeDecode" target=_parent class=IParent>mxEditorCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.beforeDecode" target=_parent class=IParent>mxObjectCodec</a><a href="../files/io/mxRootChangeCodec-js.html#mxRootChangeCodec.beforeDecode" target=_parent class=IParent>mxRootChangeCodec</a></div></div></div><div class=SRResult id=SR_beforeEncode><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.beforeEncode" target=_parent class=ISymbol>beforeEncode</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_beforePaint><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.beforePaint" target=_parent class=ISymbol>beforePaint</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_beforeUndo><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.beforeUndo" target=_parent class=ISymbol>beforeUndo</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_begin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_begin')" class=ISymbol>begin</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.begin" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.begin" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.begin" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.begin" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_beginUpdate><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.beginUpdate" target=_parent class=ISymbol>beginUpdate</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_bind><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.bind" target=_parent class=ISymbol>bind</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_bindAction><div class=IEntry><a href="../files/editor/mxDefaultKeyHandler-js.html#mxDefaultKeyHandler.bindAction" target=_parent class=ISymbol>bindAction</a>, <span class=IParent>mxDefaultKeyHandler</span></div></div><div class=SRResult id=SR_bindControlKey><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.bindControlKey" target=_parent class=ISymbol>bindControlKey</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_bindControlShiftKey><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.bindControlShiftKey" target=_parent class=ISymbol>bindControlShiftKey</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_bindKey><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.bindKey" target=_parent class=ISymbol>bindKey</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_bindShiftKey><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.bindShiftKey" target=_parent class=ISymbol>bindShiftKey</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_br><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.br" target=_parent class=ISymbol>br</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_bridge><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.bridge" target=_parent class=ISymbol>bridge</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_button><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.button" target=_parent class=ISymbol>button</a>, <span class=IParent>mxUtils</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsC.html b/docs/js-api/search/FunctionsC.html
index 7d56d6c1d..01d7afad4 100644
--- a/docs/js-api/search/FunctionsC.html
+++ b/docs/js-api/search/FunctionsC.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_calcAttraction><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.calcAttraction" target=_parent class=ISymbol>calcAttraction</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_calcPositions><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.calcPositions" target=_parent class=ISymbol>calcPositions</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_calcRepulsion><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.calcRepulsion" target=_parent class=ISymbol>calcRepulsion</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_calcRowDims><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.calcRowDims" target=_parent class=ISymbol>calcRowDims</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_calculateCrossings><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.calculateCrossings" target=_parent class=ISymbol>calculateCrossings</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_calculatedWeightedValue><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.calculatedWeightedValue" target=_parent class=ISymbol>calculatedWeightedValue</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_calculateRankCrossing><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.calculateRankCrossing" target=_parent class=ISymbol>calculateRankCrossing</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_calculateWidestRank><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.calculateWidestRank" target=_parent class=ISymbol>calculateWidestRank</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_canExportCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.canExportCell" target=_parent class=ISymbol>canExportCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_canImportCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.canImportCell" target=_parent class=ISymbol>canImportCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_canRedo><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.canRedo" target=_parent class=ISymbol>canRedo</a>, <span class=IParent>mxUndoManager</span></div></div><div class=SRResult id=SR_canUndo><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.canUndo" target=_parent class=ISymbol>canUndo</a>, <span class=IParent>mxUndoManager</span></div></div><div class=SRResult id=SR_cascadeOpacity><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cascadeOpacity')" class=ISymbol>cascadeOpacity</a><div class=ISubIndex><a href="../files/util/mxEffects-js.html#mxEffects.cascadeOpacity" target=_parent class=IParent>mxEffects</a><a href="../files/util/mxUtils-js.html#mxUtils.cascadeOpacity" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_cellAdded><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cellAdded')" class=ISymbol>cellAdded</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.cellAdded" target=_parent class=IParent>mxGraphModel</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.cellAdded" target=_parent class=IParent>mxGraphSelectionModel</a></div></div></div><div class=SRResult id=SR_cellCloned><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.cellCloned" target=_parent class=ISymbol>cellCloned</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_cellConnected><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellConnected" target=_parent class=ISymbol>cellConnected</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellLabelChanged><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellLabelChanged" target=_parent class=ISymbol>cellLabelChanged</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellRemoved><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cellRemoved')" class=ISymbol>cellRemoved</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.cellRemoved" target=_parent class=IParent>mxGraphModel</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.cellRemoved" target=_parent class=IParent>mxGraphSelectionModel</a></div></div></div><div class=SRResult id=SR_cellResized><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellResized" target=_parent class=ISymbol>cellResized</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsAdded><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cellsAdded')" class=ISymbol>cellsAdded</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.cellsAdded" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.cellsAdded" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_cellsFolded><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsFolded" target=_parent class=ISymbol>cellsFolded</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellSizeUpdated><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellSizeUpdated" target=_parent class=ISymbol>cellSizeUpdated</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsMoved><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cellsMoved')" class=ISymbol>cellsMoved</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.cellsMoved" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.cellsMoved" target=_parent class=IParent>mxLayoutManager</a></div></div></div><div class=SRResult id=SR_cellsOrdered><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsOrdered" target=_parent class=ISymbol>cellsOrdered</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsRemoved><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsRemoved" target=_parent class=ISymbol>cellsRemoved</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsResized><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cellsResized')" class=ISymbol>cellsResized</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.cellsResized" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.cellsResized" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.cellsResized" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_cellsToggled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsToggled" target=_parent class=ISymbol>cellsToggled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_center><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.center" target=_parent class=ISymbol>center</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_changePoints><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.changePoints" target=_parent class=ISymbol>changePoints</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_changeSelection><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.changeSelection" target=_parent class=ISymbol>changeSelection</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_changeTerminalPoint><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.changeTerminalPoint" target=_parent class=ISymbol>changeTerminalPoint</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_check><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.check" target=_parent class=ISymbol>check</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_checkBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_checkBounds')" class=ISymbol>checkBounds</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.checkBounds" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.checkBounds" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_checkConstraints><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.checkConstraints" target=_parent class=ISymbol>checkConstraints</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_checkLabelHandle><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.checkLabelHandle" target=_parent class=ISymbol>checkLabelHandle</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_checkNeighbors><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.checkNeighbors" target=_parent class=ISymbol>checkNeighbors</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_checkPlaceholderStyles><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.checkPlaceholderStyles" target=_parent class=ISymbol>checkPlaceholderStyles</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_checkPreview><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.checkPreview" target=_parent class=ISymbol>checkPreview</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_checkTerminal><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.checkTerminal" target=_parent class=ISymbol>checkTerminal</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_checkTolerance><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.checkTolerance" target=_parent class=ISymbol>checkTolerance</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_checkType><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.checkType" target=_parent class=ISymbol>checkType</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_circle><div class=IEntry><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.circle" target=_parent class=ISymbol>circle</a>, <span class=IParent>mxCircleLayout</span></div></div><div class=SRResult id=SR_clear><div class=IEntry><a href="javascript:searchResults.Toggle('SR_clear')" class=ISymbol>clear</a><div class=ISubIndex><a href="../files/util/mxDictionary-js.html#mxDictionary.clear" target=_parent class=IParent>mxDictionary</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.clear" target=_parent class=IParent>mxGraphModel</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.clear" target=_parent class=IParent>mxGraphSelectionModel</a><a href="../files/view/mxGraphView-js.html#mxGraphView.clear" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxObjectIdentity-js.html#mxObjectIdentity.clear" target=_parent class=IParent>mxObjectIdentity</a><a href="../files/shape/mxShape-js.html#mxShape.clear" target=_parent class=IParent>mxShape</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.clear" target=_parent class=IParent>mxUndoManager</a></div></div></div><div class=SRResult id=SR_clearCellOverlays><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.clearCellOverlays" target=_parent class=ISymbol>clearCellOverlays</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_clearSelection><div class=IEntry><a href="javascript:searchResults.Toggle('SR_clearSelection')" class=ISymbol>clearSelection</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.clearSelection" target=_parent class=IParent>mxCellEditor</a><a href="../files/view/mxGraph-js.html#mxGraph.clearSelection" target=_parent class=IParent>mxGraph</a><a href="../files/util/mxUtils-js.html#mxUtils.clearSelection" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_click><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.click" target=_parent class=ISymbol>click</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_clone><div class=IEntry><a href="javascript:searchResults.Toggle('SR_clone')" class=ISymbol>clone</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.clone" target=_parent class=IParent>mxCell</a><a href="../files/view/mxCellState-js.html#mxCellState.clone" target=_parent class=IParent>mxCellState</a><a href="../files/util/mxPoint-js.html#mxPoint.clone" target=_parent class=IParent>mxPoint</a><a href="../files/util/mxUtils-js.html#mxUtils.clone" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_cloneCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cloneCell')" class=ISymbol>cloneCell</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.cloneCell" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.cloneCell" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_cloneCellImpl><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.cloneCellImpl" target=_parent class=ISymbol>cloneCellImpl</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_cloneCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cloneCells')" class=ISymbol>cloneCells</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.cloneCells" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.cloneCells" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_clonePreviewState><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.clonePreviewState" target=_parent class=ISymbol>clonePreviewState</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_cloneTemplate><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.cloneTemplate" target=_parent class=ISymbol>cloneTemplate</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_cloneValue><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.cloneValue" target=_parent class=ISymbol>cloneValue</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_close><div class=IEntry><a href="javascript:searchResults.Toggle('SR_close')" class=ISymbol>close</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.close" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.close" target=_parent class=IParent>mxPrintPreview</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.close" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_closeDocument><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.closeDocument" target=_parent class=ISymbol>closeDocument</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_collapsedStateForCellChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.collapsedStateForCellChanged" target=_parent class=ISymbol>collapsedStateForCellChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_compare><div class=IEntry><a href="javascript:searchResults.Toggle('SR_compare')" class=ISymbol>compare</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#MedianCellSorter.compare" target=_parent class=IParent>MedianCellSorter</a><a href="../files/model/mxCellPath-js.html#mxCellPath.compare" target=_parent class=IParent>mxCellPath</a><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.compare" target=_parent class=IParent>WeightedCellSorter</a></div></div></div><div class=SRResult id=SR_computeAspect><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.computeAspect" target=_parent class=ISymbol>computeAspect</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_configure><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.configure" target=_parent class=ISymbol>configure</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_configureCanvas><div class=IEntry><a href="javascript:searchResults.Toggle('SR_configureCanvas')" class=ISymbol>configureCanvas</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.configureCanvas" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.configureCanvas" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_configureShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.configureShape" target=_parent class=ISymbol>configureShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_confirm><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.confirm" target=_parent class=ISymbol>confirm</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_connect><div class=IEntry><a href="javascript:searchResults.Toggle('SR_connect')" class=ISymbol>connect</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.connect" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.connect" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.connect" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_connectCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.connectCell" target=_parent class=ISymbol>connectCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_constrainChild><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.constrainChild" target=_parent class=ISymbol>constrainChild</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_constrainChildCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.constrainChildCells" target=_parent class=ISymbol>constrainChildCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_consume><div class=IEntry><a href="javascript:searchResults.Toggle('SR_consume')" class=ISymbol>consume</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.consume" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxEventObject-js.html#mxEventObject.consume" target=_parent class=IParent>mxEventObject</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.consume" target=_parent class=IParent>mxMouseEvent</a></div></div></div><div class=SRResult id=SR_consumeCycleAttribute><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.consumeCycleAttribute" target=_parent class=ISymbol>consumeCycleAttribute</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_consumeMouseEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_consumeMouseEvent')" class=ISymbol>consumeMouseEvent</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.consumeMouseEvent" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.consumeMouseEvent" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_consumePanningTrigger><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.consumePanningTrigger" target=_parent class=ISymbol>consumePanningTrigger</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_contains><div class=IEntry><a href="javascript:searchResults.Toggle('SR_contains')" class=ISymbol>contains</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.contains" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxUtils-js.html#mxUtils.contains" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_convert><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.convert" target=_parent class=ISymbol>convert</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_convertAttributeFromXml><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.convertAttributeFromXml" target=_parent class=ISymbol>convertAttributeFromXml</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_convertAttributeToXml><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.convertAttributeToXml" target=_parent class=ISymbol>convertAttributeToXml</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_convertHtml><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.convertHtml" target=_parent class=ISymbol>convertHtml</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_convertPoint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_convertPoint')" class=ISymbol>convertPoint</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.convertPoint" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.convertPoint" target=_parent class=IParent>mxElbowEdgeHandler</a><a href="../files/util/mxUtils-js.html#mxUtils.convertPoint" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_convertValueToString><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.convertValueToString" target=_parent class=ISymbol>convertValueToString</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_convertWaypoint><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.convertWaypoint" target=_parent class=ISymbol>convertWaypoint</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_copy><div class=IEntry><a href="../files/util/mxClipboard-js.html#mxClipboard.copy" target=_parent class=ISymbol>copy</a>, <span class=IParent>mxClipboard</span></div></div><div class=SRResult id=SR_copyStyle><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.copyStyle" target=_parent class=ISymbol>copyStyle</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_create><div class=IEntry><a href="javascript:searchResults.Toggle('SR_create')" class=ISymbol>create</a><div class=ISubIndex><a href="../files/model/mxCellPath-js.html#mxCellPath.create" target=_parent class=IParent>mxCellPath</a><a href="../files/shape/mxShape-js.html#mxShape.create" target=_parent class=IParent>mxShape</a><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.create" target=_parent class=IParent>mxXmlRequest</a></div></div></div><div class=SRResult id=SR_createBackgroundPageShape><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.createBackgroundPageShape" target=_parent class=ISymbol>createBackgroundPageShape</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_createBends><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createBends')" class=ISymbol>createBends</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#createBends" target=_parent class=IParent>Global</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createBends" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.createBends" target=_parent class=IParent>mxElbowEdgeHandler</a></div></div></div><div class=SRResult id=SR_createBoundingBox><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.createBoundingBox" target=_parent class=ISymbol>createBoundingBox</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_createBounds><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.createBounds" target=_parent class=ISymbol>createBounds</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_createCanvas><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.createCanvas" target=_parent class=ISymbol>createCanvas</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_createCellEditor><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createCellEditor" target=_parent class=ISymbol>createCellEditor</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createCellOverlays><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.createCellOverlays" target=_parent class=ISymbol>createCellOverlays</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_createCellRenderer><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createCellRenderer" target=_parent class=ISymbol>createCellRenderer</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createClip><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createClip" target=_parent class=ISymbol>createClip</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_createConditions><div class=IEntry><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.createConditions" target=_parent class=ISymbol>createConditions</a>, <span class=IParent>mxDefaultPopupMenu</span></div></div><div class=SRResult id=SR_createConnectionHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createConnectionHandler" target=_parent class=ISymbol>createConnectionHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createControl><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.createControl" target=_parent class=ISymbol>createControl</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_createControlClickHandler><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.createControlClickHandler" target=_parent class=ISymbol>createControlClickHandler</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_createCustomHandles><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createCustomHandles')" class=ISymbol>createCustomHandles</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createCustomHandles" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.createCustomHandles" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_createDashPattern><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createDashPattern" target=_parent class=ISymbol>createDashPattern</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_createDefaultEdgeStyle><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.createDefaultEdgeStyle" target=_parent class=ISymbol>createDefaultEdgeStyle</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_createDefaultVertexStyle><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.createDefaultVertexStyle" target=_parent class=ISymbol>createDefaultVertexStyle</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_createDiagramLayout><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createDiagramLayout" target=_parent class=ISymbol>createDiagramLayout</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createDiv><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createDiv" target=_parent class=ISymbol>createDiv</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_createDragElement><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.createDragElement" target=_parent class=ISymbol>createDragElement</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_createEdge><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createEdge')" class=ISymbol>createEdge</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.createEdge" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/editor/mxEditor-js.html#mxEditor.createEdge" target=_parent class=IParent>mxEditor</a><a href="../files/view/mxGraph-js.html#mxGraph.createEdge" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_createEdgeHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createEdgeHandler" target=_parent class=ISymbol>createEdgeHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createEdgeSegmentHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createEdgeSegmentHandler" target=_parent class=ISymbol>createEdgeSegmentHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createEdgeState><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.createEdgeState" target=_parent class=ISymbol>createEdgeState</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_createElbowEdgeHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createElbowEdgeHandler" target=_parent class=ISymbol>createElbowEdgeHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createElement><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createElement')" class=ISymbol>createElement</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createElement" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createElement" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.createElement" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_createFill><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createFill" target=_parent class=ISymbol>createFill</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createGhostPreview><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.createGhostPreview" target=_parent class=ISymbol>createGhostPreview</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_createGradientId><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createGradientId" target=_parent class=ISymbol>createGradientId</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_createGraph><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createGraph')" class=ISymbol>createGraph</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.createGraph" target=_parent class=IParent>mxEditor</a><a href="../files/view/mxOutline-js.html#mxOutline.createGraph" target=_parent class=IParent>mxOutline</a></div></div></div><div class=SRResult id=SR_createGraphHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createGraphHandler" target=_parent class=ISymbol>createGraphHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createGraphView><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createGraphView" target=_parent class=ISymbol>createGraphView</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createGroup><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createGroup" target=_parent class=ISymbol>createGroup</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createGroupCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createGroupCell" target=_parent class=ISymbol>createGroupCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createGuideShape><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.createGuideShape" target=_parent class=ISymbol>createGuideShape</a>, <span class=IParent>mxGuide</span></div></div><div class=SRResult id=SR_createHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createHandler" target=_parent class=ISymbol>createHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createHandlers><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createHandlers" target=_parent class=ISymbol>createHandlers</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createHandleShape><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createHandleShape" target=_parent class=ISymbol>createHandleShape</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_createHighlightShape><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.createHighlightShape" target=_parent class=ISymbol>createHighlightShape</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_createHtml><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createHtml')" class=ISymbol>createHtml</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxGraphView.createHtml" target=_parent class=IParent>mxGraphView</a><a href="../files/shape/mxImageShape-js.html#mxImageShape.createHtml" target=_parent class=IParent>mxImageShape</a><a href="../files/shape/mxShape-js.html#mxShape.createHtml" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_createHtmlPane><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.createHtmlPane" target=_parent class=ISymbol>createHtmlPane</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_createIcons><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.createIcons" target=_parent class=ISymbol>createIcons</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_createId><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.createId" target=_parent class=ISymbol>createId</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_createImage><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.createImage" target=_parent class=ISymbol>createImage</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_createIndicatorShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.createIndicatorShape" target=_parent class=ISymbol>createIndicatorShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_createInternalCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createInternalCells')" class=ISymbol>createInternalCells</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.createInternalCells" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.createInternalCells" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_createLabel><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.createLabel" target=_parent class=ISymbol>createLabel</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_createLabelHandleShape><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createLabelHandleShape" target=_parent class=ISymbol>createLabelHandleShape</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_createLayoutManager><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createLayoutManager" target=_parent class=ISymbol>createLayoutManager</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createLine><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.createLine" target=_parent class=ISymbol>createLine</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_createMarker><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createMarker')" class=ISymbol>createMarker</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.createMarker" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/shape/mxConnector-js.html#mxConnector.createMarker" target=_parent class=IParent>mxConnector</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createMarker" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/shape/mxMarker-js.html#mxMarker.createMarker" target=_parent class=IParent>mxMarker</a></div></div></div><div class=SRResult id=SR_createMenu><div class=IEntry><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.createMenu" target=_parent class=ISymbol>createMenu</a>, <span class=IParent>mxDefaultPopupMenu</span></div></div><div class=SRResult id=SR_createMsXmlDocument><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.createMsXmlDocument" target=_parent class=ISymbol>createMsXmlDocument</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_createNode><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.createNode" target=_parent class=ISymbol>createNode</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_createPageSelector><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.createPageSelector" target=_parent class=ISymbol>createPageSelector</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_createPanningHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createPanningHandler" target=_parent class=ISymbol>createPanningHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createPanningManager><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createPanningManager" target=_parent class=ISymbol>createPanningManager</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createParentHighlightShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createParentHighlightShape')" class=ISymbol>createParentHighlightShape</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createParentHighlightShape" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.createParentHighlightShape" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_createPopupMenu><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createPopupMenu" target=_parent class=ISymbol>createPopupMenu</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createPopupMenuHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createPopupMenuHandler" target=_parent class=ISymbol>createPopupMenuHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createPreviewElement><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.createPreviewElement" target=_parent class=ISymbol>createPreviewElement</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_createPreviewShape><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.createPreviewShape" target=_parent class=ISymbol>createPreviewShape</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_createProperties><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createProperties" target=_parent class=ISymbol>createProperties</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createRect><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createRect" target=_parent class=ISymbol>createRect</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createRoot><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.createRoot" target=_parent class=ISymbol>createRoot</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_createSelectionCellsHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createSelectionCellsHandler" target=_parent class=ISymbol>createSelectionCellsHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createSelectionModel><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createSelectionModel" target=_parent class=ISymbol>createSelectionModel</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createSelectionShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createSelectionShape')" class=ISymbol>createSelectionShape</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createSelectionShape" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.createSelectionShape" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_createShadow><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createShadow')" class=ISymbol>createShadow</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createShadow" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createShadow" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_createShadowFill><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createShadowFill" target=_parent class=ISymbol>createShadowFill</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createShadowStroke><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createShadowStroke" target=_parent class=ISymbol>createShadowStroke</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createShape')" class=ISymbol>createShape</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.createShape" target=_parent class=IParent>mxCellHighlight</a><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.createShape" target=_parent class=IParent>mxCellRenderer</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.createShape" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxHandle-js.html#mxHandle.createShape" target=_parent class=IParent>mxHandle</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.createShape" target=_parent class=IParent>mxRubberband</a></div></div></div><div class=SRResult id=SR_createSizer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createSizer')" class=ISymbol>createSizer</a><div class=ISubIndex><a href="../files/view/mxOutline-js.html#mxOutline.createSizer" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.createSizer" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_createSizerShape><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.createSizerShape" target=_parent class=ISymbol>createSizerShape</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_createState><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createState')" class=ISymbol>createState</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.createState" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/view/mxGraphView-js.html#mxGraphView.createState" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_createStroke><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createStroke" target=_parent class=ISymbol>createStroke</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createStyle><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createStyle" target=_parent class=ISymbol>createStyle</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_createStylesheet><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createStylesheet" target=_parent class=ISymbol>createStylesheet</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createSubmenu><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.createSubmenu" target=_parent class=ISymbol>createSubmenu</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_createSvg><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createSvg')" class=ISymbol>createSvg</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxGraphView.createSvg" target=_parent class=IParent>mxGraphView</a><a href="../files/shape/mxShape-js.html#mxShape.createSvg" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_createSvgCanvas><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.createSvgCanvas" target=_parent class=ISymbol>createSvgCanvas</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_createSvgGradient><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createSvgGradient" target=_parent class=ISymbol>createSvgGradient</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_createSwimlaneLayout><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createSwimlaneLayout" target=_parent class=ISymbol>createSwimlaneLayout</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createSwimlaneManager><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createSwimlaneManager" target=_parent class=ISymbol>createSwimlaneManager</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createTargetVertex><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.createTargetVertex" target=_parent class=ISymbol>createTargetVertex</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_createTasks><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createTasks" target=_parent class=ISymbol>createTasks</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createText><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createText" target=_parent class=ISymbol>createText</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createTolerance><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createTolerance" target=_parent class=ISymbol>createTolerance</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_createToolbar><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createToolbar" target=_parent class=ISymbol>createToolbar</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createTooltipHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createTooltipHandler" target=_parent class=ISymbol>createTooltipHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createTransparentFill><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createTransparentFill" target=_parent class=ISymbol>createTransparentFill</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createTransparentSvgRectangle><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.createTransparentSvgRectangle" target=_parent class=ISymbol>createTransparentSvgRectangle</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_createUndoableEdit><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.createUndoableEdit" target=_parent class=ISymbol>createUndoableEdit</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_createUrlConverter><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.createUrlConverter" target=_parent class=ISymbol>createUrlConverter</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_createVertex><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createVertex" target=_parent class=ISymbol>createVertex</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createVertexHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createVertexHandler" target=_parent class=ISymbol>createVertexHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createVirtualBend><div class=IEntry><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.createVirtualBend" target=_parent class=ISymbol>createVirtualBend</a>, <span class=IParent>mxElbowEdgeHandler</span></div></div><div class=SRResult id=SR_createVirtualBends><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createVirtualBends" target=_parent class=ISymbol>createVirtualBends</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_createVml><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createVml')" class=ISymbol>createVml</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxGraphView.createVml" target=_parent class=IParent>mxGraphView</a><a href="../files/shape/mxShape-js.html#mxShape.createVml" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_createVmlCanvas><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.createVmlCanvas" target=_parent class=ISymbol>createVmlCanvas</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_createVmlElement><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createVmlElement" target=_parent class=ISymbol>createVmlElement</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createVmlGroup><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.createVmlGroup" target=_parent class=ISymbol>createVmlGroup</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_createVmlPane><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.createVmlPane" target=_parent class=ISymbol>createVmlPane</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_createXmlDocument><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.createXmlDocument" target=_parent class=ISymbol>createXmlDocument</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_crossingStage><div class=IEntry><a href="javascript:searchResults.Toggle('SR_crossingStage')" class=ISymbol>crossingStage</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.crossingStage" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.crossingStage" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_curveTo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_curveTo')" class=ISymbol>curveTo</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.curveTo" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.curveTo" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_cut><div class=IEntry><a href="../files/util/mxClipboard-js.html#mxClipboard.cut" target=_parent class=ISymbol>cut</a>, <span class=IParent>mxClipboard</span></div></div><div class=SRResult id=SR_cycleAttribute><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.cycleAttribute" target=_parent class=ISymbol>cycleAttribute</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_cycleStage><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cycleStage')" class=ISymbol>cycleStage</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.cycleStage" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.cycleStage" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsD.html b/docs/js-api/search/FunctionsD.html
index bb85b7537..35de0c736 100644
--- a/docs/js-api/search/FunctionsD.html
+++ b/docs/js-api/search/FunctionsD.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_dblClick><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.dblClick" target=_parent class=ISymbol>dblClick</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_debug><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.debug" target=_parent class=ISymbol>debug</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_decode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_decode')" class=ISymbol>decode</a><div class=ISubIndex><a href="../files/io/mxCodec-js.html#mxCodec.decode" target=_parent class=IParent>mxCodec</a><a href="../files/io/mxDefaultKeyHandlerCodec-js.html#mxDefaultKeyHandlerCodec.decode" target=_parent class=IParent>mxDefaultKeyHandlerCodec</a><a href="../files/io/mxDefaultPopupMenuCodec-js.html#mxDefaultPopupMenuCodec.decode" target=_parent class=IParent>mxDefaultPopupMenuCodec</a><a href="../files/io/mxDefaultToolbarCodec-js.html#mxDefaultToolbarCodec.decode" target=_parent class=IParent>mxDefaultToolbarCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.decode" target=_parent class=IParent>mxObjectCodec</a><a href="../files/io/mxStylesheetCodec-js.html#mxStylesheetCodec.decode" target=_parent class=IParent>mxStylesheetCodec</a></div></div></div><div class=SRResult id=SR_decodeAttribute><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.decodeAttribute" target=_parent class=ISymbol>decodeAttribute</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_decodeAttributes><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.decodeAttributes" target=_parent class=ISymbol>decodeAttributes</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_decodeCell><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.decodeCell" target=_parent class=ISymbol>decodeCell</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_decodeChild><div class=IEntry><a href="javascript:searchResults.Toggle('SR_decodeChild')" class=ISymbol>decodeChild</a><div class=ISubIndex><a href="../files/io/mxEditorCodec-js.html#mxEditorCodec.decodeChild" target=_parent class=IParent>mxEditorCodec</a><a href="../files/io/mxModelCodec-js.html#mxModelCodec.decodeChild" target=_parent class=IParent>mxModelCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.decodeChild" target=_parent class=IParent>mxObjectCodec</a></div></div></div><div class=SRResult id=SR_decodeChildren><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.decodeChildren" target=_parent class=ISymbol>decodeChildren</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_decodeNode><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.decodeNode" target=_parent class=ISymbol>decodeNode</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_decodeRoot><div class=IEntry><a href="../files/io/mxModelCodec-js.html#mxModelCodec.decodeRoot" target=_parent class=ISymbol>decodeRoot</a>, <span class=IParent>mxModelCodec</span></div></div><div class=SRResult id=SR_decodeTemplates><div class=IEntry><a href="../files/io/mxEditorCodec-js.html#mxEditorCodec.decodeTemplates" target=_parent class=ISymbol>decodeTemplates</a>, <span class=IParent>mxEditorCodec</span></div></div><div class=SRResult id=SR_decodeUi><div class=IEntry><a href="../files/io/mxEditorCodec-js.html#mxEditorCodec.decodeUi" target=_parent class=ISymbol>decodeUi</a>, <span class=IParent>mxEditorCodec</span></div></div><div class=SRResult id=SR_destroy><div class=IEntry><a href="javascript:searchResults.Toggle('SR_destroy')" class=ISymbol>destroy</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.destroy" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/view/mxCellEditor-js.html#mxCellEditor.destroy" target=_parent class=IParent>mxCellEditor</a><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.destroy" target=_parent class=IParent>mxCellHighlight</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.destroy" target=_parent class=IParent>mxCellMarker</a><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.destroy" target=_parent class=IParent>mxCellRenderer</a><a href="../files/view/mxCellState-js.html#mxCellState.destroy" target=_parent class=IParent>mxCellState</a><a href="../files/handler/mxCellTracker-js.html#mxCellTracker.destroy" target=_parent class=IParent>mxCellTracker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.destroy" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.destroy" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/editor/mxDefaultKeyHandler-js.html#mxDefaultKeyHandler.destroy" target=_parent class=IParent>mxDefaultKeyHandler</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.destroy" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.destroy" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/editor/mxEditor-js.html#mxEditor.destroy" target=_parent class=IParent>mxEditor</a><a href="../files/view/mxGraph-js.html#mxGraph.destroy" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.destroy" target=_parent class=IParent>mxGraphHandler</a><a href="../files/view/mxGraphView-js.html#mxGraphView.destroy" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxGuide-js.html#mxGuide.destroy" target=_parent class=IParent>mxGuide</a><a href="../files/handler/mxHandle-js.html#mxHandle.destroy" target=_parent class=IParent>mxHandle</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.destroy" target=_parent class=IParent>mxKeyHandler</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.destroy" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxOutline-js.html#mxOutline.destroy" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.destroy" target=_parent class=IParent>mxPanningHandler</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.destroy" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.destroy" target=_parent class=IParent>mxPopupMenuHandler</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.destroy" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.destroy" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/shape/mxShape-js.html#mxShape.destroy" target=_parent class=IParent>mxShape</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.destroy" target=_parent class=IParent>mxSwimlaneManager</a><a href="../files/view/mxTemporaryCellStates-js.html#mxTemporaryCellStates.destroy" target=_parent class=IParent>mxTemporaryCellStates</a><a href="../files/util/mxToolbar-js.html#mxToolbar.destroy" target=_parent class=IParent>mxToolbar</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.destroy" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.destroy" target=_parent class=IParent>mxVertexHandler</a><a href="../files/util/mxWindow-js.html#mxWindow.destroy" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_destroyBends><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.destroyBends" target=_parent class=ISymbol>destroyBends</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_destroyCanvas><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.destroyCanvas" target=_parent class=ISymbol>destroyCanvas</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_destroyFocusHighlight><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.destroyFocusHighlight" target=_parent class=ISymbol>destroyFocusHighlight</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_destroyIcons><div class=IEntry><a href="javascript:searchResults.Toggle('SR_destroyIcons')" class=ISymbol>destroyIcons</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.destroyIcons" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.destroyIcons" target=_parent class=IParent>mxConstraintHandler</a></div></div></div><div class=SRResult id=SR_destroyShapes><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.destroyShapes" target=_parent class=ISymbol>destroyShapes</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_dfs><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dfs')" class=ISymbol>dfs</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.dfs" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.dfs" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.dfs" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_die><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.die" target=_parent class=ISymbol>die</a>, <span class=IParent>mxUndoableEdit</span></div></div><div class=SRResult id=SR_disableContextMenu><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.disableContextMenu" target=_parent class=ISymbol>disableContextMenu</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_disconnect><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxChildChange.disconnect" target=_parent class=ISymbol>disconnect</a>, <span class=IParent>mxChildChange</span></div></div><div class=SRResult id=SR_disconnectGraph><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.disconnectGraph" target=_parent class=ISymbol>disconnectGraph</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_doRedrawShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.doRedrawShape" target=_parent class=ISymbol>doRedrawShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_doResizeContainer><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.doResizeContainer" target=_parent class=ISymbol>doResizeContainer</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_dragEnter><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dragEnter" target=_parent class=ISymbol>dragEnter</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_dragExit><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dragExit" target=_parent class=ISymbol>dragExit</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_dragOver><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dragOver" target=_parent class=ISymbol>dragOver</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_drawCellState><div class=IEntry><a href="../files/util/mxImageExport-js.html#mxImageExport.drawCellState" target=_parent class=ISymbol>drawCellState</a>, <span class=IParent>mxImageExport</span></div></div><div class=SRResult id=SR_drawChildren><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.drawChildren" target=_parent class=ISymbol>drawChildren</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_drawHighlight><div class=IEntry><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.drawHighlight" target=_parent class=ISymbol>drawHighlight</a>, <span class=IParent>mxCellHighlight</span></div></div><div class=SRResult id=SR_drawNode><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.drawNode" target=_parent class=ISymbol>drawNode</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_drawOverlays><div class=IEntry><a href="../files/util/mxImageExport-js.html#mxImageExport.drawOverlays" target=_parent class=ISymbol>drawOverlays</a>, <span class=IParent>mxImageExport</span></div></div><div class=SRResult id=SR_drawPreview><div class=IEntry><a href="javascript:searchResults.Toggle('SR_drawPreview')" class=ISymbol>drawPreview</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.drawPreview" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.drawPreview" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.drawPreview" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_drawShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_drawShape')" class=ISymbol>drawShape</a><div class=ISubIndex><a href="../files/util/mxImageExport-js.html#mxImageExport.drawShape" target=_parent class=IParent>mxImageExport</a><a href="../files/shape/mxStencil-js.html#mxStencil.drawShape" target=_parent class=IParent>mxStencil</a></div></div></div><div class=SRResult id=SR_drawState><div class=IEntry><a href="../files/util/mxImageExport-js.html#mxImageExport.drawState" target=_parent class=ISymbol>drawState</a>, <span class=IParent>mxImageExport</span></div></div><div class=SRResult id=SR_drawText><div class=IEntry><a href="../files/util/mxImageExport-js.html#mxImageExport.drawText" target=_parent class=ISymbol>drawText</a>, <span class=IParent>mxImageExport</span></div></div><div class=SRResult id=SR_drop><div class=IEntry><a href="javascript:searchResults.Toggle('SR_drop')" class=ISymbol>drop</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.drop" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/util/mxDragSource-js.html#mxDragSource.drop" target=_parent class=IParent>mxDragSource</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsE.html b/docs/js-api/search/FunctionsE.html
index 0631d83e7..d42b31c69 100644
--- a/docs/js-api/search/FunctionsE.html
+++ b/docs/js-api/search/FunctionsE.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_ElbowConnector><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.ElbowConnector" target=_parent class=ISymbol>ElbowConnector</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_ellipse><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ellipse')" class=ISymbol>ellipse</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.ellipse" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.ellipse" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.ellipse" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_EllipsePerimeter><div class=IEntry><a href="../files/view/mxPerimeter-js.html#mxPerimeter.EllipsePerimeter" target=_parent class=ISymbol>EllipsePerimeter</a>, <span class=IParent>mxPerimeter</span></div></div><div class=SRResult id=SR_encode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_encode')" class=ISymbol>encode</a><div class=ISubIndex><a href="../files/io/mxCodec-js.html#mxCodec.encode" target=_parent class=IParent>mxCodec</a><a href="../files/io/mxDefaultKeyHandlerCodec-js.html#mxDefaultKeyHandlerCodec.encode" target=_parent class=IParent>mxDefaultKeyHandlerCodec</a><a href="../files/io/mxDefaultPopupMenuCodec-js.html#mxDefaultPopupMenuCodec.encode" target=_parent class=IParent>mxDefaultPopupMenuCodec</a><a href="../files/io/mxDefaultToolbarCodec-js.html#mxDefaultToolbarCodec.encode" target=_parent class=IParent>mxDefaultToolbarCodec</a><a href="../files/io/mxGraphViewCodec-js.html#mxGraphViewCodec.encode" target=_parent class=IParent>mxGraphViewCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.encode" target=_parent class=IParent>mxObjectCodec</a><a href="../files/io/mxStylesheetCodec-js.html#mxStylesheetCodec.encode" target=_parent class=IParent>mxStylesheetCodec</a></div></div></div><div class=SRResult id=SR_encodeCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_encodeCell')" class=ISymbol>encodeCell</a><div class=ISubIndex><a href="../files/io/mxCodec-js.html#mxCodec.encodeCell" target=_parent class=IParent>mxCodec</a><a href="../files/io/mxGraphViewCodec-js.html#mxGraphViewCodec.encodeCell" target=_parent class=IParent>mxGraphViewCodec</a></div></div></div><div class=SRResult id=SR_encodeObject><div class=IEntry><a href="javascript:searchResults.Toggle('SR_encodeObject')" class=ISymbol>encodeObject</a><div class=ISubIndex><a href="../files/io/mxModelCodec-js.html#mxModelCodec.encodeObject" target=_parent class=IParent>mxModelCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.encodeObject" target=_parent class=IParent>mxObjectCodec</a></div></div></div><div class=SRResult id=SR_encodeValue><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.encodeValue" target=_parent class=ISymbol>encodeValue</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_end><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.end" target=_parent class=ISymbol>end</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_endUpdate><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.endUpdate" target=_parent class=ISymbol>endUpdate</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_enter><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.enter" target=_parent class=ISymbol>enter</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_enterGroup><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.enterGroup" target=_parent class=ISymbol>enterGroup</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_EntityRelation><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.EntityRelation" target=_parent class=ISymbol>EntityRelation</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_equalEntries><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.equalEntries" target=_parent class=ISymbol>equalEntries</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_equalPoints><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.equalPoints" target=_parent class=ISymbol>equalPoints</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_equals><div class=IEntry><a href="javascript:searchResults.Toggle('SR_equals')" class=ISymbol>equals</a><div class=ISubIndex><a href="../files/model/mxGeometry-js.html#mxGeometry.equals" target=_parent class=IParent>mxGeometry</a><a href="../files/util/mxPoint-js.html#mxPoint.equals" target=_parent class=IParent>mxPoint</a><a href="../files/util/mxRectangle-js.html#mxRectangle.equals" target=_parent class=IParent>mxRectangle</a></div></div></div><div class=SRResult id=SR_error><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.error" target=_parent class=ISymbol>error</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_escape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_escape')" class=ISymbol>escape</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.escape" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.escape" target=_parent class=IParent>mxKeyHandler</a></div></div></div><div class=SRResult id=SR_eval><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.eval" target=_parent class=ISymbol>eval</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_evaluateAttribute><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.evaluateAttribute" target=_parent class=ISymbol>evaluateAttribute</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_evaluateTextAttribute><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.evaluateTextAttribute" target=_parent class=ISymbol>evaluateTextAttribute</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_execute><div class=IEntry><a href="javascript:searchResults.Toggle('SR_execute')" class=ISymbol>execute</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxCellAttributeChange.execute" target=_parent class=IParent>mxCellAttributeChange</a><a href="../files/model/mxGraphModel-js.html#mxChildChange.execute" target=_parent class=IParent>mxChildChange</a><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.execute" target=_parent class=IParent>mxCircleLayout</a><a href="../files/model/mxGraphModel-js.html#mxCollapseChange.execute" target=_parent class=IParent>mxCollapseChange</a><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.execute" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxCompositeLayout-js.html#mxCompositeLayout.execute" target=_parent class=IParent>mxCompositeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.execute" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/view/mxGraphView-js.html#mxCurrentRootChange.execute" target=_parent class=IParent>mxCurrentRootChange</a><a href="../files/layout/mxEdgeLabelLayout-js.html#mxEdgeLabelLayout.execute" target=_parent class=IParent>mxEdgeLabelLayout</a><a href="../files/editor/mxEditor-js.html#mxEditor.execute" target=_parent class=IParent>mxEditor</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.execute" target=_parent class=IParent>mxFastOrganicLayout</a><a href="../files/model/mxGraphModel-js.html#mxGeometryChange.execute" target=_parent class=IParent>mxGeometryChange</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.execute" target=_parent class=IParent>mxGraphLayout</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.execute" target=_parent class=IParent>mxGraphModel</a><a href="../files/handler/mxHandle-js.html#mxHandle.execute" target=_parent class=IParent>mxHandle</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.execute" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/stage/mxHierarchicalLayoutStage-js.html#mxHierarchicalLayoutStage.execute" target=_parent class=IParent>mxHierarchicalLayoutStage</a><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.execute" target=_parent class=IParent>mxMedianHybridCrossingReduction</a><a href="../files/layout/hierarchical/stage/mxMinimumCycleRemover-js.html#mxMinimumCycleRemover.execute" target=_parent class=IParent>mxMinimumCycleRemover</a><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.execute" target=_parent class=IParent>mxParallelEdgeLayout</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.execute" target=_parent class=IParent>mxPartitionLayout</a><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.execute" target=_parent class=IParent>mxRadialTreeLayout</a><a href="../files/model/mxGraphModel-js.html#mxRootChange.execute" target=_parent class=IParent>mxRootChange</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.execute" target=_parent class=IParent>mxRubberband</a><a href="../files/view/mxGraphSelectionModel-js.html#mxSelectionChange.execute" target=_parent class=IParent>mxSelectionChange</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.execute" target=_parent class=IParent>mxStackLayout</a><a href="../files/model/mxGraphModel-js.html#mxStyleChange.execute" target=_parent class=IParent>mxStyleChange</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.execute" target=_parent class=IParent>mxSwimlaneLayout</a><a href="../files/layout/hierarchical/stage/mxSwimlaneOrdering-js.html#mxSwimlaneOrdering.execute" target=_parent class=IParent>mxSwimlaneOrdering</a><a href="../files/model/mxGraphModel-js.html#mxTerminalChange.execute" target=_parent class=IParent>mxTerminalChange</a><a href="../files/model/mxGraphModel-js.html#mxValueChange.execute" target=_parent class=IParent>mxValueChange</a><a href="../files/model/mxGraphModel-js.html#mxVisibleChange.execute" target=_parent class=IParent>mxVisibleChange</a></div></div></div><div class=SRResult id=SR_executeLayout><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.executeLayout" target=_parent class=ISymbol>executeLayout</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_executeLayoutForCells><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.executeLayoutForCells" target=_parent class=ISymbol>executeLayoutForCells</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_exitGroup><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.exitGroup" target=_parent class=ISymbol>exitGroup</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_extend><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.extend" target=_parent class=ISymbol>extend</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_extendedDfs><div class=IEntry><a href="javascript:searchResults.Toggle('SR_extendedDfs')" class=ISymbol>extendedDfs</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.extendedDfs" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.extendedDfs" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_extendParent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.extendParent" target=_parent class=ISymbol>extendParent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_extractTextWithWhitespace><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.extractTextWithWhitespace" target=_parent class=ISymbol>extractTextWithWhitespace</a>, <span class=IParent>mxUtils</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsF.html b/docs/js-api/search/FunctionsF.html
index 8a11053e9..005ad08f5 100644
--- a/docs/js-api/search/FunctionsF.html
+++ b/docs/js-api/search/FunctionsF.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fadeOut><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fadeOut')" class=ISymbol>fadeOut</a><div class=ISubIndex><a href="../files/util/mxEffects-js.html#mxEffects.fadeOut" target=_parent class=IParent>mxEffects</a><a href="../files/util/mxUtils-js.html#mxUtils.fadeOut" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_fill><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fill')" class=ISymbol>fill</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.fill" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.fill" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.fill" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_fillAndStroke><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fillAndStroke')" class=ISymbol>fillAndStroke</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.fillAndStroke" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.fillAndStroke" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.fillAndStroke" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_filterCells><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.filterCells" target=_parent class=ISymbol>filterCells</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_filterDescendants><div class=IEntry><a href="javascript:searchResults.Toggle('SR_filterDescendants')" class=ISymbol>filterDescendants</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.filterDescendants" target=_parent class=IParent>mxGraphModel</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.filterDescendants" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.filterDescendants" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_findNearestSegment><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.findNearestSegment" target=_parent class=ISymbol>findNearestSegment</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_findNode><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.findNode" target=_parent class=ISymbol>findNode</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_findParallels><div class=IEntry><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.findParallels" target=_parent class=ISymbol>findParallels</a>, <span class=IParent>mxParallelEdgeLayout</span></div></div><div class=SRResult id=SR_findRankHeights><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.findRankHeights" target=_parent class=ISymbol>findRankHeights</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_findRoots><div class=IEntry><a href="javascript:searchResults.Toggle('SR_findRoots')" class=ISymbol>findRoots</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.findRoots" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.findRoots" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_findTreeRoots><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.findTreeRoots" target=_parent class=ISymbol>findTreeRoots</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_fireEvent><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.fireEvent" target=_parent class=ISymbol>fireEvent</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_fireGestureEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.fireGestureEvent" target=_parent class=ISymbol>fireGestureEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_fireMouseEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.fireMouseEvent" target=_parent class=ISymbol>fireMouseEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_fit><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fit')" class=ISymbol>fit</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.fit" target=_parent class=IParent>mxGraph</a><a href="../files/util/mxUtils-js.html#mxUtils.fit" target=_parent class=IParent>mxUtils</a><a href="../files/util/mxWindow-js.html#mxWindow.fit" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_fixRanks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fixRanks')" class=ISymbol>fixRanks</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.fixRanks" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.fixRanks" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_flipEdge><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.flipEdge" target=_parent class=ISymbol>flipEdge</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_flipPoint><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.flipPoint" target=_parent class=ISymbol>flipPoint</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_focusLost><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.focusLost" target=_parent class=ISymbol>focusLost</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_foldCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.foldCells" target=_parent class=ISymbol>foldCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_forEach><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.forEach" target=_parent class=ISymbol>forEach</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_format><div class=IEntry><a href="javascript:searchResults.Toggle('SR_format')" class=ISymbol>format</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.format" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.format" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.format" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_fromRectangle><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.fromRectangle" target=_parent class=ISymbol>fromRectangle</a>, <span class=IParent>mxRectangle</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsG.html b/docs/js-api/search/FunctionsG.html
index 4887d2aae..8cea80eac 100644
--- a/docs/js-api/search/FunctionsG.html
+++ b/docs/js-api/search/FunctionsG.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_geometryForCellChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.geometryForCellChanged" target=_parent class=ISymbol>geometryForCellChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_get><div class=IEntry><a href="javascript:searchResults.Toggle('SR_get')" class=ISymbol>get</a><div class=ISubIndex><a href="../files/util/mxDictionary-js.html#mxDictionary.get" target=_parent class=IParent>mxDictionary</a><a href="../files/util/mxObjectIdentity-js.html#mxObjectIdentity.get" target=_parent class=IParent>mxObjectIdentity</a><a href="../files/util/mxResources-js.html#mxResources.get" target=_parent class=IParent>mxResources</a><a href="../files/util/mxUtils-js.html#mxUtils.get" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_getActualStartSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getActualStartSize" target=_parent class=ISymbol>getActualStartSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getAlignmentAsPoint><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getAlignmentAsPoint" target=_parent class=ISymbol>getAlignmentAsPoint</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getAlignmentTolerance><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.getAlignmentTolerance" target=_parent class=ISymbol>getAlignmentTolerance</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_getAll><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getAll" target=_parent class=ISymbol>getAll</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getAllConnectionConstraints><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getAllConnectionConstraints" target=_parent class=ISymbol>getAllConnectionConstraints</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getAllEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getAllEdges" target=_parent class=ISymbol>getAllEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getAlternateContent><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.getAlternateContent" target=_parent class=ISymbol>getAlternateContent</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_getAlternateText><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.getAlternateText" target=_parent class=ISymbol>getAlternateText</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_getAppendices><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.getAppendices" target=_parent class=ISymbol>getAppendices</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_getArcSize><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.getArcSize" target=_parent class=ISymbol>getArcSize</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_getAttribute><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.getAttribute" target=_parent class=ISymbol>getAttribute</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_getAttributeName><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.getAttributeName" target=_parent class=ISymbol>getAttributeName</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_getAutoDirection><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.getAutoDirection" target=_parent class=ISymbol>getAutoDirection</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_getBackgroundColor><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.getBackgroundColor" target=_parent class=ISymbol>getBackgroundColor</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_getBackgroundImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getBackgroundImage" target=_parent class=ISymbol>getBackgroundImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getBackgroundPageBounds><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getBackgroundPageBounds" target=_parent class=ISymbol>getBackgroundPageBounds</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getBackgroundPane><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getBackgroundPane" target=_parent class=ISymbol>getBackgroundPane</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getBaseDomain><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.getBaseDomain" target=_parent class=ISymbol>getBaseDomain</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_getBaseUrl><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getBaseUrl')" class=ISymbol>getBaseUrl</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.getBaseUrl" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.getBaseUrl" target=_parent class=IParent>mxUrlConverter</a></div></div></div><div class=SRResult id=SR_getBorder><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getBorder" target=_parent class=ISymbol>getBorder</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getBorderSizes><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getBorderSizes" target=_parent class=ISymbol>getBorderSizes</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getBoundingBox><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getBoundingBox')" class=ISymbol>getBoundingBox</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getBoundingBox" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.getBoundingBox" target=_parent class=IParent>mxGraphHandler</a><a href="../files/view/mxGraphView-js.html#mxGraphView.getBoundingBox" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxUtils-js.html#mxUtils.getBoundingBox" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_getBoundingBoxFromGeometry><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getBoundingBoxFromGeometry" target=_parent class=ISymbol>getBoundingBoxFromGeometry</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getBounds')" class=ISymbol>getBounds</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.getBounds" target=_parent class=IParent>mxCellOverlay</a><a href="../files/view/mxGraphView-js.html#mxGraphView.getBounds" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_getBoundsForGroup><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getBoundsForGroup" target=_parent class=ISymbol>getBoundsForGroup</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCanvas><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getCanvas" target=_parent class=ISymbol>getCanvas</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getCell')" class=ISymbol>getCell</a><div class=ISubIndex><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.getCell" target=_parent class=IParent>mxCellMarker</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getCell" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getCell" target=_parent class=IParent>mxMouseEvent</a></div></div></div><div class=SRResult id=SR_getCellAt><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getCellAt')" class=ISymbol>getCellAt</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getCellAt" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.getCellAt" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_getCellBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getCellBounds')" class=ISymbol>getCellBounds</a><div class=ISubIndex><a href="../files/view/mxCellState-js.html#mxCellState.getCellBounds" target=_parent class=IParent>mxCellState</a><a href="../files/view/mxGraph-js.html#mxGraph.getCellBounds" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_getCellContainmentArea><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCellContainmentArea" target=_parent class=ISymbol>getCellContainmentArea</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCellForEvent><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.getCellForEvent" target=_parent class=ISymbol>getCellForEvent</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_getCellForPopupEvent><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.getCellForPopupEvent" target=_parent class=ISymbol>getCellForPopupEvent</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_getCellGeometry><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCellGeometry" target=_parent class=ISymbol>getCellGeometry</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCellOverlays><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCellOverlays" target=_parent class=ISymbol>getCellOverlays</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getCells')" class=ISymbol>getCells</a><div class=ISubIndex><a href="../files/util/mxClipboard-js.html#mxClipboard.getCells" target=_parent class=IParent>mxClipboard</a><a href="../files/view/mxGraph-js.html#mxGraph.getCells" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.getCells" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_getCellsBeyond><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCellsBeyond" target=_parent class=ISymbol>getCellsBeyond</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCellsForChange><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.getCellsForChange" target=_parent class=ISymbol>getCellsForChange</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_getCellsForChanges><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.getCellsForChanges" target=_parent class=ISymbol>getCellsForChanges</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_getCellsForGroup><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCellsForGroup" target=_parent class=ISymbol>getCellsForGroup</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCellsForUngroup><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCellsForUngroup" target=_parent class=ISymbol>getCellsForUngroup</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCellStates><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getCellStates" target=_parent class=ISymbol>getCellStates</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getCellStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getCellStyle')" class=ISymbol>getCellStyle</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getCellStyle" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxStylesheet-js.html#mxStylesheet.getCellStyle" target=_parent class=IParent>mxStylesheet</a></div></div></div><div class=SRResult id=SR_getCellValidationError><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCellValidationError" target=_parent class=ISymbol>getCellValidationError</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCenterX><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.getCenterX" target=_parent class=ISymbol>getCenterX</a>, <span class=IParent>mxRectangle</span></div></div><div class=SRResult id=SR_getCenterY><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.getCenterY" target=_parent class=ISymbol>getCenterY</a>, <span class=IParent>mxRectangle</span></div></div><div class=SRResult id=SR_getChildAt><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getChildAt')" class=ISymbol>getChildAt</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getChildAt" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getChildAt" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getChildCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getChildCells')" class=ISymbol>getChildCells</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getChildCells" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getChildCells" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getChildCount><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getChildCount')" class=ISymbol>getChildCount</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getChildCount" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getChildCount" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getChildEdges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getChildEdges')" class=ISymbol>getChildEdges</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getChildEdges" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getChildEdges" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getChildNodes><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getChildNodes" target=_parent class=ISymbol>getChildNodes</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getChildOffsetForCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getChildOffsetForCell" target=_parent class=ISymbol>getChildOffsetForCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getChildren><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getChildren" target=_parent class=ISymbol>getChildren</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_getChildVertices><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getChildVertices')" class=ISymbol>getChildVertices</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getChildVertices" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getChildVertices" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getClientX><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.getClientX" target=_parent class=ISymbol>getClientX</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_getClientY><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.getClientY" target=_parent class=ISymbol>getClientY</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_getCloneableCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCloneableCells" target=_parent class=ISymbol>getCloneableCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCodec><div class=IEntry><a href="../files/io/mxCodecRegistry-js.html#mxCodecRegistry.getCodec" target=_parent class=ISymbol>getCodec</a>, <span class=IParent>mxCodecRegistry</span></div></div><div class=SRResult id=SR_getColor><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getColor" target=_parent class=ISymbol>getColor</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getConnectImage><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.getConnectImage" target=_parent class=ISymbol>getConnectImage</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_getConnectionConstraint><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getConnectionConstraint" target=_parent class=ISymbol>getConnectionConstraint</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getConnectionPoint><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getConnectionPoint" target=_parent class=ISymbol>getConnectionPoint</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getConnections><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getConnections')" class=ISymbol>getConnections</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getConnections" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getConnections" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getConstraint><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.getConstraint" target=_parent class=ISymbol>getConstraint</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_getContentNode><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.getContentNode" target=_parent class=ISymbol>getContentNode</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_getControlBounds><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.getControlBounds" target=_parent class=ISymbol>getControlBounds</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_getCoreCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getCoreCell')" class=ISymbol>getCoreCell</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.getCoreCell" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.getCoreCell" target=_parent class=IParent>mxGraphHierarchyNode</a></div></div></div><div class=SRResult id=SR_getCoverPages><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.getCoverPages" target=_parent class=ISymbol>getCoverPages</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_getCurrentCellStyle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCurrentCellStyle" target=_parent class=ISymbol>getCurrentCellStyle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCurrentPoints><div class=IEntry><a href="../files/handler/mxEdgeSegmentHandler-js.html#getCurrentPoints" target=_parent class=ISymbol>getCurrentPoints</a></div></div><div class=SRResult id=SR_getCurrentRoot><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCurrentRoot" target=_parent class=ISymbol>getCurrentRoot</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCurrentStrokeWidth><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.getCurrentStrokeWidth" target=_parent class=ISymbol>getCurrentStrokeWidth</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_getCurrentStyle><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getCurrentStyle" target=_parent class=ISymbol>getCurrentStyle</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getCurrentValue><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.getCurrentValue" target=_parent class=ISymbol>getCurrentValue</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_getCursor><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.getCursor" target=_parent class=ISymbol>getCursor</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_getCursorForBend><div class=IEntry><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.getCursorForBend" target=_parent class=ISymbol>getCursorForBend</a>, <span class=IParent>mxElbowEdgeHandler</span></div></div><div class=SRResult id=SR_getCursorForCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCursorForCell" target=_parent class=ISymbol>getCursorForCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCursorForMouseEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCursorForMouseEvent" target=_parent class=ISymbol>getCursorForMouseEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCylinderSize><div class=IEntry><a href="../files/shape/mxCylinder-js.html#mxCylinder.getCylinderSize" target=_parent class=ISymbol>getCylinderSize</a>, <span class=IParent>mxCylinder</span></div></div><div class=SRResult id=SR_getDecoratorPane><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getDecoratorPane" target=_parent class=ISymbol>getDecoratorPane</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getDefaultBundle><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.getDefaultBundle" target=_parent class=ISymbol>getDefaultBundle</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_getDefaultEdgeStyle><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.getDefaultEdgeStyle" target=_parent class=ISymbol>getDefaultEdgeStyle</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_getDefaultParent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getDefaultParent" target=_parent class=ISymbol>getDefaultParent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getDefaultVertexStyle><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.getDefaultVertexStyle" target=_parent class=ISymbol>getDefaultVertexStyle</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_getDeletableCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getDeletableCells" target=_parent class=ISymbol>getDeletableCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getDelta><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getDelta')" class=ISymbol>getDelta</a><div class=ISubIndex><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.getDelta" target=_parent class=IParent>mxGraphHandler</a><a href="../files/util/mxGuide-js.html#mxGuide.getDelta" target=_parent class=IParent>mxGuide</a><a href="../files/util/mxMorphing-js.html#mxMorphing.getDelta" target=_parent class=IParent>mxMorphing</a></div></div></div><div class=SRResult id=SR_getDescendants><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getDescendants" target=_parent class=ISymbol>getDescendants</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_getDirectedBounds><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getDirectedBounds" target=_parent class=ISymbol>getDirectedBounds</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getDirectedEdgeCount><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getDirectedEdgeCount" target=_parent class=ISymbol>getDirectedEdgeCount</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_getDocType><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.getDocType" target=_parent class=ISymbol>getDocType</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_getDocumentElement><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.getDocumentElement" target=_parent class=ISymbol>getDocumentElement</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_getDocumentHeight><div class=IEntry><a href="../files/util/mxDivResizer-js.html#mxDivResizer.getDocumentHeight" target=_parent class=ISymbol>getDocumentHeight</a>, <span class=IParent>mxDivResizer</span></div></div><div class=SRResult id=SR_getDocumentScrollOrigin><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getDocumentScrollOrigin" target=_parent class=ISymbol>getDocumentScrollOrigin</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getDocumentSize><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getDocumentSize" target=_parent class=ISymbol>getDocumentSize</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getDocumentWidth><div class=IEntry><a href="../files/util/mxDivResizer-js.html#mxDivResizer.getDocumentWidth" target=_parent class=ISymbol>getDocumentWidth</a>, <span class=IParent>mxDivResizer</span></div></div><div class=SRResult id=SR_getDrawPane><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getDrawPane" target=_parent class=ISymbol>getDrawPane</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getDropTarget><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getDropTarget')" class=ISymbol>getDropTarget</a><div class=ISubIndex><a href="../files/util/mxDragSource-js.html#mxDragSource.getDropTarget" target=_parent class=IParent>mxDragSource</a><a href="../files/view/mxGraph-js.html#mxGraph.getDropTarget" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_getEdgeAt><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getEdgeAt')" class=ISymbol>getEdgeAt</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getEdgeAt" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getEdgeAt" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getEdgeColor><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.getEdgeColor" target=_parent class=ISymbol>getEdgeColor</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_getEdgeCount><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getEdgeCount')" class=ISymbol>getEdgeCount</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getEdgeCount" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getEdgeCount" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getEdgeId><div class=IEntry><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.getEdgeId" target=_parent class=ISymbol>getEdgeId</a>, <span class=IParent>mxParallelEdgeLayout</span></div></div><div class=SRResult id=SR_getEdgeIndex><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.getEdgeIndex" target=_parent class=ISymbol>getEdgeIndex</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_getEdges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getEdges')" class=ISymbol>getEdges</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getEdges" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getEdges" target=_parent class=IParent>mxGraphModel</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.getEdges" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.getEdges" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_getEdgesBetween><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getEdgesBetween')" class=ISymbol>getEdgesBetween</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getEdgesBetween" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getEdgesBetween" target=_parent class=IParent>mxGraphModel</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.getEdgesBetween" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.getEdgesBetween" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_getEdgeStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getEdgeStyle')" class=ISymbol>getEdgeStyle</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.getEdgeStyle" target=_parent class=IParent>mxEditor</a><a href="../files/view/mxGraphView-js.html#mxGraphView.getEdgeStyle" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_getEdgeValidationError><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getEdgeValidationError" target=_parent class=ISymbol>getEdgeValidationError</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getEdgeWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getEdgeWidth')" class=ISymbol>getEdgeWidth</a><div class=ISubIndex><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.getEdgeWidth" target=_parent class=IParent>mxArrowConnector</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.getEdgeWidth" target=_parent class=IParent>mxConnectionHandler</a></div></div></div><div class=SRResult id=SR_getEditingCell><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.getEditingCell" target=_parent class=ISymbol>getEditingCell</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_getEditingValue><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getEditingValue" target=_parent class=ISymbol>getEditingValue</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getEditorBounds><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.getEditorBounds" target=_parent class=ISymbol>getEditorBounds</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_getElement><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.getElement" target=_parent class=ISymbol>getElement</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_getElementById><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.getElementById" target=_parent class=ISymbol>getElementById</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_getElementForEvent><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.getElementForEvent" target=_parent class=ISymbol>getElementForEvent</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_getEmptyBounds><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getEmptyBounds" target=_parent class=ISymbol>getEmptyBounds</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getEmptyLabelText><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.getEmptyLabelText" target=_parent class=ISymbol>getEmptyLabelText</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_getEndArrowWidth><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.getEndArrowWidth" target=_parent class=ISymbol>getEndArrowWidth</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_getEvent><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getEvent" target=_parent class=ISymbol>getEvent</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_getEventSource><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.getEventSource" target=_parent class=ISymbol>getEventSource</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_getEventState><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getEventState" target=_parent class=ISymbol>getEventState</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getExportableCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getExportableCells" target=_parent class=ISymbol>getExportableCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getFieldName><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.getFieldName" target=_parent class=ISymbol>getFieldName</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_getFieldTemplate><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.getFieldTemplate" target=_parent class=ISymbol>getFieldTemplate</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_getFirstSelectableCell><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.getFirstSelectableCell" target=_parent class=ISymbol>getFirstSelectableCell</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_getFixedTerminalPoint><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getFixedTerminalPoint" target=_parent class=ISymbol>getFixedTerminalPoint</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getFloatingTerminalPoint><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getFloatingTerminalPoint" target=_parent class=ISymbol>getFloatingTerminalPoint</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getFoldableCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getFoldableCells" target=_parent class=ISymbol>getFoldableCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getFoldingImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getFoldingImage" target=_parent class=ISymbol>getFoldingImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getFunction><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.getFunction" target=_parent class=ISymbol>getFunction</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_getFunctionName><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getFunctionName" target=_parent class=ISymbol>getFunctionName</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getGeneralPurposeVariable><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getGeneralPurposeVariable')" class=ISymbol>getGeneralPurposeVariable</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.getGeneralPurposeVariable" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.getGeneralPurposeVariable" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.getGeneralPurposeVariable" target=_parent class=IParent>mxGraphHierarchyNode</a></div></div></div><div class=SRResult id=SR_getGeometry><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getGeometry')" class=ISymbol>getGeometry</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getGeometry" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getGeometry" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getGradientBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getGradientBounds')" class=ISymbol>getGradientBounds</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.getGradientBounds" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.getGradientBounds" target=_parent class=IParent>mxSwimlane</a></div></div></div><div class=SRResult id=SR_getGraph><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getGraph')" class=ISymbol>getGraph</a><div class=ISubIndex><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.getGraph" target=_parent class=IParent>mxGraphLayout</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.getGraph" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.getGraph" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_getGraphBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getGraphBounds')" class=ISymbol>getGraphBounds</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getGraphBounds" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphView-js.html#mxGraphView.getGraphBounds" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_getGraphForEvent><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.getGraphForEvent" target=_parent class=ISymbol>getGraphForEvent</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_getGraphX><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getGraphX" target=_parent class=ISymbol>getGraphX</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_getGraphY><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getGraphY" target=_parent class=ISymbol>getGraphY</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_getGridSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getGridSize" target=_parent class=ISymbol>getGridSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getGuideColor><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.getGuideColor" target=_parent class=ISymbol>getGuideColor</a>, <span class=IParent>mxGuide</span></div></div><div class=SRResult id=SR_getGuideStates><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.getGuideStates" target=_parent class=ISymbol>getGuideStates</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_getGuideTolerance><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.getGuideTolerance" target=_parent class=ISymbol>getGuideTolerance</a>, <span class=IParent>mxGuide</span></div></div><div class=SRResult id=SR_getHandledSelectionCells><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.getHandledSelectionCells" target=_parent class=ISymbol>getHandledSelectionCells</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_getHandleFillColor><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getHandleFillColor" target=_parent class=ISymbol>getHandleFillColor</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_getHandleForEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getHandleForEvent')" class=ISymbol>getHandleForEvent</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getHandleForEvent" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.getHandleForEvent" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_getHandler><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.getHandler" target=_parent class=ISymbol>getHandler</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_getHotspot><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.getHotspot" target=_parent class=ISymbol>getHotspot</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_getHtmlValue><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.getHtmlValue" target=_parent class=ISymbol>getHtmlValue</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_getIconPosition><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.getIconPosition" target=_parent class=ISymbol>getIconPosition</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_getId><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getId')" class=ISymbol>getId</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getId" target=_parent class=IParent>mxCell</a><a href="../files/io/mxCodec-js.html#mxCodec.getId" target=_parent class=IParent>mxCodec</a></div></div></div><div class=SRResult id=SR_getImage><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getImage')" class=ISymbol>getImage</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getImage" target=_parent class=IParent>mxGraph</a><a href="../files/util/mxImageBundle-js.html#mxImageBundle.getImage" target=_parent class=IParent>mxImageBundle</a></div></div></div><div class=SRResult id=SR_getImageBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getImageBounds')" class=ISymbol>getImageBounds</a><div class=ISubIndex><a href="../files/shape/mxLabel-js.html#mxLabel.getImageBounds" target=_parent class=IParent>mxLabel</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.getImageBounds" target=_parent class=IParent>mxSwimlane</a></div></div></div><div class=SRResult id=SR_getImageForConstraint><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.getImageForConstraint" target=_parent class=ISymbol>getImageForConstraint</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_getImageFromBundles><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getImageFromBundles" target=_parent class=ISymbol>getImageFromBundles</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getImportableCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getImportableCells" target=_parent class=ISymbol>getImportableCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getIncomingEdges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getIncomingEdges')" class=ISymbol>getIncomingEdges</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getIncomingEdges" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getIncomingEdges" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getIndex><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.getIndex" target=_parent class=ISymbol>getIndex</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_getIndicatorBounds><div class=IEntry><a href="../files/shape/mxLabel-js.html#mxLabel.getIndicatorBounds" target=_parent class=ISymbol>getIndicatorBounds</a>, <span class=IParent>mxLabel</span></div></div><div class=SRResult id=SR_getIndicatorColor><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getIndicatorColor" target=_parent class=ISymbol>getIndicatorColor</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getIndicatorGradientColor><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getIndicatorGradientColor" target=_parent class=ISymbol>getIndicatorGradientColor</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getIndicatorImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getIndicatorImage" target=_parent class=ISymbol>getIndicatorImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getIndicatorShape><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getIndicatorShape" target=_parent class=ISymbol>getIndicatorShape</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getInitialCellForEvent><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.getInitialCellForEvent" target=_parent class=ISymbol>getInitialCellForEvent</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_getInitialValue><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.getInitialValue" target=_parent class=ISymbol>getInitialValue</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_getInnerHtml><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getInnerHtml" target=_parent class=ISymbol>getInnerHtml</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getKeys><div class=IEntry><a href="../files/util/mxDictionary-js.html#mxDictionary.getKeys" target=_parent class=ISymbol>getKeys</a>, <span class=IParent>mxDictionary</span></div></div><div class=SRResult id=SR_getLabel><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getLabel" target=_parent class=ISymbol>getLabel</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getLabelBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getLabelBounds')" class=ISymbol>getLabelBounds</a><div class=ISubIndex><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.getLabelBounds" target=_parent class=IParent>mxCellRenderer</a><a href="../files/shape/mxDoubleEllipse-js.html#mxDoubleEllipse.getLabelBounds" target=_parent class=IParent>mxDoubleEllipse</a><a href="../files/shape/mxShape-js.html#mxShape.getLabelBounds" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.getLabelBounds" target=_parent class=IParent>mxSwimlane</a></div></div></div><div class=SRResult id=SR_getLabelMargins><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.getLabelMargins" target=_parent class=ISymbol>getLabelMargins</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_getLabelValue><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.getLabelValue" target=_parent class=ISymbol>getLabelValue</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_getLayout><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.getLayout" target=_parent class=ISymbol>getLayout</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_getLayoutCells><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.getLayoutCells" target=_parent class=ISymbol>getLayoutCells</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_getLinkForCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getLinkForCell" target=_parent class=ISymbol>getLinkForCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getLinkForCellState><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getLinkForCellState')" class=ISymbol>getLinkForCellState</a><div class=ISubIndex><a href="../files/util/mxImageExport-js.html#mxImageExport.getLinkForCellState" target=_parent class=IParent>mxImageExport</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.getLinkForCellState" target=_parent class=IParent>mxPrintPreview</a></div></div></div><div class=SRResult id=SR_getMainEvent><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.getMainEvent" target=_parent class=ISymbol>getMainEvent</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_getMargin><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.getMargin" target=_parent class=ISymbol>getMargin</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_getMarkedState><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.getMarkedState" target=_parent class=ISymbol>getMarkedState</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_getMarkerColor><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.getMarkerColor" target=_parent class=ISymbol>getMarkerColor</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_getMaximumGraphBounds><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getMaximumGraphBounds" target=_parent class=ISymbol>getMaximumGraphBounds</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getMinimumSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getMinimumSize')" class=ISymbol>getMinimumSize</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.getMinimumSize" target=_parent class=IParent>mxCellEditor</a><a href="../files/util/mxWindow-js.html#mxWindow.getMinimumSize" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_getModel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getModel')" class=ISymbol>getModel</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getModel" target=_parent class=IParent>mxGraph</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.getModel" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.getModel" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_getMovableCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getMovableCells" target=_parent class=ISymbol>getMovableCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getName><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getName')" class=ISymbol>getName</a><div class=ISubIndex><a href="../files/util/mxEventObject-js.html#mxEventObject.getName" target=_parent class=IParent>mxEventObject</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.getName" target=_parent class=IParent>mxObjectCodec</a><a href="../files/view/mxStyleRegistry-js.html#mxStyleRegistry.getName" target=_parent class=IParent>mxStyleRegistry</a></div></div></div><div class=SRResult id=SR_getNearestCommonAncestor><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getNearestCommonAncestor" target=_parent class=ISymbol>getNearestCommonAncestor</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_getNextLayerConnectedCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getNextLayerConnectedCells')" class=ISymbol>getNextLayerConnectedCells</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.getNextLayerConnectedCells" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.getNextLayerConnectedCells" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.getNextLayerConnectedCells" target=_parent class=IParent>mxGraphHierarchyNode</a></div></div></div><div class=SRResult id=SR_getNextPoint><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getNextPoint" target=_parent class=ISymbol>getNextPoint</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getNumber><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getNumber" target=_parent class=ISymbol>getNumber</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getObject><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.getObject" target=_parent class=ISymbol>getObject</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_getOffset><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getOffset" target=_parent class=ISymbol>getOffset</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getOpposites><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getOpposites')" class=ISymbol>getOpposites</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getOpposites" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getOpposites" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getOrigin><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getOrigin" target=_parent class=ISymbol>getOrigin</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_getOriginForCell><div class=IEntry><a href="../files/util/mxMorphing-js.html#mxMorphing.getOriginForCell" target=_parent class=ISymbol>getOriginForCell</a>, <span class=IParent>mxMorphing</span></div></div><div class=SRResult id=SR_getOuterHtml><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getOuterHtml" target=_parent class=ISymbol>getOuterHtml</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getOutgoingEdges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getOutgoingEdges')" class=ISymbol>getOutgoingEdges</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getOutgoingEdges" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getOutgoingEdges" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getOutlineConstraint><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getOutlineConstraint" target=_parent class=ISymbol>getOutlineConstraint</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getOutlineOffset><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.getOutlineOffset" target=_parent class=ISymbol>getOutlineOffset</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_getOverlap><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getOverlap" target=_parent class=ISymbol>getOverlap</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getOverlayPane><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getOverlayPane" target=_parent class=ISymbol>getOverlayPane</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getPaintBounds><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.getPaintBounds" target=_parent class=ISymbol>getPaintBounds</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_getParent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getParent')" class=ISymbol>getParent</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getParent" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getParent" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getParentOffset><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.getParentOffset" target=_parent class=ISymbol>getParentOffset</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_getParentPath><div class=IEntry><a href="../files/model/mxCellPath-js.html#mxCellPath.getParentPath" target=_parent class=ISymbol>getParentPath</a>, <span class=IParent>mxCellPath</span></div></div><div class=SRResult id=SR_getParents><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getParents" target=_parent class=ISymbol>getParents</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_getParentSize><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.getParentSize" target=_parent class=ISymbol>getParentSize</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_getPerimeterBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getPerimeterBounds')" class=ISymbol>getPerimeterBounds</a><div class=ISubIndex><a href="../files/view/mxCellState-js.html#mxCellState.getPerimeterBounds" target=_parent class=IParent>mxCellState</a><a href="../files/view/mxGraphView-js.html#mxGraphView.getPerimeterBounds" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_getPerimeterFunction><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getPerimeterFunction" target=_parent class=ISymbol>getPerimeterFunction</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getPerimeterPoint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getPerimeterPoint')" class=ISymbol>getPerimeterPoint</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxGraphView.getPerimeterPoint" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxUtils-js.html#mxUtils.getPerimeterPoint" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_getPoint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getPoint')" class=ISymbol>getPoint</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxGraphView.getPoint" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxRectangle-js.html#mxRectangle.getPoint" target=_parent class=IParent>mxRectangle</a></div></div></div><div class=SRResult id=SR_getPointForEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getPointForEvent')" class=ISymbol>getPointForEvent</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getPointForEvent" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.getPointForEvent" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_getPosition><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.getPosition" target=_parent class=ISymbol>getPosition</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_getPreferredPageSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getPreferredPageSize" target=_parent class=ISymbol>getPreferredPageSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getPreferredSizeForCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getPreferredSizeForCell" target=_parent class=ISymbol>getPreferredSizeForCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getPrettyXML><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getPrettyXML" target=_parent class=ISymbol>getPrettyXML</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getPreviewBounds><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.getPreviewBounds" target=_parent class=ISymbol>getPreviewBounds</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_getPreviewPoints><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getPreviewPoints')" class=ISymbol>getPreviewPoints</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#getPreviewPoints" target=_parent class=IParent>Global</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getPreviewPoints" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_getPreviewTerminalState><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getPreviewTerminalState" target=_parent class=ISymbol>getPreviewTerminalState</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_getPreviousLayerConnectedCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getPreviousLayerConnectedCells')" class=ISymbol>getPreviousLayerConnectedCells</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.getPreviousLayerConnectedCells" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.getPreviousLayerConnectedCells" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.getPreviousLayerConnectedCells" target=_parent class=IParent>mxGraphHierarchyNode</a></div></div></div><div class=SRResult id=SR_getProperties><div class=IEntry><a href="../files/util/mxEventObject-js.html#mxEventObject.getProperties" target=_parent class=ISymbol>getProperties</a>, <span class=IParent>mxEventObject</span></div></div><div class=SRResult id=SR_getProperty><div class=IEntry><a href="../files/util/mxEventObject-js.html#mxEventObject.getProperty" target=_parent class=ISymbol>getProperty</a>, <span class=IParent>mxEventObject</span></div></div><div class=SRResult id=SR_getRadius><div class=IEntry><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.getRadius" target=_parent class=ISymbol>getRadius</a>, <span class=IParent>mxCircleLayout</span></div></div><div class=SRResult id=SR_getRankValue><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.getRankValue" target=_parent class=ISymbol>getRankValue</a>, <span class=IParent>mxGraphHierarchyNode</span></div></div><div class=SRResult id=SR_getRelativePoint><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getRelativePoint" target=_parent class=ISymbol>getRelativePoint</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getRoot><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getRoot')" class=ISymbol>getRoot</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getRoot" target=_parent class=IParent>mxGraphModel</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.getRoot" target=_parent class=IParent>mxPrintPreview</a></div></div></div><div class=SRResult id=SR_getRootTitle><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.getRootTitle" target=_parent class=ISymbol>getRootTitle</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_getRotatedPoint><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getRotatedPoint" target=_parent class=ISymbol>getRotatedPoint</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getRotation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getRotation')" class=ISymbol>getRotation</a><div class=ISubIndex><a href="../files/handler/mxHandle-js.html#mxHandle.getRotation" target=_parent class=IParent>mxHandle</a><a href="../files/shape/mxPolyline-js.html#mxPolyline.getRotation" target=_parent class=IParent>mxPolyline</a><a href="../files/shape/mxShape-js.html#mxShape.getRotation" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_getRotationHandlePosition><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.getRotationHandlePosition" target=_parent class=ISymbol>getRotationHandlePosition</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_getRoutingCenterX><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getRoutingCenterX" target=_parent class=ISymbol>getRoutingCenterX</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getRoutingCenterY><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getRoutingCenterY" target=_parent class=ISymbol>getRoutingCenterY</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getScale><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getScale" target=_parent class=ISymbol>getScale</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getScaleForPageCount><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getScaleForPageCount" target=_parent class=ISymbol>getScaleForPageCount</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getScrollOrigin><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getScrollOrigin" target=_parent class=ISymbol>getScrollOrigin</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getSelectionBorderBounds><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.getSelectionBorderBounds" target=_parent class=ISymbol>getSelectionBorderBounds</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_getSelectionBounds><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.getSelectionBounds" target=_parent class=ISymbol>getSelectionBounds</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_getSelectionCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSelectionCell" target=_parent class=ISymbol>getSelectionCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSelectionCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSelectionCells" target=_parent class=ISymbol>getSelectionCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSelectionCellsForChanges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSelectionCellsForChanges" target=_parent class=ISymbol>getSelectionCellsForChanges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSelectionColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getSelectionColor')" class=ISymbol>getSelectionColor</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getSelectionColor" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.getSelectionColor" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_getSelectionCount><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSelectionCount" target=_parent class=ISymbol>getSelectionCount</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSelectionModel><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSelectionModel" target=_parent class=ISymbol>getSelectionModel</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSelectionPoints><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getSelectionPoints" target=_parent class=ISymbol>getSelectionPoints</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_getSelectionStrokeWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getSelectionStrokeWidth')" class=ISymbol>getSelectionStrokeWidth</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getSelectionStrokeWidth" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.getSelectionStrokeWidth" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_getShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.getShape" target=_parent class=ISymbol>getShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_getShapeConstructor><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.getShapeConstructor" target=_parent class=ISymbol>getShapeConstructor</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_getShapeRotation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getShapeRotation')" class=ISymbol>getShapeRotation</a><div class=ISubIndex><a href="../files/shape/mxPolyline-js.html#mxPolyline.getShapeRotation" target=_parent class=IParent>mxPolyline</a><a href="../files/shape/mxShape-js.html#mxShape.getShapeRotation" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.getShapeRotation" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_getShapesForState><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.getShapesForState" target=_parent class=ISymbol>getShapesForState</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_getSizeForString><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getSizeForString" target=_parent class=ISymbol>getSizeForString</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getSizerBounds><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.getSizerBounds" target=_parent class=ISymbol>getSizerBounds</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_getSnapToTerminalTolerance><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getSnapToTerminalTolerance" target=_parent class=ISymbol>getSnapToTerminalTolerance</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_getSource><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getSource')" class=ISymbol>getSource</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.getSource" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getSource" target=_parent class=IParent>mxMouseEvent</a></div></div></div><div class=SRResult id=SR_getSourceContainerSize><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.getSourceContainerSize" target=_parent class=ISymbol>getSourceContainerSize</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_getSourceGraphBounds><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.getSourceGraphBounds" target=_parent class=ISymbol>getSourceGraphBounds</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_getSourcePerimeterPoint><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.getSourcePerimeterPoint" target=_parent class=ISymbol>getSourcePerimeterPoint</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_getSpacing><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.getSpacing" target=_parent class=ISymbol>getSpacing</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_getSpecialBundle><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.getSpecialBundle" target=_parent class=ISymbol>getSpecialBundle</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_getStartArrowWidth><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.getStartArrowWidth" target=_parent class=ISymbol>getStartArrowWidth</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_getStartSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getStartSize" target=_parent class=ISymbol>getStartSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getState><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getState')" class=ISymbol>getState</a><div class=ISubIndex><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.getState" target=_parent class=IParent>mxCellMarker</a><a href="../files/view/mxGraphView-js.html#mxGraphView.getState" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getState" target=_parent class=IParent>mxMouseEvent</a></div></div></div><div class=SRResult id=SR_getStateForEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getStateForEvent')" class=ISymbol>getStateForEvent</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getStateForEvent" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.getStateForEvent" target=_parent class=IParent>mxTooltipHandler</a></div></div></div><div class=SRResult id=SR_getStates><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getStates" target=_parent class=ISymbol>getStates</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getStateToMark><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.getStateToMark" target=_parent class=ISymbol>getStateToMark</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_getStatus><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.getStatus" target=_parent class=ISymbol>getStatus</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_getStencil><div class=IEntry><a href="../files/shape/mxStencilRegistry-js.html#mxStencilRegistry.getStencil" target=_parent class=ISymbol>getStencil</a>, <span class=IParent>mxStencilRegistry</span></div></div><div class=SRResult id=SR_getStringValue><div class=IEntry><a href="../files/io/mxStylesheetCodec-js.html#mxStylesheetCodec.getStringValue" target=_parent class=ISymbol>getStringValue</a>, <span class=IParent>mxStylesheetCodec</span></div></div><div class=SRResult id=SR_getStrokeWidth><div class=IEntry><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.getStrokeWidth" target=_parent class=ISymbol>getStrokeWidth</a>, <span class=IParent>mxCellHighlight</span></div></div><div class=SRResult id=SR_getStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getStyle')" class=ISymbol>getStyle</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getStyle" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getStyle" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getStylename><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getStylename" target=_parent class=ISymbol>getStylename</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getStylenames><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getStylenames" target=_parent class=ISymbol>getStylenames</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getStylesheet><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getStylesheet" target=_parent class=ISymbol>getStylesheet</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSvgGradient><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.getSvgGradient" target=_parent class=ISymbol>getSvgGradient</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_getSvgScreenOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getSvgScreenOffset')" class=ISymbol>getSvgScreenOffset</a><div class=ISubIndex><a href="../files/shape/mxImageShape-js.html#mxImageShape.getSvgScreenOffset" target=_parent class=IParent>mxImageShape</a><a href="../files/shape/mxShape-js.html#mxShape.getSvgScreenOffset" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.getSvgScreenOffset" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_getSwimlane><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSwimlane" target=_parent class=ISymbol>getSwimlane</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSwimlaneArcSize><div class=IEntry><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.getSwimlaneArcSize" target=_parent class=ISymbol>getSwimlaneArcSize</a>, <span class=IParent>mxSwimlane</span></div></div><div class=SRResult id=SR_getSwimlaneAt><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSwimlaneAt" target=_parent class=ISymbol>getSwimlaneAt</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSwimlaneDirection><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSwimlaneDirection" target=_parent class=ISymbol>getSwimlaneDirection</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getTable><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.getTable" target=_parent class=ISymbol>getTable</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_getTargetPerimeterPoint><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.getTargetPerimeterPoint" target=_parent class=ISymbol>getTargetPerimeterPoint</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_getTemplate><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.getTemplate" target=_parent class=ISymbol>getTemplate</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_getTerminal><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getTerminal')" class=ISymbol>getTerminal</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getTerminal" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getTerminal" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getTerminalForPort><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getTerminalForPort" target=_parent class=ISymbol>getTerminalForPort</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getTerminalPoint><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.getTerminalPoint" target=_parent class=ISymbol>getTerminalPoint</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_getTerminalPort><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getTerminalPort" target=_parent class=ISymbol>getTerminalPort</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getText><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.getText" target=_parent class=ISymbol>getText</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_getTextContent><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getTextContent" target=_parent class=ISymbol>getTextContent</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getTextCss><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getTextCss')" class=ISymbol>getTextCss</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.getTextCss" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/shape/mxText-js.html#mxText.getTextCss" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_getTextRotation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getTextRotation')" class=ISymbol>getTextRotation</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.getTextRotation" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.getTextRotation" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_getTextScale><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.getTextScale" target=_parent class=ISymbol>getTextScale</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_getTitle><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.getTitle" target=_parent class=ISymbol>getTitle</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_getTitleSize><div class=IEntry><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.getTitleSize" target=_parent class=ISymbol>getTitleSize</a>, <span class=IParent>mxSwimlane</span></div></div><div class=SRResult id=SR_getTolerance><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getTolerance')" class=ISymbol>getTolerance</a><div class=ISubIndex><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.getTolerance" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.getTolerance" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_getTooltip><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getTooltip" target=_parent class=ISymbol>getTooltip</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getTooltipForCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getTooltipForCell" target=_parent class=ISymbol>getTooltipForCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getTooltipForNode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getTooltipForNode')" class=ISymbol>getTooltipForNode</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#getTooltipForNode" target=_parent class=IParent>Global</a><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.getTooltipForNode" target=_parent class=IParent>mxElbowEdgeHandler</a></div></div></div><div class=SRResult id=SR_getTopmostCells><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getTopmostCells" target=_parent class=ISymbol>getTopmostCells</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_getTotalRotation><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.getTotalRotation" target=_parent class=ISymbol>getTotalRotation</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_getTranslate><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getTranslate" target=_parent class=ISymbol>getTranslate</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getTranslateForEvent><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.getTranslateForEvent" target=_parent class=ISymbol>getTranslateForEvent</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_getTranslateForRoot><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getTranslateForRoot" target=_parent class=ISymbol>getTranslateForRoot</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getUrlImage><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.getUrlImage" target=_parent class=ISymbol>getUrlImage</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_getUrlPost><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.getUrlPost" target=_parent class=ISymbol>getUrlPost</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_getValidState><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.getValidState" target=_parent class=ISymbol>getValidState</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_getValue><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getValue')" class=ISymbol>getValue</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getValue" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getValue" target=_parent class=IParent>mxGraphModel</a><a href="../files/view/mxStyleRegistry-js.html#mxStyleRegistry.getValue" target=_parent class=IParent>mxStyleRegistry</a><a href="../files/util/mxUtils-js.html#mxUtils.getValue" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_getValues><div class=IEntry><a href="../files/util/mxDictionary-js.html#mxDictionary.getValues" target=_parent class=ISymbol>getValues</a>, <span class=IParent>mxDictionary</span></div></div><div class=SRResult id=SR_getVertexBounds><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.getVertexBounds" target=_parent class=ISymbol>getVertexBounds</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_getVerticalAlign><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getVerticalAlign" target=_parent class=ISymbol>getVerticalAlign</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getView><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getView" target=_parent class=ISymbol>getView</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getViewXml><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getViewXml" target=_parent class=ISymbol>getViewXml</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getVisibleTerminal><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getVisibleTerminal')" class=ISymbol>getVisibleTerminal</a><div class=ISubIndex><a href="../files/view/mxCellState-js.html#mxCellState.getVisibleTerminal" target=_parent class=IParent>mxCellState</a><a href="../files/view/mxGraphView-js.html#mxGraphView.getVisibleTerminal" target=_parent class=IParent>mxGraphView</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.getVisibleTerminal" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.getVisibleTerminal" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_getVisibleTerminalState><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.getVisibleTerminalState" target=_parent class=ISymbol>getVisibleTerminalState</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_getVmlDashPattern><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.getVmlDashPattern" target=_parent class=ISymbol>getVmlDashPattern</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_getWindow><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.getWindow" target=_parent class=ISymbol>getWindow</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_getX><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getX')" class=ISymbol>getX</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.getX" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getX" target=_parent class=IParent>mxMouseEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.getX" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_getXml><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getXml')" class=ISymbol>getXml</a><div class=ISubIndex><a href="../files/util/mxUtils-js.html#mxUtils.getXml" target=_parent class=IParent>mxUtils</a><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.getXml" target=_parent class=IParent>mxXmlRequest</a></div></div></div><div class=SRResult id=SR_getY><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getY')" class=ISymbol>getY</a><div class=ISubIndex><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getY" target=_parent class=IParent>mxMouseEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.getY" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_graphContainsEvent><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.graphContainsEvent" target=_parent class=ISymbol>graphContainsEvent</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_graphModelChanged><div class=IEntry><a href="javascript:searchResults.Toggle('SR_graphModelChanged')" class=ISymbol>graphModelChanged</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.graphModelChanged" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/view/mxGraph-js.html#mxGraph.graphModelChanged" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_graphRenderHint><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.graphRenderHint" target=_parent class=ISymbol>graphRenderHint</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_groupCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_groupCells')" class=ISymbol>groupCells</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.groupCells" target=_parent class=IParent>mxEditor</a><a href="../files/view/mxGraph-js.html#mxGraph.groupCells" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_grow><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.grow" target=_parent class=ISymbol>grow</a>, <span class=IParent>mxRectangle</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsH.html b/docs/js-api/search/FunctionsH.html
index c4986653c..640838bfb 100644
--- a/docs/js-api/search/FunctionsH.html
+++ b/docs/js-api/search/FunctionsH.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_handlingResize><div class=IEntry><a href="../files/util/mxDivResizer-js.html#mxDivResizer.handlingResize" target=_parent class=ISymbol>handlingResize</a>, <span class=IParent>mxDivResizer</span></div></div><div class=SRResult id=SR_hasAttribute><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.hasAttribute" target=_parent class=ISymbol>hasAttribute</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_hasLayout><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.hasLayout" target=_parent class=ISymbol>hasLayout</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_hasScrollbars><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.hasScrollbars" target=_parent class=ISymbol>hasScrollbars</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_hasValidState><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.hasValidState" target=_parent class=ISymbol>hasValidState</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_HexagonPerimeter><div class=IEntry><a href="../files/view/mxPerimeter-js.html#mxPerimeter.HexagonPerimeter" target=_parent class=ISymbol>HexagonPerimeter</a>, <span class=IParent>mxPerimeter</span></div></div><div class=SRResult id=SR_hide><div class=IEntry><a href="javascript:searchResults.Toggle('SR_hide')" class=ISymbol>hide</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.hide" target=_parent class=IParent>mxCellHighlight</a><a href="../files/util/mxGuide-js.html#mxGuide.hide" target=_parent class=IParent>mxGuide</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.hide" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/util/mxWindow-js.html#mxWindow.hide" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_hideHandles><div class=IEntry><a href="javascript:searchResults.Toggle('SR_hideHandles')" class=ISymbol>hideHandles</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.hideHandles" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.hideHandles" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_hideMenu><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.hideMenu" target=_parent class=ISymbol>hideMenu</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_hideProperties><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.hideProperties" target=_parent class=ISymbol>hideProperties</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_hideSizers><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.hideSizers" target=_parent class=ISymbol>hideSizers</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_hideSubmenu><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.hideSubmenu" target=_parent class=ISymbol>hideSubmenu</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_hideTooltip><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.hideTooltip" target=_parent class=ISymbol>hideTooltip</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_hitsSwimlaneContent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.hitsSwimlaneContent" target=_parent class=ISymbol>hitsSwimlaneContent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_home><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.home" target=_parent class=ISymbol>home</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_horizontalLayout><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.horizontalLayout" target=_parent class=ISymbol>horizontalLayout</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_htmlEntities><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.htmlEntities" target=_parent class=ISymbol>htmlEntities</a>, <span class=IParent>mxUtils</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsI.html b/docs/js-api/search/FunctionsI.html
index 6990a18d5..f4a704ce5 100644
--- a/docs/js-api/search/FunctionsI.html
+++ b/docs/js-api/search/FunctionsI.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_image><div class=IEntry><a href="javascript:searchResults.Toggle('SR_image')" class=ISymbol>image</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.image" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.image" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.image" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_importCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.importCells" target=_parent class=ISymbol>importCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_importNode><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.importNode" target=_parent class=ISymbol>importNode</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_importNodeImplementation><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.importNodeImplementation" target=_parent class=ISymbol>importNodeImplementation</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_include><div class=IEntry><a href="../files/mxClient-js.html#mxClient.include" target=_parent class=ISymbol>include</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_indexOf><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.indexOf" target=_parent class=ISymbol>indexOf</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_indexOfStylename><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.indexOfStylename" target=_parent class=ISymbol>indexOfStylename</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_info><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.info" target=_parent class=ISymbol>info</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_init><div class=IEntry><a href="javascript:searchResults.Toggle('SR_init')" class=ISymbol>init</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.init" target=_parent class=IParent>mxCellEditor</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.init" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.init" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.init" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.init" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphView-js.html#mxGraphView.init" target=_parent class=IParent>mxGraphView</a><a href="../files/handler/mxHandle-js.html#mxHandle.init" target=_parent class=IParent>mxHandle</a><a href="../files/shape/mxLabel-js.html#mxLabel.init" target=_parent class=IParent>mxLabel</a><a href="../files/util/mxLog-js.html#mxLog.init" target=_parent class=IParent>mxLog</a><a href="../files/view/mxOutline-js.html#mxOutline.init" target=_parent class=IParent>mxOutline</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.init" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.init" target=_parent class=IParent>mxPopupMenuHandler</a><a href="../files/shape/mxShape-js.html#mxShape.init" target=_parent class=IParent>mxShape</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.init" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.init" target=_parent class=IParent>mxVertexHandler</a><a href="../files/util/mxWindow-js.html#mxWindow.init" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_initBend><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.initBend" target=_parent class=ISymbol>initBend</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_initControl><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.initControl" target=_parent class=ISymbol>initControl</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_initialCoords><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.initialCoords" target=_parent class=ISymbol>initialCoords</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_initializeLabel><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.initializeLabel" target=_parent class=ISymbol>initializeLabel</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_initializeOverlay><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.initializeOverlay" target=_parent class=ISymbol>initializeOverlay</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_initializeShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.initializeShape" target=_parent class=ISymbol>initializeShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_initialRank><div class=IEntry><a href="javascript:searchResults.Toggle('SR_initialRank')" class=ISymbol>initialRank</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.initialRank" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.initialRank" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_initShape><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.initShape" target=_parent class=ISymbol>initShape</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_initStyles><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.initStyles" target=_parent class=ISymbol>initStyles</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_insert><div class=IEntry><a href="javascript:searchResults.Toggle('SR_insert')" class=ISymbol>insert</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.insert" target=_parent class=IParent>mxCell</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.insert" target=_parent class=IParent>mxDefaultToolbar</a></div></div></div><div class=SRResult id=SR_insertBackgroundImage><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.insertBackgroundImage" target=_parent class=ISymbol>insertBackgroundImage</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_insertEdge><div class=IEntry><a href="javascript:searchResults.Toggle('SR_insertEdge')" class=ISymbol>insertEdge</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.insertEdge" target=_parent class=IParent>mxCell</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.insertEdge" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.insertEdge" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_insertIntoGraph><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.insertIntoGraph" target=_parent class=ISymbol>insertIntoGraph</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_insertStateAfter><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.insertStateAfter" target=_parent class=ISymbol>insertStateAfter</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_insertVertex><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.insertVertex" target=_parent class=ISymbol>insertVertex</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_installChangeHandler><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.installChangeHandler" target=_parent class=ISymbol>installChangeHandler</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_installCloseHandler><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.installCloseHandler" target=_parent class=ISymbol>installCloseHandler</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_installDblClickHandler><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.installDblClickHandler" target=_parent class=ISymbol>installDblClickHandler</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_installDrillHandler><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.installDrillHandler" target=_parent class=ISymbol>installDrillHandler</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_installDropHandler><div class=IEntry><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.installDropHandler" target=_parent class=ISymbol>installDropHandler</a>, <span class=IParent>mxDefaultToolbar</span></div></div><div class=SRResult id=SR_installInsertHandler><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.installInsertHandler" target=_parent class=ISymbol>installInsertHandler</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_installListeners><div class=IEntry><a href="javascript:searchResults.Toggle('SR_installListeners')" class=ISymbol>installListeners</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.installListeners" target=_parent class=IParent>mxCellEditor</a><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.installListeners" target=_parent class=IParent>mxCellRenderer</a><a href="../files/view/mxGraphView-js.html#mxGraphView.installListeners" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_installMaximizeHandler><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.installMaximizeHandler" target=_parent class=ISymbol>installMaximizeHandler</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_installMinimizeHandler><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.installMinimizeHandler" target=_parent class=ISymbol>installMinimizeHandler</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_installMoveHandler><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.installMoveHandler" target=_parent class=ISymbol>installMoveHandler</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_installOverlayListeners><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.installOverlayListeners" target=_parent class=ISymbol>installOverlayListeners</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_installUndoHandler><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.installUndoHandler" target=_parent class=ISymbol>installUndoHandler</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_intersect><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.intersect" target=_parent class=ISymbol>intersect</a>, <span class=IParent>mxRectangle</span></div></div><div class=SRResult id=SR_intersection><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.intersection" target=_parent class=ISymbol>intersection</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_intersects><div class=IEntry><a href="javascript:searchResults.Toggle('SR_intersects')" class=ISymbol>intersects</a><div class=ISubIndex><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.intersects" target=_parent class=IParent>mxCellMarker</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.intersects" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.intersects" target=_parent class=IParent>mxGraph</a><a href="../files/util/mxUtils-js.html#mxUtils.intersects" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_intersectsHotspot><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.intersectsHotspot" target=_parent class=ISymbol>intersectsHotspot</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_invalidate><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.invalidate" target=_parent class=ISymbol>invalidate</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_invert><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.invert" target=_parent class=ISymbol>invert</a>, <span class=IParent>mxGraphHierarchyEdge</span></div></div><div class=SRResult id=SR_isActive><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isActive')" class=ISymbol>isActive</a><div class=ISubIndex><a href="../files/util/mxDragSource-js.html#mxDragSource.isActive" target=_parent class=IParent>mxDragSource</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.isActive" target=_parent class=IParent>mxPanningHandler</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.isActive" target=_parent class=IParent>mxRubberband</a></div></div></div><div class=SRResult id=SR_isAddEnabled><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.isAddEnabled" target=_parent class=ISymbol>isAddEnabled</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_isAddPointEvent><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isAddPointEvent" target=_parent class=ISymbol>isAddPointEvent</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_isAddVirtualBendEvent><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isAddVirtualBendEvent" target=_parent class=ISymbol>isAddVirtualBendEvent</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_isAllowDanglingEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isAllowDanglingEdges" target=_parent class=ISymbol>isAllowDanglingEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isAllowEval><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.isAllowEval" target=_parent class=ISymbol>isAllowEval</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_isAllowLoops><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isAllowLoops" target=_parent class=ISymbol>isAllowLoops</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isAllowOverlapParent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isAllowOverlapParent" target=_parent class=ISymbol>isAllowOverlapParent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isAltDown><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isAltDown" target=_parent class=ISymbol>isAltDown</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isAncestor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isAncestor')" class=ISymbol>isAncestor</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.isAncestor" target=_parent class=IParent>mxGraphHierarchyNode</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.isAncestor" target=_parent class=IParent>mxGraphLayout</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isAncestor" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_isAncestorNode><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.isAncestorNode" target=_parent class=ISymbol>isAncestorNode</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_isArrowRounded><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.isArrowRounded" target=_parent class=ISymbol>isArrowRounded</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_isAutoSizeCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isAutoSizeCell" target=_parent class=ISymbol>isAutoSizeCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isAutoSizeCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isAutoSizeCells" target=_parent class=ISymbol>isAutoSizeCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isBinary><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.isBinary" target=_parent class=ISymbol>isBinary</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_isBooleanAttribute><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.isBooleanAttribute" target=_parent class=ISymbol>isBooleanAttribute</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_isBrowserSupported><div class=IEntry><a href="../files/mxClient-js.html#mxClient.isBrowserSupported" target=_parent class=ISymbol>isBrowserSupported</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_isBubbling><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.isBubbling" target=_parent class=ISymbol>isBubbling</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_isCancelEditingKeyEvent><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.isCancelEditingKeyEvent" target=_parent class=ISymbol>isCancelEditingKeyEvent</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_isCellBendable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellBendable" target=_parent class=ISymbol>isCellBendable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellCloneable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellCloneable" target=_parent class=ISymbol>isCellCloneable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellCodec><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isCellCodec')" class=ISymbol>isCellCodec</a><div class=ISubIndex><a href="../files/io/mxCellCodec-js.html#mxCellCodec.isCellCodec" target=_parent class=IParent>mxCellCodec</a><a href="../files/io/mxCodec-js.html#mxCodec.isCellCodec" target=_parent class=IParent>mxCodec</a></div></div></div><div class=SRResult id=SR_isCellCollapsed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isCellCollapsed')" class=ISymbol>isCellCollapsed</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.isCellCollapsed" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphView-js.html#mxGraphView.isCellCollapsed" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_isCellConnectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellConnectable" target=_parent class=ISymbol>isCellConnectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellDeletable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellDeletable" target=_parent class=ISymbol>isCellDeletable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellDisconnectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellDisconnectable" target=_parent class=ISymbol>isCellDisconnectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellEditable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellEditable" target=_parent class=ISymbol>isCellEditable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isCellEnabled')" class=ISymbol>isCellEnabled</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isCellEnabled" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isCellEnabled" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_isCellFoldable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellFoldable" target=_parent class=ISymbol>isCellFoldable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellHorizontal><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.isCellHorizontal" target=_parent class=ISymbol>isCellHorizontal</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_isCellLocked><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellLocked" target=_parent class=ISymbol>isCellLocked</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellMovable" target=_parent class=ISymbol>isCellMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellMoving><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isCellMoving" target=_parent class=ISymbol>isCellMoving</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_isCellResizable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellResizable" target=_parent class=ISymbol>isCellResizable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellRotatable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellRotatable" target=_parent class=ISymbol>isCellRotatable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsBendable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsBendable" target=_parent class=ISymbol>isCellsBendable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsCloneable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsCloneable" target=_parent class=ISymbol>isCellsCloneable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsDeletable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsDeletable" target=_parent class=ISymbol>isCellsDeletable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsDisconnectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsDisconnectable" target=_parent class=ISymbol>isCellsDisconnectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsEditable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsEditable" target=_parent class=ISymbol>isCellsEditable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellSelectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellSelectable" target=_parent class=ISymbol>isCellSelectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellSelected><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellSelected" target=_parent class=ISymbol>isCellSelected</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsLocked><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsLocked" target=_parent class=ISymbol>isCellsLocked</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsMovable" target=_parent class=ISymbol>isCellsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsResizable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsResizable" target=_parent class=ISymbol>isCellsResizable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsSelectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsSelectable" target=_parent class=ISymbol>isCellsSelectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellVisible><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellVisible" target=_parent class=ISymbol>isCellVisible</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCenteredEvent><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isCenteredEvent" target=_parent class=ISymbol>isCenteredEvent</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_isCloneEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isCloneEnabled" target=_parent class=ISymbol>isCloneEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_isCloneEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCloneEvent" target=_parent class=ISymbol>isCloneEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCloneInvalidEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCloneInvalidEdges" target=_parent class=ISymbol>isCloneInvalidEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCollapsed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isCollapsed')" class=ISymbol>isCollapsed</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.isCollapsed" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isCollapsed" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_isConnectable><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isConnectable')" class=ISymbol>isConnectable</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.isConnectable" target=_parent class=IParent>mxCell</a><a href="../files/view/mxGraph-js.html#mxGraph.isConnectable" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isConnectable" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_isConnectableCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isConnectableCell')" class=ISymbol>isConnectableCell</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isConnectableCell" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isConnectableCell" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_isConnectableEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isConnectableEdges" target=_parent class=ISymbol>isConnectableEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isConnecting><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isConnecting" target=_parent class=ISymbol>isConnecting</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_isConstrainChild><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isConstrainChild" target=_parent class=ISymbol>isConstrainChild</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isConstrainChildren><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isConstrainChildren" target=_parent class=ISymbol>isConstrainChildren</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isConstrainedEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isConstrainedEvent')" class=ISymbol>isConstrainedEvent</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.isConstrainedEvent" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isConstrainedEvent" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_isConstrainRelativeChildren><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isConstrainRelativeChildren" target=_parent class=ISymbol>isConstrainRelativeChildren</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isConsumed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isConsumed')" class=ISymbol>isConsumed</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.isConsumed" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxEventObject-js.html#mxEventObject.isConsumed" target=_parent class=IParent>mxEventObject</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.isConsumed" target=_parent class=IParent>mxMouseEvent</a></div></div></div><div class=SRResult id=SR_isContainerEvent><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.isContainerEvent" target=_parent class=ISymbol>isContainerEvent</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_isControlDown><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isControlDown')" class=ISymbol>isControlDown</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.isControlDown" target=_parent class=IParent>mxEvent</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.isControlDown" target=_parent class=IParent>mxKeyHandler</a></div></div></div><div class=SRResult id=SR_isCreateIds><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isCreateIds" target=_parent class=ISymbol>isCreateIds</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_isCreateTarget><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isCreateTarget" target=_parent class=ISymbol>isCreateTarget</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_isCustomHandleEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isCustomHandleEvent')" class=ISymbol>isCustomHandleEvent</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isCustomHandleEvent" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isCustomHandleEvent" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_isCustomHandleVisible><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isCustomHandleVisible')" class=ISymbol>isCustomHandleVisible</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isCustomHandleVisible" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isCustomHandleVisible" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_isDelayedSelection><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isDelayedSelection" target=_parent class=ISymbol>isDelayedSelection</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_isDestroyed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isDestroyed')" class=ISymbol>isDestroyed</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isDestroyed" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isDestroyed" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_isDisconnectOnMove><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isDisconnectOnMove" target=_parent class=ISymbol>isDisconnectOnMove</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isDropEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isDropEnabled" target=_parent class=ISymbol>isDropEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isEdge><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isEdge')" class=ISymbol>isEdge</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.isEdge" target=_parent class=IParent>mxCell</a><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.isEdge" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.isEdge" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isEdge" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_isEdgeIgnored><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.isEdgeIgnored" target=_parent class=ISymbol>isEdgeIgnored</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_isEdgeLabelsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isEdgeLabelsMovable" target=_parent class=ISymbol>isEdgeLabelsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isEdgeValid><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isEdgeValid" target=_parent class=ISymbol>isEdgeValid</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isEditing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isEditing" target=_parent class=ISymbol>isEditing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isEmpty><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isEmpty')" class=ISymbol>isEmpty</a><div class=ISubIndex><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.isEmpty" target=_parent class=IParent>mxCellStatePreview</a><a href="../files/util/mxClipboard-js.html#mxClipboard.isEmpty" target=_parent class=IParent>mxClipboard</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.isEmpty" target=_parent class=IParent>mxGraphSelectionModel</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.isEmpty" target=_parent class=IParent>mxUndoableEdit</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.isEmpty" target=_parent class=IParent>mxUndoManager</a></div></div></div><div class=SRResult id=SR_isEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isEnabled')" class=ISymbol>isEnabled</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.isEnabled" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.isEnabled" target=_parent class=IParent>mxCellMarker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isEnabled" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.isEnabled" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/util/mxDragSource-js.html#mxDragSource.isEnabled" target=_parent class=IParent>mxDragSource</a><a href="../files/view/mxGraph-js.html#mxGraph.isEnabled" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isEnabled" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.isEnabled" target=_parent class=IParent>mxKeyHandler</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.isEnabled" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxOutline-js.html#mxOutline.isEnabled" target=_parent class=IParent>mxOutline</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.isEnabled" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.isEnabled" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.isEnabled" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.isEnabled" target=_parent class=IParent>mxSwimlaneManager</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.isEnabled" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.isEnabled" target=_parent class=IParent>mxUrlConverter</a></div></div></div><div class=SRResult id=SR_isEnabledForEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isEnabledForEvent')" class=ISymbol>isEnabledForEvent</a><div class=ISubIndex><a href="../files/util/mxGuide-js.html#mxGuide.isEnabledForEvent" target=_parent class=IParent>mxGuide</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.isEnabledForEvent" target=_parent class=IParent>mxKeyHandler</a></div></div></div><div class=SRResult id=SR_isEnterStopsCellEditing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isEnterStopsCellEditing" target=_parent class=ISymbol>isEnterStopsCellEditing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isEscapeEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isEscapeEnabled" target=_parent class=ISymbol>isEscapeEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isEventIgnored><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isEventIgnored')" class=ISymbol>isEventIgnored</a><div class=ISubIndex><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.isEventIgnored" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.isEventIgnored" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.isEventIgnored" target=_parent class=IParent>mxKeyHandler</a></div></div></div><div class=SRResult id=SR_isEventsEnabled><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.isEventsEnabled" target=_parent class=ISymbol>isEventsEnabled</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_isEventSource><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.isEventSource" target=_parent class=ISymbol>isEventSource</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_isEventSourceIgnored><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isEventSourceIgnored" target=_parent class=ISymbol>isEventSourceIgnored</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isExcluded><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isExcluded')" class=ISymbol>isExcluded</a><div class=ISubIndex><a href="../files/io/mxCellCodec-js.html#mxCellCodec.isExcluded" target=_parent class=IParent>mxCellCodec</a><a href="../files/io/mxChildChangeCodec-js.html#mxChildChangeCodec.isExcluded" target=_parent class=IParent>mxChildChangeCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.isExcluded" target=_parent class=IParent>mxObjectCodec</a></div></div></div><div class=SRResult id=SR_isExtendParent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isExtendParent" target=_parent class=ISymbol>isExtendParent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isExtendParents><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isExtendParents" target=_parent class=ISymbol>isExtendParents</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isExtendParentsOnAdd><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isExtendParentsOnAdd" target=_parent class=ISymbol>isExtendParentsOnAdd</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isExtendParentsOnMove><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isExtendParentsOnMove" target=_parent class=ISymbol>isExtendParentsOnMove</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isForcePanningEvent><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.isForcePanningEvent" target=_parent class=ISymbol>isForcePanningEvent</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_isForceRubberbandEvent><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband.isForceRubberbandEvent" target=_parent class=ISymbol>isForceRubberbandEvent</a>, <span class=IParent>mxRubberband</span></div></div><div class=SRResult id=SR_isGhostPreview><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isGhostPreview" target=_parent class=ISymbol>isGhostPreview</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_isGraphEvent><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.isGraphEvent" target=_parent class=ISymbol>isGraphEvent</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_isGridEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isGridEnabled')" class=ISymbol>isGridEnabled</a><div class=ISubIndex><a href="../files/util/mxDragSource-js.html#mxDragSource.isGridEnabled" target=_parent class=IParent>mxDragSource</a><a href="../files/view/mxGraph-js.html#mxGraph.isGridEnabled" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_isGridEnabledEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isGridEnabledEvent" target=_parent class=ISymbol>isGridEnabledEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isGuidesEnabled><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.isGuidesEnabled" target=_parent class=ISymbol>isGuidesEnabled</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_isHandled><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.isHandled" target=_parent class=ISymbol>isHandled</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_isHandleEnabled><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isHandleEnabled" target=_parent class=ISymbol>isHandleEnabled</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_isHandlerActive><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.isHandlerActive" target=_parent class=ISymbol>isHandlerActive</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_isHandleVisible><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isHandleVisible" target=_parent class=ISymbol>isHandleVisible</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_isHideLabel><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.isHideLabel" target=_parent class=ISymbol>isHideLabel</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_isHideOnHover><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.isHideOnHover" target=_parent class=ISymbol>isHideOnHover</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_isHighlightAt><div class=IEntry><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.isHighlightAt" target=_parent class=ISymbol>isHighlightAt</a>, <span class=IParent>mxCellHighlight</span></div></div><div class=SRResult id=SR_isHorizontal><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isHorizontal')" class=ISymbol>isHorizontal</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.isHorizontal" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.isHorizontal" target=_parent class=IParent>mxPartitionLayout</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.isHorizontal" target=_parent class=IParent>mxStackLayout</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.isHorizontal" target=_parent class=IParent>mxSwimlane</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.isHorizontal" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_isHotspotEnabled><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.isHotspotEnabled" target=_parent class=ISymbol>isHotspotEnabled</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_isHtmlAllowed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isHtmlAllowed')" class=ISymbol>isHtmlAllowed</a><div class=ISubIndex><a href="../files/shape/mxImageShape-js.html#mxImageShape.isHtmlAllowed" target=_parent class=IParent>mxImageShape</a><a href="../files/shape/mxLabel-js.html#mxLabel.isHtmlAllowed" target=_parent class=IParent>mxLabel</a><a href="../files/shape/mxRectangleShape-js.html#mxRectangleShape.isHtmlAllowed" target=_parent class=IParent>mxRectangleShape</a><a href="../files/shape/mxShape-js.html#mxShape.isHtmlAllowed" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.isHtmlAllowed" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_isHtmlLabel><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isHtmlLabel" target=_parent class=ISymbol>isHtmlLabel</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isHtmlLabels><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isHtmlLabels" target=_parent class=ISymbol>isHtmlLabels</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isHtmlRequired><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.isHtmlRequired" target=_parent class=ISymbol>isHtmlRequired</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_isIgnoredAttribute><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.isIgnoredAttribute" target=_parent class=ISymbol>isIgnoredAttribute</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_isIgnoreTerminalEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isIgnoreTerminalEvent" target=_parent class=ISymbol>isIgnoreTerminalEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isImmediateConnectSource><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isImmediateConnectSource" target=_parent class=ISymbol>isImmediateConnectSource</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_isInsertBefore><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isInsertBefore" target=_parent class=ISymbol>isInsertBefore</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_isInteger><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.isInteger" target=_parent class=ISymbol>isInteger</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_isInvokesStopCellEditing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isInvokesStopCellEditing" target=_parent class=ISymbol>isInvokesStopCellEditing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isKeepFocusEvent><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.isKeepFocusEvent" target=_parent class=ISymbol>isKeepFocusEvent</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_isLabelClipped><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isLabelClipped" target=_parent class=ISymbol>isLabelClipped</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isLabelEvent><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.isLabelEvent" target=_parent class=ISymbol>isLabelEvent</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_isLabelMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isLabelMovable" target=_parent class=ISymbol>isLabelMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isLanguageSupported><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.isLanguageSupported" target=_parent class=ISymbol>isLanguageSupported</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_isLayer><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isLayer" target=_parent class=ISymbol>isLayer</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_isLeftMouseButton><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isLeftMouseButton" target=_parent class=ISymbol>isLeftMouseButton</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isLegacyEditor><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.isLegacyEditor" target=_parent class=ISymbol>isLegacyEditor</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_isLivePreviewBorder><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isLivePreviewBorder" target=_parent class=ISymbol>isLivePreviewBorder</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_isLoop><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isLoop" target=_parent class=ISymbol>isLoop</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isLoopStyleEnabled><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.isLoopStyleEnabled" target=_parent class=ISymbol>isLoopStyleEnabled</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_isMarkerEnd><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.isMarkerEnd" target=_parent class=ISymbol>isMarkerEnd</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_isMarkerStart><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.isMarkerStart" target=_parent class=ISymbol>isMarkerStart</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_isMenuShowing><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.isMenuShowing" target=_parent class=ISymbol>isMenuShowing</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_isMetaDown><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isMetaDown" target=_parent class=ISymbol>isMetaDown</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isMiddleMouseButton><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isMiddleMouseButton" target=_parent class=ISymbol>isMiddleMouseButton</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isModified><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.isModified" target=_parent class=ISymbol>isModified</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_isMouseEvent><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isMouseEvent" target=_parent class=ISymbol>isMouseEvent</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isMoveEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isMoveEnabled" target=_parent class=ISymbol>isMoveEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_isMoveIconToFrontForState><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isMoveIconToFrontForState" target=_parent class=ISymbol>isMoveIconToFrontForState</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_isMultigraph><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isMultigraph" target=_parent class=ISymbol>isMultigraph</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isMultiTouchEvent><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isMultiTouchEvent" target=_parent class=ISymbol>isMultiTouchEvent</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isNaN><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.isNaN" target=_parent class=ISymbol>isNaN</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_isNode><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.isNode" target=_parent class=ISymbol>isNode</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_isNumeric><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.isNumeric" target=_parent class=ISymbol>isNumeric</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_isNumericAttribute><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.isNumericAttribute" target=_parent class=ISymbol>isNumericAttribute</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_isOpenEnded><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.isOpenEnded" target=_parent class=ISymbol>isOpenEnded</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_isOrthogonal><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isOrthogonal" target=_parent class=ISymbol>isOrthogonal</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isOutlineConnectEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isOutlineConnectEvent')" class=ISymbol>isOutlineConnectEvent</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isOutlineConnectEvent" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isOutlineConnectEvent" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_isPaintBoundsInverted><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isPaintBoundsInverted')" class=ISymbol>isPaintBoundsInverted</a><div class=ISubIndex><a href="../files/shape/mxPolyline-js.html#mxPolyline.isPaintBoundsInverted" target=_parent class=IParent>mxPolyline</a><a href="../files/shape/mxShape-js.html#mxShape.isPaintBoundsInverted" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.isPaintBoundsInverted" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_isPanningEnabled><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.isPanningEnabled" target=_parent class=ISymbol>isPanningEnabled</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_isPanningTrigger><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.isPanningTrigger" target=_parent class=ISymbol>isPanningTrigger</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_isParentHighlightVisible><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isParentHighlightVisible')" class=ISymbol>isParentHighlightVisible</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isParentHighlightVisible" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isParentHighlightVisible" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_isParseVml><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isParseVml')" class=ISymbol>isParseVml</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.isParseVml" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.isParseVml" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_isPenEvent><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isPenEvent" target=_parent class=ISymbol>isPenEvent</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isPinchEnabled><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.isPinchEnabled" target=_parent class=ISymbol>isPinchEnabled</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_isPopupTrigger><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isPopupTrigger')" class=ISymbol>isPopupTrigger</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.isPopupTrigger" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.isPopupTrigger" target=_parent class=IParent>mxMouseEvent</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.isPopupTrigger" target=_parent class=IParent>mxPopupMenu</a></div></div></div><div class=SRResult id=SR_isPort><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isPort')" class=ISymbol>isPort</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.isPort" target=_parent class=IParent>mxGraph</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.isPort" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.isPort" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_isPortsEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isPortsEnabled" target=_parent class=ISymbol>isPortsEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isPropagateSelectionCell><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isPropagateSelectionCell" target=_parent class=ISymbol>isPropagateSelectionCell</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_isPropertiesVisible><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.isPropertiesVisible" target=_parent class=ISymbol>isPropertiesVisible</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_isReady><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.isReady" target=_parent class=ISymbol>isReady</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_isRecursiveResize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isRecursiveResize')" class=ISymbol>isRecursiveResize</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.isRecursiveResize" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isRecursiveResize" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_isReference><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isReference')" class=ISymbol>isReference</a><div class=ISubIndex><a href="../files/io/mxChildChangeCodec-js.html#mxChildChangeCodec.isReference" target=_parent class=IParent>mxChildChangeCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.isReference" target=_parent class=IParent>mxObjectCodec</a></div></div></div><div class=SRResult id=SR_isRelativeUrl><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.isRelativeUrl" target=_parent class=ISymbol>isRelativeUrl</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_isRemoveCellsFromParent><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isRemoveCellsFromParent" target=_parent class=ISymbol>isRemoveCellsFromParent</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_isRemovePointEvent><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isRemovePointEvent" target=_parent class=ISymbol>isRemovePointEvent</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_isRendering><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.isRendering" target=_parent class=ISymbol>isRendering</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_isResizable><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.isResizable" target=_parent class=ISymbol>isResizable</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_isResizeContainer><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isResizeContainer" target=_parent class=ISymbol>isResizeContainer</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isResizeEnabled><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.isResizeEnabled" target=_parent class=ISymbol>isResizeEnabled</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_isRightMouseButton><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isRightMouseButton" target=_parent class=ISymbol>isRightMouseButton</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isRoot><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isRoot" target=_parent class=ISymbol>isRoot</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_isRotationHandleVisible><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isRotationHandleVisible" target=_parent class=ISymbol>isRotationHandleVisible</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_isRoundable><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isRoundable')" class=ISymbol>isRoundable</a><div class=ISubIndex><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.isRoundable" target=_parent class=IParent>mxArrowConnector</a><a href="../files/shape/mxImageShape-js.html#mxImageShape.isRoundable" target=_parent class=IParent>mxImageShape</a><a href="../files/shape/mxRectangleShape-js.html#mxRectangleShape.isRoundable" target=_parent class=IParent>mxRectangleShape</a><a href="../files/shape/mxRhombus-js.html#mxRhombus.isRoundable" target=_parent class=IParent>mxRhombus</a><a href="../files/shape/mxShape-js.html#mxShape.isRoundable" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.isRoundable" target=_parent class=IParent>mxSwimlane</a><a href="../files/shape/mxTriangle-js.html#mxTriangle.isRoundable" target=_parent class=IParent>mxTriangle</a></div></div></div><div class=SRResult id=SR_isRunning><div class=IEntry><a href="../files/util/mxAnimation-js.html#mxAnimation.isRunning" target=_parent class=ISymbol>isRunning</a>, <span class=IParent>mxAnimation</span></div></div><div class=SRResult id=SR_isScrollEvent><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.isScrollEvent" target=_parent class=ISymbol>isScrollEvent</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_isSelected><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.isSelected" target=_parent class=ISymbol>isSelected</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_isSelectEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isSelectEnabled" target=_parent class=ISymbol>isSelectEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_isSelectionDashed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isSelectionDashed')" class=ISymbol>isSelectionDashed</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isSelectionDashed" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isSelectionDashed" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_isSelectionEmpty><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSelectionEmpty" target=_parent class=ISymbol>isSelectionEmpty</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isSelectOnPopup><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.isSelectOnPopup" target=_parent class=ISymbol>isSelectOnPopup</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_isSelectText><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.isSelectText" target=_parent class=ISymbol>isSelectText</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_isShapeEvent><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.isShapeEvent" target=_parent class=ISymbol>isShapeEvent</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_isShapeInvalid><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.isShapeInvalid" target=_parent class=ISymbol>isShapeInvalid</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_isShiftDown><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isShiftDown" target=_parent class=ISymbol>isShiftDown</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isSiblingSelected><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSiblingSelected" target=_parent class=ISymbol>isSiblingSelected</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isSignificant><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.isSignificant" target=_parent class=ISymbol>isSignificant</a>, <span class=IParent>mxUndoableEdit</span></div></div><div class=SRResult id=SR_isSingleSelection><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.isSingleSelection" target=_parent class=ISymbol>isSingleSelection</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_isSizerVisible><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isSizerVisible" target=_parent class=ISymbol>isSizerVisible</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_isSnapToTerminalsEvent><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isSnapToTerminalsEvent" target=_parent class=ISymbol>isSnapToTerminalsEvent</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_isSource><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.isSource" target=_parent class=ISymbol>isSource</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_isSplitEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSplitEnabled" target=_parent class=ISymbol>isSplitEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isSplitTarget><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSplitTarget" target=_parent class=ISymbol>isSplitTarget</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isStartEvent><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isStartEvent" target=_parent class=ISymbol>isStartEvent</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_isStateIgnored><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isStateIgnored')" class=ISymbol>isStateIgnored</a><div class=ISubIndex><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.isStateIgnored" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/util/mxGuide-js.html#mxGuide.isStateIgnored" target=_parent class=IParent>mxGuide</a></div></div></div><div class=SRResult id=SR_isStopEditingEvent><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.isStopEditingEvent" target=_parent class=ISymbol>isStopEditingEvent</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_isStopEvent><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isStopEvent" target=_parent class=ISymbol>isStopEvent</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_isSwimlane><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSwimlane" target=_parent class=ISymbol>isSwimlane</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isSwimlaneIgnored><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.isSwimlaneIgnored" target=_parent class=ISymbol>isSwimlaneIgnored</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_isSwimlaneNesting><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSwimlaneNesting" target=_parent class=ISymbol>isSwimlaneNesting</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isSwimlaneSelectionEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSwimlaneSelectionEnabled" target=_parent class=ISymbol>isSwimlaneSelectionEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isSyntheticEventIgnored><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSyntheticEventIgnored" target=_parent class=ISymbol>isSyntheticEventIgnored</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isTerminalPointMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isTerminalPointMovable" target=_parent class=ISymbol>isTerminalPointMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isTextShapeInvalid><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.isTextShapeInvalid" target=_parent class=ISymbol>isTextShapeInvalid</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_isToggleEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isToggleEvent" target=_parent class=ISymbol>isToggleEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isTouchEvent><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isTouchEvent" target=_parent class=ISymbol>isTouchEvent</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isTransparentClickEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isTransparentClickEvent" target=_parent class=ISymbol>isTransparentClickEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isTransparentState><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isTransparentState" target=_parent class=ISymbol>isTransparentState</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isValidAncestor><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isValidAncestor" target=_parent class=ISymbol>isValidAncestor</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isValidConnection><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isValidConnection" target=_parent class=ISymbol>isValidConnection</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isValidDropTarget><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isValidDropTarget')" class=ISymbol>isValidDropTarget</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.isValidDropTarget" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isValidDropTarget" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_isValidRoot><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isValidRoot" target=_parent class=ISymbol>isValidRoot</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isValidSource><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isValidSource')" class=ISymbol>isValidSource</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isValidSource" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.isValidSource" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_isValidState><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.isValidState" target=_parent class=ISymbol>isValidState</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_isValidTarget><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isValidTarget')" class=ISymbol>isValidTarget</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isValidTarget" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.isValidTarget" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_isVertex><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isVertex')" class=ISymbol>isVertex</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.isVertex" target=_parent class=IParent>mxCell</a><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.isVertex" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.isVertex" target=_parent class=IParent>mxGraphHierarchyNode</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isVertex" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_isVertexIgnored><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isVertexIgnored')" class=ISymbol>isVertexIgnored</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.isVertexIgnored" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.isVertexIgnored" target=_parent class=IParent>mxFastOrganicLayout</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.isVertexIgnored" target=_parent class=IParent>mxGraphLayout</a><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.isVertexIgnored" target=_parent class=IParent>mxRadialTreeLayout</a></div></div></div><div class=SRResult id=SR_isVertexLabelsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isVertexLabelsMovable" target=_parent class=ISymbol>isVertexLabelsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isVertexMovable><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.isVertexMovable" target=_parent class=ISymbol>isVertexMovable</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_isVirtualBendsEnabled><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isVirtualBendsEnabled" target=_parent class=ISymbol>isVirtualBendsEnabled</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_isVisible><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isVisible')" class=ISymbol>isVisible</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.isVisible" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isVisible" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxLog-js.html#mxLog.isVisible" target=_parent class=IParent>mxLog</a><a href="../files/util/mxWindow-js.html#mxWindow.isVisible" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_isVml><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.isVml" target=_parent class=ISymbol>isVml</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_isWrapping><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isWrapping" target=_parent class=ISymbol>isWrapping</a>, <span class=IParent>mxGraph</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsJ.html b/docs/js-api/search/FunctionsJ.html
index 8f353f57c..ceee7395c 100644
--- a/docs/js-api/search/FunctionsJ.html
+++ b/docs/js-api/search/FunctionsJ.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_join><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.join" target=_parent class=ISymbol>join</a>, <span class=IParent>mxCompactTreeLayout</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsK.html b/docs/js-api/search/FunctionsK.html
index 3627f12b4..24ea10552 100644
--- a/docs/js-api/search/FunctionsK.html
+++ b/docs/js-api/search/FunctionsK.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_keyDown><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.keyDown" target=_parent class=ISymbol>keyDown</a>, <span class=IParent>mxKeyHandler</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsL.html b/docs/js-api/search/FunctionsL.html
index 7a21c81e3..25d497647 100644
--- a/docs/js-api/search/FunctionsL.html
+++ b/docs/js-api/search/FunctionsL.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_labelChanged><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.labelChanged" target=_parent class=ISymbol>labelChanged</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_layeringStage><div class=IEntry><a href="javascript:searchResults.Toggle('SR_layeringStage')" class=ISymbol>layeringStage</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.layeringStage" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.layeringStage" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_layout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_layout')" class=ISymbol>layout</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.layout" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.layout" target=_parent class=IParent>mxParallelEdgeLayout</a></div></div></div><div class=SRResult id=SR_layoutCells><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.layoutCells" target=_parent class=ISymbol>layoutCells</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_layoutLeaf><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.layoutLeaf" target=_parent class=ISymbol>layoutLeaf</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_leave><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.leave" target=_parent class=ISymbol>leave</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_lineTo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineTo')" class=ISymbol>lineTo</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.lineTo" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.lineTo" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_link><div class=IEntry><a href="javascript:searchResults.Toggle('SR_link')" class=ISymbol>link</a><div class=ISubIndex><a href="../files/mxClient-js.html#mxClient.link" target=_parent class=IParent>mxClient</a><a href="../files/util/mxUtils-js.html#mxUtils.link" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_linkAction><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.linkAction" target=_parent class=ISymbol>linkAction</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_linkInvoke><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.linkInvoke" target=_parent class=ISymbol>linkInvoke</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_load><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.load" target=_parent class=ISymbol>load</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_loadInto><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.loadInto" target=_parent class=ISymbol>loadInto</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_loadResources><div class=IEntry><a href="javascript:searchResults.Toggle('SR_loadResources')" class=ISymbol>loadResources</a><div class=ISubIndex><a href="../files/mxClient-js.html#mxClient.loadResources" target=_parent class=IParent>mxClient</a><a href="../files/util/mxResources-js.html#mxResources.loadResources" target=_parent class=IParent>mxResources</a></div></div></div><div class=SRResult id=SR_localEdgeProcessing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_localEdgeProcessing')" class=ISymbol>localEdgeProcessing</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.localEdgeProcessing" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.localEdgeProcessing" target=_parent class=IParent>mxCoordinateAssignment</a></div></div></div><div class=SRResult id=SR_lookup><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.lookup" target=_parent class=ISymbol>lookup</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_Loop><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.Loop" target=_parent class=ISymbol>Loop</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_ltrim><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.ltrim" target=_parent class=ISymbol>ltrim</a>, <span class=IParent>mxUtils</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsM.html b/docs/js-api/search/FunctionsM.html
index aae22a7fe..c8caf634e 100644
--- a/docs/js-api/search/FunctionsM.html
+++ b/docs/js-api/search/FunctionsM.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_makeDraggable><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.makeDraggable" target=_parent class=ISymbol>makeDraggable</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_map><div class=IEntry><a href="../files/util/mxDictionary-js.html#mxDictionary.map" target=_parent class=ISymbol>map</a>, <span class=IParent>mxDictionary</span></div></div><div class=SRResult id=SR_mark><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mark')" class=ISymbol>mark</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.mark" target=_parent class=IParent>mxCellHighlight</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.mark" target=_parent class=IParent>mxCellMarker</a></div></div></div><div class=SRResult id=SR_markCell><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.markCell" target=_parent class=ISymbol>markCell</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_maxChainDfs><div class=IEntry><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.maxChainDfs" target=_parent class=ISymbol>maxChainDfs</a>, <span class=IParent>mxSwimlaneModel</span></div></div><div class=SRResult id=SR_MedianCellSorter><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#MedianCellSorter.MedianCellSorter" target=_parent class=ISymbol>MedianCellSorter</a>, <span class=IParent>MedianCellSorter</span></div></div><div class=SRResult id=SR_medianPos><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.medianPos" target=_parent class=ISymbol>medianPos</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_medianRank><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.medianRank" target=_parent class=ISymbol>medianRank</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_medianValue><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.medianValue" target=_parent class=ISymbol>medianValue</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_medianXValue><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.medianXValue" target=_parent class=ISymbol>medianXValue</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_merge><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.merge" target=_parent class=ISymbol>merge</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_mergeChildren><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mergeChildren" target=_parent class=ISymbol>mergeChildren</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_minNode><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.minNode" target=_parent class=ISymbol>minNode</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_minPath><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.minPath" target=_parent class=ISymbol>minPath</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_mod><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.mod" target=_parent class=ISymbol>mod</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_mouseDown><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mouseDown')" class=ISymbol>mouseDown</a><div class=ISubIndex><a href="../files/handler/mxCellTracker-js.html#mxCellTracker.mouseDown" target=_parent class=IParent>mxCellTracker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mouseDown" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/util/mxDragSource-js.html#mxDragSource.mouseDown" target=_parent class=IParent>mxDragSource</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.mouseDown" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.mouseDown" target=_parent class=IParent>mxGraphHandler</a><a href="../files/view/mxOutline-js.html#mxOutline.mouseDown" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.mouseDown" target=_parent class=IParent>mxPanningHandler</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.mouseDown" target=_parent class=IParent>mxPopupMenuHandler</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.mouseDown" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.mouseDown" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.mouseDown" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.mouseDown" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_mouseMove><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mouseMove')" class=ISymbol>mouseMove</a><div class=ISubIndex><a href="../files/handler/mxCellTracker-js.html#mxCellTracker.mouseMove" target=_parent class=IParent>mxCellTracker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mouseMove" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/util/mxDragSource-js.html#mxDragSource.mouseMove" target=_parent class=IParent>mxDragSource</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.mouseMove" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.mouseMove" target=_parent class=IParent>mxGraphHandler</a><a href="../files/view/mxOutline-js.html#mxOutline.mouseMove" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.mouseMove" target=_parent class=IParent>mxPanningHandler</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.mouseMove" target=_parent class=IParent>mxPopupMenuHandler</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.mouseMove" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.mouseMove" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.mouseMove" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.mouseMove" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_mouseUp><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mouseUp')" class=ISymbol>mouseUp</a><div class=ISubIndex><a href="../files/handler/mxCellTracker-js.html#mxCellTracker.mouseUp" target=_parent class=IParent>mxCellTracker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mouseUp" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/util/mxDragSource-js.html#mxDragSource.mouseUp" target=_parent class=IParent>mxDragSource</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.mouseUp" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.mouseUp" target=_parent class=IParent>mxGraphHandler</a><a href="../files/view/mxOutline-js.html#mxOutline.mouseUp" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.mouseUp" target=_parent class=IParent>mxPanningHandler</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.mouseUp" target=_parent class=IParent>mxPopupMenuHandler</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.mouseUp" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.mouseUp" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.mouseUp" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.mouseUp" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_move><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.move" target=_parent class=ISymbol>move</a>, <span class=IParent>mxGuide</span></div></div><div class=SRResult id=SR_moveCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_moveCell')" class=ISymbol>moveCell</a><div class=ISubIndex><a href="../files/layout/mxCompositeLayout-js.html#mxCompositeLayout.moveCell" target=_parent class=IParent>mxCompositeLayout</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.moveCell" target=_parent class=IParent>mxGraphLayout</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.moveCell" target=_parent class=IParent>mxPartitionLayout</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.moveCell" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_moveCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_moveCells')" class=ISymbol>moveCells</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.moveCells" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.moveCells" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_moveChildren><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.moveChildren" target=_parent class=ISymbol>moveChildren</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_moveLabel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_moveLabel')" class=ISymbol>moveLabel</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.moveLabel" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.moveLabel" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_moveNode><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.moveNode" target=_parent class=ISymbol>moveNode</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_moveState><div class=IEntry><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.moveState" target=_parent class=ISymbol>moveState</a>, <span class=IParent>mxCellStatePreview</span></div></div><div class=SRResult id=SR_moveTo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_moveTo')" class=ISymbol>moveTo</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.moveTo" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.moveTo" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_moveToFront><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.moveToFront" target=_parent class=ISymbol>moveToFront</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_mxAbstractCanvas2D><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.mxAbstractCanvas2D" target=_parent class=ISymbol>mxAbstractCanvas2D</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_mxActor><div class=IEntry><a href="../files/shape/mxActor-js.html#mxActor.mxActor" target=_parent class=ISymbol>mxActor</a>, <span class=IParent>mxActor</span></div></div><div class=SRResult id=SR_mxAnimation><div class=IEntry><a href="../files/util/mxAnimation-js.html#mxAnimation.mxAnimation" target=_parent class=ISymbol>mxAnimation</a>, <span class=IParent>mxAnimation</span></div></div><div class=SRResult id=SR_mxArrow><div class=IEntry><a href="../files/shape/mxArrow-js.html#mxArrow.mxArrow" target=_parent class=ISymbol>mxArrow</a>, <span class=IParent>mxArrow</span></div></div><div class=SRResult id=SR_mxArrowConnector><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.mxArrowConnector" target=_parent class=ISymbol>mxArrowConnector</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_mxAutoSaveManager><div class=IEntry><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.mxAutoSaveManager" target=_parent class=ISymbol>mxAutoSaveManager</a>, <span class=IParent>mxAutoSaveManager</span></div></div><div class=SRResult id=SR_mxCell><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.mxCell" target=_parent class=ISymbol>mxCell</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_mxCellAttributeChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxCellAttributeChange.mxCellAttributeChange" target=_parent class=ISymbol>mxCellAttributeChange</a>, <span class=IParent>mxCellAttributeChange</span></div></div><div class=SRResult id=SR_mxCellEditor><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.mxCellEditor" target=_parent class=ISymbol>mxCellEditor</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_mxCellHighlight><div class=IEntry><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.mxCellHighlight" target=_parent class=ISymbol>mxCellHighlight</a>, <span class=IParent>mxCellHighlight</span></div></div><div class=SRResult id=SR_mxCellMarker><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.mxCellMarker" target=_parent class=ISymbol>mxCellMarker</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_mxCellOverlay><div class=IEntry><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.mxCellOverlay" target=_parent class=ISymbol>mxCellOverlay</a>, <span class=IParent>mxCellOverlay</span></div></div><div class=SRResult id=SR_mxCellRenderer><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.mxCellRenderer" target=_parent class=ISymbol>mxCellRenderer</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_mxCellState><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.mxCellState" target=_parent class=ISymbol>mxCellState</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_mxCellStatePreview><div class=IEntry><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.mxCellStatePreview" target=_parent class=ISymbol>mxCellStatePreview</a>, <span class=IParent>mxCellStatePreview</span></div></div><div class=SRResult id=SR_mxCellTracker><div class=IEntry><a href="../files/handler/mxCellTracker-js.html#mxCellTracker.mxCellTracker" target=_parent class=ISymbol>mxCellTracker</a>, <span class=IParent>mxCellTracker</span></div></div><div class=SRResult id=SR_mxChildChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxChildChange.mxChildChange" target=_parent class=ISymbol>mxChildChange</a>, <span class=IParent>mxChildChange</span></div></div><div class=SRResult id=SR_mxCircleLayout><div class=IEntry><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.mxCircleLayout" target=_parent class=ISymbol>mxCircleLayout</a>, <span class=IParent>mxCircleLayout</span></div></div><div class=SRResult id=SR_mxCloud><div class=IEntry><a href="../files/shape/mxCloud-js.html#mxCloud.mxCloud" target=_parent class=ISymbol>mxCloud</a>, <span class=IParent>mxCloud</span></div></div><div class=SRResult id=SR_mxCodec><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.mxCodec" target=_parent class=ISymbol>mxCodec</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_mxCollapseChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxCollapseChange.mxCollapseChange" target=_parent class=ISymbol>mxCollapseChange</a>, <span class=IParent>mxCollapseChange</span></div></div><div class=SRResult id=SR_mxCompactTreeLayout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCompactTreeLayout')" class=ISymbol>mxCompactTreeLayout</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.mxCompactTreeLayout" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.mxCompactTreeLayout" target=_parent class=IParent>mxFastOrganicLayout</a></div></div></div><div class=SRResult id=SR_mxCompositeLayout><div class=IEntry><a href="../files/layout/mxCompositeLayout-js.html#mxCompositeLayout.mxCompositeLayout" target=_parent class=ISymbol>mxCompositeLayout</a>, <span class=IParent>mxCompositeLayout</span></div></div><div class=SRResult id=SR_mxConnectionConstraint><div class=IEntry><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint.mxConnectionConstraint" target=_parent class=ISymbol>mxConnectionConstraint</a>, <span class=IParent>mxConnectionConstraint</span></div></div><div class=SRResult id=SR_mxConnectionHandler><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mxConnectionHandler" target=_parent class=ISymbol>mxConnectionHandler</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_mxConnector><div class=IEntry><a href="../files/shape/mxConnector-js.html#mxConnector.mxConnector" target=_parent class=ISymbol>mxConnector</a>, <span class=IParent>mxConnector</span></div></div><div class=SRResult id=SR_mxConstraintHandler><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.mxConstraintHandler" target=_parent class=ISymbol>mxConstraintHandler</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_mxCoordinateAssignment><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.mxCoordinateAssignment" target=_parent class=ISymbol>mxCoordinateAssignment</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_mxCurrentRootChange><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCurrentRootChange')" class=ISymbol>mxCurrentRootChange</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxCurrentRootChange.mxCurrentRootChange" target=_parent class=IParent>mxCurrentRootChange</a><a href="../files/view/mxGraphSelectionModel-js.html#mxSelectionChange.mxCurrentRootChange" target=_parent class=IParent>mxSelectionChange</a></div></div></div><div class=SRResult id=SR_mxCylinder><div class=IEntry><a href="../files/shape/mxCylinder-js.html#mxCylinder.mxCylinder" target=_parent class=ISymbol>mxCylinder</a>, <span class=IParent>mxCylinder</span></div></div><div class=SRResult id=SR_mxDefaultKeyHandler><div class=IEntry><a href="../files/editor/mxDefaultKeyHandler-js.html#mxDefaultKeyHandler.mxDefaultKeyHandler" target=_parent class=ISymbol>mxDefaultKeyHandler</a>, <span class=IParent>mxDefaultKeyHandler</span></div></div><div class=SRResult id=SR_mxDefaultPopupMenu><div class=IEntry><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.mxDefaultPopupMenu" target=_parent class=ISymbol>mxDefaultPopupMenu</a>, <span class=IParent>mxDefaultPopupMenu</span></div></div><div class=SRResult id=SR_mxDefaultToolbar><div class=IEntry><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.mxDefaultToolbar" target=_parent class=ISymbol>mxDefaultToolbar</a>, <span class=IParent>mxDefaultToolbar</span></div></div><div class=SRResult id=SR_mxDivResizer><div class=IEntry><a href="../files/util/mxDivResizer-js.html#mxDivResizer.mxDivResizer" target=_parent class=ISymbol>mxDivResizer</a>, <span class=IParent>mxDivResizer</span></div></div><div class=SRResult id=SR_mxDoubleEllipse><div class=IEntry><a href="../files/shape/mxDoubleEllipse-js.html#mxDoubleEllipse.mxDoubleEllipse" target=_parent class=ISymbol>mxDoubleEllipse</a>, <span class=IParent>mxDoubleEllipse</span></div></div><div class=SRResult id=SR_mxDragSource><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.mxDragSource" target=_parent class=ISymbol>mxDragSource</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_mxEdgeHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxEdgeHandler')" class=ISymbol>mxEdgeHandler</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.mxEdgeHandler" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.mxEdgeHandler" target=_parent class=IParent>mxElbowEdgeHandler</a></div></div></div><div class=SRResult id=SR_mxEdgeLabelLayout><div class=IEntry><a href="../files/layout/mxEdgeLabelLayout-js.html#mxEdgeLabelLayout.mxEdgeLabelLayout" target=_parent class=ISymbol>mxEdgeLabelLayout</a>, <span class=IParent>mxEdgeLabelLayout</span></div></div><div class=SRResult id=SR_mxEditor><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.mxEditor" target=_parent class=ISymbol>mxEditor</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_mxEllipse><div class=IEntry><a href="../files/shape/mxEllipse-js.html#mxEllipse.mxEllipse" target=_parent class=ISymbol>mxEllipse</a>, <span class=IParent>mxEllipse</span></div></div><div class=SRResult id=SR_mxEventObject><div class=IEntry><a href="../files/util/mxEventObject-js.html#mxEventObject.mxEventObject" target=_parent class=ISymbol>mxEventObject</a>, <span class=IParent>mxEventObject</span></div></div><div class=SRResult id=SR_mxEventSource><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxEventSource')" class=ISymbol>mxEventSource</a><div class=ISubIndex><a href="../files/util/mxDictionary-js.html#mxDictionary.mxEventSource" target=_parent class=IParent>mxDictionary</a><a href="../files/util/mxEventSource-js.html#mxEventSource.mxEventSource" target=_parent class=IParent>mxEventSource</a></div></div></div><div class=SRResult id=SR_mxForm><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.mxForm" target=_parent class=ISymbol>mxForm</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_mxGenericChangeCodec><div class=IEntry><a href="../files/io/mxGenericChangeCodec-js.html#mxGenericChangeCodec.mxGenericChangeCodec" target=_parent class=ISymbol>mxGenericChangeCodec</a>, <span class=IParent>mxGenericChangeCodec</span></div></div><div class=SRResult id=SR_mxGeometry><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.mxGeometry" target=_parent class=ISymbol>mxGeometry</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_mxGeometryChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGeometryChange.mxGeometryChange" target=_parent class=ISymbol>mxGeometryChange</a>, <span class=IParent>mxGeometryChange</span></div></div><div class=SRResult id=SR_mxGraph><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mxGraph" target=_parent class=ISymbol>mxGraph</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_mxGraphAbstractHierarchyCell><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.mxGraphAbstractHierarchyCell" target=_parent class=ISymbol>mxGraphAbstractHierarchyCell</a>, <span class=IParent>mxGraphAbstractHierarchyCell</span></div></div><div class=SRResult id=SR_mxGraphHandler><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.mxGraphHandler" target=_parent class=ISymbol>mxGraphHandler</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_mxGraphHierarchyEdge><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.mxGraphHierarchyEdge" target=_parent class=ISymbol>mxGraphHierarchyEdge</a>, <span class=IParent>mxGraphHierarchyEdge</span></div></div><div class=SRResult id=SR_mxGraphHierarchyModel><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.mxGraphHierarchyModel" target=_parent class=ISymbol>mxGraphHierarchyModel</a>, <span class=IParent>mxGraphHierarchyModel</span></div></div><div class=SRResult id=SR_mxGraphHierarchyNode><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.mxGraphHierarchyNode" target=_parent class=ISymbol>mxGraphHierarchyNode</a>, <span class=IParent>mxGraphHierarchyNode</span></div></div><div class=SRResult id=SR_mxGraphLayout><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.mxGraphLayout" target=_parent class=ISymbol>mxGraphLayout</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_mxGraphModel><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxGraphModel" target=_parent class=ISymbol>mxGraphModel</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_mxGraphSelectionModel><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.mxGraphSelectionModel" target=_parent class=ISymbol>mxGraphSelectionModel</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_mxGraphView><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.mxGraphView" target=_parent class=ISymbol>mxGraphView</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_mxGuide><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.mxGuide" target=_parent class=ISymbol>mxGuide</a>, <span class=IParent>mxGuide</span></div></div><div class=SRResult id=SR_mxHandle><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.mxHandle" target=_parent class=ISymbol>mxHandle</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_mxHexagon><div class=IEntry><a href="../files/shape/mxHexagon-js.html#mxHexagon.mxHexagon" target=_parent class=ISymbol>mxHexagon</a>, <span class=IParent>mxHexagon</span></div></div><div class=SRResult id=SR_mxHierarchicalLayout><div class=IEntry><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.mxHierarchicalLayout" target=_parent class=ISymbol>mxHierarchicalLayout</a>, <span class=IParent>mxHierarchicalLayout</span></div></div><div class=SRResult id=SR_mxHierarchicalLayoutStage><div class=IEntry><a href="../files/layout/hierarchical/stage/mxHierarchicalLayoutStage-js.html#mxHierarchicalLayoutStage.mxHierarchicalLayoutStage" target=_parent class=ISymbol>mxHierarchicalLayoutStage</a>, <span class=IParent>mxHierarchicalLayoutStage</span></div></div><div class=SRResult id=SR_mxImage><div class=IEntry><a href="../files/util/mxImage-js.html#mxImage.mxImage" target=_parent class=ISymbol>mxImage</a>, <span class=IParent>mxImage</span></div></div><div class=SRResult id=SR_mxImageExport><div class=IEntry><a href="../files/util/mxImageExport-js.html#mxImageExport.mxImageExport" target=_parent class=ISymbol>mxImageExport</a>, <span class=IParent>mxImageExport</span></div></div><div class=SRResult id=SR_mxImageShape><div class=IEntry><a href="../files/shape/mxImageShape-js.html#mxImageShape.mxImageShape" target=_parent class=ISymbol>mxImageShape</a>, <span class=IParent>mxImageShape</span></div></div><div class=SRResult id=SR_mxKeyHandler><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.mxKeyHandler" target=_parent class=ISymbol>mxKeyHandler</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_mxLabel><div class=IEntry><a href="../files/shape/mxLabel-js.html#mxLabel.mxLabel" target=_parent class=ISymbol>mxLabel</a>, <span class=IParent>mxLabel</span></div></div><div class=SRResult id=SR_mxLayoutManager><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.mxLayoutManager" target=_parent class=ISymbol>mxLayoutManager</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_mxLine><div class=IEntry><a href="../files/shape/mxLine-js.html#mxLine.mxLine" target=_parent class=ISymbol>mxLine</a>, <span class=IParent>mxLine</span></div></div><div class=SRResult id=SR_mxMedianHybridCrossingReduction><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.mxMedianHybridCrossingReduction" target=_parent class=ISymbol>mxMedianHybridCrossingReduction</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_mxMinimumCycleRemover><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMinimumCycleRemover-js.html#mxMinimumCycleRemover.mxMinimumCycleRemover" target=_parent class=ISymbol>mxMinimumCycleRemover</a>, <span class=IParent>mxMinimumCycleRemover</span></div></div><div class=SRResult id=SR_mxMorphing><div class=IEntry><a href="../files/util/mxMorphing-js.html#mxMorphing.mxMorphing" target=_parent class=ISymbol>mxMorphing</a>, <span class=IParent>mxMorphing</span></div></div><div class=SRResult id=SR_mxMouseEvent><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.mxMouseEvent" target=_parent class=ISymbol>mxMouseEvent</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_mxMultiplicity><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.mxMultiplicity" target=_parent class=ISymbol>mxMultiplicity</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_mxObjectCodec><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.mxObjectCodec" target=_parent class=ISymbol>mxObjectCodec</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_mxOutline><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.mxOutline" target=_parent class=ISymbol>mxOutline</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_mxPanningHandler><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.mxPanningHandler" target=_parent class=ISymbol>mxPanningHandler</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_mxParallelEdgeLayout><div class=IEntry><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.mxParallelEdgeLayout" target=_parent class=ISymbol>mxParallelEdgeLayout</a>, <span class=IParent>mxParallelEdgeLayout</span></div></div><div class=SRResult id=SR_mxPartitionLayout><div class=IEntry><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.mxPartitionLayout" target=_parent class=ISymbol>mxPartitionLayout</a>, <span class=IParent>mxPartitionLayout</span></div></div><div class=SRResult id=SR_mxPoint><div class=IEntry><a href="../files/util/mxPoint-js.html#mxPoint.mxPoint" target=_parent class=ISymbol>mxPoint</a>, <span class=IParent>mxPoint</span></div></div><div class=SRResult id=SR_mxPolyline><div class=IEntry><a href="../files/shape/mxPolyline-js.html#mxPolyline.mxPolyline" target=_parent class=ISymbol>mxPolyline</a>, <span class=IParent>mxPolyline</span></div></div><div class=SRResult id=SR_mxPopupMenu><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.mxPopupMenu" target=_parent class=ISymbol>mxPopupMenu</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_mxPopupMenuHandler><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.mxPopupMenuHandler" target=_parent class=ISymbol>mxPopupMenuHandler</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_mxPrintPreview><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.mxPrintPreview" target=_parent class=ISymbol>mxPrintPreview</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_mxRadialTreeLayout><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.mxRadialTreeLayout" target=_parent class=ISymbol>mxRadialTreeLayout</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_mxRectangle><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.mxRectangle" target=_parent class=ISymbol>mxRectangle</a>, <span class=IParent>mxRectangle</span></div></div><div class=SRResult id=SR_mxRectangleShape><div class=IEntry><a href="../files/shape/mxRectangleShape-js.html#mxRectangleShape.mxRectangleShape" target=_parent class=ISymbol>mxRectangleShape</a>, <span class=IParent>mxRectangleShape</span></div></div><div class=SRResult id=SR_mxRhombus><div class=IEntry><a href="../files/shape/mxRhombus-js.html#mxRhombus.mxRhombus" target=_parent class=ISymbol>mxRhombus</a>, <span class=IParent>mxRhombus</span></div></div><div class=SRResult id=SR_mxRootChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxRootChange.mxRootChange" target=_parent class=ISymbol>mxRootChange</a>, <span class=IParent>mxRootChange</span></div></div><div class=SRResult id=SR_mxRubberband><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband.mxRubberband" target=_parent class=ISymbol>mxRubberband</a>, <span class=IParent>mxRubberband</span></div></div><div class=SRResult id=SR_mxShape><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.mxShape" target=_parent class=ISymbol>mxShape</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_mxStackLayout><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.mxStackLayout" target=_parent class=ISymbol>mxStackLayout</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_mxStencil><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.mxStencil" target=_parent class=ISymbol>mxStencil</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_mxStyleChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxStyleChange.mxStyleChange" target=_parent class=ISymbol>mxStyleChange</a>, <span class=IParent>mxStyleChange</span></div></div><div class=SRResult id=SR_mxStylesheet><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.mxStylesheet" target=_parent class=ISymbol>mxStylesheet</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_mxSvgCanvas2D><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.mxSvgCanvas2D" target=_parent class=ISymbol>mxSvgCanvas2D</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_mxSwimlane><div class=IEntry><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.mxSwimlane" target=_parent class=ISymbol>mxSwimlane</a>, <span class=IParent>mxSwimlane</span></div></div><div class=SRResult id=SR_mxSwimlaneLayout><div class=IEntry><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.mxSwimlaneLayout" target=_parent class=ISymbol>mxSwimlaneLayout</a>, <span class=IParent>mxSwimlaneLayout</span></div></div><div class=SRResult id=SR_mxSwimlaneManager><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.mxSwimlaneManager" target=_parent class=ISymbol>mxSwimlaneManager</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_mxSwimlaneModel><div class=IEntry><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.mxSwimlaneModel" target=_parent class=ISymbol>mxSwimlaneModel</a>, <span class=IParent>mxSwimlaneModel</span></div></div><div class=SRResult id=SR_mxSwimlaneOrdering><div class=IEntry><a href="../files/layout/hierarchical/stage/mxSwimlaneOrdering-js.html#mxSwimlaneOrdering.mxSwimlaneOrdering" target=_parent class=ISymbol>mxSwimlaneOrdering</a>, <span class=IParent>mxSwimlaneOrdering</span></div></div><div class=SRResult id=SR_mxTerminalChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxTerminalChange.mxTerminalChange" target=_parent class=ISymbol>mxTerminalChange</a>, <span class=IParent>mxTerminalChange</span></div></div><div class=SRResult id=SR_mxText><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.mxText" target=_parent class=ISymbol>mxText</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_mxToolbar><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.mxToolbar" target=_parent class=ISymbol>mxToolbar</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_mxTooltipHandler><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.mxTooltipHandler" target=_parent class=ISymbol>mxTooltipHandler</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_mxTriangle><div class=IEntry><a href="../files/shape/mxTriangle-js.html#mxTriangle.mxTriangle" target=_parent class=ISymbol>mxTriangle</a>, <span class=IParent>mxTriangle</span></div></div><div class=SRResult id=SR_mxUndoableEdit><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.mxUndoableEdit" target=_parent class=ISymbol>mxUndoableEdit</a>, <span class=IParent>mxUndoableEdit</span></div></div><div class=SRResult id=SR_mxUndoManager><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.mxUndoManager" target=_parent class=ISymbol>mxUndoManager</a>, <span class=IParent>mxUndoManager</span></div></div><div class=SRResult id=SR_mxValueChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxValueChange.mxValueChange" target=_parent class=ISymbol>mxValueChange</a>, <span class=IParent>mxValueChange</span></div></div><div class=SRResult id=SR_mxVertexHandler><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.mxVertexHandler" target=_parent class=ISymbol>mxVertexHandler</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_mxVisibleChange><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxVisibleChange.mxVisibleChange" target=_parent class=ISymbol>mxVisibleChange</a>, <span class=IParent>mxVisibleChange</span></div></div><div class=SRResult id=SR_mxWindow><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.mxWindow" target=_parent class=ISymbol>mxWindow</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_mxXmlCanvas2D><div class=IEntry><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.mxXmlCanvas2D" target=_parent class=ISymbol>mxXmlCanvas2D</a>, <span class=IParent>mxXmlCanvas2D</span></div></div><div class=SRResult id=SR_mxXmlRequest><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.mxXmlRequest" target=_parent class=ISymbol>mxXmlRequest</a>, <span class=IParent>mxXmlRequest</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsN.html b/docs/js-api/search/FunctionsN.html
index 483415f39..63bcb2619 100644
--- a/docs/js-api/search/FunctionsN.html
+++ b/docs/js-api/search/FunctionsN.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_notify><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.notify" target=_parent class=ISymbol>notify</a>, <span class=IParent>mxUndoableEdit</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsO.html b/docs/js-api/search/FunctionsO.html
index 7190da7b5..7b9f1d247 100644
--- a/docs/js-api/search/FunctionsO.html
+++ b/docs/js-api/search/FunctionsO.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_offset><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.offset" target=_parent class=ISymbol>offset</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_onEncode><div class=IEntry><a href="../files/io/mxRootChangeCodec-js.html#mxRootChangeCodec.onEncode" target=_parent class=ISymbol>onEncode</a>, <span class=IParent>mxRootChangeCodec</span></div></div><div class=SRResult id=SR_onInit><div class=IEntry><a href="javascript:searchResults.Toggle('SR_onInit')" class=ISymbol>onInit</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.onInit" target=_parent class=IParent>mxCell</a><a href="../files/editor/mxEditor-js.html#mxEditor.onInit" target=_parent class=IParent>mxEditor</a></div></div></div><div class=SRResult id=SR_open><div class=IEntry><a href="javascript:searchResults.Toggle('SR_open')" class=ISymbol>open</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.open" target=_parent class=IParent>mxEditor</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.open" target=_parent class=IParent>mxPrintPreview</a></div></div></div><div class=SRResult id=SR_orderCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.orderCells" target=_parent class=ISymbol>orderCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_OrthConnector><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.OrthConnector" target=_parent class=ISymbol>OrthConnector</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_outline><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.outline" target=_parent class=ISymbol>outline</a>, <span class=IParent>mxOutline</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsP.html b/docs/js-api/search/FunctionsP.html
index f61b33f55..5082d81a8 100644
--- a/docs/js-api/search/FunctionsP.html
+++ b/docs/js-api/search/FunctionsP.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_paint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_paint')" class=ISymbol>paint</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.paint" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.paint" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_paintBackground><div class=IEntry><a href="javascript:searchResults.Toggle('SR_paintBackground')" class=ISymbol>paintBackground</a><div class=ISubIndex><a href="../files/shape/mxDoubleEllipse-js.html#mxDoubleEllipse.paintBackground" target=_parent class=IParent>mxDoubleEllipse</a><a href="../files/shape/mxRectangleShape-js.html#mxRectangleShape.paintBackground" target=_parent class=IParent>mxRectangleShape</a><a href="../files/shape/mxShape-js.html#mxShape.paintBackground" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_paintCurvedLine><div class=IEntry><a href="../files/shape/mxPolyline-js.html#mxPolyline.paintCurvedLine" target=_parent class=ISymbol>paintCurvedLine</a>, <span class=IParent>mxPolyline</span></div></div><div class=SRResult id=SR_paintDivider><div class=IEntry><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.paintDivider" target=_parent class=ISymbol>paintDivider</a>, <span class=IParent>mxSwimlane</span></div></div><div class=SRResult id=SR_paintEdgeShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_paintEdgeShape')" class=ISymbol>paintEdgeShape</a><div class=ISubIndex><a href="../files/shape/mxArrow-js.html#mxArrow.paintEdgeShape" target=_parent class=IParent>mxArrow</a><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.paintEdgeShape" target=_parent class=IParent>mxArrowConnector</a><a href="../files/shape/mxConnector-js.html#mxConnector.paintEdgeShape" target=_parent class=IParent>mxConnector</a><a href="../files/shape/mxPolyline-js.html#mxPolyline.paintEdgeShape" target=_parent class=IParent>mxPolyline</a><a href="../files/shape/mxShape-js.html#mxShape.paintEdgeShape" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_paintForeground><div class=IEntry><a href="javascript:searchResults.Toggle('SR_paintForeground')" class=ISymbol>paintForeground</a><div class=ISubIndex><a href="../files/shape/mxDoubleEllipse-js.html#mxDoubleEllipse.paintForeground" target=_parent class=IParent>mxDoubleEllipse</a><a href="../files/shape/mxLabel-js.html#mxLabel.paintForeground" target=_parent class=IParent>mxLabel</a><a href="../files/shape/mxRectangleShape-js.html#mxRectangleShape.paintForeground" target=_parent class=IParent>mxRectangleShape</a><a href="../files/shape/mxShape-js.html#mxShape.paintForeground" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_paintGlassEffect><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.paintGlassEffect" target=_parent class=ISymbol>paintGlassEffect</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_paintImage><div class=IEntry><a href="../files/shape/mxLabel-js.html#mxLabel.paintImage" target=_parent class=ISymbol>paintImage</a>, <span class=IParent>mxLabel</span></div></div><div class=SRResult id=SR_paintIndicator><div class=IEntry><a href="../files/shape/mxLabel-js.html#mxLabel.paintIndicator" target=_parent class=ISymbol>paintIndicator</a>, <span class=IParent>mxLabel</span></div></div><div class=SRResult id=SR_paintLine><div class=IEntry><a href="../files/shape/mxPolyline-js.html#mxPolyline.paintLine" target=_parent class=ISymbol>paintLine</a>, <span class=IParent>mxPolyline</span></div></div><div class=SRResult id=SR_paintMarker><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.paintMarker" target=_parent class=ISymbol>paintMarker</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_paintRoundedSwimlane><div class=IEntry><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.paintRoundedSwimlane" target=_parent class=ISymbol>paintRoundedSwimlane</a>, <span class=IParent>mxSwimlane</span></div></div><div class=SRResult id=SR_paintSeparator><div class=IEntry><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.paintSeparator" target=_parent class=ISymbol>paintSeparator</a>, <span class=IParent>mxSwimlane</span></div></div><div class=SRResult id=SR_paintSwimlane><div class=IEntry><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.paintSwimlane" target=_parent class=ISymbol>paintSwimlane</a>, <span class=IParent>mxSwimlane</span></div></div><div class=SRResult id=SR_paintVertexShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_paintVertexShape')" class=ISymbol>paintVertexShape</a><div class=ISubIndex><a href="../files/shape/mxActor-js.html#mxActor.paintVertexShape" target=_parent class=IParent>mxActor</a><a href="../files/shape/mxCylinder-js.html#mxCylinder.paintVertexShape" target=_parent class=IParent>mxCylinder</a><a href="../files/shape/mxEllipse-js.html#mxEllipse.paintVertexShape" target=_parent class=IParent>mxEllipse</a><a href="../files/shape/mxImageShape-js.html#mxImageShape.paintVertexShape" target=_parent class=IParent>mxImageShape</a><a href="../files/shape/mxLine-js.html#mxLine.paintVertexShape" target=_parent class=IParent>mxLine</a><a href="../files/shape/mxRhombus-js.html#mxRhombus.paintVertexShape" target=_parent class=IParent>mxRhombus</a><a href="../files/shape/mxShape-js.html#mxShape.paintVertexShape" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.paintVertexShape" target=_parent class=IParent>mxSwimlane</a></div></div></div><div class=SRResult id=SR_panGraph><div class=IEntry><a href="javascript:searchResults.Toggle('SR_panGraph')" class=ISymbol>panGraph</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.panGraph" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.panGraph" target=_parent class=IParent>mxPanningHandler</a></div></div></div><div class=SRResult id=SR_para><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.para" target=_parent class=ISymbol>para</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_parentForCellChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.parentForCellChanged" target=_parent class=ISymbol>parentForCellChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_parse><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.parse" target=_parent class=ISymbol>parse</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_parseConstraint><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.parseConstraint" target=_parent class=ISymbol>parseConstraint</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_parseConstraints><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.parseConstraints" target=_parent class=ISymbol>parseConstraints</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_parseCssNumber><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.parseCssNumber" target=_parent class=ISymbol>parseCssNumber</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_parseDescription><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.parseDescription" target=_parent class=ISymbol>parseDescription</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_parseXml><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.parseXml" target=_parent class=ISymbol>parseXml</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_paste><div class=IEntry><a href="../files/util/mxClipboard-js.html#mxClipboard.paste" target=_parent class=ISymbol>paste</a>, <span class=IParent>mxClipboard</span></div></div><div class=SRResult id=SR_placeLabels><div class=IEntry><a href="../files/layout/mxEdgeLabelLayout-js.html#mxEdgeLabelLayout.placeLabels" target=_parent class=ISymbol>placeLabels</a>, <span class=IParent>mxEdgeLabelLayout</span></div></div><div class=SRResult id=SR_placementStage><div class=IEntry><a href="javascript:searchResults.Toggle('SR_placementStage')" class=ISymbol>placementStage</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.placementStage" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.placementStage" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_plainText><div class=IEntry><a href="javascript:searchResults.Toggle('SR_plainText')" class=ISymbol>plainText</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.plainText" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.plainText" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_popup><div class=IEntry><a href="javascript:searchResults.Toggle('SR_popup')" class=ISymbol>popup</a><div class=ISubIndex><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.popup" target=_parent class=IParent>mxPopupMenu</a><a href="../files/util/mxUtils-js.html#mxUtils.popup" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_positionChanged><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.positionChanged" target=_parent class=ISymbol>positionChanged</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_post><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.post" target=_parent class=ISymbol>post</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_postConfigureShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.postConfigureShape" target=_parent class=ISymbol>postConfigureShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_postDiagram><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.postDiagram" target=_parent class=ISymbol>postDiagram</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_postProcessCellStyle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.postProcessCellStyle" target=_parent class=ISymbol>postProcessCellStyle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_prepareTextarea><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.prepareTextarea" target=_parent class=ISymbol>prepareTextarea</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_print><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.print" target=_parent class=ISymbol>print</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_printScreen><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.printScreen" target=_parent class=ISymbol>printScreen</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_process><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.process" target=_parent class=ISymbol>process</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_processChange><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.processChange" target=_parent class=ISymbol>processChange</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_processEvent><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.processEvent" target=_parent class=ISymbol>processEvent</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_processInclude><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.processInclude" target=_parent class=ISymbol>processInclude</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_processNodeOutgoing><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.processNodeOutgoing" target=_parent class=ISymbol>processNodeOutgoing</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_processReversedEdge><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.processReversedEdge" target=_parent class=ISymbol>processReversedEdge</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_prompt><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.prompt" target=_parent class=ISymbol>prompt</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_ptLineDist><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.ptLineDist" target=_parent class=ISymbol>ptLineDist</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_ptSegDistSq><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.ptSegDistSq" target=_parent class=ISymbol>ptSegDistSq</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_put><div class=IEntry><a href="../files/util/mxDictionary-js.html#mxDictionary.put" target=_parent class=ISymbol>put</a>, <span class=IParent>mxDictionary</span></div></div><div class=SRResult id=SR_putCellStyle><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.putCellStyle" target=_parent class=ISymbol>putCellStyle</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_putDefaultEdgeStyle><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.putDefaultEdgeStyle" target=_parent class=ISymbol>putDefaultEdgeStyle</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_putDefaultVertexStyle><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.putDefaultVertexStyle" target=_parent class=ISymbol>putDefaultVertexStyle</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_putImage><div class=IEntry><a href="../files/util/mxImageBundle-js.html#mxImageBundle.putImage" target=_parent class=ISymbol>putImage</a>, <span class=IParent>mxImageBundle</span></div></div><div class=SRResult id=SR_putObject><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.putObject" target=_parent class=ISymbol>putObject</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_putValue><div class=IEntry><a href="../files/view/mxStyleRegistry-js.html#mxStyleRegistry.putValue" target=_parent class=ISymbol>putValue</a>, <span class=IParent>mxStyleRegistry</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsQ.html b/docs/js-api/search/FunctionsQ.html
index bfc9c13de..a4618cc96 100644
--- a/docs/js-api/search/FunctionsQ.html
+++ b/docs/js-api/search/FunctionsQ.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_quadTo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_quadTo')" class=ISymbol>quadTo</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.quadTo" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.quadTo" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.quadTo" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsR.html b/docs/js-api/search/FunctionsR.html
index e92dc7178..bfca8bc87 100644
--- a/docs/js-api/search/FunctionsR.html
+++ b/docs/js-api/search/FunctionsR.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_rankCoordinates><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.rankCoordinates" target=_parent class=ISymbol>rankCoordinates</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_rankMedianPosition><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.rankMedianPosition" target=_parent class=ISymbol>rankMedianPosition</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_readGraphModel><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.readGraphModel" target=_parent class=ISymbol>readGraphModel</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_reconfigure><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.reconfigure" target=_parent class=ISymbol>reconfigure</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_rect><div class=IEntry><a href="javascript:searchResults.Toggle('SR_rect')" class=ISymbol>rect</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.rect" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.rect" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.rect" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_rectangleIntersectsSegment><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.rectangleIntersectsSegment" target=_parent class=ISymbol>rectangleIntersectsSegment</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_RectanglePerimeter><div class=IEntry><a href="../files/view/mxPerimeter-js.html#mxPerimeter.RectanglePerimeter" target=_parent class=ISymbol>RectanglePerimeter</a>, <span class=IParent>mxPerimeter</span></div></div><div class=SRResult id=SR_redirectMouseEvents><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.redirectMouseEvents" target=_parent class=ISymbol>redirectMouseEvents</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_redo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_redo')" class=ISymbol>redo</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.redo" target=_parent class=IParent>mxEditor</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.redo" target=_parent class=IParent>mxUndoableEdit</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.redo" target=_parent class=IParent>mxUndoManager</a></div></div></div><div class=SRResult id=SR_redraw><div class=IEntry><a href="javascript:searchResults.Toggle('SR_redraw')" class=ISymbol>redraw</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#redraw" target=_parent class=IParent>Global</a><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.redraw" target=_parent class=IParent>mxCellRenderer</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.redraw" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.redraw" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxHandle-js.html#mxHandle.redraw" target=_parent class=IParent>mxHandle</a><a href="../files/shape/mxImageShape-js.html#mxImageShape.redraw" target=_parent class=IParent>mxImageShape</a><a href="../files/shape/mxLabel-js.html#mxLabel.redraw" target=_parent class=IParent>mxLabel</a><a href="../files/shape/mxShape-js.html#mxShape.redraw" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.redraw" target=_parent class=IParent>mxText</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.redraw" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_redrawBackgroundImage><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.redrawBackgroundImage" target=_parent class=ISymbol>redrawBackgroundImage</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_redrawCellOverlays><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.redrawCellOverlays" target=_parent class=ISymbol>redrawCellOverlays</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_redrawControl><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.redrawControl" target=_parent class=ISymbol>redrawControl</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_redrawHandles><div class=IEntry><a href="javascript:searchResults.Toggle('SR_redrawHandles')" class=ISymbol>redrawHandles</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.redrawHandles" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.redrawHandles" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.redrawHandles" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_redrawHtml><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.redrawHtml" target=_parent class=ISymbol>redrawHtml</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_redrawHtmlShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_redrawHtmlShape')" class=ISymbol>redrawHtmlShape</a><div class=ISubIndex><a href="../files/shape/mxLabel-js.html#mxLabel.redrawHtmlShape" target=_parent class=IParent>mxLabel</a><a href="../files/shape/mxText-js.html#mxText.redrawHtmlShape" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_redrawHtmlShapeWithCss3><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.redrawHtmlShapeWithCss3" target=_parent class=ISymbol>redrawHtmlShapeWithCss3</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_redrawIcons><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.redrawIcons" target=_parent class=ISymbol>redrawIcons</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_redrawInnerBends><div class=IEntry><a href="javascript:searchResults.Toggle('SR_redrawInnerBends')" class=ISymbol>redrawInnerBends</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#redrawInnerBends" target=_parent class=IParent>Global</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.redrawInnerBends" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.redrawInnerBends" target=_parent class=IParent>mxElbowEdgeHandler</a></div></div></div><div class=SRResult id=SR_redrawLabel><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.redrawLabel" target=_parent class=ISymbol>redrawLabel</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_redrawLabelShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.redrawLabelShape" target=_parent class=ISymbol>redrawLabelShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_redrawPath><div class=IEntry><a href="javascript:searchResults.Toggle('SR_redrawPath')" class=ISymbol>redrawPath</a><div class=ISubIndex><a href="../files/shape/mxActor-js.html#mxActor.redrawPath" target=_parent class=IParent>mxActor</a><a href="../files/shape/mxCloud-js.html#mxCloud.redrawPath" target=_parent class=IParent>mxCloud</a><a href="../files/shape/mxCylinder-js.html#mxCylinder.redrawPath" target=_parent class=IParent>mxCylinder</a><a href="../files/shape/mxHexagon-js.html#mxHexagon.redrawPath" target=_parent class=IParent>mxHexagon</a><a href="../files/shape/mxTriangle-js.html#mxTriangle.redrawPath" target=_parent class=IParent>mxTriangle</a></div></div></div><div class=SRResult id=SR_redrawShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_redrawShape')" class=ISymbol>redrawShape</a><div class=ISubIndex><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.redrawShape" target=_parent class=IParent>mxCellRenderer</a><a href="../files/shape/mxShape-js.html#mxShape.redrawShape" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_reduceTemperature><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.reduceTemperature" target=_parent class=ISymbol>reduceTemperature</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_reference><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.reference" target=_parent class=ISymbol>reference</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_refresh><div class=IEntry><a href="javascript:searchResults.Toggle('SR_refresh')" class=ISymbol>refresh</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.refresh" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.refresh" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphView-js.html#mxGraphView.refresh" target=_parent class=IParent>mxGraphView</a><a href="../files/view/mxOutline-js.html#mxOutline.refresh" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.refresh" target=_parent class=IParent>mxSelectionCellsHandler</a></div></div></div><div class=SRResult id=SR_refreshTasks><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.refreshTasks" target=_parent class=ISymbol>refreshTasks</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_register><div class=IEntry><a href="../files/io/mxCodecRegistry-js.html#mxCodecRegistry.register" target=_parent class=ISymbol>register</a>, <span class=IParent>mxCodecRegistry</span></div></div><div class=SRResult id=SR_registerShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.registerShape" target=_parent class=ISymbol>registerShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_relativeCcw><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.relativeCcw" target=_parent class=ISymbol>relativeCcw</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_release><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.release" target=_parent class=ISymbol>release</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_releaseSvgGradients><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.releaseSvgGradients" target=_parent class=ISymbol>releaseSvgGradients</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_remove><div class=IEntry><a href="javascript:searchResults.Toggle('SR_remove')" class=ISymbol>remove</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.remove" target=_parent class=IParent>mxCell</a><a href="../files/util/mxDictionary-js.html#mxDictionary.remove" target=_parent class=IParent>mxDictionary</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.remove" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxUtils-js.html#mxUtils.remove" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_removeAllListeners><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.removeAllListeners" target=_parent class=ISymbol>removeAllListeners</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_removeAllStylenames><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.removeAllStylenames" target=_parent class=ISymbol>removeAllStylenames</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_removeCell><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.removeCell" target=_parent class=ISymbol>removeCell</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_removeCellOverlay><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeCellOverlay" target=_parent class=ISymbol>removeCellOverlay</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeCellOverlays><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeCellOverlays" target=_parent class=ISymbol>removeCellOverlays</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_removeCells')" class=ISymbol>removeCells</a><div class=ISubIndex><a href="../files/util/mxClipboard-js.html#mxClipboard.removeCells" target=_parent class=IParent>mxClipboard</a><a href="../files/view/mxGraph-js.html#mxGraph.removeCells" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.removeCells" target=_parent class=IParent>mxGraphSelectionModel</a></div></div></div><div class=SRResult id=SR_removeCellsAfterUngroup><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeCellsAfterUngroup" target=_parent class=ISymbol>removeCellsAfterUngroup</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeCellsFromParent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeCellsFromParent" target=_parent class=ISymbol>removeCellsFromParent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeCursors><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.removeCursors" target=_parent class=ISymbol>removeCursors</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_removeDragElement><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.removeDragElement" target=_parent class=ISymbol>removeDragElement</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_removeDuplicates><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.removeDuplicates" target=_parent class=ISymbol>removeDuplicates</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_removeEdge><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.removeEdge" target=_parent class=ISymbol>removeEdge</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_removeFromParent><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.removeFromParent" target=_parent class=ISymbol>removeFromParent</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_removeFromTerminal><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.removeFromTerminal" target=_parent class=ISymbol>removeFromTerminal</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_removeGestureListeners><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.removeGestureListeners" target=_parent class=ISymbol>removeGestureListeners</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_removeHint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_removeHint')" class=ISymbol>removeHint</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.removeHint" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.removeHint" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.removeHint" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_removeImageBundle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeImageBundle" target=_parent class=ISymbol>removeImageBundle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeListener><div class=IEntry><a href="javascript:searchResults.Toggle('SR_removeListener')" class=ISymbol>removeListener</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.removeListener" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxEventSource-js.html#mxEventSource.removeListener" target=_parent class=IParent>mxEventSource</a></div></div></div><div class=SRResult id=SR_removeListeners><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.removeListeners" target=_parent class=ISymbol>removeListeners</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_removeMouseListener><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeMouseListener" target=_parent class=ISymbol>removeMouseListener</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removePoint><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.removePoint" target=_parent class=ISymbol>removePoint</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_removeSelectionCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeSelectionCell" target=_parent class=ISymbol>removeSelectionCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeSelectionCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeSelectionCells" target=_parent class=ISymbol>removeSelectionCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeState><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.removeState" target=_parent class=ISymbol>removeState</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_removeStateForCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeStateForCell" target=_parent class=ISymbol>removeStateForCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeStylename><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.removeStylename" target=_parent class=ISymbol>removeStylename</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_removeWhitespace><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.removeWhitespace" target=_parent class=ISymbol>removeWhitespace</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_renderPage><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.renderPage" target=_parent class=ISymbol>renderPage</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_repaint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_repaint')" class=ISymbol>repaint</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.repaint" target=_parent class=IParent>mxCellHighlight</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.repaint" target=_parent class=IParent>mxRubberband</a></div></div></div><div class=SRResult id=SR_replacePlaceholders><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.replacePlaceholders" target=_parent class=ISymbol>replacePlaceholders</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_replaceTrailingNewlines><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.replaceTrailingNewlines" target=_parent class=ISymbol>replaceTrailingNewlines</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_repositionValid><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.repositionValid" target=_parent class=ISymbol>repositionValid</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_reset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_reset')" class=ISymbol>reset</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.reset" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.reset" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.reset" target=_parent class=IParent>mxCellMarker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.reset" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.reset" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/util/mxDragSource-js.html#mxDragSource.reset" target=_parent class=IParent>mxDragSource</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.reset" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.reset" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxHandle-js.html#mxHandle.reset" target=_parent class=IParent>mxHandle</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.reset" target=_parent class=IParent>mxPanningHandler</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.reset" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.reset" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.reset" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.reset" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.reset" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_resetEdge><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resetEdge" target=_parent class=ISymbol>resetEdge</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resetEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resetEdges" target=_parent class=ISymbol>resetEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resetFirstTime><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.resetFirstTime" target=_parent class=ISymbol>resetFirstTime</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_resetHistory><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.resetHistory" target=_parent class=ISymbol>resetHistory</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_resetLivePreview><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.resetLivePreview" target=_parent class=ISymbol>resetLivePreview</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_resetMode><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.resetMode" target=_parent class=ISymbol>resetMode</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_resetPreviewStates><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.resetPreviewStates" target=_parent class=ISymbol>resetPreviewStates</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_resetStyles><div class=IEntry><a href="javascript:searchResults.Toggle('SR_resetStyles')" class=ISymbol>resetStyles</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.resetStyles" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.resetStyles" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_resetTimer><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.resetTimer" target=_parent class=ISymbol>resetTimer</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_resetValidationState><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.resetValidationState" target=_parent class=ISymbol>resetValidationState</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_resize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_resize')" class=ISymbol>resize</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.resize" target=_parent class=IParent>mxCellEditor</a><a href="../files/util/mxDivResizer-js.html#mxDivResizer.resize" target=_parent class=IParent>mxDivResizer</a></div></div></div><div class=SRResult id=SR_resizeCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_resizeCell')" class=ISymbol>resizeCell</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.resizeCell" target=_parent class=IParent>mxGraph</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.resizeCell" target=_parent class=IParent>mxGraphLayout</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.resizeCell" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_resizeCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resizeCells" target=_parent class=ISymbol>resizeCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resizeChildCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resizeChildCells" target=_parent class=ISymbol>resizeChildCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resizeHeight><div class=IEntry><a href="../files/util/mxDivResizer-js.html#mxDivResizer.resizeHeight" target=_parent class=ISymbol>resizeHeight</a>, <span class=IParent>mxDivResizer</span></div></div><div class=SRResult id=SR_resizeSwimlane><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.resizeSwimlane" target=_parent class=ISymbol>resizeSwimlane</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_resizeVertex><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.resizeVertex" target=_parent class=ISymbol>resizeVertex</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_resizeWidth><div class=IEntry><a href="../files/util/mxDivResizer-js.html#mxDivResizer.resizeWidth" target=_parent class=ISymbol>resizeWidth</a>, <span class=IParent>mxDivResizer</span></div></div><div class=SRResult id=SR_resolve><div class=IEntry><a href="../files/model/mxCellPath-js.html#mxCellPath.resolve" target=_parent class=ISymbol>resolve</a>, <span class=IParent>mxCellPath</span></div></div><div class=SRResult id=SR_resolveColor><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.resolveColor" target=_parent class=ISymbol>resolveColor</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_restore><div class=IEntry><a href="javascript:searchResults.Toggle('SR_restore')" class=ISymbol>restore</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.restore" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.restore" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_restoreClone><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.restoreClone" target=_parent class=ISymbol>restoreClone</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_resume><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.resume" target=_parent class=ISymbol>resume</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_revalidate><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.revalidate" target=_parent class=ISymbol>revalidate</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_revalidateState><div class=IEntry><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.revalidateState" target=_parent class=ISymbol>revalidateState</a>, <span class=IParent>mxCellStatePreview</span></div></div><div class=SRResult id=SR_reversePortConstraints><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.reversePortConstraints" target=_parent class=ISymbol>reversePortConstraints</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_RhombusPerimeter><div class=IEntry><a href="../files/view/mxPerimeter-js.html#mxPerimeter.RhombusPerimeter" target=_parent class=ISymbol>RhombusPerimeter</a>, <span class=IParent>mxPerimeter</span></div></div><div class=SRResult id=SR_rootChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.rootChanged" target=_parent class=ISymbol>rootChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_rotate><div class=IEntry><a href="javascript:searchResults.Toggle('SR_rotate')" class=ISymbol>rotate</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.rotate" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/model/mxGeometry-js.html#mxGeometry.rotate" target=_parent class=IParent>mxGeometry</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.rotate" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.rotate" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.rotate" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_rotate90><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.rotate90" target=_parent class=ISymbol>rotate90</a>, <span class=IParent>mxRectangle</span></div></div><div class=SRResult id=SR_rotateCell><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.rotateCell" target=_parent class=ISymbol>rotateCell</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_rotateClick><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.rotateClick" target=_parent class=ISymbol>rotateClick</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_rotateLabelBounds><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.rotateLabelBounds" target=_parent class=ISymbol>rotateLabelBounds</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_rotatePoint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_rotatePoint')" class=ISymbol>rotatePoint</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.rotatePoint" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/handler/mxHandle-js.html#mxHandle.rotatePoint" target=_parent class=IParent>mxHandle</a></div></div></div><div class=SRResult id=SR_rotateVertex><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.rotateVertex" target=_parent class=ISymbol>rotateVertex</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_roundAngle><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.roundAngle" target=_parent class=ISymbol>roundAngle</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_roundLength><div class=IEntry><a href="javascript:searchResults.Toggle('SR_roundLength')" class=ISymbol>roundLength</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.roundLength" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.roundLength" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.roundLength" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_roundrect><div class=IEntry><a href="javascript:searchResults.Toggle('SR_roundrect')" class=ISymbol>roundrect</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.roundrect" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.roundrect" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.roundrect" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_route><div class=IEntry><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.route" target=_parent class=ISymbol>route</a>, <span class=IParent>mxParallelEdgeLayout</span></div></div><div class=SRResult id=SR_rtrim><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.rtrim" target=_parent class=ISymbol>rtrim</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_run><div class=IEntry><a href="javascript:searchResults.Toggle('SR_run')" class=ISymbol>run</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.run" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.run" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsS.html b/docs/js-api/search/FunctionsS.html
index 8dc1c50db..c98e88dcf 100644
--- a/docs/js-api/search/FunctionsS.html
+++ b/docs/js-api/search/FunctionsS.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_save><div class=IEntry><a href="javascript:searchResults.Toggle('SR_save')" class=ISymbol>save</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.save" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.save" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/editor/mxEditor-js.html#mxEditor.save" target=_parent class=IParent>mxEditor</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.save" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_scale><div class=IEntry><a href="javascript:searchResults.Toggle('SR_scale')" class=ISymbol>scale</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.scale" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/model/mxGeometry-js.html#mxGeometry.scale" target=_parent class=IParent>mxGeometry</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.scale" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_scaleAndTranslate><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.scaleAndTranslate" target=_parent class=ISymbol>scaleAndTranslate</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_scaleCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.scaleCell" target=_parent class=ISymbol>scaleCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_scaleCellState><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.scaleCellState" target=_parent class=ISymbol>scaleCellState</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_scalePointArray><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.scalePointArray" target=_parent class=ISymbol>scalePointArray</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_scrollCellToVisible><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.scrollCellToVisible" target=_parent class=ISymbol>scrollCellToVisible</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_scrollPointToVisible><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.scrollPointToVisible" target=_parent class=ISymbol>scrollPointToVisible</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_scrollRectToVisible><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.scrollRectToVisible" target=_parent class=ISymbol>scrollRectToVisible</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_SegmentConnector><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.SegmentConnector" target=_parent class=ISymbol>SegmentConnector</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_selectAll><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectAll" target=_parent class=ISymbol>selectAll</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectCell" target=_parent class=ISymbol>selectCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectCellForEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_selectCellForEvent')" class=ISymbol>selectCellForEvent</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.selectCellForEvent" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.selectCellForEvent" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_selectCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_selectCells')" class=ISymbol>selectCells</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.selectCells" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.selectCells" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_selectCellsForEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectCellsForEvent" target=_parent class=ISymbol>selectCellsForEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectChildCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectChildCell" target=_parent class=ISymbol>selectChildCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectDelayed><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.selectDelayed" target=_parent class=ISymbol>selectDelayed</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_selectMode><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.selectMode" target=_parent class=ISymbol>selectMode</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_selectNextCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectNextCell" target=_parent class=ISymbol>selectNextCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectParentCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectParentCell" target=_parent class=ISymbol>selectParentCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectPreviousCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectPreviousCell" target=_parent class=ISymbol>selectPreviousCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectRegion><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectRegion" target=_parent class=ISymbol>selectRegion</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectVertices><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectVertices" target=_parent class=ISymbol>selectVertices</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_send><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.send" target=_parent class=ISymbol>send</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_setAbsoluteTerminalPoint><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.setAbsoluteTerminalPoint" target=_parent class=ISymbol>setAbsoluteTerminalPoint</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_setAddEnabled><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.setAddEnabled" target=_parent class=ISymbol>setAddEnabled</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_setAlign><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.setAlign" target=_parent class=ISymbol>setAlign</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_setAllowDanglingEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setAllowDanglingEdges" target=_parent class=ISymbol>setAllowDanglingEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setAllowEval><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.setAllowEval" target=_parent class=ISymbol>setAllowEval</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_setAllowLoops><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setAllowLoops" target=_parent class=ISymbol>setAllowLoops</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setAlpha><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setAlpha')" class=ISymbol>setAlpha</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setAlpha" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setAlpha" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setAttribute><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setAttribute')" class=ISymbol>setAttribute</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setAttribute" target=_parent class=IParent>mxCell</a><a href="../files/io/mxCodec-js.html#mxCodec.setAttribute" target=_parent class=IParent>mxCodec</a></div></div></div><div class=SRResult id=SR_setAutoSizeCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setAutoSizeCells" target=_parent class=ISymbol>setAutoSizeCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setBackgroundImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setBackgroundImage" target=_parent class=ISymbol>setBackgroundImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setBaseDomain><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.setBaseDomain" target=_parent class=ISymbol>setBaseDomain</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_setBaseUrl><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.setBaseUrl" target=_parent class=ISymbol>setBaseUrl</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_setBinary><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.setBinary" target=_parent class=ISymbol>setBinary</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_setBorder><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setBorder" target=_parent class=ISymbol>setBorder</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setBubbling><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.setBubbling" target=_parent class=ISymbol>setBubbling</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_setCell><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.setCell" target=_parent class=ISymbol>setCell</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_setCellHeights><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.setCellHeights" target=_parent class=ISymbol>setCellHeights</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_setCellLocations><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.setCellLocations" target=_parent class=ISymbol>setCellLocations</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_setCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setCells')" class=ISymbol>setCells</a><div class=ISubIndex><a href="../files/util/mxClipboard-js.html#mxClipboard.setCells" target=_parent class=IParent>mxClipboard</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.setCells" target=_parent class=IParent>mxGraphSelectionModel</a></div></div></div><div class=SRResult id=SR_setCellsBendable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsBendable" target=_parent class=ISymbol>setCellsBendable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsCloneable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsCloneable" target=_parent class=ISymbol>setCellsCloneable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsDeletable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsDeletable" target=_parent class=ISymbol>setCellsDeletable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsDisconnectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsDisconnectable" target=_parent class=ISymbol>setCellsDisconnectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsEditable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsEditable" target=_parent class=ISymbol>setCellsEditable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsLocked><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsLocked" target=_parent class=ISymbol>setCellsLocked</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsMovable" target=_parent class=ISymbol>setCellsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsResizable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsResizable" target=_parent class=ISymbol>setCellsResizable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsSelectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsSelectable" target=_parent class=ISymbol>setCellsSelectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellStyle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellStyle" target=_parent class=ISymbol>setCellStyle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellStyleFlags><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setCellStyleFlags')" class=ISymbol>setCellStyleFlags</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.setCellStyleFlags" target=_parent class=IParent>mxGraph</a><a href="../files/util/mxUtils-js.html#mxUtils.setCellStyleFlags" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_setCellStyles><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setCellStyles')" class=ISymbol>setCellStyles</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.setCellStyles" target=_parent class=IParent>mxGraph</a><a href="../files/util/mxUtils-js.html#mxUtils.setCellStyles" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_setCellWarning><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellWarning" target=_parent class=ISymbol>setCellWarning</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setChildGeometry><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.setChildGeometry" target=_parent class=ISymbol>setChildGeometry</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_setCloneEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.setCloneEnabled" target=_parent class=ISymbol>setCloneEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_setCloneInvalidEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCloneInvalidEdges" target=_parent class=ISymbol>setCloneInvalidEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setClosable><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setClosable" target=_parent class=ISymbol>setClosable</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setCollapsed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setCollapsed')" class=ISymbol>setCollapsed</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setCollapsed" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setCollapsed" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_setConnectable><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setConnectable')" class=ISymbol>setConnectable</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setConnectable" target=_parent class=IParent>mxCell</a><a href="../files/view/mxGraph-js.html#mxGraph.setConnectable" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_setConnectableEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setConnectableEdges" target=_parent class=ISymbol>setConnectableEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setConnectionConstraint><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setConnectionConstraint" target=_parent class=ISymbol>setConnectionConstraint</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setConstrainChildren><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setConstrainChildren" target=_parent class=ISymbol>setConstrainChildren</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setConstrainRelativeChildren><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setConstrainRelativeChildren" target=_parent class=ISymbol>setConstrainRelativeChildren</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCreateIds><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setCreateIds" target=_parent class=ISymbol>setCreateIds</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_setCreateTarget><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.setCreateTarget" target=_parent class=ISymbol>setCreateTarget</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_setCurrentRoot><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.setCurrentRoot" target=_parent class=ISymbol>setCurrentRoot</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_setCurrentState><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.setCurrentState" target=_parent class=ISymbol>setCurrentState</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_setCursor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setCursor')" class=ISymbol>setCursor</a><div class=ISubIndex><a href="../files/view/mxCellState-js.html#mxCellState.setCursor" target=_parent class=IParent>mxCellState</a><a href="../files/shape/mxShape-js.html#mxShape.setCursor" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_setDashed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setDashed')" class=ISymbol>setDashed</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setDashed" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setDashed" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setDashPattern><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setDashPattern')" class=ISymbol>setDashPattern</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setDashPattern" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setDashPattern" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setDefaultParent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setDefaultParent" target=_parent class=ISymbol>setDefaultParent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setDisconnectOnMove><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setDisconnectOnMove" target=_parent class=ISymbol>setDisconnectOnMove</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setDropEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setDropEnabled" target=_parent class=ISymbol>setDropEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setEdge><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.setEdge" target=_parent class=ISymbol>setEdge</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_setEdgePoints><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.setEdgePoints" target=_parent class=ISymbol>setEdgePoints</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_setEdgePosition><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.setEdgePosition" target=_parent class=ISymbol>setEdgePosition</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_setEdgeStyleEnabled><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.setEdgeStyleEnabled" target=_parent class=ISymbol>setEdgeStyleEnabled</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_setEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setEnabled')" class=ISymbol>setEnabled</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.setEnabled" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.setEnabled" target=_parent class=IParent>mxCellMarker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.setEnabled" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.setEnabled" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/util/mxDragSource-js.html#mxDragSource.setEnabled" target=_parent class=IParent>mxDragSource</a><a href="../files/view/mxGraph-js.html#mxGraph.setEnabled" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.setEnabled" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.setEnabled" target=_parent class=IParent>mxKeyHandler</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.setEnabled" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxOutline-js.html#mxOutline.setEnabled" target=_parent class=IParent>mxOutline</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.setEnabled" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.setEnabled" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.setEnabled" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.setEnabled" target=_parent class=IParent>mxSwimlaneManager</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.setEnabled" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.setEnabled" target=_parent class=IParent>mxUrlConverter</a></div></div></div><div class=SRResult id=SR_setEnterStopsCellEditing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setEnterStopsCellEditing" target=_parent class=ISymbol>setEnterStopsCellEditing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setEscapeEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setEscapeEnabled" target=_parent class=ISymbol>setEscapeEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setEventsEnabled><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.setEventsEnabled" target=_parent class=ISymbol>setEventsEnabled</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_setEventSource><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.setEventSource" target=_parent class=ISymbol>setEventSource</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_setExtendParents><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setExtendParents" target=_parent class=ISymbol>setExtendParents</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setExtendParentsOnAdd><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setExtendParentsOnAdd" target=_parent class=ISymbol>setExtendParentsOnAdd</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setExtendParentsOnMove><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setExtendParentsOnMove" target=_parent class=ISymbol>setExtendParentsOnMove</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setFillAlpha><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFillAlpha')" class=ISymbol>setFillAlpha</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFillAlpha" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFillAlpha" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setFillColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFillColor')" class=ISymbol>setFillColor</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFillColor" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFillColor" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setFocus><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.setFocus" target=_parent class=ISymbol>setFocus</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_setFontBackgroundColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFontBackgroundColor')" class=ISymbol>setFontBackgroundColor</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFontBackgroundColor" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFontBackgroundColor" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setFontBorderColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFontBorderColor')" class=ISymbol>setFontBorderColor</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFontBorderColor" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFontBorderColor" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setFontColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFontColor')" class=ISymbol>setFontColor</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFontColor" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFontColor" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setFontFamily><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFontFamily')" class=ISymbol>setFontFamily</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFontFamily" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFontFamily" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setFontSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFontSize')" class=ISymbol>setFontSize</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFontSize" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFontSize" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setFontStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFontStyle')" class=ISymbol>setFontStyle</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFontStyle" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFontStyle" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setGeneralPurposeVariable><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGeneralPurposeVariable')" class=ISymbol>setGeneralPurposeVariable</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.setGeneralPurposeVariable" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.setGeneralPurposeVariable" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.setGeneralPurposeVariable" target=_parent class=IParent>mxGraphHierarchyNode</a></div></div></div><div class=SRResult id=SR_setGeometry><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGeometry')" class=ISymbol>setGeometry</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setGeometry" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setGeometry" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_setGradient><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGradient')" class=ISymbol>setGradient</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setGradient" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setGradient" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setGraph><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGraph')" class=ISymbol>setGraph</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.setGraph" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.setGraph" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.setGraph" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_setGraphBounds><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.setGraphBounds" target=_parent class=ISymbol>setGraphBounds</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_setGraphContainer><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.setGraphContainer" target=_parent class=ISymbol>setGraphContainer</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_setGridEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGridEnabled')" class=ISymbol>setGridEnabled</a><div class=ISubIndex><a href="../files/util/mxDragSource-js.html#mxDragSource.setGridEnabled" target=_parent class=IParent>mxDragSource</a><a href="../files/view/mxGraph-js.html#mxGraph.setGridEnabled" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_setGridSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setGridSize" target=_parent class=ISymbol>setGridSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setGuidesEnabled><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.setGuidesEnabled" target=_parent class=ISymbol>setGuidesEnabled</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_setHandlesVisibleForCells><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.setHandlesVisibleForCells" target=_parent class=ISymbol>setHandlesVisibleForCells</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_setHideOnHover><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.setHideOnHover" target=_parent class=ISymbol>setHideOnHover</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_setHighlightColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setHighlightColor')" class=ISymbol>setHighlightColor</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.setHighlightColor" target=_parent class=IParent>mxCellHighlight</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.setHighlightColor" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_setHorizontal><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.setHorizontal" target=_parent class=ISymbol>setHorizontal</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_setHotspot><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.setHotspot" target=_parent class=ISymbol>setHotspot</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_setHotspotEnabled><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.setHotspotEnabled" target=_parent class=ISymbol>setHotspotEnabled</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_setHtmlLabels><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setHtmlLabels" target=_parent class=ISymbol>setHtmlLabels</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setId><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.setId" target=_parent class=ISymbol>setId</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_setImage><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setImage" target=_parent class=ISymbol>setImage</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setInvokesStopCellEditing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setInvokesStopCellEditing" target=_parent class=ISymbol>setInvokesStopCellEditing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setLineCap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setLineCap')" class=ISymbol>setLineCap</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setLineCap" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setLineCap" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setLineJoin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setLineJoin')" class=ISymbol>setLineJoin</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setLineJoin" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setLineJoin" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setLink><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setLink')" class=ISymbol>setLink</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setLink" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.setLink" target=_parent class=IParent>mxSvgCanvas2D</a></div></div></div><div class=SRResult id=SR_setLocation><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setLocation" target=_parent class=ISymbol>setLocation</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setMaximizable><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setMaximizable" target=_parent class=ISymbol>setMaximizable</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setMinimizable><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setMinimizable" target=_parent class=ISymbol>setMinimizable</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setMiterLimit><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setMiterLimit')" class=ISymbol>setMiterLimit</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setMiterLimit" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setMiterLimit" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setMode><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.setMode" target=_parent class=ISymbol>setMode</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_setModified><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.setModified" target=_parent class=ISymbol>setModified</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_setMoveEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.setMoveEnabled" target=_parent class=ISymbol>setMoveEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_setMultigraph><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setMultigraph" target=_parent class=ISymbol>setMultigraph</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setOpacity><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.setOpacity" target=_parent class=ISymbol>setOpacity</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_setOrthogonalEdge><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.setOrthogonalEdge" target=_parent class=ISymbol>setOrthogonalEdge</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_setPanning><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setPanning" target=_parent class=ISymbol>setPanning</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setPanningEnabled><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.setPanningEnabled" target=_parent class=ISymbol>setPanningEnabled</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_setParent><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.setParent" target=_parent class=ISymbol>setParent</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_setPinchEnabled><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.setPinchEnabled" target=_parent class=ISymbol>setPinchEnabled</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_setPortsEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setPortsEnabled" target=_parent class=ISymbol>setPortsEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setPosition><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.setPosition" target=_parent class=ISymbol>setPosition</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_setPrefixedStyle><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.setPrefixedStyle" target=_parent class=ISymbol>setPrefixedStyle</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_setPreviewColor><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.setPreviewColor" target=_parent class=ISymbol>setPreviewColor</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_setRect><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.setRect" target=_parent class=ISymbol>setRect</a>, <span class=IParent>mxRectangle</span></div></div><div class=SRResult id=SR_setRecursiveResize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setRecursiveResize" target=_parent class=ISymbol>setRecursiveResize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setRemoveCellsFromParent><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.setRemoveCellsFromParent" target=_parent class=ISymbol>setRemoveCellsFromParent</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_setRendering><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.setRendering" target=_parent class=ISymbol>setRendering</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_setRequestHeaders><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.setRequestHeaders" target=_parent class=ISymbol>setRequestHeaders</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_setResizable><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setResizable" target=_parent class=ISymbol>setResizable</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setResizeContainer><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setResizeContainer" target=_parent class=ISymbol>setResizeContainer</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setResizeEnabled><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.setResizeEnabled" target=_parent class=ISymbol>setResizeEnabled</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_setRoot><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setRoot" target=_parent class=ISymbol>setRoot</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_setScale><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.setScale" target=_parent class=ISymbol>setScale</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_setScrollable><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setScrollable" target=_parent class=ISymbol>setScrollable</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setSelectEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.setSelectEnabled" target=_parent class=ISymbol>setSelectEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_setSelectionCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setSelectionCell" target=_parent class=ISymbol>setSelectionCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setSelectionCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setSelectionCells" target=_parent class=ISymbol>setSelectionCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setSelectionModel><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setSelectionModel" target=_parent class=ISymbol>setSelectionModel</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setShadow><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setShadow')" class=ISymbol>setShadow</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setShadow" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setShadow" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setShadowAlpha><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setShadowAlpha')" class=ISymbol>setShadowAlpha</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setShadowAlpha" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setShadowAlpha" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setShadowColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setShadowColor')" class=ISymbol>setShadowColor</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setShadowColor" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setShadowColor" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setShadowOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setShadowOffset')" class=ISymbol>setShadowOffset</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setShadowOffset" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setShadowOffset" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setSingleSelection><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.setSingleSelection" target=_parent class=ISymbol>setSingleSelection</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_setSize><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setSize" target=_parent class=ISymbol>setSize</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setSplitEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setSplitEnabled" target=_parent class=ISymbol>setSplitEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setState><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.setState" target=_parent class=ISymbol>setState</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_setStates><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setStates')" class=ISymbol>setStates</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxGraphView.setStates" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxGuide-js.html#mxGuide.setStates" target=_parent class=IParent>mxGuide</a></div></div></div><div class=SRResult id=SR_setStatus><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.setStatus" target=_parent class=ISymbol>setStatus</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_setStatusContainer><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.setStatusContainer" target=_parent class=ISymbol>setStatusContainer</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_setStrokeAlpha><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setStrokeAlpha')" class=ISymbol>setStrokeAlpha</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setStrokeAlpha" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setStrokeAlpha" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setStrokeColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setStrokeColor')" class=ISymbol>setStrokeColor</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setStrokeColor" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setStrokeColor" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setStrokeWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setStrokeWidth')" class=ISymbol>setStrokeWidth</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setStrokeWidth" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setStrokeWidth" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setStyle')" class=ISymbol>setStyle</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setStyle" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setStyle" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxUtils-js.html#mxUtils.setStyle" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_setStyleFlag><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.setStyleFlag" target=_parent class=ISymbol>setStyleFlag</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_setStylesheet><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setStylesheet" target=_parent class=ISymbol>setStylesheet</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setSwimlaneNesting><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setSwimlaneNesting" target=_parent class=ISymbol>setSwimlaneNesting</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setSwimlaneSelectionEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setSwimlaneSelectionEnabled" target=_parent class=ISymbol>setSwimlaneSelectionEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setTerminal><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setTerminal')" class=ISymbol>setTerminal</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setTerminal" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setTerminal" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_setTerminalPoint><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.setTerminalPoint" target=_parent class=ISymbol>setTerminalPoint</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_setTerminals><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setTerminals" target=_parent class=ISymbol>setTerminals</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_setTextContent><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.setTextContent" target=_parent class=ISymbol>setTextContent</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_setTitle><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setTitle" target=_parent class=ISymbol>setTitle</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setTitleContainer><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.setTitleContainer" target=_parent class=ISymbol>setTitleContainer</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_setTolerance><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setTolerance" target=_parent class=ISymbol>setTolerance</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setToolbarContainer><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.setToolbarContainer" target=_parent class=ISymbol>setToolbarContainer</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_setTooltips><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setTooltips" target=_parent class=ISymbol>setTooltips</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setTranslate><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.setTranslate" target=_parent class=ISymbol>setTranslate</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_setTransparentBackgroundImage><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.setTransparentBackgroundImage" target=_parent class=ISymbol>setTransparentBackgroundImage</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_setValue><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setValue')" class=ISymbol>setValue</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setValue" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setValue" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_setVertex><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.setVertex" target=_parent class=ISymbol>setVertex</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_setVertexLabelsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setVertexLabelsMovable" target=_parent class=ISymbol>setVertexLabelsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setVertexLocation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setVertexLocation')" class=ISymbol>setVertexLocation</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.setVertexLocation" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.setVertexLocation" target=_parent class=IParent>mxGraphLayout</a></div></div></div><div class=SRResult id=SR_setVisible><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setVisible')" class=ISymbol>setVisible</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setVisible" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setVisible" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxGuide-js.html#mxGuide.setVisible" target=_parent class=IParent>mxGuide</a><a href="../files/handler/mxHandle-js.html#mxHandle.setVisible" target=_parent class=IParent>mxHandle</a><a href="../files/util/mxLog-js.html#mxLog.setVisible" target=_parent class=IParent>mxLog</a><a href="../files/util/mxWindow-js.html#mxWindow.setVisible" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_setVisibleTerminalState><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.setVisibleTerminalState" target=_parent class=ISymbol>setVisibleTerminalState</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_setX><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.setX" target=_parent class=ISymbol>setX</a>, <span class=IParent>mxGraphAbstractHierarchyCell</span></div></div><div class=SRResult id=SR_setY><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.setY" target=_parent class=ISymbol>setY</a>, <span class=IParent>mxGraphAbstractHierarchyCell</span></div></div><div class=SRResult id=SR_setZoomEnabled><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.setZoomEnabled" target=_parent class=ISymbol>setZoomEnabled</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_shouldRemoveCellsFromParent><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.shouldRemoveCellsFromParent" target=_parent class=ISymbol>shouldRemoveCellsFromParent</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_shouldRemoveParent><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.shouldRemoveParent" target=_parent class=ISymbol>shouldRemoveParent</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_show><div class=IEntry><a href="javascript:searchResults.Toggle('SR_show')" class=ISymbol>show</a><div class=ISubIndex><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.show" target=_parent class=IParent>mxCellStatePreview</a><a href="../files/util/mxLog-js.html#mxLog.show" target=_parent class=IParent>mxLog</a><a href="../files/util/mxMorphing-js.html#mxMorphing.show" target=_parent class=IParent>mxMorphing</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.show" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/util/mxUtils-js.html#mxUtils.show" target=_parent class=IParent>mxUtils</a><a href="../files/util/mxWindow-js.html#mxWindow.show" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_showHelp><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.showHelp" target=_parent class=ISymbol>showHelp</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_showMenu><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.showMenu" target=_parent class=ISymbol>showMenu</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_showOutline><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.showOutline" target=_parent class=ISymbol>showOutline</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_showProperties><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.showProperties" target=_parent class=ISymbol>showProperties</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_showSubmenu><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.showSubmenu" target=_parent class=ISymbol>showSubmenu</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_showTasks><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.showTasks" target=_parent class=ISymbol>showTasks</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_SideToSide><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.SideToSide" target=_parent class=ISymbol>SideToSide</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_simulate><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.simulate" target=_parent class=ISymbol>simulate</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_sizeDidChange><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.sizeDidChange" target=_parent class=ISymbol>sizeDidChange</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_snap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_snap')" class=ISymbol>snap</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.snap" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.snap" target=_parent class=IParent>mxGraphHandler</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.snap" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_snapDelta><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.snapDelta" target=_parent class=ISymbol>snapDelta</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_snapPoint><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.snapPoint" target=_parent class=ISymbol>snapPoint</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_snapToPreview><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.snapToPreview" target=_parent class=ISymbol>snapToPreview</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_sortCells><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.sortCells" target=_parent class=ISymbol>sortCells</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_sortOutgoingEdges><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.sortOutgoingEdges" target=_parent class=ISymbol>sortOutgoingEdges</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_source><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.source" target=_parent class=ISymbol>source</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_splitEdge><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.splitEdge" target=_parent class=ISymbol>splitEdge</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_start><div class=IEntry><a href="javascript:searchResults.Toggle('SR_start')" class=ISymbol>start</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#start" target=_parent class=IParent>Global</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.start" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.start" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.start" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.start" target=_parent class=IParent>mxPanningHandler</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.start" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.start" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_startAnimation><div class=IEntry><a href="../files/util/mxAnimation-js.html#mxAnimation.startAnimation" target=_parent class=ISymbol>startAnimation</a>, <span class=IParent>mxAnimation</span></div></div><div class=SRResult id=SR_startDrag><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.startDrag" target=_parent class=ISymbol>startDrag</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_startEditing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_startEditing')" class=ISymbol>startEditing</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.startEditing" target=_parent class=IParent>mxCellEditor</a><a href="../files/view/mxGraph-js.html#mxGraph.startEditing" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_startEditingAtCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.startEditingAtCell" target=_parent class=ISymbol>startEditingAtCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_stateValidated><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.stateValidated" target=_parent class=ISymbol>stateValidated</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_stopAnimation><div class=IEntry><a href="../files/util/mxAnimation-js.html#mxAnimation.stopAnimation" target=_parent class=ISymbol>stopAnimation</a>, <span class=IParent>mxAnimation</span></div></div><div class=SRResult id=SR_stopDrag><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.stopDrag" target=_parent class=ISymbol>stopDrag</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_stopEditing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_stopEditing')" class=ISymbol>stopEditing</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.stopEditing" target=_parent class=IParent>mxCellEditor</a><a href="../files/view/mxGraph-js.html#mxGraph.stopEditing" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_stopRecursion><div class=IEntry><a href="../files/util/mxMorphing-js.html#mxMorphing.stopRecursion" target=_parent class=ISymbol>stopRecursion</a>, <span class=IParent>mxMorphing</span></div></div><div class=SRResult id=SR_stroke><div class=IEntry><a href="javascript:searchResults.Toggle('SR_stroke')" class=ISymbol>stroke</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.stroke" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.stroke" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.stroke" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_styleForCellChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.styleForCellChanged" target=_parent class=ISymbol>styleForCellChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_styles><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.styles" target=_parent class=ISymbol>styles</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_submit><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.submit" target=_parent class=ISymbol>submit</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_suspend><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.suspend" target=_parent class=ISymbol>suspend</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_swap><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.swap" target=_parent class=ISymbol>swap</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_swapBounds><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.swapBounds" target=_parent class=ISymbol>swapBounds</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_swapStyles><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.swapStyles" target=_parent class=ISymbol>swapStyles</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_swimlaneAdded><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.swimlaneAdded" target=_parent class=ISymbol>swimlaneAdded</a>, <span class=IParent>mxSwimlaneManager</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsT.html b/docs/js-api/search/FunctionsT.html
index 345086a01..a75f3d307 100644
--- a/docs/js-api/search/FunctionsT.html
+++ b/docs/js-api/search/FunctionsT.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_tapAndHold><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.tapAndHold" target=_parent class=ISymbol>tapAndHold</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_terminalForCellChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.terminalForCellChanged" target=_parent class=ISymbol>terminalForCellChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_text><div class=IEntry><a href="javascript:searchResults.Toggle('SR_text')" class=ISymbol>text</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.text" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.text" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.text" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_toDegree><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.toDegree" target=_parent class=ISymbol>toDegree</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_toggleCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.toggleCells" target=_parent class=ISymbol>toggleCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_toggleCellStyle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.toggleCellStyle" target=_parent class=ISymbol>toggleCellStyle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_toggleCellStyleFlags><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.toggleCellStyleFlags" target=_parent class=ISymbol>toggleCellStyleFlags</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_toggleCellStyles><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.toggleCellStyles" target=_parent class=ISymbol>toggleCellStyles</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_TopToBottom><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.TopToBottom" target=_parent class=ISymbol>TopToBottom</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_toRadians><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.toRadians" target=_parent class=ISymbol>toRadians</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_toString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_toString')" class=ISymbol>toString</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.toString" target=_parent class=IParent>mxCellOverlay</a><a href="../files/util/mxUtils-js.html#mxUtils.toString" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_transformControlPoint><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.transformControlPoint" target=_parent class=ISymbol>transformControlPoint</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_translate><div class=IEntry><a href="javascript:searchResults.Toggle('SR_translate')" class=ISymbol>translate</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.translate" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/model/mxGeometry-js.html#mxGeometry.translate" target=_parent class=IParent>mxGeometry</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.translate" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_translateCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.translateCell" target=_parent class=ISymbol>translateCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_translateState><div class=IEntry><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.translateState" target=_parent class=ISymbol>translateState</a>, <span class=IParent>mxCellStatePreview</span></div></div><div class=SRResult id=SR_transpose><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.transpose" target=_parent class=ISymbol>transpose</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_traverse><div class=IEntry><a href="javascript:searchResults.Toggle('SR_traverse')" class=ISymbol>traverse</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.traverse" target=_parent class=IParent>mxGraph</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.traverse" target=_parent class=IParent>mxGraphLayout</a></div></div></div><div class=SRResult id=SR_treeLayout><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.treeLayout" target=_parent class=ISymbol>treeLayout</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_TrianglePerimeter><div class=IEntry><a href="../files/view/mxPerimeter-js.html#mxPerimeter.TrianglePerimeter" target=_parent class=ISymbol>TrianglePerimeter</a>, <span class=IParent>mxPerimeter</span></div></div><div class=SRResult id=SR_trim><div class=IEntry><a href="javascript:searchResults.Toggle('SR_trim')" class=ISymbol>trim</a><div class=ISubIndex><a href="../files/util/mxUndoManager-js.html#mxUndoManager.trim" target=_parent class=IParent>mxUndoManager</a><a href="../files/util/mxUtils-js.html#mxUtils.trim" target=_parent class=IParent>mxUtils</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsU.html b/docs/js-api/search/FunctionsU.html
index 388a04384..89b3d226a 100644
--- a/docs/js-api/search/FunctionsU.html
+++ b/docs/js-api/search/FunctionsU.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_undo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_undo')" class=ISymbol>undo</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.undo" target=_parent class=IParent>mxEditor</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.undo" target=_parent class=IParent>mxUndoableEdit</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.undo" target=_parent class=IParent>mxUndoManager</a></div></div></div><div class=SRResult id=SR_undoableEditHappened><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.undoableEditHappened" target=_parent class=ISymbol>undoableEditHappened</a>, <span class=IParent>mxUndoManager</span></div></div><div class=SRResult id=SR_ungroupCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.ungroupCells" target=_parent class=ISymbol>ungroupCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_union><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.union" target=_parent class=ISymbol>union</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_unmark><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.unmark" target=_parent class=ISymbol>unmark</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_update><div class=IEntry><a href="javascript:searchResults.Toggle('SR_update')" class=ISymbol>update</a><div class=ISubIndex><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.update" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/view/mxOutline-js.html#mxOutline.update" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.update" target=_parent class=IParent>mxRubberband</a></div></div></div><div class=SRResult id=SR_updateAlternateBounds><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.updateAlternateBounds" target=_parent class=ISymbol>updateAlternateBounds</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_updateAnimation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateAnimation')" class=ISymbol>updateAnimation</a><div class=ISubIndex><a href="../files/util/mxAnimation-js.html#mxAnimation.updateAnimation" target=_parent class=IParent>mxAnimation</a><a href="../files/util/mxMorphing-js.html#mxMorphing.updateAnimation" target=_parent class=IParent>mxMorphing</a></div></div></div><div class=SRResult id=SR_updateBaseUrl><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.updateBaseUrl" target=_parent class=ISymbol>updateBaseUrl</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_updateBoundingBox><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateBoundingBox')" class=ISymbol>updateBoundingBox</a><div class=ISubIndex><a href="../files/shape/mxConnector-js.html#mxConnector.updateBoundingBox" target=_parent class=IParent>mxConnector</a><a href="../files/shape/mxShape-js.html#mxShape.updateBoundingBox" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.updateBoundingBox" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_updateBoundsFromPoints><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.updateBoundsFromPoints" target=_parent class=ISymbol>updateBoundsFromPoints</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_updateBoundsFromStencil><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateBoundsFromStencil" target=_parent class=ISymbol>updateBoundsFromStencil</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateCachedBounds><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.updateCachedBounds" target=_parent class=ISymbol>updateCachedBounds</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_updateCellSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.updateCellSize" target=_parent class=ISymbol>updateCellSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_updateCellState><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateCellState" target=_parent class=ISymbol>updateCellState</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateContainerStyle><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateContainerStyle" target=_parent class=ISymbol>updateContainerStyle</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateCurrentState><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.updateCurrentState" target=_parent class=ISymbol>updateCurrentState</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_updateEdgeBounds><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateEdgeBounds" target=_parent class=ISymbol>updateEdgeBounds</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateEdgeLabelOffset><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateEdgeLabelOffset" target=_parent class=ISymbol>updateEdgeLabelOffset</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateEdgeParent><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.updateEdgeParent" target=_parent class=ISymbol>updateEdgeParent</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_updateEdgeParents><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.updateEdgeParents" target=_parent class=ISymbol>updateEdgeParents</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_updateEdgeState><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateEdgeState')" class=ISymbol>updateEdgeState</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.updateEdgeState" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/view/mxGraphView-js.html#mxGraphView.updateEdgeState" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_updateElements><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.updateElements" target=_parent class=ISymbol>updateElements</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_updateFill><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.updateFill" target=_parent class=ISymbol>updateFill</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_updateFixedTerminalPoint><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateFixedTerminalPoint" target=_parent class=ISymbol>updateFixedTerminalPoint</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateFixedTerminalPoints><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateFixedTerminalPoints" target=_parent class=ISymbol>updateFixedTerminalPoints</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateFloatingTerminalPoint><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateFloatingTerminalPoint" target=_parent class=ISymbol>updateFloatingTerminalPoint</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateFloatingTerminalPoints><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateFloatingTerminalPoints" target=_parent class=ISymbol>updateFloatingTerminalPoints</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateFont><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateFont')" class=ISymbol>updateFont</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.updateFont" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/shape/mxText-js.html#mxText.updateFont" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_updateGroupBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateGroupBounds')" class=ISymbol>updateGroupBounds</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.updateGroupBounds" target=_parent class=IParent>mxGraph</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.updateGroupBounds" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_updateHandler><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.updateHandler" target=_parent class=ISymbol>updateHandler</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_updateHint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateHint')" class=ISymbol>updateHint</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.updateHint" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.updateHint" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.updateHint" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_updateHtmlBounds><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.updateHtmlBounds" target=_parent class=ISymbol>updateHtmlBounds</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_updateHtmlCanvasSize><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateHtmlCanvasSize" target=_parent class=ISymbol>updateHtmlCanvasSize</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateHtmlColors><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.updateHtmlColors" target=_parent class=ISymbol>updateHtmlColors</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_updateHtmlFilter><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.updateHtmlFilter" target=_parent class=ISymbol>updateHtmlFilter</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_updateHtmlFilters><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.updateHtmlFilters" target=_parent class=ISymbol>updateHtmlFilters</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_updateHtmlTransform><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.updateHtmlTransform" target=_parent class=ISymbol>updateHtmlTransform</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_updateIcons><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.updateIcons" target=_parent class=ISymbol>updateIcons</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_updateInnerHtml><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.updateInnerHtml" target=_parent class=ISymbol>updateInnerHtml</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_updateLivePreview><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateLivePreview')" class=ISymbol>updateLivePreview</a><div class=ISubIndex><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.updateLivePreview" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.updateLivePreview" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_updateMinBounds><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.updateMinBounds" target=_parent class=ISymbol>updateMinBounds</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_updateMouseEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.updateMouseEvent" target=_parent class=ISymbol>updateMouseEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_updatePageBreaks><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.updatePageBreaks" target=_parent class=ISymbol>updatePageBreaks</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_updateParentGeometry><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.updateParentGeometry" target=_parent class=ISymbol>updateParentGeometry</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_updateParentHighlight><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateParentHighlight')" class=ISymbol>updateParentHighlight</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.updateParentHighlight" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.updateParentHighlight" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_updatePoints><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updatePoints" target=_parent class=ISymbol>updatePoints</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updatePreview><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.updatePreview" target=_parent class=ISymbol>updatePreview</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_updatePreviewShape><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.updatePreviewShape" target=_parent class=ISymbol>updatePreviewShape</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_updatePreviewState><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updatePreviewState')" class=ISymbol>updatePreviewState</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#updatePreviewState" target=_parent class=IParent>Global</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.updatePreviewState" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_updateSelection><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.updateSelection" target=_parent class=ISymbol>updateSelection</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_updateSize><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.updateSize" target=_parent class=ISymbol>updateSize</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_updateStroke><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.updateStroke" target=_parent class=ISymbol>updateStroke</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_updateStrokeAttributes><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.updateStrokeAttributes" target=_parent class=ISymbol>updateStrokeAttributes</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_updateTransform><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.updateTransform" target=_parent class=ISymbol>updateTransform</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_updateValue><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.updateValue" target=_parent class=ISymbol>updateValue</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_updateVertexLabelOffset><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateVertexLabelOffset" target=_parent class=ISymbol>updateVertexLabelOffset</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateVertexState><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateVertexState" target=_parent class=ISymbol>updateVertexState</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateVmlContainer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateVmlContainer')" class=ISymbol>updateVmlContainer</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.updateVmlContainer" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.updateVmlContainer" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_updatingDocumentResource><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updatingDocumentResource" target=_parent class=ISymbol>updatingDocumentResource</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_useCssTransforms><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.useCssTransforms" target=_parent class=ISymbol>useCssTransforms</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_useGuidesForEvent><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.useGuidesForEvent" target=_parent class=ISymbol>useGuidesForEvent</a>, <span class=IParent>mxGraphHandler</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsV.html b/docs/js-api/search/FunctionsV.html
index 9f77b7ce7..83624167c 100644
--- a/docs/js-api/search/FunctionsV.html
+++ b/docs/js-api/search/FunctionsV.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_validate><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.validate" target=_parent class=ISymbol>validate</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_validateBackground><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.validateBackground" target=_parent class=ISymbol>validateBackground</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_validateBackgroundImage><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.validateBackgroundImage" target=_parent class=ISymbol>validateBackgroundImage</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_validateBackgroundPage><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.validateBackgroundPage" target=_parent class=ISymbol>validateBackgroundPage</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_validateCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_validateCell')" class=ISymbol>validateCell</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.validateCell" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphView-js.html#mxGraphView.validateCell" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_validateCellState><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.validateCellState" target=_parent class=ISymbol>validateCellState</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_validateConnection><div class=IEntry><a href="javascript:searchResults.Toggle('SR_validateConnection')" class=ISymbol>validateConnection</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.validateConnection" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.validateConnection" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_validateEdge><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.validateEdge" target=_parent class=ISymbol>validateEdge</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_validateGraph><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.validateGraph" target=_parent class=ISymbol>validateGraph</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_validationAlert><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.validationAlert" target=_parent class=ISymbol>validationAlert</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_valueChanged><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.valueChanged" target=_parent class=ISymbol>valueChanged</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_valueForCellChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.valueForCellChanged" target=_parent class=ISymbol>valueForCellChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_vertical><div class=IEntry><a href="../files/shape/mxLine-js.html#mxLine.vertical" target=_parent class=ISymbol>vertical</a>, <span class=IParent>mxLine</span></div></div><div class=SRResult id=SR_verticalLayout><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.verticalLayout" target=_parent class=ISymbol>verticalLayout</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_viewStateChanged><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.viewStateChanged" target=_parent class=ISymbol>viewStateChanged</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_visibleStateForCellChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.visibleStateForCellChanged" target=_parent class=ISymbol>visibleStateForCellChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_visit><div class=IEntry><a href="javascript:searchResults.Toggle('SR_visit')" class=ISymbol>visit</a><div class=ISubIndex><a href="../files/util/mxDictionary-js.html#mxDictionary.visit" target=_parent class=IParent>mxDictionary</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.visit" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.visit" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_visitStatesRecursive><div class=IEntry><a href="../files/util/mxImageExport-js.html#mxImageExport.visitStatesRecursive" target=_parent class=ISymbol>visitStatesRecursive</a>, <span class=IParent>mxImageExport</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsW.html b/docs/js-api/search/FunctionsW.html
index 72f529f7a..666481820 100644
--- a/docs/js-api/search/FunctionsW.html
+++ b/docs/js-api/search/FunctionsW.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_warn><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.warn" target=_parent class=ISymbol>warn</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_WeightedCellSorter><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.WeightedCellSorter" target=_parent class=ISymbol>WeightedCellSorter</a>, <span class=IParent>WeightedCellSorter</span></div></div><div class=SRResult id=SR_weightedMedian><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.weightedMedian" target=_parent class=ISymbol>weightedMedian</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_write><div class=IEntry><a href="javascript:searchResults.Toggle('SR_write')" class=ISymbol>write</a><div class=ISubIndex><a href="../files/util/mxLog-js.html#mxLog.write" target=_parent class=IParent>mxLog</a><a href="../files/util/mxUtils-js.html#mxUtils.write" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_writeAttribute><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.writeAttribute" target=_parent class=ISymbol>writeAttribute</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_writeComplexAttribute><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.writeComplexAttribute" target=_parent class=ISymbol>writeComplexAttribute</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_writeDefaults><div class=IEntry><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.writeDefaults" target=_parent class=ISymbol>writeDefaults</a>, <span class=IParent>mxXmlCanvas2D</span></div></div><div class=SRResult id=SR_writeGraphModel><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.writeGraphModel" target=_parent class=ISymbol>writeGraphModel</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_writeHead><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.writeHead" target=_parent class=ISymbol>writeHead</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_writeln><div class=IEntry><a href="javascript:searchResults.Toggle('SR_writeln')" class=ISymbol>writeln</a><div class=ISubIndex><a href="../files/util/mxLog-js.html#mxLog.writeln" target=_parent class=IParent>mxLog</a><a href="../files/util/mxUtils-js.html#mxUtils.writeln" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_writePostfix><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.writePostfix" target=_parent class=ISymbol>writePostfix</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_writePrimitiveAttribute><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.writePrimitiveAttribute" target=_parent class=ISymbol>writePrimitiveAttribute</a>, <span class=IParent>mxObjectCodec</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/FunctionsZ.html b/docs/js-api/search/FunctionsZ.html
index 015745c7c..afd2d7a30 100644
--- a/docs/js-api/search/FunctionsZ.html
+++ b/docs/js-api/search/FunctionsZ.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zoom><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.zoom" target=_parent class=ISymbol>zoom</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_zoomActual><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.zoomActual" target=_parent class=ISymbol>zoomActual</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_zoomGraph><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.zoomGraph" target=_parent class=ISymbol>zoomGraph</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_zoomIn><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.zoomIn" target=_parent class=ISymbol>zoomIn</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_zoomOut><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.zoomOut" target=_parent class=ISymbol>zoomOut</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_zoomTo><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.zoomTo" target=_parent class=ISymbol>zoomTo</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_zoomToRect><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.zoomToRect" target=_parent class=ISymbol>zoomToRect</a>, <span class=IParent>mxGraph</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralA.html b/docs/js-api/search/GeneralA.html
index 59c5e4f3c..c8fb0ad65 100644
--- a/docs/js-api/search/GeneralA.html
+++ b/docs/js-api/search/GeneralA.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_ABSOLUTE_undLINE_undHEIGHT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ABSOLUTE_LINE_HEIGHT" target=_parent class=ISymbol>ABSOLUTE_LINE_HEIGHT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_absoluteOffset><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.absoluteOffset" target=_parent class=ISymbol>absoluteOffset</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_absolutePoints><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.absolutePoints" target=_parent class=ISymbol>absolutePoints</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_actions><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.actions" target=_parent class=ISymbol>actions</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_Actions_spcand_spcOptions><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.Actions_and_Options" target=_parent class=ISymbol>Actions and Options</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_activate><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.activate" target=_parent class=ISymbol>activate</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR2_ACTIVATE><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_ACTIVATE')" class=ISymbol>ACTIVATE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.ACTIVATE" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.ACTIVATE" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_add><div class=IEntry><a href="javascript:searchResults.Toggle('SR_add')" class=ISymbol>add</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.add" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxRectangle-js.html#mxRectangle.add" target=_parent class=IParent>mxRectangle</a><a href="../files/util/mxResources-js.html#mxResources.add" target=_parent class=IParent>mxResources</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.add" target=_parent class=IParent>mxUndoableEdit</a></div></div></div><div class=SRResult id=SR2_ADD><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_ADD')" class=ISymbol>ADD</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.ADD" target=_parent class=IParent>mxEvent</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.mxEvent.ADD" target=_parent class=IParent>mxSelectionCellsHandler.<wbr>mxEvent</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.mxEvent.ADD" target=_parent class=IParent>mxUndoManager.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_ADD_undCELLS><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ADD_undCELLS')" class=ISymbol>ADD_CELLS</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.ADD_CELLS" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.ADD_CELLS" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_ADD_undOVERLAY><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ADD_undOVERLAY')" class=ISymbol>ADD_OVERLAY</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.ADD_OVERLAY" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.ADD_OVERLAY" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_ADD_undVERTEX><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ADD_undVERTEX')" class=ISymbol>ADD_VERTEX</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.ADD_VERTEX" target=_parent class=IParent>mxEditor.<wbr>mxEvent</a><a href="../files/util/mxEvent-js.html#mxEvent.ADD_VERTEX" target=_parent class=IParent>mxEvent</a></div></div></div><div class=SRResult id=SR_addAction><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addAction')" class=ISymbol>addAction</a><div class=ISubIndex><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.addAction" target=_parent class=IParent>mxDefaultPopupMenu</a><a href="../files/editor/mxEditor-js.html#mxEditor.addAction" target=_parent class=IParent>mxEditor</a></div></div></div><div class=SRResult id=SR_addActionCombo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addActionCombo')" class=ISymbol>addActionCombo</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addActionCombo" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/util/mxToolbar-js.html#mxToolbar.addActionCombo" target=_parent class=IParent>mxToolbar</a></div></div></div><div class=SRResult id=SR_addActionOption><div class=IEntry><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addActionOption" target=_parent class=ISymbol>addActionOption</a>, <span class=IParent>mxDefaultToolbar</span></div></div><div class=SRResult id=SR_addActions><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.addActions" target=_parent class=ISymbol>addActions</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_addAlias><div class=IEntry><a href="../files/io/mxCodecRegistry-js.html#mxCodecRegistry.addAlias" target=_parent class=ISymbol>addAlias</a>, <span class=IParent>mxCodecRegistry</span></div></div><div class=SRResult id=SR_addAllEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.addAllEdges" target=_parent class=ISymbol>addAllEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_addAncestorsWithLayout><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.addAncestorsWithLayout" target=_parent class=ISymbol>addAncestorsWithLayout</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_addBreak><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.addBreak" target=_parent class=ISymbol>addBreak</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_addButton><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.addButton" target=_parent class=ISymbol>addButton</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_addButtons><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.addButtons" target=_parent class=ISymbol>addButtons</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_addCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addCell')" class=ISymbol>addCell</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.addCell" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.addCell" target=_parent class=IParent>mxGraphSelectionModel</a></div></div></div><div class=SRResult id=SR_addCellOverlay><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.addCellOverlay" target=_parent class=ISymbol>addCellOverlay</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_addCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addCells')" class=ISymbol>addCells</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.addCells" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.addCells" target=_parent class=IParent>mxGraphSelectionModel</a></div></div></div><div class=SRResult id=SR_addCellsWithLayout><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.addCellsWithLayout" target=_parent class=ISymbol>addCellsWithLayout</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_addCheckbox><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.addCheckbox" target=_parent class=ISymbol>addCheckbox</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_addCombo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addCombo')" class=ISymbol>addCombo</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addCombo" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/util/mxForm-js.html#mxForm.addCombo" target=_parent class=IParent>mxForm</a><a href="../files/util/mxToolbar-js.html#mxToolbar.addCombo" target=_parent class=IParent>mxToolbar</a></div></div></div><div class=SRResult id=SR_addDescendantsWithLayout><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.addDescendantsWithLayout" target=_parent class=ISymbol>addDescendantsWithLayout</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_addEdge><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.addEdge" target=_parent class=ISymbol>addEdge</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_addEdges><div class=IEntry><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.addEdges" target=_parent class=ISymbol>addEdges</a>, <span class=IParent>mxCellStatePreview</span></div></div><div class=SRResult id=SR_addElement><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.addElement" target=_parent class=ISymbol>addElement</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_addEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addEnabled')" class=ISymbol>addEnabled</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.addEnabled" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.addEnabled" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_addField><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.addField" target=_parent class=ISymbol>addField</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_addForeignObject><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.addForeignObject" target=_parent class=ISymbol>addForeignObject</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_addGestureListeners><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.addGestureListeners" target=_parent class=ISymbol>addGestureListeners</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_addGraphFragment><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.addGraphFragment" target=_parent class=ISymbol>addGraphFragment</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_addImageBundle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.addImageBundle" target=_parent class=ISymbol>addImageBundle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_addItem><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addItem')" class=ISymbol>addItem</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addItem" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.addItem" target=_parent class=IParent>mxPopupMenu</a><a href="../files/util/mxToolbar-js.html#mxToolbar.addItem" target=_parent class=IParent>mxToolbar</a></div></div></div><div class=SRResult id=SR_addItems><div class=IEntry><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.addItems" target=_parent class=ISymbol>addItems</a>, <span class=IParent>mxDefaultPopupMenu</span></div></div><div class=SRResult id=SR_addLine><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.addLine" target=_parent class=ISymbol>addLine</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_addListener><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addListener')" class=ISymbol>addListener</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.addListener" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxEventSource-js.html#mxEventSource.addListener" target=_parent class=IParent>mxEventSource</a></div></div></div><div class=SRResult id=SR_addMarker><div class=IEntry><a href="../files/shape/mxMarker-js.html#mxMarker.addMarker" target=_parent class=ISymbol>addMarker</a>, <span class=IParent>mxMarker</span></div></div><div class=SRResult id=SR_addMode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addMode')" class=ISymbol>addMode</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addMode" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/util/mxToolbar-js.html#mxToolbar.addMode" target=_parent class=IParent>mxToolbar</a></div></div></div><div class=SRResult id=SR_addMouseListener><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.addMouseListener" target=_parent class=ISymbol>addMouseListener</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_addNode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addNode')" class=ISymbol>addNode</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.addNode" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.addNode" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_addObjectValue><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.addObjectValue" target=_parent class=ISymbol>addObjectValue</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_addOp><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.addOp" target=_parent class=ISymbol>addOp</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_addOption><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addOption')" class=ISymbol>addOption</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addOption" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/util/mxForm-js.html#mxForm.addOption" target=_parent class=IParent>mxForm</a><a href="../files/util/mxToolbar-js.html#mxToolbar.addOption" target=_parent class=IParent>mxToolbar</a></div></div></div><div class=SRResult id=SR_addPageBreak><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.addPageBreak" target=_parent class=ISymbol>addPageBreak</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_addPoint><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.addPoint" target=_parent class=ISymbol>addPoint</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_addPointAt><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.addPointAt" target=_parent class=ISymbol>addPointAt</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_addPoints><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.addPoints" target=_parent class=ISymbol>addPoints</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_addPrototype><div class=IEntry><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addPrototype" target=_parent class=ISymbol>addPrototype</a>, <span class=IParent>mxDefaultToolbar</span></div></div><div class=SRResult id=SR_addSelectionCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.addSelectionCell" target=_parent class=ISymbol>addSelectionCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_addSelectionCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.addSelectionCells" target=_parent class=ISymbol>addSelectionCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_addSeparator><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addSeparator')" class=ISymbol>addSeparator</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.addSeparator" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.addSeparator" target=_parent class=IParent>mxPopupMenu</a><a href="../files/util/mxToolbar-js.html#mxToolbar.addSeparator" target=_parent class=IParent>mxToolbar</a></div></div></div><div class=SRResult id=SR_addStates><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.addStates" target=_parent class=ISymbol>addStates</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_addStencil><div class=IEntry><a href="../files/shape/mxStencilRegistry-js.html#mxStencilRegistry.addStencil" target=_parent class=ISymbol>addStencil</a>, <span class=IParent>mxStencilRegistry</span></div></div><div class=SRResult id=SR_addStylename><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.addStylename" target=_parent class=ISymbol>addStylename</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_addSwitchMode><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.addSwitchMode" target=_parent class=ISymbol>addSwitchMode</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_addTemplate><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.addTemplate" target=_parent class=ISymbol>addTemplate</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_addText><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.addText" target=_parent class=ISymbol>addText</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_addTextarea><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.addTextarea" target=_parent class=ISymbol>addTextarea</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_addTextBackground><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.addTextBackground" target=_parent class=ISymbol>addTextBackground</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_addTransparentBackgroundFilter><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.addTransparentBackgroundFilter" target=_parent class=ISymbol>addTransparentBackgroundFilter</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_addVertex><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.addVertex" target=_parent class=ISymbol>addVertex</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_addWaypoint><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.addWaypoint" target=_parent class=ISymbol>addWaypoint</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_adjustParents><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.adjustParents" target=_parent class=ISymbol>adjustParents</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_AFTER_undADD_undVERTEX><div class=IEntry><a href="javascript:searchResults.Toggle('SR_AFTER_undADD_undVERTEX')" class=ISymbol>AFTER_ADD_VERTEX</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.AFTER_ADD_VERTEX" target=_parent class=IParent>mxEditor.<wbr>mxEvent</a><a href="../files/util/mxEvent-js.html#mxEvent.AFTER_ADD_VERTEX" target=_parent class=IParent>mxEvent</a></div></div></div><div class=SRResult id=SR_afterDecode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_afterDecode')" class=ISymbol>afterDecode</a><div class=ISubIndex><a href="../files/io/mxChildChangeCodec-js.html#mxChildChangeCodec.afterDecode" target=_parent class=IParent>mxChildChangeCodec</a><a href="../files/io/mxGenericChangeCodec-js.html#mxGenericChangeCodec.afterDecode" target=_parent class=IParent>mxGenericChangeCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.afterDecode" target=_parent class=IParent>mxObjectCodec</a><a href="../files/io/mxRootChangeCodec-js.html#mxRootChangeCodec.afterDecode" target=_parent class=IParent>mxRootChangeCodec</a><a href="../files/io/mxTerminalChangeCodec-js.html#mxTerminalChangeCodec.afterDecode" target=_parent class=IParent>mxTerminalChangeCodec</a></div></div></div><div class=SRResult id=SR_afterEncode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_afterEncode')" class=ISymbol>afterEncode</a><div class=ISubIndex><a href="../files/io/mxCellCodec-js.html#mxCellCodec.afterEncode" target=_parent class=IParent>mxCellCodec</a><a href="../files/io/mxChildChangeCodec-js.html#mxChildChangeCodec.afterEncode" target=_parent class=IParent>mxChildChangeCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.afterEncode" target=_parent class=IParent>mxObjectCodec</a></div></div></div><div class=SRResult id=SR_afterPaint><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.afterPaint" target=_parent class=ISymbol>afterPaint</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_alert><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.alert" target=_parent class=ISymbol>alert</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_aliases><div class=IEntry><a href="../files/io/mxCodecRegistry-js.html#mxCodecRegistry.aliases" target=_parent class=ISymbol>aliases</a>, <span class=IParent>mxCodecRegistry</span></div></div><div class=SRResult id=SR_align><div class=IEntry><a href="javascript:searchResults.Toggle('SR_align')" class=ISymbol>align</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.align" target=_parent class=IParent>mxCellEditor</a><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.align" target=_parent class=IParent>mxCellOverlay</a></div></div></div><div class=SRResult id=SR_ALIGN_undBOTTOM><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ALIGN_BOTTOM" target=_parent class=ISymbol>ALIGN_BOTTOM</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ALIGN_undCELLS><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ALIGN_undCELLS')" class=ISymbol>ALIGN_CELLS</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.ALIGN_CELLS" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.ALIGN_CELLS" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_ALIGN_undCENTER><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ALIGN_CENTER" target=_parent class=ISymbol>ALIGN_CENTER</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ALIGN_undLEFT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ALIGN_LEFT" target=_parent class=ISymbol>ALIGN_LEFT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ALIGN_undMIDDLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ALIGN_MIDDLE" target=_parent class=ISymbol>ALIGN_MIDDLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ALIGN_undRIGHT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ALIGN_RIGHT" target=_parent class=ISymbol>ALIGN_RIGHT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ALIGN_undTOP><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ALIGN_TOP" target=_parent class=ISymbol>ALIGN_TOP</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_alignCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.alignCells" target=_parent class=ISymbol>alignCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_alignRanks><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.alignRanks" target=_parent class=ISymbol>alignRanks</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_allowAutoPanning><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.allowAutoPanning" target=_parent class=ISymbol>allowAutoPanning</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_allowDanglingEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.allowDanglingEdges" target=_parent class=ISymbol>allowDanglingEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_allowedToRun><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.allowedToRun" target=_parent class=ISymbol>allowedToRun</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_allowEval><div class=IEntry><a href="javascript:searchResults.Toggle('SR_allowEval')" class=ISymbol>allowEval</a><div class=ISubIndex><a href="../files/io/mxDefaultToolbarCodec-js.html#mxDefaultToolbarCodec.allowEval" target=_parent class=IParent>mxDefaultToolbarCodec</a><a href="../files/view/mxGraphView-js.html#mxGraphView.allowEval" target=_parent class=IParent>mxGraphView</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.allowEval" target=_parent class=IParent>mxObjectCodec</a><a href="../files/shape/mxStencil-js.html#mxStencil.allowEval" target=_parent class=IParent>mxStencil</a><a href="../files/io/mxStylesheetCodec-js.html#mxStylesheetCodec.allowEval" target=_parent class=IParent>mxStylesheetCodec</a></div></div></div><div class=SRResult id=SR_allowGaps><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.allowGaps" target=_parent class=ISymbol>allowGaps</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_allowHandleBoundsCheck><div class=IEntry><a href="javascript:searchResults.Toggle('SR_allowHandleBoundsCheck')" class=ISymbol>allowHandleBoundsCheck</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.allowHandleBoundsCheck" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.allowHandleBoundsCheck" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_allowLivePreview><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.allowLivePreview" target=_parent class=ISymbol>allowLivePreview</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_allowLoops><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.allowLoops" target=_parent class=ISymbol>allowLoops</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_allowNegativeCoordinates><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.allowNegativeCoordinates" target=_parent class=ISymbol>allowNegativeCoordinates</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_alreadyConnectedResource><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.alreadyConnectedResource" target=_parent class=ISymbol>alreadyConnectedResource</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_alt><div class=IEntry><a href="../files/util/mxImageBundle-js.html#mxImageBundle.alt" target=_parent class=ISymbol>alt</a>, <span class=IParent>mxImageBundle</span></div></div><div class=SRResult id=SR_alternateBounds><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.alternateBounds" target=_parent class=ISymbol>alternateBounds</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_alternateEdgeStyle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.alternateEdgeStyle" target=_parent class=ISymbol>alternateEdgeStyle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_angleOffset><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.angleOffset" target=_parent class=ISymbol>angleOffset</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_animateCell><div class=IEntry><a href="../files/util/mxMorphing-js.html#mxMorphing.animateCell" target=_parent class=ISymbol>animateCell</a>, <span class=IParent>mxMorphing</span></div></div><div class=SRResult id=SR_animateChanges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_animateChanges')" class=ISymbol>animateChanges</a><div class=ISubIndex><a href="../files/util/mxEffects-js.html#mxEffects.animateChanges" target=_parent class=IParent>mxEffects</a><a href="../files/util/mxUtils-js.html#mxUtils.animateChanges" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_antiAlias><div class=IEntry><a href="javascript:searchResults.Toggle('SR_antiAlias')" class=ISymbol>antiAlias</a><div class=ISubIndex><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.antiAlias" target=_parent class=IParent>mxCellRenderer</a><a href="../files/shape/mxShape-js.html#mxShape.antiAlias" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_API_spcSpecification><div class=IEntry><a href="../files/index-txt.html#API_Specification" target=_parent class=ISymbol>API Specification</a></div></div><div class=SRResult id=SR_appendGraph><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.appendGraph" target=_parent class=ISymbol>appendGraph</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_apply><div class=IEntry><a href="javascript:searchResults.Toggle('SR_apply')" class=ISymbol>apply</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.apply" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/shape/mxImageShape-js.html#mxImageShape.apply" target=_parent class=IParent>mxImageShape</a><a href="../files/shape/mxShape-js.html#mxShape.apply" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.apply" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_applyValue><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.applyValue" target=_parent class=ISymbol>applyValue</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_arcTo><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.arcTo" target=_parent class=ISymbol>arcTo</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_arcToCurves><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.arcToCurves" target=_parent class=ISymbol>arcToCurves</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_arrangeGroups><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.arrangeGroups" target=_parent class=ISymbol>arrangeGroups</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_ARROW_undBLOCK><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_BLOCK" target=_parent class=ISymbol>ARROW_BLOCK</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undBLOCK_undTHIN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_BLOCK_THIN" target=_parent class=ISymbol>ARROW_BLOCK_THIN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undCLASSIC><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_CLASSIC" target=_parent class=ISymbol>ARROW_CLASSIC</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undCLASSIC_undTHIN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_CLASSIC_THIN" target=_parent class=ISymbol>ARROW_CLASSIC_THIN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undDIAMOND><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_DIAMOND" target=_parent class=ISymbol>ARROW_DIAMOND</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undDIAMOND_undTHIN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_DIAMOND_THIN" target=_parent class=ISymbol>ARROW_DIAMOND_THIN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undOPEN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_OPEN" target=_parent class=ISymbol>ARROW_OPEN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undOPEN_undTHIN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_OPEN_THIN" target=_parent class=ISymbol>ARROW_OPEN_THIN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undOVAL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_OVAL" target=_parent class=ISymbol>ARROW_OVAL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_SIZE" target=_parent class=ISymbol>ARROW_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undSPACING><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_SPACING" target=_parent class=ISymbol>ARROW_SPACING</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_WIDTH" target=_parent class=ISymbol>ARROW_WIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_askZoomResource><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.askZoomResource" target=_parent class=ISymbol>askZoomResource</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_aspect><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.aspect" target=_parent class=ISymbol>aspect</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_async><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.async" target=_parent class=ISymbol>async</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_attachParent><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.attachParent" target=_parent class=ISymbol>attachParent</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_attr><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.attr" target=_parent class=ISymbol>attr</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_Attribute_spcCycling><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.Attribute_Cycling" target=_parent class=ISymbol>Attribute Cycling</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_augmentBoundingBox><div class=IEntry><a href="javascript:searchResults.Toggle('SR_augmentBoundingBox')" class=ISymbol>augmentBoundingBox</a><div class=ISubIndex><a href="../files/shape/mxArrow-js.html#mxArrow.augmentBoundingBox" target=_parent class=IParent>mxArrow</a><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.augmentBoundingBox" target=_parent class=IParent>mxArrowConnector</a><a href="../files/shape/mxConnector-js.html#mxConnector.augmentBoundingBox" target=_parent class=IParent>mxConnector</a><a href="../files/shape/mxShape-js.html#mxShape.augmentBoundingBox" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_autoExpand><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.autoExpand" target=_parent class=ISymbol>autoExpand</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_autoExtend><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.autoExtend" target=_parent class=ISymbol>autoExtend</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_Autolayout><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.Autolayout" target=_parent class=ISymbol>Autolayout</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_autoOrigin><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.autoOrigin" target=_parent class=ISymbol>autoOrigin</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_autoRadius><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.autoRadius" target=_parent class=ISymbol>autoRadius</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_autoSaveDelay><div class=IEntry><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.autoSaveDelay" target=_parent class=ISymbol>autoSaveDelay</a>, <span class=IParent>mxAutoSaveManager</span></div></div><div class=SRResult id=SR_autoSaveThreshold><div class=IEntry><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.autoSaveThreshold" target=_parent class=ISymbol>autoSaveThreshold</a>, <span class=IParent>mxAutoSaveManager</span></div></div><div class=SRResult id=SR_autoSaveThrottle><div class=IEntry><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.autoSaveThrottle" target=_parent class=ISymbol>autoSaveThrottle</a>, <span class=IParent>mxAutoSaveManager</span></div></div><div class=SRResult id=SR_autoscroll><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.autoscroll" target=_parent class=ISymbol>autoscroll</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR2_autoScroll><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.autoScroll" target=_parent class=ISymbol>autoScroll</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_autoSize><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.autoSize" target=_parent class=ISymbol>autoSize</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_autoSizeCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.autoSizeCell" target=_parent class=ISymbol>autoSizeCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_autoSizeCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.autoSizeCells" target=_parent class=ISymbol>autoSizeCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_autoSizeCellsOnAdd><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.autoSizeCellsOnAdd" target=_parent class=ISymbol>autoSizeCellsOnAdd</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_avoid><div class=IEntry><a href="../files/layout/mxEdgeLabelLayout-js.html#mxEdgeLabelLayout.avoid" target=_parent class=ISymbol>avoid</a>, <span class=IParent>mxEdgeLabelLayout</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralB.html b/docs/js-api/search/GeneralB.html
index 7064ba5b3..540a7d110 100644
--- a/docs/js-api/search/GeneralB.html
+++ b/docs/js-api/search/GeneralB.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Backend_spcIntegration><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.Backend_Integration" target=_parent class=ISymbol>Backend Integration</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_backgroundColor><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.backgroundColor" target=_parent class=ISymbol>backgroundColor</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_backgroundImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.backgroundImage" target=_parent class=ISymbol>backgroundImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_baseDomain><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.baseDomain" target=_parent class=ISymbol>baseDomain</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_basePath><div class=IEntry><a href="../files/mxClient-js.html#mxClient.basePath" target=_parent class=ISymbol>basePath</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_baseSpacingBottom><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.baseSpacingBottom" target=_parent class=ISymbol>baseSpacingBottom</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_baseSpacingLeft><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.baseSpacingLeft" target=_parent class=ISymbol>baseSpacingLeft</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_baseSpacingRight><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.baseSpacingRight" target=_parent class=ISymbol>baseSpacingRight</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_baseSpacingTop><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.baseSpacingTop" target=_parent class=ISymbol>baseSpacingTop</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_baseUrl><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.baseUrl" target=_parent class=ISymbol>baseUrl</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_BEFORE_undADD_undVERTEX><div class=IEntry><a href="javascript:searchResults.Toggle('SR_BEFORE_undADD_undVERTEX')" class=ISymbol>BEFORE_ADD_VERTEX</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.BEFORE_ADD_VERTEX" target=_parent class=IParent>mxEditor.<wbr>mxEvent</a><a href="../files/util/mxEvent-js.html#mxEvent.BEFORE_ADD_VERTEX" target=_parent class=IParent>mxEvent</a></div></div></div><div class=SRResult id=SR_BEFORE_undUNDO><div class=IEntry><a href="javascript:searchResults.Toggle('SR_BEFORE_undUNDO')" class=ISymbol>BEFORE_UNDO</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.BEFORE_UNDO" target=_parent class=IParent>mxEvent</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.BEFORE_UNDO" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_beforeDecode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_beforeDecode')" class=ISymbol>beforeDecode</a><div class=ISubIndex><a href="../files/io/mxCellCodec-js.html#mxCellCodec.beforeDecode" target=_parent class=IParent>mxCellCodec</a><a href="../files/io/mxChildChangeCodec-js.html#mxChildChangeCodec.beforeDecode" target=_parent class=IParent>mxChildChangeCodec</a><a href="../files/io/mxEditorCodec-js.html#mxEditorCodec.beforeDecode" target=_parent class=IParent>mxEditorCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.beforeDecode" target=_parent class=IParent>mxObjectCodec</a><a href="../files/io/mxRootChangeCodec-js.html#mxRootChangeCodec.beforeDecode" target=_parent class=IParent>mxRootChangeCodec</a></div></div></div><div class=SRResult id=SR_beforeEncode><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.beforeEncode" target=_parent class=ISymbol>beforeEncode</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_beforePaint><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.beforePaint" target=_parent class=ISymbol>beforePaint</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_beforeUndo><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.beforeUndo" target=_parent class=ISymbol>beforeUndo</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_begin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_begin')" class=ISymbol>begin</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.begin" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.begin" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.begin" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.begin" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_BEGIN_undUPDATE><div class=IEntry><a href="javascript:searchResults.Toggle('SR_BEGIN_undUPDATE')" class=ISymbol>BEGIN_UPDATE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.BEGIN_UPDATE" target=_parent class=IParent>mxEvent</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.BEGIN_UPDATE" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_beginUpdate><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.beginUpdate" target=_parent class=ISymbol>beginUpdate</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_bends><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.bends" target=_parent class=ISymbol>bends</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_bgNodes><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.bgNodes" target=_parent class=ISymbol>bgNodes</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_binary><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.binary" target=_parent class=ISymbol>binary</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_bind><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.bind" target=_parent class=ISymbol>bind</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_bindAction><div class=IEntry><a href="../files/editor/mxDefaultKeyHandler-js.html#mxDefaultKeyHandler.bindAction" target=_parent class=ISymbol>bindAction</a>, <span class=IParent>mxDefaultKeyHandler</span></div></div><div class=SRResult id=SR_bindControlKey><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.bindControlKey" target=_parent class=ISymbol>bindControlKey</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_bindControlShiftKey><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.bindControlShiftKey" target=_parent class=ISymbol>bindControlShiftKey</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_bindKey><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.bindKey" target=_parent class=ISymbol>bindKey</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_bindShiftKey><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.bindShiftKey" target=_parent class=ISymbol>bindShiftKey</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_blurEnabled><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.blurEnabled" target=_parent class=ISymbol>blurEnabled</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_body><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.body" target=_parent class=ISymbol>body</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_border><div class=IEntry><a href="javascript:searchResults.Toggle('SR_border')" class=ISymbol>border</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.border" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxOutline-js.html#mxOutline.border" target=_parent class=IParent>mxOutline</a><a href="../files/util/mxPanningManager-js.html#mxPanningManager.border" target=_parent class=IParent>mxPanningManager</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.border" target=_parent class=IParent>mxPartitionLayout</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.border" target=_parent class=IParent>mxPrintPreview</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.border" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_borderCollapse><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.borderCollapse" target=_parent class=ISymbol>borderCollapse</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_borderColor><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.borderColor" target=_parent class=ISymbol>borderColor</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_boundingBox><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.boundingBox" target=_parent class=ISymbol>boundingBox</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_bounds><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.bounds" target=_parent class=ISymbol>bounds</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_br><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.br" target=_parent class=ISymbol>br</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_bridge><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.bridge" target=_parent class=ISymbol>bridge</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_bubbling><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.bubbling" target=_parent class=ISymbol>bubbling</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_buffer><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.buffer" target=_parent class=ISymbol>buffer</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_button><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.button" target=_parent class=ISymbol>button</a>, <span class=IParent>mxUtils</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralC.html b/docs/js-api/search/GeneralC.html
index c3e68d85e..4f15e1342 100644
--- a/docs/js-api/search/GeneralC.html
+++ b/docs/js-api/search/GeneralC.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_cacheEnabled><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.cacheEnabled" target=_parent class=ISymbol>cacheEnabled</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_cacheOffsetSize><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.cacheOffsetSize" target=_parent class=ISymbol>cacheOffsetSize</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_calcAttraction><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.calcAttraction" target=_parent class=ISymbol>calcAttraction</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_calcPositions><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.calcPositions" target=_parent class=ISymbol>calcPositions</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_calcRepulsion><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.calcRepulsion" target=_parent class=ISymbol>calcRepulsion</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_calcRowDims><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.calcRowDims" target=_parent class=ISymbol>calcRowDims</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_calculateCrossings><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.calculateCrossings" target=_parent class=ISymbol>calculateCrossings</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_calculatedWeightedValue><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.calculatedWeightedValue" target=_parent class=ISymbol>calculatedWeightedValue</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_calculateRankCrossing><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.calculateRankCrossing" target=_parent class=ISymbol>calculateRankCrossing</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_calculateWidestRank><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.calculateWidestRank" target=_parent class=ISymbol>calculateWidestRank</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_canExportCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.canExportCell" target=_parent class=ISymbol>canExportCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_canImportCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.canImportCell" target=_parent class=ISymbol>canImportCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_canRedo><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.canRedo" target=_parent class=ISymbol>canRedo</a>, <span class=IParent>mxUndoManager</span></div></div><div class=SRResult id=SR_canUndo><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.canUndo" target=_parent class=ISymbol>canUndo</a>, <span class=IParent>mxUndoManager</span></div></div><div class=SRResult id=SR_captureDocumentGesture><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.captureDocumentGesture" target=_parent class=ISymbol>captureDocumentGesture</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_cascadeOpacity><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cascadeOpacity')" class=ISymbol>cascadeOpacity</a><div class=ISubIndex><a href="../files/util/mxEffects-js.html#mxEffects.cascadeOpacity" target=_parent class=IParent>mxEffects</a><a href="../files/util/mxUtils-js.html#mxUtils.cascadeOpacity" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_cell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cell')" class=ISymbol>cell</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#MedianCellSorter.cell" target=_parent class=IParent>MedianCellSorter</a><a href="../files/view/mxCellState-js.html#mxCellState.cell" target=_parent class=IParent>mxCellState</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.cell" target=_parent class=IParent>mxGraphHierarchyNode</a><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.cell" target=_parent class=IParent>WeightedCellSorter</a></div></div></div><div class=SRResult id=SR_Cell_spcalignment_spcand_spcorientation><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Cell_alignment_and_orientation" target=_parent class=ISymbol>Cell alignment and orientation</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_Cell_spccloning_cominsertion_spcand_spcremoval><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Cell_cloning,insertion_and_removal" target=_parent class=ISymbol>Cell cloning,insertion and removal</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_Cell_spcconnecting_spcand_spcconnection_spcconstraints><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Cell_connecting_and_connection_constraints" target=_parent class=ISymbol>Cell connecting and connection constraints</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_Cell_spcmoving><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Cell_moving" target=_parent class=ISymbol>Cell moving</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_Cell_spcretrieval><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Cell_retrieval" target=_parent class=ISymbol>Cell retrieval</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_Cell_spcsizing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Cell_sizing" target=_parent class=ISymbol>Cell sizing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_Cell_spcstyles><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Cell_styles" target=_parent class=ISymbol>Cell styles</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_Cell_spcvisibility><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Cell_visibility" target=_parent class=ISymbol>Cell visibility</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_CELL_undCONNECTED><div class=IEntry><a href="javascript:searchResults.Toggle('SR_CELL_undCONNECTED')" class=ISymbol>CELL_CONNECTED</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.CELL_CONNECTED" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CELL_CONNECTED" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_cellAdded><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cellAdded')" class=ISymbol>cellAdded</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.cellAdded" target=_parent class=IParent>mxGraphModel</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.cellAdded" target=_parent class=IParent>mxGraphSelectionModel</a></div></div></div><div class=SRResult id=SR_cellCloned><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.cellCloned" target=_parent class=ISymbol>cellCloned</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_cellConnected><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellConnected" target=_parent class=ISymbol>cellConnected</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellEditor><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellEditor" target=_parent class=ISymbol>cellEditor</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellLabelChanged><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellLabelChanged" target=_parent class=ISymbol>cellLabelChanged</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellLocation><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.cellLocation" target=_parent class=ISymbol>cellLocation</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_cellRemoved><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cellRemoved')" class=ISymbol>cellRemoved</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.cellRemoved" target=_parent class=IParent>mxGraphModel</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.cellRemoved" target=_parent class=IParent>mxGraphSelectionModel</a></div></div></div><div class=SRResult id=SR_cellRenderer><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellRenderer" target=_parent class=ISymbol>cellRenderer</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellResized><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellResized" target=_parent class=ISymbol>cellResized</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cells')" class=ISymbol>cells</a><div class=ISubIndex><a href="../files/util/mxClipboard-js.html#mxClipboard.cells" target=_parent class=IParent>mxClipboard</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.cells" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxMorphing-js.html#mxMorphing.cells" target=_parent class=IParent>mxMorphing</a></div></div></div><div class=SRResult id=SR_CELLS_undADDED><div class=IEntry><a href="javascript:searchResults.Toggle('SR_CELLS_undADDED')" class=ISymbol>CELLS_ADDED</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.CELLS_ADDED" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CELLS_ADDED" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_CELLS_undFOLDED><div class=IEntry><a href="javascript:searchResults.Toggle('SR_CELLS_undFOLDED')" class=ISymbol>CELLS_FOLDED</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.CELLS_FOLDED" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CELLS_FOLDED" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_CELLS_undMOVED><div class=IEntry><a href="javascript:searchResults.Toggle('SR_CELLS_undMOVED')" class=ISymbol>CELLS_MOVED</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.CELLS_MOVED" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CELLS_MOVED" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_CELLS_undORDERED><div class=IEntry><a href="javascript:searchResults.Toggle('SR_CELLS_undORDERED')" class=ISymbol>CELLS_ORDERED</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.CELLS_ORDERED" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CELLS_ORDERED" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_CELLS_undREMOVED><div class=IEntry><a href="javascript:searchResults.Toggle('SR_CELLS_undREMOVED')" class=ISymbol>CELLS_REMOVED</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.CELLS_REMOVED" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CELLS_REMOVED" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_CELLS_undRESIZED><div class=IEntry><a href="javascript:searchResults.Toggle('SR_CELLS_undRESIZED')" class=ISymbol>CELLS_RESIZED</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.CELLS_RESIZED" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CELLS_RESIZED" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_CELLS_undTOGGLED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CELLS_TOGGLED" target=_parent class=ISymbol>CELLS_TOGGLED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_cellsAdded><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cellsAdded')" class=ISymbol>cellsAdded</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.cellsAdded" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.cellsAdded" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_cellsBendable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsBendable" target=_parent class=ISymbol>cellsBendable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsCloneable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsCloneable" target=_parent class=ISymbol>cellsCloneable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsDeletable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsDeletable" target=_parent class=ISymbol>cellsDeletable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsDisconnectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsDisconnectable" target=_parent class=ISymbol>cellsDisconnectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsEditable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsEditable" target=_parent class=ISymbol>cellsEditable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsFolded><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsFolded" target=_parent class=ISymbol>cellsFolded</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellSizeUpdated><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellSizeUpdated" target=_parent class=ISymbol>cellSizeUpdated</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsLocked><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsLocked" target=_parent class=ISymbol>cellsLocked</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsMovable" target=_parent class=ISymbol>cellsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsMoved><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cellsMoved')" class=ISymbol>cellsMoved</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.cellsMoved" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.cellsMoved" target=_parent class=IParent>mxLayoutManager</a></div></div></div><div class=SRResult id=SR_cellsOrdered><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsOrdered" target=_parent class=ISymbol>cellsOrdered</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsRemoved><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsRemoved" target=_parent class=ISymbol>cellsRemoved</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsResizable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsResizable" target=_parent class=ISymbol>cellsResizable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsResized><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cellsResized')" class=ISymbol>cellsResized</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.cellsResized" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.cellsResized" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.cellsResized" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_cellsSelectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsSelectable" target=_parent class=ISymbol>cellsSelectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsToggled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsToggled" target=_parent class=ISymbol>cellsToggled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_center><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.center" target=_parent class=ISymbol>center</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_centerZoom><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.centerZoom" target=_parent class=ISymbol>centerZoom</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_CHANGE><div class=IEntry><a href="javascript:searchResults.Toggle('SR_CHANGE')" class=ISymbol>CHANGE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.CHANGE" target=_parent class=IParent>mxEvent</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.CHANGE" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.mxEvent.CHANGE" target=_parent class=IParent>mxGraphSelectionModel.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_changeHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_changeHandler')" class=ISymbol>changeHandler</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.changeHandler" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.changeHandler" target=_parent class=IParent>mxConnectionHandler</a></div></div></div><div class=SRResult id=SR_changePoints><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.changePoints" target=_parent class=ISymbol>changePoints</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_changes><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.changes" target=_parent class=ISymbol>changes</a>, <span class=IParent>mxUndoableEdit</span></div></div><div class=SRResult id=SR_changeSelection><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.changeSelection" target=_parent class=ISymbol>changeSelection</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_changeTerminalPoint><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.changeTerminalPoint" target=_parent class=ISymbol>changeTerminalPoint</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_channelBuffer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_channelBuffer')" class=ISymbol>channelBuffer</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.channelBuffer" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.channelBuffer" target=_parent class=IParent>mxCoordinateAssignment</a></div></div></div><div class=SRResult id=SR_check><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.check" target=_parent class=ISymbol>check</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_checkBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_checkBounds')" class=ISymbol>checkBounds</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.checkBounds" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.checkBounds" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_checkConstraints><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.checkConstraints" target=_parent class=ISymbol>checkConstraints</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_checkEventSource><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.checkEventSource" target=_parent class=ISymbol>checkEventSource</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_checkLabelHandle><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.checkLabelHandle" target=_parent class=ISymbol>checkLabelHandle</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_checkNeighbors><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.checkNeighbors" target=_parent class=ISymbol>checkNeighbors</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_checkOverlap><div class=IEntry><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.checkOverlap" target=_parent class=ISymbol>checkOverlap</a>, <span class=IParent>mxParallelEdgeLayout</span></div></div><div class=SRResult id=SR_checkPlaceholderStyles><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.checkPlaceholderStyles" target=_parent class=ISymbol>checkPlaceholderStyles</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_checkPreview><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.checkPreview" target=_parent class=ISymbol>checkPreview</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_checkTerminal><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.checkTerminal" target=_parent class=ISymbol>checkTerminal</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_checkTolerance><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.checkTolerance" target=_parent class=ISymbol>checkTolerance</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_checkType><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.checkType" target=_parent class=ISymbol>checkType</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_children><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.children" target=_parent class=ISymbol>children</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_circle><div class=IEntry><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.circle" target=_parent class=ISymbol>circle</a>, <span class=IParent>mxCircleLayout</span></div></div><div class=SRResult id=SR_clear><div class=IEntry><a href="javascript:searchResults.Toggle('SR_clear')" class=ISymbol>clear</a><div class=ISubIndex><a href="../files/util/mxDictionary-js.html#mxDictionary.clear" target=_parent class=IParent>mxDictionary</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.clear" target=_parent class=IParent>mxGraphModel</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.clear" target=_parent class=IParent>mxGraphSelectionModel</a><a href="../files/view/mxGraphView-js.html#mxGraphView.clear" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxObjectIdentity-js.html#mxObjectIdentity.clear" target=_parent class=IParent>mxObjectIdentity</a><a href="../files/shape/mxShape-js.html#mxShape.clear" target=_parent class=IParent>mxShape</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.clear" target=_parent class=IParent>mxUndoManager</a></div></div></div><div class=SRResult id=SR2_CLEAR><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_CLEAR')" class=ISymbol>CLEAR</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.CLEAR" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.mxEvent.CLEAR" target=_parent class=IParent>mxUndoManager.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_clearCellOverlays><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.clearCellOverlays" target=_parent class=ISymbol>clearCellOverlays</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_clearSelection><div class=IEntry><a href="javascript:searchResults.Toggle('SR_clearSelection')" class=ISymbol>clearSelection</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.clearSelection" target=_parent class=IParent>mxCellEditor</a><a href="../files/view/mxGraph-js.html#mxGraph.clearSelection" target=_parent class=IParent>mxGraph</a><a href="../files/util/mxUtils-js.html#mxUtils.clearSelection" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_clearSelectionOnBackground><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.clearSelectionOnBackground" target=_parent class=ISymbol>clearSelectionOnBackground</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_click><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.click" target=_parent class=ISymbol>click</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR2_CLICK><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_CLICK')" class=ISymbol>CLICK</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.mxEvent.CLICK" target=_parent class=IParent>mxCellOverlay.<wbr>mxEvent</a><a href="../files/util/mxEvent-js.html#mxEvent.CLICK" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CLICK" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_clipping><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.clipping" target=_parent class=ISymbol>clipping</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_clone><div class=IEntry><a href="javascript:searchResults.Toggle('SR_clone')" class=ISymbol>clone</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.clone" target=_parent class=IParent>mxCell</a><a href="../files/view/mxCellState-js.html#mxCellState.clone" target=_parent class=IParent>mxCellState</a><a href="../files/util/mxPoint-js.html#mxPoint.clone" target=_parent class=IParent>mxPoint</a><a href="../files/util/mxUtils-js.html#mxUtils.clone" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_cloneCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cloneCell')" class=ISymbol>cloneCell</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.cloneCell" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.cloneCell" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_cloneCellImpl><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.cloneCellImpl" target=_parent class=ISymbol>cloneCellImpl</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_cloneCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cloneCells')" class=ISymbol>cloneCells</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.cloneCells" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.cloneCells" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_cloneEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cloneEnabled')" class=ISymbol>cloneEnabled</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.cloneEnabled" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.cloneEnabled" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_cloneInvalidEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cloneInvalidEdges" target=_parent class=ISymbol>cloneInvalidEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_clonePreviewState><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.clonePreviewState" target=_parent class=ISymbol>clonePreviewState</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_cloneTemplate><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.cloneTemplate" target=_parent class=ISymbol>cloneTemplate</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_cloneValue><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.cloneValue" target=_parent class=ISymbol>cloneValue</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_close><div class=IEntry><a href="javascript:searchResults.Toggle('SR_close')" class=ISymbol>close</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.close" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.close" target=_parent class=IParent>mxPrintPreview</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.close" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR2_CLOSE><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_CLOSE')" class=ISymbol>CLOSE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.CLOSE" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.CLOSE" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_closeDocument><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.closeDocument" target=_parent class=ISymbol>closeDocument</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_closeImage><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.closeImage" target=_parent class=ISymbol>closeImage</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_closeOp><div class=IEntry><a href="javascript:searchResults.Toggle('SR_closeOp')" class=ISymbol>closeOp</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.closeOp" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.closeOp" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_closeResource><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.closeResource" target=_parent class=ISymbol>closeResource</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_codecs><div class=IEntry><a href="../files/io/mxCodecRegistry-js.html#mxCodecRegistry.codecs" target=_parent class=ISymbol>codecs</a>, <span class=IParent>mxCodecRegistry</span></div></div><div class=SRResult id=SR_collapsed><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.collapsed" target=_parent class=ISymbol>collapsed</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_collapsedImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.collapsedImage" target=_parent class=ISymbol>collapsedImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_collapsedStateForCellChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.collapsedStateForCellChanged" target=_parent class=ISymbol>collapsedStateForCellChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_collapseExpandResource><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.collapseExpandResource" target=_parent class=ISymbol>collapseExpandResource</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_collapseToPreferredSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.collapseToPreferredSize" target=_parent class=ISymbol>collapseToPreferredSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_compare><div class=IEntry><a href="javascript:searchResults.Toggle('SR_compare')" class=ISymbol>compare</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#MedianCellSorter.compare" target=_parent class=IParent>MedianCellSorter</a><a href="../files/model/mxCellPath-js.html#mxCellPath.compare" target=_parent class=IParent>mxCellPath</a><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.compare" target=_parent class=IParent>WeightedCellSorter</a></div></div></div><div class=SRResult id=SR_compressed><div class=IEntry><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.compressed" target=_parent class=ISymbol>compressed</a>, <span class=IParent>mxXmlCanvas2D</span></div></div><div class=SRResult id=SR_computeAspect><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.computeAspect" target=_parent class=ISymbol>computeAspect</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_config><div class=IEntry><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.config" target=_parent class=ISymbol>config</a>, <span class=IParent>mxDefaultPopupMenu</span></div></div><div class=SRResult id=SR_configure><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.configure" target=_parent class=ISymbol>configure</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_configureCanvas><div class=IEntry><a href="javascript:searchResults.Toggle('SR_configureCanvas')" class=ISymbol>configureCanvas</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.configureCanvas" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.configureCanvas" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_configureShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.configureShape" target=_parent class=ISymbol>configureShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_confirm><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.confirm" target=_parent class=ISymbol>confirm</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_connect><div class=IEntry><a href="javascript:searchResults.Toggle('SR_connect')" class=ISymbol>connect</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.connect" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.connect" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.connect" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR2_CONNECT><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_CONNECT')" class=ISymbol>CONNECT</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mxEvent.CONNECT" target=_parent class=IParent>mxConnectionHandler.<wbr>mxEvent</a><a href="../files/util/mxEvent-js.html#mxEvent.CONNECT" target=_parent class=IParent>mxEvent</a></div></div></div><div class=SRResult id=SR_CONNECT_undCELL><div class=IEntry><a href="javascript:searchResults.Toggle('SR_CONNECT_undCELL')" class=ISymbol>CONNECT_CELL</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.CONNECT_CELL" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.CONNECT_CELL" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_CONNECT_undHANDLE_undFILLCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CONNECT_HANDLE_FILLCOLOR" target=_parent class=ISymbol>CONNECT_HANDLE_FILLCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_connectable><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.connectable" target=_parent class=ISymbol>connectable</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_connectableEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.connectableEdges" target=_parent class=ISymbol>connectableEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_connectCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.connectCell" target=_parent class=ISymbol>connectCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_connectIconOffset><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.connectIconOffset" target=_parent class=ISymbol>connectIconOffset</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_connectImage><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.connectImage" target=_parent class=ISymbol>connectImage</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_connectOnDrop><div class=IEntry><a href="javascript:searchResults.Toggle('SR_connectOnDrop')" class=ISymbol>connectOnDrop</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.connectOnDrop" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.connectOnDrop" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_connectsAsSource><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.connectsAsSource" target=_parent class=ISymbol>connectsAsSource</a>, <span class=IParent>mxGraphHierarchyNode</span></div></div><div class=SRResult id=SR_connectsAsTarget><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.connectsAsTarget" target=_parent class=ISymbol>connectsAsTarget</a>, <span class=IParent>mxGraphHierarchyNode</span></div></div><div class=SRResult id=SR_consoleName><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.consoleName" target=_parent class=ISymbol>consoleName</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_constrainChild><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.constrainChild" target=_parent class=ISymbol>constrainChild</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_constrainChildCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.constrainChildCells" target=_parent class=ISymbol>constrainChildCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_constrainChildren><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.constrainChildren" target=_parent class=ISymbol>constrainChildren</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_constrainGroupByChildren><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.constrainGroupByChildren" target=_parent class=ISymbol>constrainGroupByChildren</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_constrainRelativeChildren><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.constrainRelativeChildren" target=_parent class=ISymbol>constrainRelativeChildren</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_CONSTRAINT_undHIGHLIGHT_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CONSTRAINT_HIGHLIGHT_SIZE" target=_parent class=ISymbol>CONSTRAINT_HIGHLIGHT_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_constraintHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_constraintHandler')" class=ISymbol>constraintHandler</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.constraintHandler" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.constraintHandler" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_constraints><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.constraints" target=_parent class=ISymbol>constraints</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_consume><div class=IEntry><a href="javascript:searchResults.Toggle('SR_consume')" class=ISymbol>consume</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.consume" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxEventObject-js.html#mxEventObject.consume" target=_parent class=IParent>mxEventObject</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.consume" target=_parent class=IParent>mxMouseEvent</a></div></div></div><div class=SRResult id=SR_consumeCycleAttribute><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.consumeCycleAttribute" target=_parent class=ISymbol>consumeCycleAttribute</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_consumed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_consumed')" class=ISymbol>consumed</a><div class=ISubIndex><a href="../files/util/mxEventObject-js.html#mxEventObject.consumed" target=_parent class=IParent>mxEventObject</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.consumed" target=_parent class=IParent>mxMouseEvent</a></div></div></div><div class=SRResult id=SR_consumeMouseEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_consumeMouseEvent')" class=ISymbol>consumeMouseEvent</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.consumeMouseEvent" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.consumeMouseEvent" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_consumePanningTrigger><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.consumePanningTrigger" target=_parent class=ISymbol>consumePanningTrigger</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_container><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.container" target=_parent class=ISymbol>container</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_contains><div class=IEntry><a href="javascript:searchResults.Toggle('SR_contains')" class=ISymbol>contains</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.contains" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxUtils-js.html#mxUtils.contains" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_containsValidationErrorsResource><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.containsValidationErrorsResource" target=_parent class=ISymbol>containsValidationErrorsResource</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_content><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.content" target=_parent class=ISymbol>content</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_contentHeightCorrection><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.contentHeightCorrection" target=_parent class=ISymbol>contentHeightCorrection</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_controlKeys><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.controlKeys" target=_parent class=ISymbol>controlKeys</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_Controls_spcand_spcHandlers><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.Controls_and_Handlers" target=_parent class=ISymbol>Controls and Handlers</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_controlShiftKeys><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.controlShiftKeys" target=_parent class=ISymbol>controlShiftKeys</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_convert><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.convert" target=_parent class=ISymbol>convert</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_convertAttributeFromXml><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.convertAttributeFromXml" target=_parent class=ISymbol>convertAttributeFromXml</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_convertAttributeToXml><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.convertAttributeToXml" target=_parent class=ISymbol>convertAttributeToXml</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_converter><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.converter" target=_parent class=ISymbol>converter</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_convertHtml><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.convertHtml" target=_parent class=ISymbol>convertHtml</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_convertPoint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_convertPoint')" class=ISymbol>convertPoint</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.convertPoint" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.convertPoint" target=_parent class=IParent>mxElbowEdgeHandler</a><a href="../files/util/mxUtils-js.html#mxUtils.convertPoint" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_convertValueToString><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.convertValueToString" target=_parent class=ISymbol>convertValueToString</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_convertWaypoint><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.convertWaypoint" target=_parent class=ISymbol>convertWaypoint</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_copy><div class=IEntry><a href="../files/util/mxClipboard-js.html#mxClipboard.copy" target=_parent class=ISymbol>copy</a>, <span class=IParent>mxClipboard</span></div></div><div class=SRResult id=SR_copyStyle><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.copyStyle" target=_parent class=ISymbol>copyStyle</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_count><div class=IEntry><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.count" target=_parent class=ISymbol>count</a>, <span class=IParent>mxCellStatePreview</span></div></div><div class=SRResult id=SR_counter><div class=IEntry><a href="../files/util/mxObjectIdentity-js.html#mxObjectIdentity.counter" target=_parent class=ISymbol>counter</a>, <span class=IParent>mxObjectIdentity</span></div></div><div class=SRResult id=SR_countError><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.countError" target=_parent class=ISymbol>countError</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_create><div class=IEntry><a href="javascript:searchResults.Toggle('SR_create')" class=ISymbol>create</a><div class=ISubIndex><a href="../files/model/mxCellPath-js.html#mxCellPath.create" target=_parent class=IParent>mxCellPath</a><a href="../files/shape/mxShape-js.html#mxShape.create" target=_parent class=IParent>mxShape</a><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.create" target=_parent class=IParent>mxXmlRequest</a></div></div></div><div class=SRResult id=SR_createBackgroundPageShape><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.createBackgroundPageShape" target=_parent class=ISymbol>createBackgroundPageShape</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_createBends><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createBends')" class=ISymbol>createBends</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#createBends" target=_parent class=IParent>Global</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createBends" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.createBends" target=_parent class=IParent>mxElbowEdgeHandler</a></div></div></div><div class=SRResult id=SR_createBoundingBox><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.createBoundingBox" target=_parent class=ISymbol>createBoundingBox</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_createBounds><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.createBounds" target=_parent class=ISymbol>createBounds</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_createCanvas><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.createCanvas" target=_parent class=ISymbol>createCanvas</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_createCellEditor><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createCellEditor" target=_parent class=ISymbol>createCellEditor</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createCellOverlays><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.createCellOverlays" target=_parent class=ISymbol>createCellOverlays</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_createCellRenderer><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createCellRenderer" target=_parent class=ISymbol>createCellRenderer</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createClip><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createClip" target=_parent class=ISymbol>createClip</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_createConditions><div class=IEntry><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.createConditions" target=_parent class=ISymbol>createConditions</a>, <span class=IParent>mxDefaultPopupMenu</span></div></div><div class=SRResult id=SR_createConnectionHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createConnectionHandler" target=_parent class=ISymbol>createConnectionHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createControl><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.createControl" target=_parent class=ISymbol>createControl</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_createControlClickHandler><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.createControlClickHandler" target=_parent class=ISymbol>createControlClickHandler</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_createCustomHandles><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createCustomHandles')" class=ISymbol>createCustomHandles</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createCustomHandles" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.createCustomHandles" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_createDashPattern><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createDashPattern" target=_parent class=ISymbol>createDashPattern</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_createDefaultEdgeStyle><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.createDefaultEdgeStyle" target=_parent class=ISymbol>createDefaultEdgeStyle</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_createDefaultVertexStyle><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.createDefaultVertexStyle" target=_parent class=ISymbol>createDefaultVertexStyle</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_createDiagramLayout><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createDiagramLayout" target=_parent class=ISymbol>createDiagramLayout</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createDiv><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createDiv" target=_parent class=ISymbol>createDiv</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_createDragElement><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.createDragElement" target=_parent class=ISymbol>createDragElement</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_createEdge><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createEdge')" class=ISymbol>createEdge</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.createEdge" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/editor/mxEditor-js.html#mxEditor.createEdge" target=_parent class=IParent>mxEditor</a><a href="../files/view/mxGraph-js.html#mxGraph.createEdge" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_createEdgeHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createEdgeHandler" target=_parent class=ISymbol>createEdgeHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createEdgeSegmentHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createEdgeSegmentHandler" target=_parent class=ISymbol>createEdgeSegmentHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createEdgeState><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.createEdgeState" target=_parent class=ISymbol>createEdgeState</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_createElbowEdgeHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createElbowEdgeHandler" target=_parent class=ISymbol>createElbowEdgeHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createElement><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createElement')" class=ISymbol>createElement</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createElement" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createElement" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.createElement" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_createFill><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createFill" target=_parent class=ISymbol>createFill</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createGhostPreview><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.createGhostPreview" target=_parent class=ISymbol>createGhostPreview</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_createGradientId><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createGradientId" target=_parent class=ISymbol>createGradientId</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_createGraph><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createGraph')" class=ISymbol>createGraph</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.createGraph" target=_parent class=IParent>mxEditor</a><a href="../files/view/mxOutline-js.html#mxOutline.createGraph" target=_parent class=IParent>mxOutline</a></div></div></div><div class=SRResult id=SR_createGraphHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createGraphHandler" target=_parent class=ISymbol>createGraphHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createGraphView><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createGraphView" target=_parent class=ISymbol>createGraphView</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createGroup><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createGroup" target=_parent class=ISymbol>createGroup</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createGroupCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createGroupCell" target=_parent class=ISymbol>createGroupCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createGuideShape><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.createGuideShape" target=_parent class=ISymbol>createGuideShape</a>, <span class=IParent>mxGuide</span></div></div><div class=SRResult id=SR_createHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createHandler" target=_parent class=ISymbol>createHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createHandlers><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createHandlers" target=_parent class=ISymbol>createHandlers</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createHandleShape><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createHandleShape" target=_parent class=ISymbol>createHandleShape</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_createHighlightShape><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.createHighlightShape" target=_parent class=ISymbol>createHighlightShape</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_createHtml><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createHtml')" class=ISymbol>createHtml</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxGraphView.createHtml" target=_parent class=IParent>mxGraphView</a><a href="../files/shape/mxImageShape-js.html#mxImageShape.createHtml" target=_parent class=IParent>mxImageShape</a><a href="../files/shape/mxShape-js.html#mxShape.createHtml" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_createHtmlPane><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.createHtmlPane" target=_parent class=ISymbol>createHtmlPane</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_createIcons><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.createIcons" target=_parent class=ISymbol>createIcons</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_createId><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.createId" target=_parent class=ISymbol>createId</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_createIds><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.createIds" target=_parent class=ISymbol>createIds</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_createImage><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.createImage" target=_parent class=ISymbol>createImage</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_createIndicatorShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.createIndicatorShape" target=_parent class=ISymbol>createIndicatorShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_createInternalCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createInternalCells')" class=ISymbol>createInternalCells</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.createInternalCells" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.createInternalCells" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_createLabel><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.createLabel" target=_parent class=ISymbol>createLabel</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_createLabelHandleShape><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createLabelHandleShape" target=_parent class=ISymbol>createLabelHandleShape</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_createLayoutManager><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createLayoutManager" target=_parent class=ISymbol>createLayoutManager</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createLine><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.createLine" target=_parent class=ISymbol>createLine</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_createMarker><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createMarker')" class=ISymbol>createMarker</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.createMarker" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/shape/mxConnector-js.html#mxConnector.createMarker" target=_parent class=IParent>mxConnector</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createMarker" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/shape/mxMarker-js.html#mxMarker.createMarker" target=_parent class=IParent>mxMarker</a></div></div></div><div class=SRResult id=SR_createMenu><div class=IEntry><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.createMenu" target=_parent class=ISymbol>createMenu</a>, <span class=IParent>mxDefaultPopupMenu</span></div></div><div class=SRResult id=SR_createMsXmlDocument><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.createMsXmlDocument" target=_parent class=ISymbol>createMsXmlDocument</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_createNode><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.createNode" target=_parent class=ISymbol>createNode</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_createPageSelector><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.createPageSelector" target=_parent class=ISymbol>createPageSelector</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_createPanningHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createPanningHandler" target=_parent class=ISymbol>createPanningHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createPanningManager><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createPanningManager" target=_parent class=ISymbol>createPanningManager</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createParentHighlightShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createParentHighlightShape')" class=ISymbol>createParentHighlightShape</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createParentHighlightShape" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.createParentHighlightShape" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_createPopupMenu><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createPopupMenu" target=_parent class=ISymbol>createPopupMenu</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createPopupMenuHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createPopupMenuHandler" target=_parent class=ISymbol>createPopupMenuHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createPreviewElement><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.createPreviewElement" target=_parent class=ISymbol>createPreviewElement</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_createPreviewShape><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.createPreviewShape" target=_parent class=ISymbol>createPreviewShape</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_createProperties><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createProperties" target=_parent class=ISymbol>createProperties</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createRect><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createRect" target=_parent class=ISymbol>createRect</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createRoot><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.createRoot" target=_parent class=ISymbol>createRoot</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_createSelectionCellsHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createSelectionCellsHandler" target=_parent class=ISymbol>createSelectionCellsHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createSelectionModel><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createSelectionModel" target=_parent class=ISymbol>createSelectionModel</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createSelectionShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createSelectionShape')" class=ISymbol>createSelectionShape</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createSelectionShape" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.createSelectionShape" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_createShadow><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createShadow')" class=ISymbol>createShadow</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createShadow" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createShadow" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_createShadowFill><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createShadowFill" target=_parent class=ISymbol>createShadowFill</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createShadowStroke><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createShadowStroke" target=_parent class=ISymbol>createShadowStroke</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createShape')" class=ISymbol>createShape</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.createShape" target=_parent class=IParent>mxCellHighlight</a><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.createShape" target=_parent class=IParent>mxCellRenderer</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.createShape" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxHandle-js.html#mxHandle.createShape" target=_parent class=IParent>mxHandle</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.createShape" target=_parent class=IParent>mxRubberband</a></div></div></div><div class=SRResult id=SR_createSizer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createSizer')" class=ISymbol>createSizer</a><div class=ISubIndex><a href="../files/view/mxOutline-js.html#mxOutline.createSizer" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.createSizer" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_createSizerShape><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.createSizerShape" target=_parent class=ISymbol>createSizerShape</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_createState><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createState')" class=ISymbol>createState</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.createState" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/view/mxGraphView-js.html#mxGraphView.createState" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_createStroke><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createStroke" target=_parent class=ISymbol>createStroke</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createStyle><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createStyle" target=_parent class=ISymbol>createStyle</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_createStylesheet><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createStylesheet" target=_parent class=ISymbol>createStylesheet</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createSubmenu><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.createSubmenu" target=_parent class=ISymbol>createSubmenu</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_createSvg><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createSvg')" class=ISymbol>createSvg</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxGraphView.createSvg" target=_parent class=IParent>mxGraphView</a><a href="../files/shape/mxShape-js.html#mxShape.createSvg" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_createSvgCanvas><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.createSvgCanvas" target=_parent class=ISymbol>createSvgCanvas</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_createSvgGradient><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createSvgGradient" target=_parent class=ISymbol>createSvgGradient</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_createSwimlaneLayout><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createSwimlaneLayout" target=_parent class=ISymbol>createSwimlaneLayout</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createSwimlaneManager><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createSwimlaneManager" target=_parent class=ISymbol>createSwimlaneManager</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createTarget><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.createTarget" target=_parent class=ISymbol>createTarget</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_createTargetVertex><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.createTargetVertex" target=_parent class=ISymbol>createTargetVertex</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_createTasks><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createTasks" target=_parent class=ISymbol>createTasks</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createText><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createText" target=_parent class=ISymbol>createText</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createTolerance><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.createTolerance" target=_parent class=ISymbol>createTolerance</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_createToolbar><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.createToolbar" target=_parent class=ISymbol>createToolbar</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_createTooltipHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createTooltipHandler" target=_parent class=ISymbol>createTooltipHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createTransparentFill><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createTransparentFill" target=_parent class=ISymbol>createTransparentFill</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createTransparentSvgRectangle><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.createTransparentSvgRectangle" target=_parent class=ISymbol>createTransparentSvgRectangle</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_createUndoableEdit><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.createUndoableEdit" target=_parent class=ISymbol>createUndoableEdit</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_createUrlConverter><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.createUrlConverter" target=_parent class=ISymbol>createUrlConverter</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_createVertex><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createVertex" target=_parent class=ISymbol>createVertex</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createVertexHandler><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.createVertexHandler" target=_parent class=ISymbol>createVertexHandler</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_createVirtualBend><div class=IEntry><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.createVirtualBend" target=_parent class=ISymbol>createVirtualBend</a>, <span class=IParent>mxElbowEdgeHandler</span></div></div><div class=SRResult id=SR_createVirtualBends><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.createVirtualBends" target=_parent class=ISymbol>createVirtualBends</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_createVml><div class=IEntry><a href="javascript:searchResults.Toggle('SR_createVml')" class=ISymbol>createVml</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxGraphView.createVml" target=_parent class=IParent>mxGraphView</a><a href="../files/shape/mxShape-js.html#mxShape.createVml" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_createVmlCanvas><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.createVmlCanvas" target=_parent class=ISymbol>createVmlCanvas</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_createVmlElement><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.createVmlElement" target=_parent class=ISymbol>createVmlElement</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_createVmlGroup><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.createVmlGroup" target=_parent class=ISymbol>createVmlGroup</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_createVmlPane><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.createVmlPane" target=_parent class=ISymbol>createVmlPane</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_createXmlDocument><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.createXmlDocument" target=_parent class=ISymbol>createXmlDocument</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_crossingStage><div class=IEntry><a href="javascript:searchResults.Toggle('SR_crossingStage')" class=ISymbol>crossingStage</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.crossingStage" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.crossingStage" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_currentBestCrossings><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.currentBestCrossings" target=_parent class=ISymbol>currentBestCrossings</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_currentColor><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.currentColor" target=_parent class=ISymbol>currentColor</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_currentDropTarget><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.currentDropTarget" target=_parent class=ISymbol>currentDropTarget</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_currentDx><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.currentDx" target=_parent class=ISymbol>currentDx</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_currentDy><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.currentDy" target=_parent class=ISymbol>currentDy</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_currentEdit><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.currentEdit" target=_parent class=ISymbol>currentEdit</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_currentFileResource><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.currentFileResource" target=_parent class=ISymbol>currentFileResource</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_currentGraph><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.currentGraph" target=_parent class=ISymbol>currentGraph</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_currentGuide><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.currentGuide" target=_parent class=ISymbol>currentGuide</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_currentPoint><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.currentPoint" target=_parent class=ISymbol>currentPoint</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_currentRoot><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.currentRoot" target=_parent class=ISymbol>currentRoot</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_currentX><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband.currentX" target=_parent class=ISymbol>currentX</a>, <span class=IParent>mxRubberband</span></div></div><div class=SRResult id=SR_currentXDelta><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.currentXDelta" target=_parent class=ISymbol>currentXDelta</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_currentY><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband.currentY" target=_parent class=ISymbol>currentY</a>, <span class=IParent>mxRubberband</span></div></div><div class=SRResult id=SR_cursor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cursor')" class=ISymbol>cursor</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.cursor" target=_parent class=IParent>mxCellOverlay</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.cursor" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxHandle-js.html#mxHandle.cursor" target=_parent class=IParent>mxHandle</a></div></div></div><div class=SRResult id=SR_CURSOR_undBEND_undHANDLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CURSOR_BEND_HANDLE" target=_parent class=ISymbol>CURSOR_BEND_HANDLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_CURSOR_undCONNECT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CURSOR_CONNECT" target=_parent class=ISymbol>CURSOR_CONNECT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_CURSOR_undLABEL_undHANDLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CURSOR_LABEL_HANDLE" target=_parent class=ISymbol>CURSOR_LABEL_HANDLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_CURSOR_undMOVABLE_undEDGE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CURSOR_MOVABLE_EDGE" target=_parent class=ISymbol>CURSOR_MOVABLE_EDGE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_CURSOR_undMOVABLE_undVERTEX><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CURSOR_MOVABLE_VERTEX" target=_parent class=ISymbol>CURSOR_MOVABLE_VERTEX</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_CURSOR_undTERMINAL_undHANDLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CURSOR_TERMINAL_HANDLE" target=_parent class=ISymbol>CURSOR_TERMINAL_HANDLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_CURSOR_undVIRTUAL_undBEND_undHANDLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CURSOR_VIRTUAL_BEND_HANDLE" target=_parent class=ISymbol>CURSOR_VIRTUAL_BEND_HANDLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_curveOp><div class=IEntry><a href="javascript:searchResults.Toggle('SR_curveOp')" class=ISymbol>curveOp</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.curveOp" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.curveOp" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_curveTo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_curveTo')" class=ISymbol>curveTo</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.curveTo" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.curveTo" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_CUSTOM_undHANDLE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CUSTOM_HANDLE" target=_parent class=ISymbol>CUSTOM_HANDLE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_cut><div class=IEntry><a href="../files/util/mxClipboard-js.html#mxClipboard.cut" target=_parent class=ISymbol>cut</a>, <span class=IParent>mxClipboard</span></div></div><div class=SRResult id=SR_cycleAttribute><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.cycleAttribute" target=_parent class=ISymbol>cycleAttribute</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_cycleAttributeIndex><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.cycleAttributeIndex" target=_parent class=ISymbol>cycleAttributeIndex</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_cycleAttributeName><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.cycleAttributeName" target=_parent class=ISymbol>cycleAttributeName</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_cycleAttributeValues><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.cycleAttributeValues" target=_parent class=ISymbol>cycleAttributeValues</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_cycleStage><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cycleStage')" class=ISymbol>cycleStage</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.cycleStage" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.cycleStage" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralD.html b/docs/js-api/search/GeneralD.html
index 9069a0a60..dd0f4b9b2 100644
--- a/docs/js-api/search/GeneralD.html
+++ b/docs/js-api/search/GeneralD.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_damper><div class=IEntry><a href="../files/util/mxPanningManager-js.html#mxPanningManager.damper" target=_parent class=ISymbol>damper</a>, <span class=IParent>mxPanningManager</span></div></div><div class=SRResult id=SR_dblClick><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.dblClick" target=_parent class=ISymbol>dblClick</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_dblClickAction><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.dblClickAction" target=_parent class=ISymbol>dblClickAction</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_dblClickRemoveEnabled><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.dblClickRemoveEnabled" target=_parent class=ISymbol>dblClickRemoveEnabled</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_debug><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.debug" target=_parent class=ISymbol>debug</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR2_DEBUG><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.DEBUG" target=_parent class=ISymbol>DEBUG</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_decode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_decode')" class=ISymbol>decode</a><div class=ISubIndex><a href="../files/io/mxCodec-js.html#mxCodec.decode" target=_parent class=IParent>mxCodec</a><a href="../files/io/mxDefaultKeyHandlerCodec-js.html#mxDefaultKeyHandlerCodec.decode" target=_parent class=IParent>mxDefaultKeyHandlerCodec</a><a href="../files/io/mxDefaultPopupMenuCodec-js.html#mxDefaultPopupMenuCodec.decode" target=_parent class=IParent>mxDefaultPopupMenuCodec</a><a href="../files/io/mxDefaultToolbarCodec-js.html#mxDefaultToolbarCodec.decode" target=_parent class=IParent>mxDefaultToolbarCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.decode" target=_parent class=IParent>mxObjectCodec</a><a href="../files/io/mxStylesheetCodec-js.html#mxStylesheetCodec.decode" target=_parent class=IParent>mxStylesheetCodec</a></div></div></div><div class=SRResult id=SR_decodeAttribute><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.decodeAttribute" target=_parent class=ISymbol>decodeAttribute</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_decodeAttributes><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.decodeAttributes" target=_parent class=ISymbol>decodeAttributes</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_decodeCell><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.decodeCell" target=_parent class=ISymbol>decodeCell</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_decodeChild><div class=IEntry><a href="javascript:searchResults.Toggle('SR_decodeChild')" class=ISymbol>decodeChild</a><div class=ISubIndex><a href="../files/io/mxEditorCodec-js.html#mxEditorCodec.decodeChild" target=_parent class=IParent>mxEditorCodec</a><a href="../files/io/mxModelCodec-js.html#mxModelCodec.decodeChild" target=_parent class=IParent>mxModelCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.decodeChild" target=_parent class=IParent>mxObjectCodec</a></div></div></div><div class=SRResult id=SR_decodeChildren><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.decodeChildren" target=_parent class=ISymbol>decodeChildren</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_decodeNode><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.decodeNode" target=_parent class=ISymbol>decodeNode</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_decodeRoot><div class=IEntry><a href="../files/io/mxModelCodec-js.html#mxModelCodec.decodeRoot" target=_parent class=ISymbol>decodeRoot</a>, <span class=IParent>mxModelCodec</span></div></div><div class=SRResult id=SR_decodeSimulateValues><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.decodeSimulateValues" target=_parent class=ISymbol>decodeSimulateValues</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_decodeTemplates><div class=IEntry><a href="../files/io/mxEditorCodec-js.html#mxEditorCodec.decodeTemplates" target=_parent class=ISymbol>decodeTemplates</a>, <span class=IParent>mxEditorCodec</span></div></div><div class=SRResult id=SR_decodeUi><div class=IEntry><a href="../files/io/mxEditorCodec-js.html#mxEditorCodec.decodeUi" target=_parent class=ISymbol>decodeUi</a>, <span class=IParent>mxEditorCodec</span></div></div><div class=SRResult id=SR_DEFAULT_undFONTFAMILY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_FONTFAMILY" target=_parent class=ISymbol>DEFAULT_FONTFAMILY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undFONTSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_FONTSIZE" target=_parent class=ISymbol>DEFAULT_FONTSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undFONTSTYLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_FONTSTYLE" target=_parent class=ISymbol>DEFAULT_FONTSTYLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undHOTSPOT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_HOTSPOT" target=_parent class=ISymbol>DEFAULT_HOTSPOT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undIMAGESIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_IMAGESIZE" target=_parent class=ISymbol>DEFAULT_IMAGESIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undINVALID_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_INVALID_COLOR" target=_parent class=ISymbol>DEFAULT_INVALID_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undMARKERSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_MARKERSIZE" target=_parent class=ISymbol>DEFAULT_MARKERSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undSTARTSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_STARTSIZE" target=_parent class=ISymbol>DEFAULT_STARTSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undTEXT_undDIRECTION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_TEXT_DIRECTION" target=_parent class=ISymbol>DEFAULT_TEXT_DIRECTION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undVALID_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_VALID_COLOR" target=_parent class=ISymbol>DEFAULT_VALID_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_defaultBundles><div class=IEntry><a href="../files/mxClient-js.html#mxClient.defaultBundles" target=_parent class=ISymbol>defaultBundles</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_defaultEdge><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.defaultEdge" target=_parent class=ISymbol>defaultEdge</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_defaultEdgeShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.defaultEdgeShape" target=_parent class=ISymbol>defaultEdgeShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_defaultEdgeStyle><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.defaultEdgeStyle" target=_parent class=ISymbol>defaultEdgeStyle</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_defaultGroup><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.defaultGroup" target=_parent class=ISymbol>defaultGroup</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_defaultLanguage><div class=IEntry><a href="../files/mxClient-js.html#mxClient.defaultLanguage" target=_parent class=ISymbol>defaultLanguage</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_defaultLocalized><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.defaultLocalized" target=_parent class=ISymbol>defaultLocalized</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_defaultLoopStyle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.defaultLoopStyle" target=_parent class=ISymbol>defaultLoopStyle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_defaultOpacity><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband.defaultOpacity" target=_parent class=ISymbol>defaultOpacity</a>, <span class=IParent>mxRubberband</span></div></div><div class=SRResult id=SR_defaultOverlap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_defaultOverlap')" class=ISymbol>defaultOverlap</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.defaultOverlap" target=_parent class=IParent>mxCellOverlay</a><a href="../files/view/mxGraph-js.html#mxGraph.defaultOverlap" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_defaultParent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.defaultParent" target=_parent class=ISymbol>defaultParent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_defaultShapes><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.defaultShapes" target=_parent class=ISymbol>defaultShapes</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_defaultTextShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.defaultTextShape" target=_parent class=ISymbol>defaultTextShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_defaultVertexShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.defaultVertexShape" target=_parent class=ISymbol>defaultVertexShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_defs><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.defs" target=_parent class=ISymbol>defs</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_delay><div class=IEntry><a href="javascript:searchResults.Toggle('SR_delay')" class=ISymbol>delay</a><div class=ISubIndex><a href="../files/util/mxAnimation-js.html#mxAnimation.delay" target=_parent class=IParent>mxAnimation</a><a href="../files/util/mxPanningManager-js.html#mxPanningManager.delay" target=_parent class=IParent>mxPanningManager</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.delay" target=_parent class=IParent>mxTooltipHandler</a></div></div></div><div class=SRResult id=SR_deltas><div class=IEntry><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.deltas" target=_parent class=ISymbol>deltas</a>, <span class=IParent>mxCellStatePreview</span></div></div><div class=SRResult id=SR_desc><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.desc" target=_parent class=ISymbol>desc</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_destroy><div class=IEntry><a href="javascript:searchResults.Toggle('SR_destroy')" class=ISymbol>destroy</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.destroy" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/view/mxCellEditor-js.html#mxCellEditor.destroy" target=_parent class=IParent>mxCellEditor</a><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.destroy" target=_parent class=IParent>mxCellHighlight</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.destroy" target=_parent class=IParent>mxCellMarker</a><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.destroy" target=_parent class=IParent>mxCellRenderer</a><a href="../files/view/mxCellState-js.html#mxCellState.destroy" target=_parent class=IParent>mxCellState</a><a href="../files/handler/mxCellTracker-js.html#mxCellTracker.destroy" target=_parent class=IParent>mxCellTracker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.destroy" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.destroy" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/editor/mxDefaultKeyHandler-js.html#mxDefaultKeyHandler.destroy" target=_parent class=IParent>mxDefaultKeyHandler</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.destroy" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.destroy" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/editor/mxEditor-js.html#mxEditor.destroy" target=_parent class=IParent>mxEditor</a><a href="../files/view/mxGraph-js.html#mxGraph.destroy" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.destroy" target=_parent class=IParent>mxGraphHandler</a><a href="../files/view/mxGraphView-js.html#mxGraphView.destroy" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxGuide-js.html#mxGuide.destroy" target=_parent class=IParent>mxGuide</a><a href="../files/handler/mxHandle-js.html#mxHandle.destroy" target=_parent class=IParent>mxHandle</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.destroy" target=_parent class=IParent>mxKeyHandler</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.destroy" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxOutline-js.html#mxOutline.destroy" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.destroy" target=_parent class=IParent>mxPanningHandler</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.destroy" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.destroy" target=_parent class=IParent>mxPopupMenuHandler</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.destroy" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.destroy" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/shape/mxShape-js.html#mxShape.destroy" target=_parent class=IParent>mxShape</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.destroy" target=_parent class=IParent>mxSwimlaneManager</a><a href="../files/view/mxTemporaryCellStates-js.html#mxTemporaryCellStates.destroy" target=_parent class=IParent>mxTemporaryCellStates</a><a href="../files/util/mxToolbar-js.html#mxToolbar.destroy" target=_parent class=IParent>mxToolbar</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.destroy" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.destroy" target=_parent class=IParent>mxVertexHandler</a><a href="../files/util/mxWindow-js.html#mxWindow.destroy" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR2_DESTROY><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_DESTROY')" class=ISymbol>DESTROY</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.DESTROY" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.DESTROY" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_destroyBends><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.destroyBends" target=_parent class=ISymbol>destroyBends</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_destroyCanvas><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.destroyCanvas" target=_parent class=ISymbol>destroyCanvas</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_destroyed><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.destroyed" target=_parent class=ISymbol>destroyed</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_destroyFocusHighlight><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.destroyFocusHighlight" target=_parent class=ISymbol>destroyFocusHighlight</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_destroyIcons><div class=IEntry><a href="javascript:searchResults.Toggle('SR_destroyIcons')" class=ISymbol>destroyIcons</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.destroyIcons" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.destroyIcons" target=_parent class=IParent>mxConstraintHandler</a></div></div></div><div class=SRResult id=SR_destroyOnClose><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.destroyOnClose" target=_parent class=ISymbol>destroyOnClose</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_destroyShapes><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.destroyShapes" target=_parent class=ISymbol>destroyShapes</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_dfs><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dfs')" class=ISymbol>dfs</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.dfs" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.dfs" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.dfs" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_dfsCount><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dfsCount')" class=ISymbol>dfsCount</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.dfsCount" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.dfsCount" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_dialect><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dialect')" class=ISymbol>dialect</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.dialect" target=_parent class=IParent>mxGraph</a><a href="../files/shape/mxShape-js.html#mxShape.dialect" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_DIALECT_undMIXEDHTML><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIALECT_MIXEDHTML" target=_parent class=ISymbol>DIALECT_MIXEDHTML</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIALECT_undPREFERHTML><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIALECT_PREFERHTML" target=_parent class=ISymbol>DIALECT_PREFERHTML</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIALECT_undSTRICTHTML><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIALECT_STRICTHTML" target=_parent class=ISymbol>DIALECT_STRICTHTML</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIALECT_undSVG><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIALECT_SVG" target=_parent class=ISymbol>DIALECT_SVG</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIALECT_undVML><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIALECT_VML" target=_parent class=ISymbol>DIALECT_VML</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_die><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.die" target=_parent class=ISymbol>die</a>, <span class=IParent>mxUndoableEdit</span></div></div><div class=SRResult id=SR_DIRECTION_undEAST><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_EAST" target=_parent class=ISymbol>DIRECTION_EAST</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undMASK_undALL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_MASK_ALL" target=_parent class=ISymbol>DIRECTION_MASK_ALL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undMASK_undEAST><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_MASK_EAST" target=_parent class=ISymbol>DIRECTION_MASK_EAST</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undMASK_undNONE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_MASK_NONE" target=_parent class=ISymbol>DIRECTION_MASK_NONE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undMASK_undNORTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_MASK_NORTH" target=_parent class=ISymbol>DIRECTION_MASK_NORTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undMASK_undSOUTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_MASK_SOUTH" target=_parent class=ISymbol>DIRECTION_MASK_SOUTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undMASK_undWEST><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_MASK_WEST" target=_parent class=ISymbol>DIRECTION_MASK_WEST</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undNORTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_NORTH" target=_parent class=ISymbol>DIRECTION_NORTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undSOUTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_SOUTH" target=_parent class=ISymbol>DIRECTION_SOUTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undWEST><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_WEST" target=_parent class=ISymbol>DIRECTION_WEST</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_disableContextMenu><div class=IEntry><a href="javascript:searchResults.Toggle('SR_disableContextMenu')" class=ISymbol>disableContextMenu</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.disableContextMenu" target=_parent class=IParent>mxEditor</a><a href="../files/util/mxEvent-js.html#mxEvent.disableContextMenu" target=_parent class=IParent>mxEvent</a></div></div></div><div class=SRResult id=SR_disableEdgeStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_disableEdgeStyle')" class=ISymbol>disableEdgeStyle</a><div class=ISubIndex><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.disableEdgeStyle" target=_parent class=IParent>mxCircleLayout</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.disableEdgeStyle" target=_parent class=IParent>mxFastOrganicLayout</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.disableEdgeStyle" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.disableEdgeStyle" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_disconnect><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxChildChange.disconnect" target=_parent class=ISymbol>disconnect</a>, <span class=IParent>mxChildChange</span></div></div><div class=SRResult id=SR2_DISCONNECT><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.DISCONNECT" target=_parent class=ISymbol>DISCONNECT</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_disconnectGraph><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.disconnectGraph" target=_parent class=ISymbol>disconnectGraph</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_disconnectOnMove><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.disconnectOnMove" target=_parent class=ISymbol>disconnectOnMove</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_dispX><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.dispX" target=_parent class=ISymbol>dispX</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_dispY><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.dispY" target=_parent class=ISymbol>dispY</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_div><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband.div" target=_parent class=ISymbol>div</a>, <span class=IParent>mxRubberband</span></div></div><div class=SRResult id=SR_document><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.document" target=_parent class=ISymbol>document</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_DONE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.DONE" target=_parent class=ISymbol>DONE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_doneResource><div class=IEntry><a href="javascript:searchResults.Toggle('SR_doneResource')" class=ISymbol>doneResource</a><div class=ISubIndex><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.doneResource" target=_parent class=IParent>mxGraphSelectionModel</a><a href="../files/view/mxGraphView-js.html#mxGraphView.doneResource" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_doRedrawShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.doRedrawShape" target=_parent class=ISymbol>doRedrawShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_doResizeContainer><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.doResizeContainer" target=_parent class=ISymbol>doResizeContainer</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_DOUBLE_undCLICK><div class=IEntry><a href="javascript:searchResults.Toggle('SR_DOUBLE_undCLICK')" class=ISymbol>DOUBLE_CLICK</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.DOUBLE_CLICK" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.DOUBLE_CLICK" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_doubleClickOrientationResource><div class=IEntry><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.doubleClickOrientationResource" target=_parent class=ISymbol>doubleClickOrientationResource</a>, <span class=IParent>mxElbowEdgeHandler</span></div></div><div class=SRResult id=SR_doubleTapEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.doubleTapEnabled" target=_parent class=ISymbol>doubleTapEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_doubleTapTimeout><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.doubleTapTimeout" target=_parent class=ISymbol>doubleTapTimeout</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_doubleTapTolerance><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.doubleTapTolerance" target=_parent class=ISymbol>doubleTapTolerance</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_DOWN><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.DOWN" target=_parent class=ISymbol>DOWN</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_dragElement><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dragElement" target=_parent class=ISymbol>dragElement</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_dragElementOpacity><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dragElementOpacity" target=_parent class=ISymbol>dragElementOpacity</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_dragElementZIndex><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dragElementZIndex" target=_parent class=ISymbol>dragElementZIndex</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_dragEnter><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dragEnter" target=_parent class=ISymbol>dragEnter</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_dragExit><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dragExit" target=_parent class=ISymbol>dragExit</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_dragOffset><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dragOffset" target=_parent class=ISymbol>dragOffset</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_dragOver><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dragOver" target=_parent class=ISymbol>dragOver</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_drawCellState><div class=IEntry><a href="../files/util/mxImageExport-js.html#mxImageExport.drawCellState" target=_parent class=ISymbol>drawCellState</a>, <span class=IParent>mxImageExport</span></div></div><div class=SRResult id=SR_drawChildren><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.drawChildren" target=_parent class=ISymbol>drawChildren</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_drawHighlight><div class=IEntry><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.drawHighlight" target=_parent class=ISymbol>drawHighlight</a>, <span class=IParent>mxCellHighlight</span></div></div><div class=SRResult id=SR_drawNode><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.drawNode" target=_parent class=ISymbol>drawNode</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_drawOverlays><div class=IEntry><a href="../files/util/mxImageExport-js.html#mxImageExport.drawOverlays" target=_parent class=ISymbol>drawOverlays</a>, <span class=IParent>mxImageExport</span></div></div><div class=SRResult id=SR_drawPreview><div class=IEntry><a href="javascript:searchResults.Toggle('SR_drawPreview')" class=ISymbol>drawPreview</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.drawPreview" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.drawPreview" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.drawPreview" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_drawShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_drawShape')" class=ISymbol>drawShape</a><div class=ISubIndex><a href="../files/util/mxImageExport-js.html#mxImageExport.drawShape" target=_parent class=IParent>mxImageExport</a><a href="../files/shape/mxStencil-js.html#mxStencil.drawShape" target=_parent class=IParent>mxStencil</a></div></div></div><div class=SRResult id=SR_drawState><div class=IEntry><a href="../files/util/mxImageExport-js.html#mxImageExport.drawState" target=_parent class=ISymbol>drawState</a>, <span class=IParent>mxImageExport</span></div></div><div class=SRResult id=SR_drawText><div class=IEntry><a href="../files/util/mxImageExport-js.html#mxImageExport.drawText" target=_parent class=ISymbol>drawText</a>, <span class=IParent>mxImageExport</span></div></div><div class=SRResult id=SR_Drilldown><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Drilldown" target=_parent class=ISymbol>Drilldown</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_drillHandler><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.drillHandler" target=_parent class=ISymbol>drillHandler</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_drop><div class=IEntry><a href="javascript:searchResults.Toggle('SR_drop')" class=ISymbol>drop</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.drop" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/util/mxDragSource-js.html#mxDragSource.drop" target=_parent class=IParent>mxDragSource</a></div></div></div><div class=SRResult id=SR_DROP_undTARGET_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DROP_TARGET_COLOR" target=_parent class=ISymbol>DROP_TARGET_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_dropEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.dropEnabled" target=_parent class=ISymbol>dropEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_dropHandler><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dropHandler" target=_parent class=ISymbol>dropHandler</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_dummyVertexWidth><div class=IEntry><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.dummyVertexWidth" target=_parent class=ISymbol>dummyVertexWidth</a>, <span class=IParent>mxSwimlaneLayout</span></div></div><div class=SRResult id=SR_dx><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dx')" class=ISymbol>dx</a><div class=ISubIndex><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint.dx" target=_parent class=IParent>mxConnectionConstraint</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.dx" target=_parent class=IParent>mxPanningHandler</a></div></div></div><div class=SRResult id=SR_dy><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dy')" class=ISymbol>dy</a><div class=ISubIndex><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint.dy" target=_parent class=IParent>mxConnectionConstraint</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.dy" target=_parent class=IParent>mxPanningHandler</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralE.html b/docs/js-api/search/GeneralE.html
index ed0b36ded..f70f11988 100644
--- a/docs/js-api/search/GeneralE.html
+++ b/docs/js-api/search/GeneralE.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_ease><div class=IEntry><a href="../files/util/mxMorphing-js.html#mxMorphing.ease" target=_parent class=ISymbol>ease</a>, <span class=IParent>mxMorphing</span></div></div><div class=SRResult id=SR_edge><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.edge" target=_parent class=ISymbol>edge</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_EDGE_undSELECTION_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGE_SELECTION_COLOR" target=_parent class=ISymbol>EDGE_SELECTION_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDGE_undSELECTION_undSTROKEWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGE_SELECTION_STROKEWIDTH" target=_parent class=ISymbol>EDGE_SELECTION_STROKEWIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_edgeLabelsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.edgeLabelsMovable" target=_parent class=ISymbol>edgeLabelsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_edgeMapper><div class=IEntry><a href="javascript:searchResults.Toggle('SR_edgeMapper')" class=ISymbol>edgeMapper</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.edgeMapper" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.edgeMapper" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_edgeRouting><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.edgeRouting" target=_parent class=ISymbol>edgeRouting</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_edges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_edges')" class=ISymbol>edges</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.edges" target=_parent class=IParent>mxCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.edges" target=_parent class=IParent>mxGraphHierarchyEdge</a></div></div></div><div class=SRResult id=SR_edgesSet><div class=IEntry><a href="javascript:searchResults.Toggle('SR_edgesSet')" class=ISymbol>edgesSet</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.edgesSet" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.edgesSet" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_edgeState><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.edgeState" target=_parent class=ISymbol>edgeState</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_edgeStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_edgeStyle')" class=ISymbol>edgeStyle</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.edgeStyle" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.edgeStyle" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_EDGESTYLE_undELBOW><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGESTYLE_ELBOW" target=_parent class=ISymbol>EDGESTYLE_ELBOW</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDGESTYLE_undENTITY_undRELATION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGESTYLE_ENTITY_RELATION" target=_parent class=ISymbol>EDGESTYLE_ENTITY_RELATION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDGESTYLE_undLOOP><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGESTYLE_LOOP" target=_parent class=ISymbol>EDGESTYLE_LOOP</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDGESTYLE_undORTHOGONAL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGESTYLE_ORTHOGONAL" target=_parent class=ISymbol>EDGESTYLE_ORTHOGONAL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDGESTYLE_undSEGMENT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGESTYLE_SEGMENT" target=_parent class=ISymbol>EDGESTYLE_SEGMENT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDGESTYLE_undSIDETOSIDE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGESTYLE_SIDETOSIDE" target=_parent class=ISymbol>EDGESTYLE_SIDETOSIDE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDGESTYLE_undTOPTOBOTTOM><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGESTYLE_TOPTOBOTTOM" target=_parent class=ISymbol>EDGESTYLE_TOPTOBOTTOM</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDITING_undSTARTED><div class=IEntry><a href="javascript:searchResults.Toggle('SR_EDITING_undSTARTED')" class=ISymbol>EDITING_STARTED</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.EDITING_STARTED" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.EDITING_STARTED" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_EDITING_undSTOPPED><div class=IEntry><a href="javascript:searchResults.Toggle('SR_EDITING_undSTOPPED')" class=ISymbol>EDITING_STOPPED</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.EDITING_STOPPED" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.EDITING_STOPPED" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_editingCell><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.editingCell" target=_parent class=ISymbol>editingCell</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_editor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_editor')" class=ISymbol>editor</a><div class=ISubIndex><a href="../files/editor/mxDefaultKeyHandler-js.html#mxDefaultKeyHandler.editor" target=_parent class=IParent>mxDefaultKeyHandler</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.editor" target=_parent class=IParent>mxDefaultToolbar</a></div></div></div><div class=SRResult id=SR_ELBOW_undHORIZONTAL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ELBOW_HORIZONTAL" target=_parent class=ISymbol>ELBOW_HORIZONTAL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ELBOW_undVERTICAL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ELBOW_VERTICAL" target=_parent class=ISymbol>ELBOW_VERTICAL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ElbowConnector><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.ElbowConnector" target=_parent class=ISymbol>ElbowConnector</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_element><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.element" target=_parent class=ISymbol>element</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_elements><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.elements" target=_parent class=ISymbol>elements</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_ellipse><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ellipse')" class=ISymbol>ellipse</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.ellipse" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.ellipse" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.ellipse" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_EllipsePerimeter><div class=IEntry><a href="../files/view/mxPerimeter-js.html#mxPerimeter.EllipsePerimeter" target=_parent class=ISymbol>EllipsePerimeter</a>, <span class=IParent>mxPerimeter</span></div></div><div class=SRResult id=SR_emptyLabelText><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.emptyLabelText" target=_parent class=ISymbol>emptyLabelText</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_enabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_enabled')" class=ISymbol>enabled</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.enabled" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.enabled" target=_parent class=IParent>mxCellMarker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.enabled" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.enabled" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/util/mxDragSource-js.html#mxDragSource.enabled" target=_parent class=IParent>mxDragSource</a><a href="../files/view/mxGraph-js.html#mxGraph.enabled" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.enabled" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.enabled" target=_parent class=IParent>mxKeyHandler</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.enabled" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxOutline-js.html#mxOutline.enabled" target=_parent class=IParent>mxOutline</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.enabled" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.enabled" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.enabled" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.enabled" target=_parent class=IParent>mxSwimlaneManager</a><a href="../files/util/mxToolbar-js.html#mxToolbar.enabled" target=_parent class=IParent>mxToolbar</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.enabled" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.enabled" target=_parent class=IParent>mxUrlConverter</a></div></div></div><div class=SRResult id=SR_encode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_encode')" class=ISymbol>encode</a><div class=ISubIndex><a href="../files/io/mxCodec-js.html#mxCodec.encode" target=_parent class=IParent>mxCodec</a><a href="../files/io/mxDefaultKeyHandlerCodec-js.html#mxDefaultKeyHandlerCodec.encode" target=_parent class=IParent>mxDefaultKeyHandlerCodec</a><a href="../files/io/mxDefaultPopupMenuCodec-js.html#mxDefaultPopupMenuCodec.encode" target=_parent class=IParent>mxDefaultPopupMenuCodec</a><a href="../files/io/mxDefaultToolbarCodec-js.html#mxDefaultToolbarCodec.encode" target=_parent class=IParent>mxDefaultToolbarCodec</a><a href="../files/io/mxGraphViewCodec-js.html#mxGraphViewCodec.encode" target=_parent class=IParent>mxGraphViewCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.encode" target=_parent class=IParent>mxObjectCodec</a><a href="../files/io/mxStylesheetCodec-js.html#mxStylesheetCodec.encode" target=_parent class=IParent>mxStylesheetCodec</a></div></div></div><div class=SRResult id=SR_encodeCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_encodeCell')" class=ISymbol>encodeCell</a><div class=ISubIndex><a href="../files/io/mxCodec-js.html#mxCodec.encodeCell" target=_parent class=IParent>mxCodec</a><a href="../files/io/mxGraphViewCodec-js.html#mxGraphViewCodec.encodeCell" target=_parent class=IParent>mxGraphViewCodec</a></div></div></div><div class=SRResult id=SR_encodeDefaults><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.encodeDefaults" target=_parent class=ISymbol>encodeDefaults</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_encodeObject><div class=IEntry><a href="javascript:searchResults.Toggle('SR_encodeObject')" class=ISymbol>encodeObject</a><div class=ISubIndex><a href="../files/io/mxModelCodec-js.html#mxModelCodec.encodeObject" target=_parent class=IParent>mxModelCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.encodeObject" target=_parent class=IParent>mxObjectCodec</a></div></div></div><div class=SRResult id=SR_encodeValue><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.encodeValue" target=_parent class=ISymbol>encodeValue</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_end><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.end" target=_parent class=ISymbol>end</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_END_undEDIT><div class=IEntry><a href="javascript:searchResults.Toggle('SR_END_undEDIT')" class=ISymbol>END_EDIT</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.END_EDIT" target=_parent class=IParent>mxEvent</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.END_EDIT" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.mxEvent.END_EDIT" target=_parent class=IParent>mxUndoableEdit.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_END_undUPDATE><div class=IEntry><a href="javascript:searchResults.Toggle('SR_END_undUPDATE')" class=ISymbol>END_UPDATE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.END_UPDATE" target=_parent class=IParent>mxEvent</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.END_UPDATE" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_endingUpdate><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.endingUpdate" target=_parent class=ISymbol>endingUpdate</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_endUpdate><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.endUpdate" target=_parent class=ISymbol>endUpdate</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_enter><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.enter" target=_parent class=ISymbol>enter</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_enterGroup><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.enterGroup" target=_parent class=ISymbol>enterGroup</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_enterStopsCellEditing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.enterStopsCellEditing" target=_parent class=ISymbol>enterStopsCellEditing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_ENTITY_undSEGMENT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ENTITY_SEGMENT" target=_parent class=ISymbol>ENTITY_SEGMENT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EntityRelation><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.EntityRelation" target=_parent class=ISymbol>EntityRelation</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_equalEntries><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.equalEntries" target=_parent class=ISymbol>equalEntries</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_equalPoints><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.equalPoints" target=_parent class=ISymbol>equalPoints</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_equals><div class=IEntry><a href="javascript:searchResults.Toggle('SR_equals')" class=ISymbol>equals</a><div class=ISubIndex><a href="../files/model/mxGeometry-js.html#mxGeometry.equals" target=_parent class=IParent>mxGeometry</a><a href="../files/util/mxPoint-js.html#mxPoint.equals" target=_parent class=IParent>mxPoint</a><a href="../files/util/mxRectangle-js.html#mxRectangle.equals" target=_parent class=IParent>mxRectangle</a></div></div></div><div class=SRResult id=SR_error><div class=IEntry><a href="javascript:searchResults.Toggle('SR_error')" class=ISymbol>error</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.error" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.error" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/util/mxUtils-js.html#mxUtils.error" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_errorImage><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.errorImage" target=_parent class=ISymbol>errorImage</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_errorResource><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.errorResource" target=_parent class=ISymbol>errorResource</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_escape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_escape')" class=ISymbol>escape</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.escape" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.escape" target=_parent class=IParent>mxKeyHandler</a></div></div></div><div class=SRResult id=SR2_ESCAPE><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_ESCAPE')" class=ISymbol>ESCAPE</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.ESCAPE" target=_parent class=IParent>mxEditor.<wbr>mxEvent</a><a href="../files/util/mxEvent-js.html#mxEvent.ESCAPE" target=_parent class=IParent>mxEvent</a></div></div></div><div class=SRResult id=SR_escapeCancelsEditing><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.escapeCancelsEditing" target=_parent class=ISymbol>escapeCancelsEditing</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_escapeEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.escapeEnabled" target=_parent class=ISymbol>escapeEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_escapePostData><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.escapePostData" target=_parent class=ISymbol>escapePostData</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_eval><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.eval" target=_parent class=ISymbol>eval</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_evaluateAttribute><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.evaluateAttribute" target=_parent class=ISymbol>evaluateAttribute</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_evaluateTextAttribute><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.evaluateTextAttribute" target=_parent class=ISymbol>evaluateTextAttribute</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_Event_spcprocessing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Event_processing" target=_parent class=ISymbol>Event processing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_eventListeners><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.eventListeners" target=_parent class=ISymbol>eventListeners</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_Events><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Events')" class=ISymbol>Events</a><div class=ISubIndex><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.Events" target=_parent class=IParent>mxCellMarker</a><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.Events" target=_parent class=IParent>mxCellOverlay</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.Events" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.Events" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.Events" target=_parent class=IParent>mxGraphModel</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.Events" target=_parent class=IParent>mxGraphSelectionModel</a><a href="../files/view/mxGraphView-js.html#mxGraphView.Events" target=_parent class=IParent>mxGraphView</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.Events" target=_parent class=IParent>mxLayoutManager</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.Events" target=_parent class=IParent>mxPanningHandler</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.Events" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.Events" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/util/mxToolbar-js.html#mxToolbar.Events" target=_parent class=IParent>mxToolbar</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.Events" target=_parent class=IParent>mxUndoableEdit</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.Events" target=_parent class=IParent>mxUndoManager</a><a href="../files/util/mxWindow-js.html#mxWindow.Events" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_eventsEnabled><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.eventsEnabled" target=_parent class=ISymbol>eventsEnabled</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_eventSource><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.eventSource" target=_parent class=ISymbol>eventSource</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_evt><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.evt" target=_parent class=ISymbol>evt</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_exclude><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.exclude" target=_parent class=ISymbol>exclude</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_execute><div class=IEntry><a href="javascript:searchResults.Toggle('SR_execute')" class=ISymbol>execute</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxCellAttributeChange.execute" target=_parent class=IParent>mxCellAttributeChange</a><a href="../files/model/mxGraphModel-js.html#mxChildChange.execute" target=_parent class=IParent>mxChildChange</a><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.execute" target=_parent class=IParent>mxCircleLayout</a><a href="../files/model/mxGraphModel-js.html#mxCollapseChange.execute" target=_parent class=IParent>mxCollapseChange</a><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.execute" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxCompositeLayout-js.html#mxCompositeLayout.execute" target=_parent class=IParent>mxCompositeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.execute" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/view/mxGraphView-js.html#mxCurrentRootChange.execute" target=_parent class=IParent>mxCurrentRootChange</a><a href="../files/layout/mxEdgeLabelLayout-js.html#mxEdgeLabelLayout.execute" target=_parent class=IParent>mxEdgeLabelLayout</a><a href="../files/editor/mxEditor-js.html#mxEditor.execute" target=_parent class=IParent>mxEditor</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.execute" target=_parent class=IParent>mxFastOrganicLayout</a><a href="../files/model/mxGraphModel-js.html#mxGeometryChange.execute" target=_parent class=IParent>mxGeometryChange</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.execute" target=_parent class=IParent>mxGraphLayout</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.execute" target=_parent class=IParent>mxGraphModel</a><a href="../files/handler/mxHandle-js.html#mxHandle.execute" target=_parent class=IParent>mxHandle</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.execute" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/stage/mxHierarchicalLayoutStage-js.html#mxHierarchicalLayoutStage.execute" target=_parent class=IParent>mxHierarchicalLayoutStage</a><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.execute" target=_parent class=IParent>mxMedianHybridCrossingReduction</a><a href="../files/layout/hierarchical/stage/mxMinimumCycleRemover-js.html#mxMinimumCycleRemover.execute" target=_parent class=IParent>mxMinimumCycleRemover</a><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.execute" target=_parent class=IParent>mxParallelEdgeLayout</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.execute" target=_parent class=IParent>mxPartitionLayout</a><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.execute" target=_parent class=IParent>mxRadialTreeLayout</a><a href="../files/model/mxGraphModel-js.html#mxRootChange.execute" target=_parent class=IParent>mxRootChange</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.execute" target=_parent class=IParent>mxRubberband</a><a href="../files/view/mxGraphSelectionModel-js.html#mxSelectionChange.execute" target=_parent class=IParent>mxSelectionChange</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.execute" target=_parent class=IParent>mxStackLayout</a><a href="../files/model/mxGraphModel-js.html#mxStyleChange.execute" target=_parent class=IParent>mxStyleChange</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.execute" target=_parent class=IParent>mxSwimlaneLayout</a><a href="../files/layout/hierarchical/stage/mxSwimlaneOrdering-js.html#mxSwimlaneOrdering.execute" target=_parent class=IParent>mxSwimlaneOrdering</a><a href="../files/model/mxGraphModel-js.html#mxTerminalChange.execute" target=_parent class=IParent>mxTerminalChange</a><a href="../files/model/mxGraphModel-js.html#mxValueChange.execute" target=_parent class=IParent>mxValueChange</a><a href="../files/model/mxGraphModel-js.html#mxVisibleChange.execute" target=_parent class=IParent>mxVisibleChange</a></div></div></div><div class=SRResult id=SR2_EXECUTE><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_EXECUTE')" class=ISymbol>EXECUTE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.EXECUTE" target=_parent class=IParent>mxEvent</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.EXECUTE" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_EXECUTED><div class=IEntry><a href="javascript:searchResults.Toggle('SR_EXECUTED')" class=ISymbol>EXECUTED</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.EXECUTED" target=_parent class=IParent>mxEvent</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.EXECUTED" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.mxEvent.EXECUTED" target=_parent class=IParent>mxUndoableEdit.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_executeLayout><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.executeLayout" target=_parent class=ISymbol>executeLayout</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_executeLayoutForCells><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.executeLayoutForCells" target=_parent class=ISymbol>executeLayoutForCells</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_exitGroup><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.exitGroup" target=_parent class=ISymbol>exitGroup</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_expandedImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.expandedImage" target=_parent class=ISymbol>expandedImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_exportEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.exportEnabled" target=_parent class=ISymbol>exportEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_extend><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.extend" target=_parent class=ISymbol>extend</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_extendedDfs><div class=IEntry><a href="javascript:searchResults.Toggle('SR_extendedDfs')" class=ISymbol>extendedDfs</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.extendedDfs" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.extendedDfs" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_extendParent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.extendParent" target=_parent class=ISymbol>extendParent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_extendParents><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.extendParents" target=_parent class=ISymbol>extendParents</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_extendParentsOnAdd><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.extendParentsOnAdd" target=_parent class=ISymbol>extendParentsOnAdd</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_extension><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.extension" target=_parent class=ISymbol>extension</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_extractTextWithWhitespace><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.extractTextWithWhitespace" target=_parent class=ISymbol>extractTextWithWhitespace</a>, <span class=IParent>mxUtils</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralF.html b/docs/js-api/search/GeneralF.html
index 142096adc..cad064f76 100644
--- a/docs/js-api/search/GeneralF.html
+++ b/docs/js-api/search/GeneralF.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_factoryMethod><div class=IEntry><a href="javascript:searchResults.Toggle('SR_factoryMethod')" class=ISymbol>factoryMethod</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.factoryMethod" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.factoryMethod" target=_parent class=IParent>mxPopupMenu</a></div></div></div><div class=SRResult id=SR_fadeOut><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fadeOut')" class=ISymbol>fadeOut</a><div class=ISubIndex><a href="../files/util/mxEffects-js.html#mxEffects.fadeOut" target=_parent class=IParent>mxEffects</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.fadeOut" target=_parent class=IParent>mxRubberband</a><a href="../files/util/mxUtils-js.html#mxUtils.fadeOut" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_fgNodes><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.fgNodes" target=_parent class=ISymbol>fgNodes</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_FIELD_undNAME><div class=IEntry><a href="../files/util/mxObjectIdentity-js.html#mxObjectIdentity.FIELD_NAME" target=_parent class=ISymbol>FIELD_NAME</a>, <span class=IParent>mxObjectIdentity</span></div></div><div class=SRResult id=SR_filename><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.filename" target=_parent class=ISymbol>filename</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_fill><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fill')" class=ISymbol>fill</a><div class=ISubIndex><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.fill" target=_parent class=IParent>mxStackLayout</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.fill" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.fill" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.fill" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_fillAndStroke><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fillAndStroke')" class=ISymbol>fillAndStroke</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.fillAndStroke" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.fillAndStroke" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.fillAndStroke" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_filterCells><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.filterCells" target=_parent class=ISymbol>filterCells</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_filterDescendants><div class=IEntry><a href="javascript:searchResults.Toggle('SR_filterDescendants')" class=ISymbol>filterDescendants</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.filterDescendants" target=_parent class=IParent>mxGraphModel</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.filterDescendants" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.filterDescendants" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_findNearestSegment><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.findNearestSegment" target=_parent class=ISymbol>findNearestSegment</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_findNode><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.findNode" target=_parent class=ISymbol>findNode</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_findParallels><div class=IEntry><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.findParallels" target=_parent class=ISymbol>findParallels</a>, <span class=IParent>mxParallelEdgeLayout</span></div></div><div class=SRResult id=SR_findRankHeights><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.findRankHeights" target=_parent class=ISymbol>findRankHeights</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_findRoots><div class=IEntry><a href="javascript:searchResults.Toggle('SR_findRoots')" class=ISymbol>findRoots</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.findRoots" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.findRoots" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_findTreeRoots><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.findTreeRoots" target=_parent class=ISymbol>findTreeRoots</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_fineTuning><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fineTuning')" class=ISymbol>fineTuning</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.fineTuning" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.fineTuning" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.fineTuning" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_FIRE_undMOUSE_undEVENT><div class=IEntry><a href="javascript:searchResults.Toggle('SR_FIRE_undMOUSE_undEVENT')" class=ISymbol>FIRE_MOUSE_EVENT</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.FIRE_MOUSE_EVENT" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.FIRE_MOUSE_EVENT" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_FIRED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.FIRED" target=_parent class=ISymbol>FIRED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_fireEvent><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.fireEvent" target=_parent class=ISymbol>fireEvent</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_fireGestureEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.fireGestureEvent" target=_parent class=ISymbol>fireGestureEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_fireMouseEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.fireMouseEvent" target=_parent class=ISymbol>fireMouseEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_first><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.first" target=_parent class=ISymbol>first</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_fit><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fit')" class=ISymbol>fit</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.fit" target=_parent class=IParent>mxGraph</a><a href="../files/util/mxUtils-js.html#mxUtils.fit" target=_parent class=IParent>mxUtils</a><a href="../files/util/mxWindow-js.html#mxWindow.fit" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_fixRanks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fixRanks')" class=ISymbol>fixRanks</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.fixRanks" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.fixRanks" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_FLIP_undEDGE><div class=IEntry><a href="javascript:searchResults.Toggle('SR_FLIP_undEDGE')" class=ISymbol>FLIP_EDGE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.FLIP_EDGE" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.FLIP_EDGE" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_flipEdge><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.flipEdge" target=_parent class=ISymbol>flipEdge</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_flipPoint><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.flipPoint" target=_parent class=ISymbol>flipPoint</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_foAltText><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.foAltText" target=_parent class=ISymbol>foAltText</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_focusLost><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.focusLost" target=_parent class=ISymbol>focusLost</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_foEnabled><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.foEnabled" target=_parent class=ISymbol>foEnabled</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_FOLD_undCELLS><div class=IEntry><a href="javascript:searchResults.Toggle('SR_FOLD_undCELLS')" class=ISymbol>FOLD_CELLS</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.FOLD_CELLS" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.FOLD_CELLS" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_foldCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.foldCells" target=_parent class=ISymbol>foldCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_Folding><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Folding" target=_parent class=ISymbol>Folding</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_foldingEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.foldingEnabled" target=_parent class=ISymbol>foldingEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_FONT_undBOLD><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.FONT_BOLD" target=_parent class=ISymbol>FONT_BOLD</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_FONT_undITALIC><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.FONT_ITALIC" target=_parent class=ISymbol>FONT_ITALIC</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_FONT_undSTRIKETHROUGH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.FONT_STRIKETHROUGH" target=_parent class=ISymbol>FONT_STRIKETHROUGH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_FONT_undUNDERLINE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.FONT_UNDERLINE" target=_parent class=ISymbol>FONT_UNDERLINE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_fontMetricsPadding><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.fontMetricsPadding" target=_parent class=ISymbol>fontMetricsPadding</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_foOffset><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.foOffset" target=_parent class=ISymbol>foOffset</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_forceConstant><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.forceConstant" target=_parent class=ISymbol>forceConstant</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_forceConstantSquared><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.forceConstantSquared" target=_parent class=ISymbol>forceConstantSquared</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_forceControlClickHandler><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.forceControlClickHandler" target=_parent class=ISymbol>forceControlClickHandler</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_forcedInserting><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.forcedInserting" target=_parent class=ISymbol>forcedInserting</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_forceVmlHandles><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.forceVmlHandles" target=_parent class=ISymbol>forceVmlHandles</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_forEach><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.forEach" target=_parent class=ISymbol>forEach</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_format><div class=IEntry><a href="javascript:searchResults.Toggle('SR_format')" class=ISymbol>format</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.format" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.format" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.format" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_fromRectangle><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.fromRectangle" target=_parent class=ISymbol>fromRectangle</a>, <span class=IParent>mxRectangle</span></div></div><div class=SRResult id=SR_Functions><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Functions')" class=ISymbol>Functions</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#Functions" target=_parent class=IParent>Global</a><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#MedianCellSorter.Functions" target=_parent class=IParent>MedianCellSorter</a><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.Functions" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/shape/mxActor-js.html#mxActor.Functions" target=_parent class=IParent>mxActor</a><a href="../files/util/mxAnimation-js.html#mxAnimation.Functions" target=_parent class=IParent>mxAnimation</a><a href="../files/shape/mxArrow-js.html#mxArrow.Functions" target=_parent class=IParent>mxArrow</a><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.Functions" target=_parent class=IParent>mxArrowConnector</a><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.Functions" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/model/mxCell-js.html#mxCell.Functions" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxCellAttributeChange.Functions" target=_parent class=IParent>mxCellAttributeChange</a><a href="../files/io/mxCellCodec-js.html#mxCellCodec.Functions" target=_parent class=IParent>mxCellCodec</a><a href="../files/view/mxCellEditor-js.html#mxCellEditor.Functions" target=_parent class=IParent>mxCellEditor</a><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.Functions" target=_parent class=IParent>mxCellHighlight</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.Functions" target=_parent class=IParent>mxCellMarker</a><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.Functions" target=_parent class=IParent>mxCellOverlay</a><a href="../files/model/mxCellPath-js.html#mxCellPath.Functions" target=_parent class=IParent>mxCellPath</a><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.Functions" target=_parent class=IParent>mxCellRenderer</a><a href="../files/view/mxCellState-js.html#mxCellState.Functions" target=_parent class=IParent>mxCellState</a><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.Functions" target=_parent class=IParent>mxCellStatePreview</a><a href="../files/handler/mxCellTracker-js.html#mxCellTracker.Functions" target=_parent class=IParent>mxCellTracker</a><a href="../files/model/mxGraphModel-js.html#mxChildChange.Functions" target=_parent class=IParent>mxChildChange</a><a href="../files/io/mxChildChangeCodec-js.html#mxChildChangeCodec.Functions" target=_parent class=IParent>mxChildChangeCodec</a><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.Functions" target=_parent class=IParent>mxCircleLayout</a><a href="../files/mxClient-js.html#mxClient.Functions" target=_parent class=IParent>mxClient</a><a href="../files/util/mxClipboard-js.html#mxClipboard.Functions" target=_parent class=IParent>mxClipboard</a><a href="../files/shape/mxCloud-js.html#mxCloud.Functions" target=_parent class=IParent>mxCloud</a><a href="../files/io/mxCodec-js.html#mxCodec.Functions" target=_parent class=IParent>mxCodec</a><a href="../files/io/mxCodecRegistry-js.html#mxCodecRegistry.Functions" target=_parent class=IParent>mxCodecRegistry</a><a href="../files/model/mxGraphModel-js.html#mxCollapseChange.Functions" target=_parent class=IParent>mxCollapseChange</a><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.Functions" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxCompositeLayout-js.html#mxCompositeLayout.Functions" target=_parent class=IParent>mxCompositeLayout</a><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint.Functions" target=_parent class=IParent>mxConnectionConstraint</a><a href="../files/shape/mxConnector-js.html#mxConnector.Functions" target=_parent class=IParent>mxConnector</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.Functions" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.Functions" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/view/mxGraphView-js.html#mxCurrentRootChange.Functions" target=_parent class=IParent>mxCurrentRootChange</a><a href="../files/shape/mxCylinder-js.html#mxCylinder.Functions" target=_parent class=IParent>mxCylinder</a><a href="../files/editor/mxDefaultKeyHandler-js.html#mxDefaultKeyHandler.Functions" target=_parent class=IParent>mxDefaultKeyHandler</a><a href="../files/io/mxDefaultKeyHandlerCodec-js.html#mxDefaultKeyHandlerCodec.Functions" target=_parent class=IParent>mxDefaultKeyHandlerCodec</a><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.Functions" target=_parent class=IParent>mxDefaultPopupMenu</a><a href="../files/io/mxDefaultPopupMenuCodec-js.html#mxDefaultPopupMenuCodec.Functions" target=_parent class=IParent>mxDefaultPopupMenuCodec</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.Functions" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/io/mxDefaultToolbarCodec-js.html#mxDefaultToolbarCodec.Functions" target=_parent class=IParent>mxDefaultToolbarCodec</a><a href="../files/util/mxDictionary-js.html#mxDictionary.Functions" target=_parent class=IParent>mxDictionary</a><a href="../files/util/mxDivResizer-js.html#mxDivResizer.Functions" target=_parent class=IParent>mxDivResizer</a><a href="../files/shape/mxDoubleEllipse-js.html#mxDoubleEllipse.Functions" target=_parent class=IParent>mxDoubleEllipse</a><a href="../files/util/mxDragSource-js.html#mxDragSource.Functions" target=_parent class=IParent>mxDragSource</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.Functions" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/layout/mxEdgeLabelLayout-js.html#mxEdgeLabelLayout.Functions" target=_parent class=IParent>mxEdgeLabelLayout</a><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.Functions" target=_parent class=IParent>mxEdgeStyle</a><a href="../files/io/mxEditorCodec-js.html#mxEditorCodec.Functions" target=_parent class=IParent>mxEditorCodec</a><a href="../files/util/mxEffects-js.html#mxEffects.Functions" target=_parent class=IParent>mxEffects</a><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.Functions" target=_parent class=IParent>mxElbowEdgeHandler</a><a href="../files/shape/mxEllipse-js.html#mxEllipse.Functions" target=_parent class=IParent>mxEllipse</a><a href="../files/util/mxEvent-js.html#mxEvent.Functions" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxEventObject-js.html#mxEventObject.Functions" target=_parent class=IParent>mxEventObject</a><a href="../files/util/mxEventSource-js.html#mxEventSource.Functions" target=_parent class=IParent>mxEventSource</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.Functions" target=_parent class=IParent>mxFastOrganicLayout</a><a href="../files/util/mxForm-js.html#mxForm.Functions" target=_parent class=IParent>mxForm</a><a href="../files/io/mxGenericChangeCodec-js.html#mxGenericChangeCodec.Functions" target=_parent class=IParent>mxGenericChangeCodec</a><a href="../files/model/mxGeometry-js.html#mxGeometry.Functions" target=_parent class=IParent>mxGeometry</a><a href="../files/model/mxGraphModel-js.html#mxGeometryChange.Functions" target=_parent class=IParent>mxGeometryChange</a><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.Functions" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.Functions" target=_parent class=IParent>mxGraphHandler</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.Functions" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.Functions" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.Functions" target=_parent class=IParent>mxGraphHierarchyNode</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.Functions" target=_parent class=IParent>mxGraphLayout</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.Functions" target=_parent class=IParent>mxGraphModel</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.Functions" target=_parent class=IParent>mxGraphSelectionModel</a><a href="../files/view/mxGraphView-js.html#mxGraphView.Functions" target=_parent class=IParent>mxGraphView</a><a href="../files/io/mxGraphViewCodec-js.html#mxGraphViewCodec.Functions" target=_parent class=IParent>mxGraphViewCodec</a><a href="../files/util/mxGuide-js.html#mxGuide.Functions" target=_parent class=IParent>mxGuide</a><a href="../files/handler/mxHandle-js.html#mxHandle.Functions" target=_parent class=IParent>mxHandle</a><a href="../files/shape/mxHexagon-js.html#mxHexagon.Functions" target=_parent class=IParent>mxHexagon</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.Functions" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/stage/mxHierarchicalLayoutStage-js.html#mxHierarchicalLayoutStage.Functions" target=_parent class=IParent>mxHierarchicalLayoutStage</a><a href="../files/util/mxImage-js.html#mxImage.Functions" target=_parent class=IParent>mxImage</a><a href="../files/util/mxImageBundle-js.html#mxImageBundle.Functions" target=_parent class=IParent>mxImageBundle</a><a href="../files/util/mxImageExport-js.html#mxImageExport.Functions" target=_parent class=IParent>mxImageExport</a><a href="../files/shape/mxImageShape-js.html#mxImageShape.Functions" target=_parent class=IParent>mxImageShape</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.Functions" target=_parent class=IParent>mxKeyHandler</a><a href="../files/shape/mxLabel-js.html#mxLabel.Functions" target=_parent class=IParent>mxLabel</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.Functions" target=_parent class=IParent>mxLayoutManager</a><a href="../files/shape/mxLine-js.html#mxLine.Functions" target=_parent class=IParent>mxLine</a><a href="../files/util/mxLog-js.html#mxLog.Functions" target=_parent class=IParent>mxLog</a><a href="../files/shape/mxMarker-js.html#mxMarker.Functions" target=_parent class=IParent>mxMarker</a><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.Functions" target=_parent class=IParent>mxMedianHybridCrossingReduction</a><a href="../files/layout/hierarchical/stage/mxMinimumCycleRemover-js.html#mxMinimumCycleRemover.Functions" target=_parent class=IParent>mxMinimumCycleRemover</a><a href="../files/io/mxModelCodec-js.html#mxModelCodec.Functions" target=_parent class=IParent>mxModelCodec</a><a href="../files/util/mxMorphing-js.html#mxMorphing.Functions" target=_parent class=IParent>mxMorphing</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.Functions" target=_parent class=IParent>mxMouseEvent</a><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.Functions" target=_parent class=IParent>mxMultiplicity</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.Functions" target=_parent class=IParent>mxObjectCodec</a><a href="../files/util/mxObjectIdentity-js.html#mxObjectIdentity.Functions" target=_parent class=IParent>mxObjectIdentity</a><a href="../files/view/mxOutline-js.html#mxOutline.Functions" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.Functions" target=_parent class=IParent>mxPanningHandler</a><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.Functions" target=_parent class=IParent>mxParallelEdgeLayout</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.Functions" target=_parent class=IParent>mxPartitionLayout</a><a href="../files/view/mxPerimeter-js.html#mxPerimeter.Functions" target=_parent class=IParent>mxPerimeter</a><a href="../files/util/mxPoint-js.html#mxPoint.Functions" target=_parent class=IParent>mxPoint</a><a href="../files/shape/mxPolyline-js.html#mxPolyline.Functions" target=_parent class=IParent>mxPolyline</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.Functions" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.Functions" target=_parent class=IParent>mxPopupMenuHandler</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.Functions" target=_parent class=IParent>mxPrintPreview</a><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.Functions" target=_parent class=IParent>mxRadialTreeLayout</a><a href="../files/util/mxRectangle-js.html#mxRectangle.Functions" target=_parent class=IParent>mxRectangle</a><a href="../files/shape/mxRectangleShape-js.html#mxRectangleShape.Functions" target=_parent class=IParent>mxRectangleShape</a><a href="../files/util/mxResources-js.html#mxResources.Functions" target=_parent class=IParent>mxResources</a><a href="../files/shape/mxRhombus-js.html#mxRhombus.Functions" target=_parent class=IParent>mxRhombus</a><a href="../files/model/mxGraphModel-js.html#mxRootChange.Functions" target=_parent class=IParent>mxRootChange</a><a href="../files/io/mxRootChangeCodec-js.html#mxRootChangeCodec.Functions" target=_parent class=IParent>mxRootChangeCodec</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.Functions" target=_parent class=IParent>mxRubberband</a><a href="../files/view/mxGraphSelectionModel-js.html#mxSelectionChange.Functions" target=_parent class=IParent>mxSelectionChange</a><a href="../files/shape/mxShape-js.html#mxShape.Functions" target=_parent class=IParent>mxShape</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.Functions" target=_parent class=IParent>mxStackLayout</a><a href="../files/shape/mxStencil-js.html#mxStencil.Functions" target=_parent class=IParent>mxStencil</a><a href="../files/shape/mxStencilRegistry-js.html#mxStencilRegistry.Functions" target=_parent class=IParent>mxStencilRegistry</a><a href="../files/model/mxGraphModel-js.html#mxStyleChange.Functions" target=_parent class=IParent>mxStyleChange</a><a href="../files/view/mxStyleRegistry-js.html#mxStyleRegistry.Functions" target=_parent class=IParent>mxStyleRegistry</a><a href="../files/view/mxStylesheet-js.html#mxStylesheet.Functions" target=_parent class=IParent>mxStylesheet</a><a href="../files/io/mxStylesheetCodec-js.html#mxStylesheetCodec.Functions" target=_parent class=IParent>mxStylesheetCodec</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.Functions" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.Functions" target=_parent class=IParent>mxSwimlane</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.Functions" target=_parent class=IParent>mxSwimlaneLayout</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.Functions" target=_parent class=IParent>mxSwimlaneManager</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.Functions" target=_parent class=IParent>mxSwimlaneModel</a><a href="../files/layout/hierarchical/stage/mxSwimlaneOrdering-js.html#mxSwimlaneOrdering.Functions" target=_parent class=IParent>mxSwimlaneOrdering</a><a href="../files/view/mxTemporaryCellStates-js.html#mxTemporaryCellStates.Functions" target=_parent class=IParent>mxTemporaryCellStates</a><a href="../files/model/mxGraphModel-js.html#mxTerminalChange.Functions" target=_parent class=IParent>mxTerminalChange</a><a href="../files/io/mxTerminalChangeCodec-js.html#mxTerminalChangeCodec.Functions" target=_parent class=IParent>mxTerminalChangeCodec</a><a href="../files/shape/mxText-js.html#mxText.Functions" target=_parent class=IParent>mxText</a><a href="../files/util/mxToolbar-js.html#mxToolbar.Functions" target=_parent class=IParent>mxToolbar</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.Functions" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/shape/mxTriangle-js.html#mxTriangle.Functions" target=_parent class=IParent>mxTriangle</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.Functions" target=_parent class=IParent>mxUndoableEdit</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.Functions" target=_parent class=IParent>mxUndoManager</a><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.Functions" target=_parent class=IParent>mxUrlConverter</a><a href="../files/util/mxUtils-js.html#mxUtils.Functions" target=_parent class=IParent>mxUtils</a><a href="../files/model/mxGraphModel-js.html#mxValueChange.Functions" target=_parent class=IParent>mxValueChange</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.Functions" target=_parent class=IParent>mxVertexHandler</a><a href="../files/model/mxGraphModel-js.html#mxVisibleChange.Functions" target=_parent class=IParent>mxVisibleChange</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.Functions" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxWindow-js.html#mxWindow.Functions" target=_parent class=IParent>mxWindow</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.Functions" target=_parent class=IParent>mxXmlCanvas2D</a><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.Functions" target=_parent class=IParent>mxXmlRequest</a><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.Functions" target=_parent class=IParent>WeightedCellSorter</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralG.html b/docs/js-api/search/GeneralG.html
index 4f09ebf4b..2988a2938 100644
--- a/docs/js-api/search/GeneralG.html
+++ b/docs/js-api/search/GeneralG.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_geometry><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.geometry" target=_parent class=ISymbol>geometry</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_geometryForCellChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.geometryForCellChanged" target=_parent class=ISymbol>geometryForCellChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_GESTURE><div class=IEntry><a href="javascript:searchResults.Toggle('SR_GESTURE')" class=ISymbol>GESTURE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.GESTURE" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.GESTURE" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_get><div class=IEntry><a href="javascript:searchResults.Toggle('SR_get')" class=ISymbol>get</a><div class=ISubIndex><a href="../files/util/mxDictionary-js.html#mxDictionary.get" target=_parent class=IParent>mxDictionary</a><a href="../files/util/mxObjectIdentity-js.html#mxObjectIdentity.get" target=_parent class=IParent>mxObjectIdentity</a><a href="../files/util/mxResources-js.html#mxResources.get" target=_parent class=IParent>mxResources</a><a href="../files/util/mxUtils-js.html#mxUtils.get" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR2_GET><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.GET" target=_parent class=ISymbol>GET</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_getActualStartSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getActualStartSize" target=_parent class=ISymbol>getActualStartSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getAlignmentAsPoint><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getAlignmentAsPoint" target=_parent class=ISymbol>getAlignmentAsPoint</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getAlignmentTolerance><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.getAlignmentTolerance" target=_parent class=ISymbol>getAlignmentTolerance</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_getAll><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getAll" target=_parent class=ISymbol>getAll</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getAllConnectionConstraints><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getAllConnectionConstraints" target=_parent class=ISymbol>getAllConnectionConstraints</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getAllEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getAllEdges" target=_parent class=ISymbol>getAllEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getAlternateContent><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.getAlternateContent" target=_parent class=ISymbol>getAlternateContent</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_getAlternateText><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.getAlternateText" target=_parent class=ISymbol>getAlternateText</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_getAppendices><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.getAppendices" target=_parent class=ISymbol>getAppendices</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_getArcSize><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.getArcSize" target=_parent class=ISymbol>getArcSize</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_getAttribute><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.getAttribute" target=_parent class=ISymbol>getAttribute</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_getAttributeName><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.getAttributeName" target=_parent class=ISymbol>getAttributeName</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_getAutoDirection><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.getAutoDirection" target=_parent class=ISymbol>getAutoDirection</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_getBackgroundColor><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.getBackgroundColor" target=_parent class=ISymbol>getBackgroundColor</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_getBackgroundImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getBackgroundImage" target=_parent class=ISymbol>getBackgroundImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getBackgroundPageBounds><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getBackgroundPageBounds" target=_parent class=ISymbol>getBackgroundPageBounds</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getBackgroundPane><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getBackgroundPane" target=_parent class=ISymbol>getBackgroundPane</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getBaseDomain><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.getBaseDomain" target=_parent class=ISymbol>getBaseDomain</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_getBaseUrl><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getBaseUrl')" class=ISymbol>getBaseUrl</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.getBaseUrl" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.getBaseUrl" target=_parent class=IParent>mxUrlConverter</a></div></div></div><div class=SRResult id=SR_getBorder><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getBorder" target=_parent class=ISymbol>getBorder</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getBorderSizes><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getBorderSizes" target=_parent class=ISymbol>getBorderSizes</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getBoundingBox><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getBoundingBox')" class=ISymbol>getBoundingBox</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getBoundingBox" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.getBoundingBox" target=_parent class=IParent>mxGraphHandler</a><a href="../files/view/mxGraphView-js.html#mxGraphView.getBoundingBox" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxUtils-js.html#mxUtils.getBoundingBox" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_getBoundingBoxFromGeometry><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getBoundingBoxFromGeometry" target=_parent class=ISymbol>getBoundingBoxFromGeometry</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getBounds')" class=ISymbol>getBounds</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.getBounds" target=_parent class=IParent>mxCellOverlay</a><a href="../files/view/mxGraphView-js.html#mxGraphView.getBounds" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_getBoundsForGroup><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getBoundsForGroup" target=_parent class=ISymbol>getBoundsForGroup</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCanvas><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getCanvas" target=_parent class=ISymbol>getCanvas</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getCell')" class=ISymbol>getCell</a><div class=ISubIndex><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.getCell" target=_parent class=IParent>mxCellMarker</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getCell" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getCell" target=_parent class=IParent>mxMouseEvent</a></div></div></div><div class=SRResult id=SR_getCellAt><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getCellAt')" class=ISymbol>getCellAt</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getCellAt" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.getCellAt" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_getCellBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getCellBounds')" class=ISymbol>getCellBounds</a><div class=ISubIndex><a href="../files/view/mxCellState-js.html#mxCellState.getCellBounds" target=_parent class=IParent>mxCellState</a><a href="../files/view/mxGraph-js.html#mxGraph.getCellBounds" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_getCellContainmentArea><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCellContainmentArea" target=_parent class=ISymbol>getCellContainmentArea</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCellForEvent><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.getCellForEvent" target=_parent class=ISymbol>getCellForEvent</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_getCellForPopupEvent><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.getCellForPopupEvent" target=_parent class=ISymbol>getCellForPopupEvent</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_getCellGeometry><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCellGeometry" target=_parent class=ISymbol>getCellGeometry</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCellOverlays><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCellOverlays" target=_parent class=ISymbol>getCellOverlays</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getCells')" class=ISymbol>getCells</a><div class=ISubIndex><a href="../files/util/mxClipboard-js.html#mxClipboard.getCells" target=_parent class=IParent>mxClipboard</a><a href="../files/view/mxGraph-js.html#mxGraph.getCells" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.getCells" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_getCellsBeyond><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCellsBeyond" target=_parent class=ISymbol>getCellsBeyond</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCellsForChange><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.getCellsForChange" target=_parent class=ISymbol>getCellsForChange</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_getCellsForChanges><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.getCellsForChanges" target=_parent class=ISymbol>getCellsForChanges</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_getCellsForGroup><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCellsForGroup" target=_parent class=ISymbol>getCellsForGroup</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCellsForUngroup><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCellsForUngroup" target=_parent class=ISymbol>getCellsForUngroup</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCellStates><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getCellStates" target=_parent class=ISymbol>getCellStates</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getCellStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getCellStyle')" class=ISymbol>getCellStyle</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getCellStyle" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxStylesheet-js.html#mxStylesheet.getCellStyle" target=_parent class=IParent>mxStylesheet</a></div></div></div><div class=SRResult id=SR_getCellValidationError><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCellValidationError" target=_parent class=ISymbol>getCellValidationError</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCenterX><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.getCenterX" target=_parent class=ISymbol>getCenterX</a>, <span class=IParent>mxRectangle</span></div></div><div class=SRResult id=SR_getCenterY><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.getCenterY" target=_parent class=ISymbol>getCenterY</a>, <span class=IParent>mxRectangle</span></div></div><div class=SRResult id=SR_getChildAt><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getChildAt')" class=ISymbol>getChildAt</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getChildAt" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getChildAt" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getChildCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getChildCells')" class=ISymbol>getChildCells</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getChildCells" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getChildCells" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getChildCount><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getChildCount')" class=ISymbol>getChildCount</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getChildCount" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getChildCount" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getChildEdges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getChildEdges')" class=ISymbol>getChildEdges</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getChildEdges" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getChildEdges" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getChildNodes><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getChildNodes" target=_parent class=ISymbol>getChildNodes</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getChildOffsetForCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getChildOffsetForCell" target=_parent class=ISymbol>getChildOffsetForCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getChildren><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getChildren" target=_parent class=ISymbol>getChildren</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_getChildVertices><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getChildVertices')" class=ISymbol>getChildVertices</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getChildVertices" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getChildVertices" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getClientX><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.getClientX" target=_parent class=ISymbol>getClientX</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_getClientY><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.getClientY" target=_parent class=ISymbol>getClientY</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_getCloneableCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCloneableCells" target=_parent class=ISymbol>getCloneableCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCodec><div class=IEntry><a href="../files/io/mxCodecRegistry-js.html#mxCodecRegistry.getCodec" target=_parent class=ISymbol>getCodec</a>, <span class=IParent>mxCodecRegistry</span></div></div><div class=SRResult id=SR_getColor><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getColor" target=_parent class=ISymbol>getColor</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getConnectImage><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.getConnectImage" target=_parent class=ISymbol>getConnectImage</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_getConnectionConstraint><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getConnectionConstraint" target=_parent class=ISymbol>getConnectionConstraint</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getConnectionPoint><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getConnectionPoint" target=_parent class=ISymbol>getConnectionPoint</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getConnections><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getConnections')" class=ISymbol>getConnections</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getConnections" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getConnections" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getConstraint><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.getConstraint" target=_parent class=ISymbol>getConstraint</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_getContentNode><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.getContentNode" target=_parent class=ISymbol>getContentNode</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_getControlBounds><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.getControlBounds" target=_parent class=ISymbol>getControlBounds</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_getCoreCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getCoreCell')" class=ISymbol>getCoreCell</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.getCoreCell" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.getCoreCell" target=_parent class=IParent>mxGraphHierarchyNode</a></div></div></div><div class=SRResult id=SR_getCoverPages><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.getCoverPages" target=_parent class=ISymbol>getCoverPages</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_getCurrentCellStyle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCurrentCellStyle" target=_parent class=ISymbol>getCurrentCellStyle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCurrentPoints><div class=IEntry><a href="../files/handler/mxEdgeSegmentHandler-js.html#getCurrentPoints" target=_parent class=ISymbol>getCurrentPoints</a></div></div><div class=SRResult id=SR_getCurrentRoot><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCurrentRoot" target=_parent class=ISymbol>getCurrentRoot</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCurrentStrokeWidth><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.getCurrentStrokeWidth" target=_parent class=ISymbol>getCurrentStrokeWidth</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_getCurrentStyle><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getCurrentStyle" target=_parent class=ISymbol>getCurrentStyle</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getCurrentValue><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.getCurrentValue" target=_parent class=ISymbol>getCurrentValue</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_getCursor><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.getCursor" target=_parent class=ISymbol>getCursor</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_getCursorForBend><div class=IEntry><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.getCursorForBend" target=_parent class=ISymbol>getCursorForBend</a>, <span class=IParent>mxElbowEdgeHandler</span></div></div><div class=SRResult id=SR_getCursorForCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCursorForCell" target=_parent class=ISymbol>getCursorForCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCursorForMouseEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getCursorForMouseEvent" target=_parent class=ISymbol>getCursorForMouseEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getCylinderSize><div class=IEntry><a href="../files/shape/mxCylinder-js.html#mxCylinder.getCylinderSize" target=_parent class=ISymbol>getCylinderSize</a>, <span class=IParent>mxCylinder</span></div></div><div class=SRResult id=SR_getDecoratorPane><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getDecoratorPane" target=_parent class=ISymbol>getDecoratorPane</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getDefaultBundle><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.getDefaultBundle" target=_parent class=ISymbol>getDefaultBundle</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_getDefaultEdgeStyle><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.getDefaultEdgeStyle" target=_parent class=ISymbol>getDefaultEdgeStyle</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_getDefaultParent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getDefaultParent" target=_parent class=ISymbol>getDefaultParent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getDefaultVertexStyle><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.getDefaultVertexStyle" target=_parent class=ISymbol>getDefaultVertexStyle</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_getDeletableCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getDeletableCells" target=_parent class=ISymbol>getDeletableCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getDelta><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getDelta')" class=ISymbol>getDelta</a><div class=ISubIndex><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.getDelta" target=_parent class=IParent>mxGraphHandler</a><a href="../files/util/mxGuide-js.html#mxGuide.getDelta" target=_parent class=IParent>mxGuide</a><a href="../files/util/mxMorphing-js.html#mxMorphing.getDelta" target=_parent class=IParent>mxMorphing</a></div></div></div><div class=SRResult id=SR_getDescendants><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getDescendants" target=_parent class=ISymbol>getDescendants</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_getDirectedBounds><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getDirectedBounds" target=_parent class=ISymbol>getDirectedBounds</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getDirectedEdgeCount><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getDirectedEdgeCount" target=_parent class=ISymbol>getDirectedEdgeCount</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_getDocType><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.getDocType" target=_parent class=ISymbol>getDocType</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_getDocumentElement><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.getDocumentElement" target=_parent class=ISymbol>getDocumentElement</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_getDocumentHeight><div class=IEntry><a href="../files/util/mxDivResizer-js.html#mxDivResizer.getDocumentHeight" target=_parent class=ISymbol>getDocumentHeight</a>, <span class=IParent>mxDivResizer</span></div></div><div class=SRResult id=SR_getDocumentScrollOrigin><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getDocumentScrollOrigin" target=_parent class=ISymbol>getDocumentScrollOrigin</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getDocumentSize><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getDocumentSize" target=_parent class=ISymbol>getDocumentSize</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getDocumentWidth><div class=IEntry><a href="../files/util/mxDivResizer-js.html#mxDivResizer.getDocumentWidth" target=_parent class=ISymbol>getDocumentWidth</a>, <span class=IParent>mxDivResizer</span></div></div><div class=SRResult id=SR_getDrawPane><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getDrawPane" target=_parent class=ISymbol>getDrawPane</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getDropTarget><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getDropTarget')" class=ISymbol>getDropTarget</a><div class=ISubIndex><a href="../files/util/mxDragSource-js.html#mxDragSource.getDropTarget" target=_parent class=IParent>mxDragSource</a><a href="../files/view/mxGraph-js.html#mxGraph.getDropTarget" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_getEdgeAt><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getEdgeAt')" class=ISymbol>getEdgeAt</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getEdgeAt" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getEdgeAt" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getEdgeColor><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.getEdgeColor" target=_parent class=ISymbol>getEdgeColor</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_getEdgeCount><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getEdgeCount')" class=ISymbol>getEdgeCount</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getEdgeCount" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getEdgeCount" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getEdgeId><div class=IEntry><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.getEdgeId" target=_parent class=ISymbol>getEdgeId</a>, <span class=IParent>mxParallelEdgeLayout</span></div></div><div class=SRResult id=SR_getEdgeIndex><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.getEdgeIndex" target=_parent class=ISymbol>getEdgeIndex</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_getEdges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getEdges')" class=ISymbol>getEdges</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getEdges" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getEdges" target=_parent class=IParent>mxGraphModel</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.getEdges" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.getEdges" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_getEdgesBetween><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getEdgesBetween')" class=ISymbol>getEdgesBetween</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getEdgesBetween" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getEdgesBetween" target=_parent class=IParent>mxGraphModel</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.getEdgesBetween" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.getEdgesBetween" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_getEdgeStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getEdgeStyle')" class=ISymbol>getEdgeStyle</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.getEdgeStyle" target=_parent class=IParent>mxEditor</a><a href="../files/view/mxGraphView-js.html#mxGraphView.getEdgeStyle" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_getEdgeValidationError><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getEdgeValidationError" target=_parent class=ISymbol>getEdgeValidationError</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getEdgeWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getEdgeWidth')" class=ISymbol>getEdgeWidth</a><div class=ISubIndex><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.getEdgeWidth" target=_parent class=IParent>mxArrowConnector</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.getEdgeWidth" target=_parent class=IParent>mxConnectionHandler</a></div></div></div><div class=SRResult id=SR_getEditingCell><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.getEditingCell" target=_parent class=ISymbol>getEditingCell</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_getEditingValue><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getEditingValue" target=_parent class=ISymbol>getEditingValue</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getEditorBounds><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.getEditorBounds" target=_parent class=ISymbol>getEditorBounds</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_getElement><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.getElement" target=_parent class=ISymbol>getElement</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_getElementById><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.getElementById" target=_parent class=ISymbol>getElementById</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_getElementForEvent><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.getElementForEvent" target=_parent class=ISymbol>getElementForEvent</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_getEmptyBounds><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getEmptyBounds" target=_parent class=ISymbol>getEmptyBounds</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getEmptyLabelText><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.getEmptyLabelText" target=_parent class=ISymbol>getEmptyLabelText</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_getEndArrowWidth><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.getEndArrowWidth" target=_parent class=ISymbol>getEndArrowWidth</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_getEvent><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getEvent" target=_parent class=ISymbol>getEvent</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_getEventSource><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.getEventSource" target=_parent class=ISymbol>getEventSource</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_getEventState><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getEventState" target=_parent class=ISymbol>getEventState</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getExportableCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getExportableCells" target=_parent class=ISymbol>getExportableCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getFieldName><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.getFieldName" target=_parent class=ISymbol>getFieldName</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_getFieldTemplate><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.getFieldTemplate" target=_parent class=ISymbol>getFieldTemplate</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_getFirstSelectableCell><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.getFirstSelectableCell" target=_parent class=ISymbol>getFirstSelectableCell</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_getFixedTerminalPoint><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getFixedTerminalPoint" target=_parent class=ISymbol>getFixedTerminalPoint</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getFloatingTerminalPoint><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getFloatingTerminalPoint" target=_parent class=ISymbol>getFloatingTerminalPoint</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getFoldableCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getFoldableCells" target=_parent class=ISymbol>getFoldableCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getFoldingImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getFoldingImage" target=_parent class=ISymbol>getFoldingImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getFunction><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.getFunction" target=_parent class=ISymbol>getFunction</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_getFunctionName><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getFunctionName" target=_parent class=ISymbol>getFunctionName</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getGeneralPurposeVariable><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getGeneralPurposeVariable')" class=ISymbol>getGeneralPurposeVariable</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.getGeneralPurposeVariable" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.getGeneralPurposeVariable" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.getGeneralPurposeVariable" target=_parent class=IParent>mxGraphHierarchyNode</a></div></div></div><div class=SRResult id=SR_getGeometry><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getGeometry')" class=ISymbol>getGeometry</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getGeometry" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getGeometry" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getGradientBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getGradientBounds')" class=ISymbol>getGradientBounds</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.getGradientBounds" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.getGradientBounds" target=_parent class=IParent>mxSwimlane</a></div></div></div><div class=SRResult id=SR_getGraph><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getGraph')" class=ISymbol>getGraph</a><div class=ISubIndex><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.getGraph" target=_parent class=IParent>mxGraphLayout</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.getGraph" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.getGraph" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_getGraphBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getGraphBounds')" class=ISymbol>getGraphBounds</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getGraphBounds" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphView-js.html#mxGraphView.getGraphBounds" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_getGraphForEvent><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.getGraphForEvent" target=_parent class=ISymbol>getGraphForEvent</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_getGraphX><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getGraphX" target=_parent class=ISymbol>getGraphX</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_getGraphY><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getGraphY" target=_parent class=ISymbol>getGraphY</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_getGridSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getGridSize" target=_parent class=ISymbol>getGridSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getGuideColor><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.getGuideColor" target=_parent class=ISymbol>getGuideColor</a>, <span class=IParent>mxGuide</span></div></div><div class=SRResult id=SR_getGuideStates><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.getGuideStates" target=_parent class=ISymbol>getGuideStates</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_getGuideTolerance><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.getGuideTolerance" target=_parent class=ISymbol>getGuideTolerance</a>, <span class=IParent>mxGuide</span></div></div><div class=SRResult id=SR_getHandledSelectionCells><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.getHandledSelectionCells" target=_parent class=ISymbol>getHandledSelectionCells</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_getHandleFillColor><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getHandleFillColor" target=_parent class=ISymbol>getHandleFillColor</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_getHandleForEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getHandleForEvent')" class=ISymbol>getHandleForEvent</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getHandleForEvent" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.getHandleForEvent" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_getHandler><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.getHandler" target=_parent class=ISymbol>getHandler</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_getHotspot><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.getHotspot" target=_parent class=ISymbol>getHotspot</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_getHtmlValue><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.getHtmlValue" target=_parent class=ISymbol>getHtmlValue</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_getIconPosition><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.getIconPosition" target=_parent class=ISymbol>getIconPosition</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_getId><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getId')" class=ISymbol>getId</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getId" target=_parent class=IParent>mxCell</a><a href="../files/io/mxCodec-js.html#mxCodec.getId" target=_parent class=IParent>mxCodec</a></div></div></div><div class=SRResult id=SR_getImage><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getImage')" class=ISymbol>getImage</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getImage" target=_parent class=IParent>mxGraph</a><a href="../files/util/mxImageBundle-js.html#mxImageBundle.getImage" target=_parent class=IParent>mxImageBundle</a></div></div></div><div class=SRResult id=SR_getImageBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getImageBounds')" class=ISymbol>getImageBounds</a><div class=ISubIndex><a href="../files/shape/mxLabel-js.html#mxLabel.getImageBounds" target=_parent class=IParent>mxLabel</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.getImageBounds" target=_parent class=IParent>mxSwimlane</a></div></div></div><div class=SRResult id=SR_getImageForConstraint><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.getImageForConstraint" target=_parent class=ISymbol>getImageForConstraint</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_getImageFromBundles><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getImageFromBundles" target=_parent class=ISymbol>getImageFromBundles</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getImportableCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getImportableCells" target=_parent class=ISymbol>getImportableCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getIncomingEdges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getIncomingEdges')" class=ISymbol>getIncomingEdges</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getIncomingEdges" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getIncomingEdges" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getIndex><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.getIndex" target=_parent class=ISymbol>getIndex</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_getIndicatorBounds><div class=IEntry><a href="../files/shape/mxLabel-js.html#mxLabel.getIndicatorBounds" target=_parent class=ISymbol>getIndicatorBounds</a>, <span class=IParent>mxLabel</span></div></div><div class=SRResult id=SR_getIndicatorColor><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getIndicatorColor" target=_parent class=ISymbol>getIndicatorColor</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getIndicatorGradientColor><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getIndicatorGradientColor" target=_parent class=ISymbol>getIndicatorGradientColor</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getIndicatorImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getIndicatorImage" target=_parent class=ISymbol>getIndicatorImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getIndicatorShape><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getIndicatorShape" target=_parent class=ISymbol>getIndicatorShape</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getInitialCellForEvent><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.getInitialCellForEvent" target=_parent class=ISymbol>getInitialCellForEvent</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_getInitialValue><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.getInitialValue" target=_parent class=ISymbol>getInitialValue</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_getInnerHtml><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getInnerHtml" target=_parent class=ISymbol>getInnerHtml</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getKeys><div class=IEntry><a href="../files/util/mxDictionary-js.html#mxDictionary.getKeys" target=_parent class=ISymbol>getKeys</a>, <span class=IParent>mxDictionary</span></div></div><div class=SRResult id=SR_getLabel><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getLabel" target=_parent class=ISymbol>getLabel</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getLabelBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getLabelBounds')" class=ISymbol>getLabelBounds</a><div class=ISubIndex><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.getLabelBounds" target=_parent class=IParent>mxCellRenderer</a><a href="../files/shape/mxDoubleEllipse-js.html#mxDoubleEllipse.getLabelBounds" target=_parent class=IParent>mxDoubleEllipse</a><a href="../files/shape/mxShape-js.html#mxShape.getLabelBounds" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.getLabelBounds" target=_parent class=IParent>mxSwimlane</a></div></div></div><div class=SRResult id=SR_getLabelMargins><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.getLabelMargins" target=_parent class=ISymbol>getLabelMargins</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_getLabelValue><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.getLabelValue" target=_parent class=ISymbol>getLabelValue</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_getLayout><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.getLayout" target=_parent class=ISymbol>getLayout</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_getLayoutCells><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.getLayoutCells" target=_parent class=ISymbol>getLayoutCells</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_getLinkForCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getLinkForCell" target=_parent class=ISymbol>getLinkForCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getLinkForCellState><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getLinkForCellState')" class=ISymbol>getLinkForCellState</a><div class=ISubIndex><a href="../files/util/mxImageExport-js.html#mxImageExport.getLinkForCellState" target=_parent class=IParent>mxImageExport</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.getLinkForCellState" target=_parent class=IParent>mxPrintPreview</a></div></div></div><div class=SRResult id=SR_getMainEvent><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.getMainEvent" target=_parent class=ISymbol>getMainEvent</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_getMargin><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.getMargin" target=_parent class=ISymbol>getMargin</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_getMarkedState><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.getMarkedState" target=_parent class=ISymbol>getMarkedState</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_getMarkerColor><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.getMarkerColor" target=_parent class=ISymbol>getMarkerColor</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_getMaximumGraphBounds><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getMaximumGraphBounds" target=_parent class=ISymbol>getMaximumGraphBounds</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getMinimumSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getMinimumSize')" class=ISymbol>getMinimumSize</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.getMinimumSize" target=_parent class=IParent>mxCellEditor</a><a href="../files/util/mxWindow-js.html#mxWindow.getMinimumSize" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_getModel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getModel')" class=ISymbol>getModel</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getModel" target=_parent class=IParent>mxGraph</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.getModel" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.getModel" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_getMovableCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getMovableCells" target=_parent class=ISymbol>getMovableCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getName><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getName')" class=ISymbol>getName</a><div class=ISubIndex><a href="../files/util/mxEventObject-js.html#mxEventObject.getName" target=_parent class=IParent>mxEventObject</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.getName" target=_parent class=IParent>mxObjectCodec</a><a href="../files/view/mxStyleRegistry-js.html#mxStyleRegistry.getName" target=_parent class=IParent>mxStyleRegistry</a></div></div></div><div class=SRResult id=SR_getNearestCommonAncestor><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getNearestCommonAncestor" target=_parent class=ISymbol>getNearestCommonAncestor</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_getNextLayerConnectedCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getNextLayerConnectedCells')" class=ISymbol>getNextLayerConnectedCells</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.getNextLayerConnectedCells" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.getNextLayerConnectedCells" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.getNextLayerConnectedCells" target=_parent class=IParent>mxGraphHierarchyNode</a></div></div></div><div class=SRResult id=SR_getNextPoint><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getNextPoint" target=_parent class=ISymbol>getNextPoint</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getNumber><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getNumber" target=_parent class=ISymbol>getNumber</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getObject><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.getObject" target=_parent class=ISymbol>getObject</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_getOffset><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getOffset" target=_parent class=ISymbol>getOffset</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getOpposites><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getOpposites')" class=ISymbol>getOpposites</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getOpposites" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getOpposites" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getOrigin><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getOrigin" target=_parent class=ISymbol>getOrigin</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_getOriginForCell><div class=IEntry><a href="../files/util/mxMorphing-js.html#mxMorphing.getOriginForCell" target=_parent class=ISymbol>getOriginForCell</a>, <span class=IParent>mxMorphing</span></div></div><div class=SRResult id=SR_getOuterHtml><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getOuterHtml" target=_parent class=ISymbol>getOuterHtml</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getOutgoingEdges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getOutgoingEdges')" class=ISymbol>getOutgoingEdges</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getOutgoingEdges" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getOutgoingEdges" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getOutlineConstraint><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getOutlineConstraint" target=_parent class=ISymbol>getOutlineConstraint</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getOutlineOffset><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.getOutlineOffset" target=_parent class=ISymbol>getOutlineOffset</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_getOverlap><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getOverlap" target=_parent class=ISymbol>getOverlap</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getOverlayPane><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getOverlayPane" target=_parent class=ISymbol>getOverlayPane</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getPaintBounds><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.getPaintBounds" target=_parent class=ISymbol>getPaintBounds</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_getParent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getParent')" class=ISymbol>getParent</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getParent" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getParent" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getParentOffset><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.getParentOffset" target=_parent class=ISymbol>getParentOffset</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_getParentPath><div class=IEntry><a href="../files/model/mxCellPath-js.html#mxCellPath.getParentPath" target=_parent class=ISymbol>getParentPath</a>, <span class=IParent>mxCellPath</span></div></div><div class=SRResult id=SR_getParents><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getParents" target=_parent class=ISymbol>getParents</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_getParentSize><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.getParentSize" target=_parent class=ISymbol>getParentSize</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_getPerimeterBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getPerimeterBounds')" class=ISymbol>getPerimeterBounds</a><div class=ISubIndex><a href="../files/view/mxCellState-js.html#mxCellState.getPerimeterBounds" target=_parent class=IParent>mxCellState</a><a href="../files/view/mxGraphView-js.html#mxGraphView.getPerimeterBounds" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_getPerimeterFunction><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getPerimeterFunction" target=_parent class=ISymbol>getPerimeterFunction</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getPerimeterPoint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getPerimeterPoint')" class=ISymbol>getPerimeterPoint</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxGraphView.getPerimeterPoint" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxUtils-js.html#mxUtils.getPerimeterPoint" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_getPoint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getPoint')" class=ISymbol>getPoint</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxGraphView.getPoint" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxRectangle-js.html#mxRectangle.getPoint" target=_parent class=IParent>mxRectangle</a></div></div></div><div class=SRResult id=SR_getPointForEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getPointForEvent')" class=ISymbol>getPointForEvent</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getPointForEvent" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.getPointForEvent" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_getPosition><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.getPosition" target=_parent class=ISymbol>getPosition</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_getPreferredPageSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getPreferredPageSize" target=_parent class=ISymbol>getPreferredPageSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getPreferredSizeForCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getPreferredSizeForCell" target=_parent class=ISymbol>getPreferredSizeForCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getPrettyXML><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getPrettyXML" target=_parent class=ISymbol>getPrettyXML</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getPreviewBounds><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.getPreviewBounds" target=_parent class=ISymbol>getPreviewBounds</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_getPreviewPoints><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getPreviewPoints')" class=ISymbol>getPreviewPoints</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#getPreviewPoints" target=_parent class=IParent>Global</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getPreviewPoints" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_getPreviewTerminalState><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getPreviewTerminalState" target=_parent class=ISymbol>getPreviewTerminalState</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_getPreviousLayerConnectedCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getPreviousLayerConnectedCells')" class=ISymbol>getPreviousLayerConnectedCells</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.getPreviousLayerConnectedCells" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.getPreviousLayerConnectedCells" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.getPreviousLayerConnectedCells" target=_parent class=IParent>mxGraphHierarchyNode</a></div></div></div><div class=SRResult id=SR_getProperties><div class=IEntry><a href="../files/util/mxEventObject-js.html#mxEventObject.getProperties" target=_parent class=ISymbol>getProperties</a>, <span class=IParent>mxEventObject</span></div></div><div class=SRResult id=SR_getProperty><div class=IEntry><a href="../files/util/mxEventObject-js.html#mxEventObject.getProperty" target=_parent class=ISymbol>getProperty</a>, <span class=IParent>mxEventObject</span></div></div><div class=SRResult id=SR_getRadius><div class=IEntry><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.getRadius" target=_parent class=ISymbol>getRadius</a>, <span class=IParent>mxCircleLayout</span></div></div><div class=SRResult id=SR_getRankValue><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.getRankValue" target=_parent class=ISymbol>getRankValue</a>, <span class=IParent>mxGraphHierarchyNode</span></div></div><div class=SRResult id=SR_getRelativePoint><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getRelativePoint" target=_parent class=ISymbol>getRelativePoint</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getRoot><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getRoot')" class=ISymbol>getRoot</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getRoot" target=_parent class=IParent>mxGraphModel</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.getRoot" target=_parent class=IParent>mxPrintPreview</a></div></div></div><div class=SRResult id=SR_getRootTitle><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.getRootTitle" target=_parent class=ISymbol>getRootTitle</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_getRotatedPoint><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getRotatedPoint" target=_parent class=ISymbol>getRotatedPoint</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getRotation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getRotation')" class=ISymbol>getRotation</a><div class=ISubIndex><a href="../files/handler/mxHandle-js.html#mxHandle.getRotation" target=_parent class=IParent>mxHandle</a><a href="../files/shape/mxPolyline-js.html#mxPolyline.getRotation" target=_parent class=IParent>mxPolyline</a><a href="../files/shape/mxShape-js.html#mxShape.getRotation" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_getRotationHandlePosition><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.getRotationHandlePosition" target=_parent class=ISymbol>getRotationHandlePosition</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_getRoutingCenterX><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getRoutingCenterX" target=_parent class=ISymbol>getRoutingCenterX</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getRoutingCenterY><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getRoutingCenterY" target=_parent class=ISymbol>getRoutingCenterY</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getScale><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getScale" target=_parent class=ISymbol>getScale</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getScaleForPageCount><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getScaleForPageCount" target=_parent class=ISymbol>getScaleForPageCount</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getScrollOrigin><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getScrollOrigin" target=_parent class=ISymbol>getScrollOrigin</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getSelectionBorderBounds><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.getSelectionBorderBounds" target=_parent class=ISymbol>getSelectionBorderBounds</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_getSelectionBounds><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.getSelectionBounds" target=_parent class=ISymbol>getSelectionBounds</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_getSelectionCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSelectionCell" target=_parent class=ISymbol>getSelectionCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSelectionCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSelectionCells" target=_parent class=ISymbol>getSelectionCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSelectionCellsForChanges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSelectionCellsForChanges" target=_parent class=ISymbol>getSelectionCellsForChanges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSelectionColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getSelectionColor')" class=ISymbol>getSelectionColor</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getSelectionColor" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.getSelectionColor" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_getSelectionCount><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSelectionCount" target=_parent class=ISymbol>getSelectionCount</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSelectionModel><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSelectionModel" target=_parent class=ISymbol>getSelectionModel</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSelectionPoints><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getSelectionPoints" target=_parent class=ISymbol>getSelectionPoints</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_getSelectionStrokeWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getSelectionStrokeWidth')" class=ISymbol>getSelectionStrokeWidth</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getSelectionStrokeWidth" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.getSelectionStrokeWidth" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_getShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.getShape" target=_parent class=ISymbol>getShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_getShapeConstructor><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.getShapeConstructor" target=_parent class=ISymbol>getShapeConstructor</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_getShapeRotation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getShapeRotation')" class=ISymbol>getShapeRotation</a><div class=ISubIndex><a href="../files/shape/mxPolyline-js.html#mxPolyline.getShapeRotation" target=_parent class=IParent>mxPolyline</a><a href="../files/shape/mxShape-js.html#mxShape.getShapeRotation" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.getShapeRotation" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_getShapesForState><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.getShapesForState" target=_parent class=ISymbol>getShapesForState</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_getSizeForString><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getSizeForString" target=_parent class=ISymbol>getSizeForString</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getSizerBounds><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.getSizerBounds" target=_parent class=ISymbol>getSizerBounds</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_getSnapToTerminalTolerance><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.getSnapToTerminalTolerance" target=_parent class=ISymbol>getSnapToTerminalTolerance</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_getSource><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getSource')" class=ISymbol>getSource</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.getSource" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getSource" target=_parent class=IParent>mxMouseEvent</a></div></div></div><div class=SRResult id=SR_getSourceContainerSize><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.getSourceContainerSize" target=_parent class=ISymbol>getSourceContainerSize</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_getSourceGraphBounds><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.getSourceGraphBounds" target=_parent class=ISymbol>getSourceGraphBounds</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_getSourcePerimeterPoint><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.getSourcePerimeterPoint" target=_parent class=ISymbol>getSourcePerimeterPoint</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_getSpacing><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.getSpacing" target=_parent class=ISymbol>getSpacing</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_getSpecialBundle><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.getSpecialBundle" target=_parent class=ISymbol>getSpecialBundle</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_getStartArrowWidth><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.getStartArrowWidth" target=_parent class=ISymbol>getStartArrowWidth</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_getStartSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getStartSize" target=_parent class=ISymbol>getStartSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getState><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getState')" class=ISymbol>getState</a><div class=ISubIndex><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.getState" target=_parent class=IParent>mxCellMarker</a><a href="../files/view/mxGraphView-js.html#mxGraphView.getState" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getState" target=_parent class=IParent>mxMouseEvent</a></div></div></div><div class=SRResult id=SR_getStateForEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getStateForEvent')" class=ISymbol>getStateForEvent</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.getStateForEvent" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.getStateForEvent" target=_parent class=IParent>mxTooltipHandler</a></div></div></div><div class=SRResult id=SR_getStates><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getStates" target=_parent class=ISymbol>getStates</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getStateToMark><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.getStateToMark" target=_parent class=ISymbol>getStateToMark</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_getStatus><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.getStatus" target=_parent class=ISymbol>getStatus</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_getStencil><div class=IEntry><a href="../files/shape/mxStencilRegistry-js.html#mxStencilRegistry.getStencil" target=_parent class=ISymbol>getStencil</a>, <span class=IParent>mxStencilRegistry</span></div></div><div class=SRResult id=SR_getStringValue><div class=IEntry><a href="../files/io/mxStylesheetCodec-js.html#mxStylesheetCodec.getStringValue" target=_parent class=ISymbol>getStringValue</a>, <span class=IParent>mxStylesheetCodec</span></div></div><div class=SRResult id=SR_getStrokeWidth><div class=IEntry><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.getStrokeWidth" target=_parent class=ISymbol>getStrokeWidth</a>, <span class=IParent>mxCellHighlight</span></div></div><div class=SRResult id=SR_getStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getStyle')" class=ISymbol>getStyle</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getStyle" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getStyle" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getStylename><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getStylename" target=_parent class=ISymbol>getStylename</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getStylenames><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getStylenames" target=_parent class=ISymbol>getStylenames</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getStylesheet><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getStylesheet" target=_parent class=ISymbol>getStylesheet</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSvgGradient><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.getSvgGradient" target=_parent class=ISymbol>getSvgGradient</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_getSvgScreenOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getSvgScreenOffset')" class=ISymbol>getSvgScreenOffset</a><div class=ISubIndex><a href="../files/shape/mxImageShape-js.html#mxImageShape.getSvgScreenOffset" target=_parent class=IParent>mxImageShape</a><a href="../files/shape/mxShape-js.html#mxShape.getSvgScreenOffset" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.getSvgScreenOffset" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_getSwimlane><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSwimlane" target=_parent class=ISymbol>getSwimlane</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSwimlaneArcSize><div class=IEntry><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.getSwimlaneArcSize" target=_parent class=ISymbol>getSwimlaneArcSize</a>, <span class=IParent>mxSwimlane</span></div></div><div class=SRResult id=SR_getSwimlaneAt><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSwimlaneAt" target=_parent class=ISymbol>getSwimlaneAt</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getSwimlaneDirection><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getSwimlaneDirection" target=_parent class=ISymbol>getSwimlaneDirection</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getTable><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.getTable" target=_parent class=ISymbol>getTable</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_getTargetPerimeterPoint><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.getTargetPerimeterPoint" target=_parent class=ISymbol>getTargetPerimeterPoint</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_getTemplate><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.getTemplate" target=_parent class=ISymbol>getTemplate</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_getTerminal><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getTerminal')" class=ISymbol>getTerminal</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getTerminal" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getTerminal" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_getTerminalForPort><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getTerminalForPort" target=_parent class=ISymbol>getTerminalForPort</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getTerminalPoint><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.getTerminalPoint" target=_parent class=ISymbol>getTerminalPoint</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_getTerminalPort><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getTerminalPort" target=_parent class=ISymbol>getTerminalPort</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getText><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.getText" target=_parent class=ISymbol>getText</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_getTextContent><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getTextContent" target=_parent class=ISymbol>getTextContent</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getTextCss><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getTextCss')" class=ISymbol>getTextCss</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.getTextCss" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/shape/mxText-js.html#mxText.getTextCss" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_getTextRotation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getTextRotation')" class=ISymbol>getTextRotation</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.getTextRotation" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.getTextRotation" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_getTextScale><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.getTextScale" target=_parent class=ISymbol>getTextScale</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_getTitle><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.getTitle" target=_parent class=ISymbol>getTitle</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_getTitleSize><div class=IEntry><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.getTitleSize" target=_parent class=ISymbol>getTitleSize</a>, <span class=IParent>mxSwimlane</span></div></div><div class=SRResult id=SR_getTolerance><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getTolerance')" class=ISymbol>getTolerance</a><div class=ISubIndex><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.getTolerance" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.getTolerance" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_getTooltip><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getTooltip" target=_parent class=ISymbol>getTooltip</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getTooltipForCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getTooltipForCell" target=_parent class=ISymbol>getTooltipForCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getTooltipForNode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getTooltipForNode')" class=ISymbol>getTooltipForNode</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#getTooltipForNode" target=_parent class=IParent>Global</a><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.getTooltipForNode" target=_parent class=IParent>mxElbowEdgeHandler</a></div></div></div><div class=SRResult id=SR_getTopmostCells><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getTopmostCells" target=_parent class=ISymbol>getTopmostCells</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_getTotalRotation><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.getTotalRotation" target=_parent class=ISymbol>getTotalRotation</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_getTranslate><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.getTranslate" target=_parent class=ISymbol>getTranslate</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_getTranslateForEvent><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.getTranslateForEvent" target=_parent class=ISymbol>getTranslateForEvent</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_getTranslateForRoot><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getTranslateForRoot" target=_parent class=ISymbol>getTranslateForRoot</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getUrlImage><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.getUrlImage" target=_parent class=ISymbol>getUrlImage</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_getUrlPost><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.getUrlPost" target=_parent class=ISymbol>getUrlPost</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_getValidState><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.getValidState" target=_parent class=ISymbol>getValidState</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_getValue><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getValue')" class=ISymbol>getValue</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.getValue" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.getValue" target=_parent class=IParent>mxGraphModel</a><a href="../files/view/mxStyleRegistry-js.html#mxStyleRegistry.getValue" target=_parent class=IParent>mxStyleRegistry</a><a href="../files/util/mxUtils-js.html#mxUtils.getValue" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_getValues><div class=IEntry><a href="../files/util/mxDictionary-js.html#mxDictionary.getValues" target=_parent class=ISymbol>getValues</a>, <span class=IParent>mxDictionary</span></div></div><div class=SRResult id=SR_getVertexBounds><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.getVertexBounds" target=_parent class=ISymbol>getVertexBounds</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_getVerticalAlign><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getVerticalAlign" target=_parent class=ISymbol>getVerticalAlign</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getView><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.getView" target=_parent class=ISymbol>getView</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_getViewXml><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.getViewXml" target=_parent class=ISymbol>getViewXml</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_getVisibleTerminal><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getVisibleTerminal')" class=ISymbol>getVisibleTerminal</a><div class=ISubIndex><a href="../files/view/mxCellState-js.html#mxCellState.getVisibleTerminal" target=_parent class=IParent>mxCellState</a><a href="../files/view/mxGraphView-js.html#mxGraphView.getVisibleTerminal" target=_parent class=IParent>mxGraphView</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.getVisibleTerminal" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.getVisibleTerminal" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_getVisibleTerminalState><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.getVisibleTerminalState" target=_parent class=ISymbol>getVisibleTerminalState</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_getVmlDashPattern><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.getVmlDashPattern" target=_parent class=ISymbol>getVmlDashPattern</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_getWindow><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.getWindow" target=_parent class=ISymbol>getWindow</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_getX><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getX')" class=ISymbol>getX</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.getX" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getX" target=_parent class=IParent>mxMouseEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.getX" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_getXml><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getXml')" class=ISymbol>getXml</a><div class=ISubIndex><a href="../files/util/mxUtils-js.html#mxUtils.getXml" target=_parent class=IParent>mxUtils</a><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.getXml" target=_parent class=IParent>mxXmlRequest</a></div></div></div><div class=SRResult id=SR_getY><div class=IEntry><a href="javascript:searchResults.Toggle('SR_getY')" class=ISymbol>getY</a><div class=ISubIndex><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.getY" target=_parent class=IParent>mxMouseEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.getY" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_gradients><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.gradients" target=_parent class=ISymbol>gradients</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_graph><div class=IEntry><a href="javascript:searchResults.Toggle('SR_graph')" class=ISymbol>graph</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.graph" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/view/mxCellEditor-js.html#mxCellEditor.graph" target=_parent class=IParent>mxCellEditor</a><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.graph" target=_parent class=IParent>mxCellHighlight</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.graph" target=_parent class=IParent>mxCellMarker</a><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.graph" target=_parent class=IParent>mxCellStatePreview</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.graph" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.graph" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.graph" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/editor/mxEditor-js.html#mxEditor.graph" target=_parent class=IParent>mxEditor</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.graph" target=_parent class=IParent>mxGraphHandler</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.graph" target=_parent class=IParent>mxGraphLayout</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.graph" target=_parent class=IParent>mxGraphSelectionModel</a><a href="../files/view/mxGraphView-js.html#mxGraphView.graph" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxGuide-js.html#mxGuide.graph" target=_parent class=IParent>mxGuide</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.graph" target=_parent class=IParent>mxKeyHandler</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.graph" target=_parent class=IParent>mxLayoutManager</a><a href="../files/util/mxMorphing-js.html#mxMorphing.graph" target=_parent class=IParent>mxMorphing</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.graph" target=_parent class=IParent>mxPanningHandler</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.graph" target=_parent class=IParent>mxPopupMenuHandler</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.graph" target=_parent class=IParent>mxPrintPreview</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.graph" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.graph" target=_parent class=IParent>mxSwimlaneManager</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.graph" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.graph" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_Graph_spcappearance><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Graph_appearance" target=_parent class=ISymbol>Graph appearance</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_Graph_spcbehaviour><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Graph_behaviour" target=_parent class=ISymbol>Graph behaviour</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_Graph_spcdisplay><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Graph_display" target=_parent class=ISymbol>Graph display</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_Graph_spcevents><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Graph_events" target=_parent class=ISymbol>Graph events</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_graphBounds><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.graphBounds" target=_parent class=ISymbol>graphBounds</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_graphContainsEvent><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.graphContainsEvent" target=_parent class=ISymbol>graphContainsEvent</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_graphModelChanged><div class=IEntry><a href="javascript:searchResults.Toggle('SR_graphModelChanged')" class=ISymbol>graphModelChanged</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.graphModelChanged" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/view/mxGraph-js.html#mxGraph.graphModelChanged" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_graphRenderHint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_graphRenderHint')" class=ISymbol>graphRenderHint</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.graphRenderHint" target=_parent class=IParent>mxEditor</a><a href="../files/view/mxOutline-js.html#mxOutline.graphRenderHint" target=_parent class=IParent>mxOutline</a></div></div></div><div class=SRResult id=SR_graphX><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.graphX" target=_parent class=ISymbol>graphX</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_graphY><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.graphY" target=_parent class=ISymbol>graphY</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_gridEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_gridEnabled')" class=ISymbol>gridEnabled</a><div class=ISubIndex><a href="../files/util/mxDragSource-js.html#mxDragSource.gridEnabled" target=_parent class=IParent>mxDragSource</a><a href="../files/view/mxGraph-js.html#mxGraph.gridEnabled" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_gridSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_gridSize')" class=ISymbol>gridSize</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.gridSize" target=_parent class=IParent>mxGraph</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.gridSize" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_GROUP_undCELLS><div class=IEntry><a href="javascript:searchResults.Toggle('SR_GROUP_undCELLS')" class=ISymbol>GROUP_CELLS</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.GROUP_CELLS" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.GROUP_CELLS" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_groupBorderSize><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.groupBorderSize" target=_parent class=ISymbol>groupBorderSize</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_groupCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_groupCells')" class=ISymbol>groupCells</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.groupCells" target=_parent class=IParent>mxEditor</a><a href="../files/view/mxGraph-js.html#mxGraph.groupCells" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_Grouping><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Grouping" target=_parent class=ISymbol>Grouping</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_groupPadding><div class=IEntry><a href="javascript:searchResults.Toggle('SR_groupPadding')" class=ISymbol>groupPadding</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.groupPadding" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.groupPadding" target=_parent class=IParent>mxCoordinateAssignment</a></div></div></div><div class=SRResult id=SR_groupPaddingBottom><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.groupPaddingBottom" target=_parent class=ISymbol>groupPaddingBottom</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_groupPaddingLeft><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.groupPaddingLeft" target=_parent class=ISymbol>groupPaddingLeft</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_groupPaddingRight><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.groupPaddingRight" target=_parent class=ISymbol>groupPaddingRight</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_groupPaddingTop><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.groupPaddingTop" target=_parent class=ISymbol>groupPaddingTop</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_grow><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.grow" target=_parent class=ISymbol>grow</a>, <span class=IParent>mxRectangle</span></div></div><div class=SRResult id=SR_guide><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.guide" target=_parent class=ISymbol>guide</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_GUIDE_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.GUIDE_COLOR" target=_parent class=ISymbol>GUIDE_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_GUIDE_undSTROKEWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.GUIDE_STROKEWIDTH" target=_parent class=ISymbol>GUIDE_STROKEWIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_guidesEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_guidesEnabled')" class=ISymbol>guidesEnabled</a><div class=ISubIndex><a href="../files/util/mxDragSource-js.html#mxDragSource.guidesEnabled" target=_parent class=IParent>mxDragSource</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.guidesEnabled" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_guideX><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.guideX" target=_parent class=ISymbol>guideX</a>, <span class=IParent>mxGuide</span></div></div><div class=SRResult id=SR_guideY><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.guideY" target=_parent class=ISymbol>guideY</a>, <span class=IParent>mxGuide</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralH.html b/docs/js-api/search/GeneralH.html
index 98597277e..dcdcfa643 100644
--- a/docs/js-api/search/GeneralH.html
+++ b/docs/js-api/search/GeneralH.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_h0><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.h0" target=_parent class=ISymbol>h0</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_HANDLE_undFILLCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.HANDLE_FILLCOLOR" target=_parent class=ISymbol>HANDLE_FILLCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_HANDLE_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.HANDLE_SIZE" target=_parent class=ISymbol>HANDLE_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_HANDLE_undSTROKECOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.HANDLE_STROKECOLOR" target=_parent class=ISymbol>HANDLE_STROKECOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_handleImage><div class=IEntry><a href="javascript:searchResults.Toggle('SR_handleImage')" class=ISymbol>handleImage</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.handleImage" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.handleImage" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_handleMouseOut><div class=IEntry><a href="../files/util/mxPanningManager-js.html#mxPanningManager.handleMouseOut" target=_parent class=ISymbol>handleMouseOut</a>, <span class=IParent>mxPanningManager</span></div></div><div class=SRResult id=SR_handler><div class=IEntry><a href="../files/editor/mxDefaultKeyHandler-js.html#mxDefaultKeyHandler.handler" target=_parent class=ISymbol>handler</a>, <span class=IParent>mxDefaultKeyHandler</span></div></div><div class=SRResult id=SR_handlers><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.handlers" target=_parent class=ISymbol>handlers</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_handlesVisible><div class=IEntry><a href="javascript:searchResults.Toggle('SR_handlesVisible')" class=ISymbol>handlesVisible</a><div class=ISubIndex><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.handlesVisible" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.handlesVisible" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_handlingResize><div class=IEntry><a href="../files/util/mxDivResizer-js.html#mxDivResizer.handlingResize" target=_parent class=ISymbol>handlingResize</a>, <span class=IParent>mxDivResizer</span></div></div><div class=SRResult id=SR_hasAttribute><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.hasAttribute" target=_parent class=ISymbol>hasAttribute</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_hashCode><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.hashCode" target=_parent class=ISymbol>hashCode</a>, <span class=IParent>mxGraphHierarchyNode</span></div></div><div class=SRResult id=SR_hasLayout><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.hasLayout" target=_parent class=ISymbol>hasLayout</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_hasScrollbars><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.hasScrollbars" target=_parent class=ISymbol>hasScrollbars</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_hasValidState><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.hasValidState" target=_parent class=ISymbol>hasValidState</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_height><div class=IEntry><a href="javascript:searchResults.Toggle('SR_height')" class=ISymbol>height</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.height" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/util/mxImage-js.html#mxImage.height" target=_parent class=IParent>mxImage</a><a href="../files/util/mxRectangle-js.html#mxRectangle.height" target=_parent class=IParent>mxRectangle</a></div></div></div><div class=SRResult id=SR_help><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.help" target=_parent class=ISymbol>help</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_helpHeight><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.helpHeight" target=_parent class=ISymbol>helpHeight</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_helpResource><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.helpResource" target=_parent class=ISymbol>helpResource</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_helpWidth><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.helpWidth" target=_parent class=ISymbol>helpWidth</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_helpWindowImage><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.helpWindowImage" target=_parent class=ISymbol>helpWindowImage</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_HexagonPerimeter><div class=IEntry><a href="../files/view/mxPerimeter-js.html#mxPerimeter.HexagonPerimeter" target=_parent class=ISymbol>HexagonPerimeter</a>, <span class=IParent>mxPerimeter</span></div></div><div class=SRResult id=SR_hide><div class=IEntry><a href="javascript:searchResults.Toggle('SR_hide')" class=ISymbol>hide</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.hide" target=_parent class=IParent>mxCellHighlight</a><a href="../files/util/mxGuide-js.html#mxGuide.hide" target=_parent class=IParent>mxGuide</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.hide" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/util/mxWindow-js.html#mxWindow.hide" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR2_HIDE><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_HIDE')" class=ISymbol>HIDE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.HIDE" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.HIDE" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_hideHandles><div class=IEntry><a href="javascript:searchResults.Toggle('SR_hideHandles')" class=ISymbol>hideHandles</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.hideHandles" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.hideHandles" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_hideMenu><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.hideMenu" target=_parent class=ISymbol>hideMenu</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_hideOnHover><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.hideOnHover" target=_parent class=ISymbol>hideOnHover</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_hideProperties><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.hideProperties" target=_parent class=ISymbol>hideProperties</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_hideSizers><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.hideSizers" target=_parent class=ISymbol>hideSizers</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_hideSubmenu><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.hideSubmenu" target=_parent class=ISymbol>hideSubmenu</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_hideTooltip><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.hideTooltip" target=_parent class=ISymbol>hideTooltip</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_HIGHLIGHT_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.HIGHLIGHT_COLOR" target=_parent class=ISymbol>HIGHLIGHT_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_HIGHLIGHT_undOPACITY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.HIGHLIGHT_OPACITY" target=_parent class=ISymbol>HIGHLIGHT_OPACITY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_HIGHLIGHT_undSTROKEWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.HIGHLIGHT_STROKEWIDTH" target=_parent class=ISymbol>HIGHLIGHT_STROKEWIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_highlightColor><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.highlightColor" target=_parent class=ISymbol>highlightColor</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_highlightDropTargets><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.highlightDropTargets" target=_parent class=ISymbol>highlightDropTargets</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_highlightEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.highlightEnabled" target=_parent class=ISymbol>highlightEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_history><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.history" target=_parent class=ISymbol>history</a>, <span class=IParent>mxUndoManager</span></div></div><div class=SRResult id=SR_hitsSwimlaneContent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.hitsSwimlaneContent" target=_parent class=ISymbol>hitsSwimlaneContent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_home><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.home" target=_parent class=ISymbol>home</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_horizontal><div class=IEntry><a href="javascript:searchResults.Toggle('SR_horizontal')" class=ISymbol>horizontal</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.horizontal" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/util/mxGuide-js.html#mxGuide.horizontal" target=_parent class=IParent>mxGuide</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.horizontal" target=_parent class=IParent>mxPartitionLayout</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.horizontal" target=_parent class=IParent>mxStackLayout</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.horizontal" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_horizontalFlow><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.horizontalFlow" target=_parent class=ISymbol>horizontalFlow</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_horizontalLayout><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.horizontalLayout" target=_parent class=ISymbol>horizontalLayout</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_horizontalOffset><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.horizontalOffset" target=_parent class=ISymbol>horizontalOffset</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_hotspot><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.hotspot" target=_parent class=ISymbol>hotspot</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_hotspotEnabled><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.hotspotEnabled" target=_parent class=ISymbol>hotspotEnabled</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_htmlEntities><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.htmlEntities" target=_parent class=ISymbol>htmlEntities</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_htmlLabels><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.htmlLabels" target=_parent class=ISymbol>htmlLabels</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_htmlPreview><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.htmlPreview" target=_parent class=ISymbol>htmlPreview</a>, <span class=IParent>mxGraphHandler</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralI.html b/docs/js-api/search/GeneralI.html
index 995cc6efe..a2b9400a0 100644
--- a/docs/js-api/search/GeneralI.html
+++ b/docs/js-api/search/GeneralI.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_id><div class=IEntry><a href="javascript:searchResults.Toggle('SR_id')" class=ISymbol>id</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.id" target=_parent class=IParent>mxCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.id" target=_parent class=IParent>mxGraphHierarchyNode</a></div></div></div><div class=SRResult id=SR_idrefs><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.idrefs" target=_parent class=ISymbol>idrefs</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_ids><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.ids" target=_parent class=ISymbol>ids</a>, <span class=IParent>mxGraphHierarchyEdge</span></div></div><div class=SRResult id=SR_ignoreCell><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.ignoreCell" target=_parent class=ISymbol>ignoreCell</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_ignoreClippedStringSize><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.ignoreClippedStringSize" target=_parent class=ISymbol>ignoreClippedStringSize</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_ignoredChanges><div class=IEntry><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.ignoredChanges" target=_parent class=ISymbol>ignoredChanges</a>, <span class=IParent>mxAutoSaveManager</span></div></div><div class=SRResult id=SR_ignoreGrid><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.ignoreGrid" target=_parent class=ISymbol>ignoreGrid</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_ignoreMouseDown><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.ignoreMouseDown" target=_parent class=ISymbol>ignoreMouseDown</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_ignoreRelativeEdgeParent><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.ignoreRelativeEdgeParent" target=_parent class=ISymbol>ignoreRelativeEdgeParent</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_ignoreScrollbars><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.ignoreScrollbars" target=_parent class=ISymbol>ignoreScrollbars</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_ignoreStringSize><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.ignoreStringSize" target=_parent class=ISymbol>ignoreStringSize</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_ignoreTouchEvents><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.ignoreTouchEvents" target=_parent class=ISymbol>ignoreTouchEvents</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_image><div class=IEntry><a href="javascript:searchResults.Toggle('SR_image')" class=ISymbol>image</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.image" target=_parent class=IParent>mxCellOverlay</a><a href="../files/handler/mxHandle-js.html#mxHandle.image" target=_parent class=IParent>mxHandle</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.image" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.image" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.image" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_imageBasePath><div class=IEntry><a href="javascript:searchResults.Toggle('SR_imageBasePath')" class=ISymbol>imageBasePath</a><div class=ISubIndex><a href="../files/mxClient-js.html#mxClient.imageBasePath" target=_parent class=IParent>mxClient</a><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.imageBasePath" target=_parent class=IParent>mxDefaultPopupMenu</a></div></div></div><div class=SRResult id=SR_imageBundles><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.imageBundles" target=_parent class=ISymbol>imageBundles</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_imageOffset><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.imageOffset" target=_parent class=ISymbol>imageOffset</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_images><div class=IEntry><a href="../files/util/mxImageBundle-js.html#mxImageBundle.images" target=_parent class=ISymbol>images</a>, <span class=IParent>mxImageBundle</span></div></div><div class=SRResult id=SR_imageSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_imageSize')" class=ISymbol>imageSize</a><div class=ISubIndex><a href="../files/shape/mxLabel-js.html#mxLabel.imageSize" target=_parent class=IParent>mxLabel</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.imageSize" target=_parent class=IParent>mxSwimlane</a></div></div></div><div class=SRResult id=SR_importCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.importCells" target=_parent class=ISymbol>importCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_importEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.importEnabled" target=_parent class=ISymbol>importEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_importNode><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.importNode" target=_parent class=ISymbol>importNode</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_importNodeImplementation><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.importNodeImplementation" target=_parent class=ISymbol>importNodeImplementation</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_In_minplace_spcediting><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.In-place_editing" target=_parent class=ISymbol>In-place editing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_include><div class=IEntry><a href="../files/mxClient-js.html#mxClient.include" target=_parent class=ISymbol>include</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_includeOverlays><div class=IEntry><a href="../files/util/mxImageExport-js.html#mxImageExport.includeOverlays" target=_parent class=ISymbol>includeOverlays</a>, <span class=IParent>mxImageExport</span></div></div><div class=SRResult id=SR_index><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.index" target=_parent class=ISymbol>index</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_indexOf><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.indexOf" target=_parent class=ISymbol>indexOf</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_indexOfNextAdd><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.indexOfNextAdd" target=_parent class=ISymbol>indexOfNextAdd</a>, <span class=IParent>mxUndoManager</span></div></div><div class=SRResult id=SR_indexOfStylename><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.indexOfStylename" target=_parent class=ISymbol>indexOfStylename</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_indicatorSize><div class=IEntry><a href="../files/shape/mxLabel-js.html#mxLabel.indicatorSize" target=_parent class=ISymbol>indicatorSize</a>, <span class=IParent>mxLabel</span></div></div><div class=SRResult id=SR_indicatorSpacing><div class=IEntry><a href="../files/shape/mxLabel-js.html#mxLabel.indicatorSpacing" target=_parent class=ISymbol>indicatorSpacing</a>, <span class=IParent>mxLabel</span></div></div><div class=SRResult id=SR_indices><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.indices" target=_parent class=ISymbol>indices</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_info><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.info" target=_parent class=ISymbol>info</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_init><div class=IEntry><a href="javascript:searchResults.Toggle('SR_init')" class=ISymbol>init</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.init" target=_parent class=IParent>mxCellEditor</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.init" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.init" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.init" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.init" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphView-js.html#mxGraphView.init" target=_parent class=IParent>mxGraphView</a><a href="../files/handler/mxHandle-js.html#mxHandle.init" target=_parent class=IParent>mxHandle</a><a href="../files/shape/mxLabel-js.html#mxLabel.init" target=_parent class=IParent>mxLabel</a><a href="../files/util/mxLog-js.html#mxLog.init" target=_parent class=IParent>mxLog</a><a href="../files/view/mxOutline-js.html#mxOutline.init" target=_parent class=IParent>mxOutline</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.init" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.init" target=_parent class=IParent>mxPopupMenuHandler</a><a href="../files/shape/mxShape-js.html#mxShape.init" target=_parent class=IParent>mxShape</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.init" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.init" target=_parent class=IParent>mxVertexHandler</a><a href="../files/util/mxWindow-js.html#mxWindow.init" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_initBend><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.initBend" target=_parent class=ISymbol>initBend</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_initControl><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.initControl" target=_parent class=ISymbol>initControl</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_initialCoords><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.initialCoords" target=_parent class=ISymbol>initialCoords</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_initializeLabel><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.initializeLabel" target=_parent class=ISymbol>initializeLabel</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_initializeOverlay><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.initializeOverlay" target=_parent class=ISymbol>initializeOverlay</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_initializeShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.initializeShape" target=_parent class=ISymbol>initializeShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_initialRank><div class=IEntry><a href="javascript:searchResults.Toggle('SR_initialRank')" class=ISymbol>initialRank</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.initialRank" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.initialRank" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_initialTemp><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.initialTemp" target=_parent class=ISymbol>initialTemp</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_initialTouchX><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.initialTouchX" target=_parent class=ISymbol>initialTouchX</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_initialTouchY><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.initialTouchY" target=_parent class=ISymbol>initialTouchY</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_initialValue><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.initialValue" target=_parent class=ISymbol>initialValue</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_initialX><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.initialX" target=_parent class=ISymbol>initialX</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_initShape><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.initShape" target=_parent class=ISymbol>initShape</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_initStyles><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.initStyles" target=_parent class=ISymbol>initStyles</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_insert><div class=IEntry><a href="javascript:searchResults.Toggle('SR_insert')" class=ISymbol>insert</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.insert" target=_parent class=IParent>mxCell</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.insert" target=_parent class=IParent>mxDefaultToolbar</a></div></div></div><div class=SRResult id=SR_insertBackgroundImage><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.insertBackgroundImage" target=_parent class=ISymbol>insertBackgroundImage</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_insertBeforeSource><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.insertBeforeSource" target=_parent class=ISymbol>insertBeforeSource</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_insertCount><div class=IEntry><a href="../files/util/mxClipboard-js.html#mxClipboard.insertCount" target=_parent class=ISymbol>insertCount</a>, <span class=IParent>mxClipboard</span></div></div><div class=SRResult id=SR_insertEdge><div class=IEntry><a href="javascript:searchResults.Toggle('SR_insertEdge')" class=ISymbol>insertEdge</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.insertEdge" target=_parent class=IParent>mxCell</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.insertEdge" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.insertEdge" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_insertFunction><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.insertFunction" target=_parent class=ISymbol>insertFunction</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_insertIntoGraph><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.insertIntoGraph" target=_parent class=ISymbol>insertIntoGraph</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_insertStateAfter><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.insertStateAfter" target=_parent class=ISymbol>insertStateAfter</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_insertVertex><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.insertVertex" target=_parent class=ISymbol>insertVertex</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_installChangeHandler><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.installChangeHandler" target=_parent class=ISymbol>installChangeHandler</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_installCloseHandler><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.installCloseHandler" target=_parent class=ISymbol>installCloseHandler</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_installDblClickHandler><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.installDblClickHandler" target=_parent class=ISymbol>installDblClickHandler</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_installDrillHandler><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.installDrillHandler" target=_parent class=ISymbol>installDrillHandler</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_installDropHandler><div class=IEntry><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.installDropHandler" target=_parent class=ISymbol>installDropHandler</a>, <span class=IParent>mxDefaultToolbar</span></div></div><div class=SRResult id=SR_installInsertHandler><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.installInsertHandler" target=_parent class=ISymbol>installInsertHandler</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_installListeners><div class=IEntry><a href="javascript:searchResults.Toggle('SR_installListeners')" class=ISymbol>installListeners</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.installListeners" target=_parent class=IParent>mxCellEditor</a><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.installListeners" target=_parent class=IParent>mxCellRenderer</a><a href="../files/view/mxGraphView-js.html#mxGraphView.installListeners" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_installMaximizeHandler><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.installMaximizeHandler" target=_parent class=ISymbol>installMaximizeHandler</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_installMinimizeHandler><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.installMinimizeHandler" target=_parent class=ISymbol>installMinimizeHandler</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_installMoveHandler><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.installMoveHandler" target=_parent class=ISymbol>installMoveHandler</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_installOverlayListeners><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.installOverlayListeners" target=_parent class=ISymbol>installOverlayListeners</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_installUndoHandler><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.installUndoHandler" target=_parent class=ISymbol>installUndoHandler</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_interHierarchySpacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_interHierarchySpacing')" class=ISymbol>interHierarchySpacing</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.interHierarchySpacing" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.interHierarchySpacing" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_interRankCellSpacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_interRankCellSpacing')" class=ISymbol>interRankCellSpacing</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.interRankCellSpacing" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.interRankCellSpacing" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.interRankCellSpacing" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_intersect><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.intersect" target=_parent class=ISymbol>intersect</a>, <span class=IParent>mxRectangle</span></div></div><div class=SRResult id=SR_intersection><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.intersection" target=_parent class=ISymbol>intersection</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_intersects><div class=IEntry><a href="javascript:searchResults.Toggle('SR_intersects')" class=ISymbol>intersects</a><div class=ISubIndex><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.intersects" target=_parent class=IParent>mxCellMarker</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.intersects" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.intersects" target=_parent class=IParent>mxGraph</a><a href="../files/util/mxUtils-js.html#mxUtils.intersects" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_intersectsHotspot><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.intersectsHotspot" target=_parent class=ISymbol>intersectsHotspot</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_intraCellSpacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_intraCellSpacing')" class=ISymbol>intraCellSpacing</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.intraCellSpacing" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.intraCellSpacing" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.intraCellSpacing" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_invalid><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.invalid" target=_parent class=ISymbol>invalid</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_INVALID_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.INVALID_COLOR" target=_parent class=ISymbol>INVALID_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_INVALID_undCONNECT_undTARGET_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.INVALID_CONNECT_TARGET_COLOR" target=_parent class=ISymbol>INVALID_CONNECT_TARGET_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_invalidate><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.invalidate" target=_parent class=ISymbol>invalidate</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_invalidColor><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.invalidColor" target=_parent class=ISymbol>invalidColor</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_invalidStyle><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.invalidStyle" target=_parent class=ISymbol>invalidStyle</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_invert><div class=IEntry><a href="javascript:searchResults.Toggle('SR_invert')" class=ISymbol>invert</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.invert" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.invert" target=_parent class=IParent>mxGraphHierarchyEdge</a></div></div></div><div class=SRResult id=SR_invokesStopCellEditing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.invokesStopCellEditing" target=_parent class=ISymbol>invokesStopCellEditing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_IS_undANDROID><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_ANDROID" target=_parent class=ISymbol>IS_ANDROID</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undCHROMEAPP><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_CHROMEAPP" target=_parent class=ISymbol>IS_CHROMEAPP</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undCHROMEOS><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_CHROMEOS" target=_parent class=ISymbol>IS_CHROMEOS</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undEDGE><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_EDGE" target=_parent class=ISymbol>IS_EDGE</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undEM><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_EM" target=_parent class=ISymbol>IS_EM</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undFF><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_FF" target=_parent class=ISymbol>IS_FF</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undGC><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_GC" target=_parent class=ISymbol>IS_GC</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undIE><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_IE" target=_parent class=ISymbol>IS_IE</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undIE11><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_IE11" target=_parent class=ISymbol>IS_IE11</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undIE6><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_IE6" target=_parent class=ISymbol>IS_IE6</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undIOS><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_IOS" target=_parent class=ISymbol>IS_IOS</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undLOCAL><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_LOCAL" target=_parent class=ISymbol>IS_LOCAL</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undMAC><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_MAC" target=_parent class=ISymbol>IS_MAC</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undMT><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_MT" target=_parent class=ISymbol>IS_MT</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undNS><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_NS" target=_parent class=ISymbol>IS_NS</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undOP><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_OP" target=_parent class=ISymbol>IS_OP</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undOT><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_OT" target=_parent class=ISymbol>IS_OT</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undPOINTER><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_POINTER" target=_parent class=ISymbol>IS_POINTER</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undQUIRKS><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_QUIRKS" target=_parent class=ISymbol>IS_QUIRKS</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undSF><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_SF" target=_parent class=ISymbol>IS_SF</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undSVG><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_SVG" target=_parent class=ISymbol>IS_SVG</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undTOUCH><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_TOUCH" target=_parent class=ISymbol>IS_TOUCH</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undVML><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_VML" target=_parent class=ISymbol>IS_VML</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undWIN><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_WIN" target=_parent class=ISymbol>IS_WIN</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_isActive><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isActive')" class=ISymbol>isActive</a><div class=ISubIndex><a href="../files/util/mxDragSource-js.html#mxDragSource.isActive" target=_parent class=IParent>mxDragSource</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.isActive" target=_parent class=IParent>mxPanningHandler</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.isActive" target=_parent class=IParent>mxRubberband</a></div></div></div><div class=SRResult id=SR_isAddEnabled><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.isAddEnabled" target=_parent class=ISymbol>isAddEnabled</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_isAddPointEvent><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isAddPointEvent" target=_parent class=ISymbol>isAddPointEvent</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_isAddVirtualBendEvent><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isAddVirtualBendEvent" target=_parent class=ISymbol>isAddVirtualBendEvent</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_isAllowDanglingEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isAllowDanglingEdges" target=_parent class=ISymbol>isAllowDanglingEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isAllowEval><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.isAllowEval" target=_parent class=ISymbol>isAllowEval</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_isAllowLoops><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isAllowLoops" target=_parent class=ISymbol>isAllowLoops</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isAllowOverlapParent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isAllowOverlapParent" target=_parent class=ISymbol>isAllowOverlapParent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isAltDown><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isAltDown" target=_parent class=ISymbol>isAltDown</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isAncestor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isAncestor')" class=ISymbol>isAncestor</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.isAncestor" target=_parent class=IParent>mxGraphHierarchyNode</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.isAncestor" target=_parent class=IParent>mxGraphLayout</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isAncestor" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_isAncestorNode><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.isAncestorNode" target=_parent class=ISymbol>isAncestorNode</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_isArrowRounded><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.isArrowRounded" target=_parent class=ISymbol>isArrowRounded</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_isAutoSizeCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isAutoSizeCell" target=_parent class=ISymbol>isAutoSizeCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isAutoSizeCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isAutoSizeCells" target=_parent class=ISymbol>isAutoSizeCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isBinary><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.isBinary" target=_parent class=ISymbol>isBinary</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_isBooleanAttribute><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.isBooleanAttribute" target=_parent class=ISymbol>isBooleanAttribute</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_isBrowserSupported><div class=IEntry><a href="../files/mxClient-js.html#mxClient.isBrowserSupported" target=_parent class=ISymbol>isBrowserSupported</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_isBubbling><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.isBubbling" target=_parent class=ISymbol>isBubbling</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_isCancelEditingKeyEvent><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.isCancelEditingKeyEvent" target=_parent class=ISymbol>isCancelEditingKeyEvent</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_isCellBendable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellBendable" target=_parent class=ISymbol>isCellBendable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellCloneable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellCloneable" target=_parent class=ISymbol>isCellCloneable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellCodec><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isCellCodec')" class=ISymbol>isCellCodec</a><div class=ISubIndex><a href="../files/io/mxCellCodec-js.html#mxCellCodec.isCellCodec" target=_parent class=IParent>mxCellCodec</a><a href="../files/io/mxCodec-js.html#mxCodec.isCellCodec" target=_parent class=IParent>mxCodec</a></div></div></div><div class=SRResult id=SR_isCellCollapsed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isCellCollapsed')" class=ISymbol>isCellCollapsed</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.isCellCollapsed" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphView-js.html#mxGraphView.isCellCollapsed" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_isCellConnectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellConnectable" target=_parent class=ISymbol>isCellConnectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellDeletable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellDeletable" target=_parent class=ISymbol>isCellDeletable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellDisconnectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellDisconnectable" target=_parent class=ISymbol>isCellDisconnectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellEditable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellEditable" target=_parent class=ISymbol>isCellEditable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isCellEnabled')" class=ISymbol>isCellEnabled</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isCellEnabled" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isCellEnabled" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_isCellFoldable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellFoldable" target=_parent class=ISymbol>isCellFoldable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellHorizontal><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.isCellHorizontal" target=_parent class=ISymbol>isCellHorizontal</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_isCellLocked><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellLocked" target=_parent class=ISymbol>isCellLocked</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellMovable" target=_parent class=ISymbol>isCellMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellMoving><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isCellMoving" target=_parent class=ISymbol>isCellMoving</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_isCellResizable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellResizable" target=_parent class=ISymbol>isCellResizable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellRotatable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellRotatable" target=_parent class=ISymbol>isCellRotatable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsBendable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsBendable" target=_parent class=ISymbol>isCellsBendable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsCloneable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsCloneable" target=_parent class=ISymbol>isCellsCloneable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsDeletable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsDeletable" target=_parent class=ISymbol>isCellsDeletable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsDisconnectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsDisconnectable" target=_parent class=ISymbol>isCellsDisconnectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsEditable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsEditable" target=_parent class=ISymbol>isCellsEditable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellSelectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellSelectable" target=_parent class=ISymbol>isCellSelectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellSelected><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellSelected" target=_parent class=ISymbol>isCellSelected</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsLocked><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsLocked" target=_parent class=ISymbol>isCellsLocked</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsMovable" target=_parent class=ISymbol>isCellsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsResizable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsResizable" target=_parent class=ISymbol>isCellsResizable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellsSelectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellsSelectable" target=_parent class=ISymbol>isCellsSelectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCellVisible><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCellVisible" target=_parent class=ISymbol>isCellVisible</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCenteredEvent><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isCenteredEvent" target=_parent class=ISymbol>isCenteredEvent</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_isCloneEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isCloneEnabled" target=_parent class=ISymbol>isCloneEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_isCloneEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCloneEvent" target=_parent class=ISymbol>isCloneEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCloneInvalidEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isCloneInvalidEdges" target=_parent class=ISymbol>isCloneInvalidEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isCollapsed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isCollapsed')" class=ISymbol>isCollapsed</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.isCollapsed" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isCollapsed" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_isConnectable><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isConnectable')" class=ISymbol>isConnectable</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.isConnectable" target=_parent class=IParent>mxCell</a><a href="../files/view/mxGraph-js.html#mxGraph.isConnectable" target=_parent class=IParent>mxGraph</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isConnectable" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_isConnectableCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isConnectableCell')" class=ISymbol>isConnectableCell</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isConnectableCell" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isConnectableCell" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_isConnectableEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isConnectableEdges" target=_parent class=ISymbol>isConnectableEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isConnecting><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isConnecting" target=_parent class=ISymbol>isConnecting</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_isConstrainChild><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isConstrainChild" target=_parent class=ISymbol>isConstrainChild</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isConstrainChildren><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isConstrainChildren" target=_parent class=ISymbol>isConstrainChildren</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isConstrainedEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isConstrainedEvent')" class=ISymbol>isConstrainedEvent</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.isConstrainedEvent" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isConstrainedEvent" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_isConstrainRelativeChildren><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isConstrainRelativeChildren" target=_parent class=ISymbol>isConstrainRelativeChildren</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isConsumed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isConsumed')" class=ISymbol>isConsumed</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.isConsumed" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxEventObject-js.html#mxEventObject.isConsumed" target=_parent class=IParent>mxEventObject</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.isConsumed" target=_parent class=IParent>mxMouseEvent</a></div></div></div><div class=SRResult id=SR_isContainerEvent><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.isContainerEvent" target=_parent class=ISymbol>isContainerEvent</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_isControlDown><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isControlDown')" class=ISymbol>isControlDown</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.isControlDown" target=_parent class=IParent>mxEvent</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.isControlDown" target=_parent class=IParent>mxKeyHandler</a></div></div></div><div class=SRResult id=SR_isCreateIds><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isCreateIds" target=_parent class=ISymbol>isCreateIds</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_isCreateTarget><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isCreateTarget" target=_parent class=ISymbol>isCreateTarget</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_isCustomHandleEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isCustomHandleEvent')" class=ISymbol>isCustomHandleEvent</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isCustomHandleEvent" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isCustomHandleEvent" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_isCustomHandleVisible><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isCustomHandleVisible')" class=ISymbol>isCustomHandleVisible</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isCustomHandleVisible" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isCustomHandleVisible" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_isDelayedSelection><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isDelayedSelection" target=_parent class=ISymbol>isDelayedSelection</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_isDestroyed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isDestroyed')" class=ISymbol>isDestroyed</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isDestroyed" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isDestroyed" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_isDisconnectOnMove><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isDisconnectOnMove" target=_parent class=ISymbol>isDisconnectOnMove</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isDropEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isDropEnabled" target=_parent class=ISymbol>isDropEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isEdge><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isEdge')" class=ISymbol>isEdge</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.isEdge" target=_parent class=IParent>mxCell</a><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.isEdge" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.isEdge" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isEdge" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_isEdgeIgnored><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.isEdgeIgnored" target=_parent class=ISymbol>isEdgeIgnored</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_isEdgeLabelsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isEdgeLabelsMovable" target=_parent class=ISymbol>isEdgeLabelsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isEdgeValid><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isEdgeValid" target=_parent class=ISymbol>isEdgeValid</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isEditing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isEditing" target=_parent class=ISymbol>isEditing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isEmpty><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isEmpty')" class=ISymbol>isEmpty</a><div class=ISubIndex><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.isEmpty" target=_parent class=IParent>mxCellStatePreview</a><a href="../files/util/mxClipboard-js.html#mxClipboard.isEmpty" target=_parent class=IParent>mxClipboard</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.isEmpty" target=_parent class=IParent>mxGraphSelectionModel</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.isEmpty" target=_parent class=IParent>mxUndoableEdit</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.isEmpty" target=_parent class=IParent>mxUndoManager</a></div></div></div><div class=SRResult id=SR_isEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isEnabled')" class=ISymbol>isEnabled</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.isEnabled" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.isEnabled" target=_parent class=IParent>mxCellMarker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isEnabled" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.isEnabled" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/util/mxDragSource-js.html#mxDragSource.isEnabled" target=_parent class=IParent>mxDragSource</a><a href="../files/view/mxGraph-js.html#mxGraph.isEnabled" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isEnabled" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.isEnabled" target=_parent class=IParent>mxKeyHandler</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.isEnabled" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxOutline-js.html#mxOutline.isEnabled" target=_parent class=IParent>mxOutline</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.isEnabled" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.isEnabled" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.isEnabled" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.isEnabled" target=_parent class=IParent>mxSwimlaneManager</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.isEnabled" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.isEnabled" target=_parent class=IParent>mxUrlConverter</a></div></div></div><div class=SRResult id=SR_isEnabledForEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isEnabledForEvent')" class=ISymbol>isEnabledForEvent</a><div class=ISubIndex><a href="../files/util/mxGuide-js.html#mxGuide.isEnabledForEvent" target=_parent class=IParent>mxGuide</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.isEnabledForEvent" target=_parent class=IParent>mxKeyHandler</a></div></div></div><div class=SRResult id=SR_isEnterStopsCellEditing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isEnterStopsCellEditing" target=_parent class=ISymbol>isEnterStopsCellEditing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isEscapeEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isEscapeEnabled" target=_parent class=ISymbol>isEscapeEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isEventIgnored><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isEventIgnored')" class=ISymbol>isEventIgnored</a><div class=ISubIndex><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.isEventIgnored" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.isEventIgnored" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.isEventIgnored" target=_parent class=IParent>mxKeyHandler</a></div></div></div><div class=SRResult id=SR_isEventsEnabled><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.isEventsEnabled" target=_parent class=ISymbol>isEventsEnabled</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_isEventSource><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.isEventSource" target=_parent class=ISymbol>isEventSource</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_isEventSourceIgnored><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isEventSourceIgnored" target=_parent class=ISymbol>isEventSourceIgnored</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isExcluded><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isExcluded')" class=ISymbol>isExcluded</a><div class=ISubIndex><a href="../files/io/mxCellCodec-js.html#mxCellCodec.isExcluded" target=_parent class=IParent>mxCellCodec</a><a href="../files/io/mxChildChangeCodec-js.html#mxChildChangeCodec.isExcluded" target=_parent class=IParent>mxChildChangeCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.isExcluded" target=_parent class=IParent>mxObjectCodec</a></div></div></div><div class=SRResult id=SR_isExtendParent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isExtendParent" target=_parent class=ISymbol>isExtendParent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isExtendParents><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isExtendParents" target=_parent class=ISymbol>isExtendParents</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isExtendParentsOnAdd><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isExtendParentsOnAdd" target=_parent class=ISymbol>isExtendParentsOnAdd</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isExtendParentsOnMove><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isExtendParentsOnMove" target=_parent class=ISymbol>isExtendParentsOnMove</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isForcePanningEvent><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.isForcePanningEvent" target=_parent class=ISymbol>isForcePanningEvent</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_isForceRubberbandEvent><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband.isForceRubberbandEvent" target=_parent class=ISymbol>isForceRubberbandEvent</a>, <span class=IParent>mxRubberband</span></div></div><div class=SRResult id=SR_isGhostPreview><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isGhostPreview" target=_parent class=ISymbol>isGhostPreview</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_isGraphEvent><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.isGraphEvent" target=_parent class=ISymbol>isGraphEvent</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_isGridEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isGridEnabled')" class=ISymbol>isGridEnabled</a><div class=ISubIndex><a href="../files/util/mxDragSource-js.html#mxDragSource.isGridEnabled" target=_parent class=IParent>mxDragSource</a><a href="../files/view/mxGraph-js.html#mxGraph.isGridEnabled" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_isGridEnabledEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isGridEnabledEvent" target=_parent class=ISymbol>isGridEnabledEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isGuidesEnabled><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.isGuidesEnabled" target=_parent class=ISymbol>isGuidesEnabled</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_isHandled><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.isHandled" target=_parent class=ISymbol>isHandled</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_isHandleEnabled><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isHandleEnabled" target=_parent class=ISymbol>isHandleEnabled</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_isHandlerActive><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.isHandlerActive" target=_parent class=ISymbol>isHandlerActive</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_isHandleVisible><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isHandleVisible" target=_parent class=ISymbol>isHandleVisible</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_isHideLabel><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.isHideLabel" target=_parent class=ISymbol>isHideLabel</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_isHideOnHover><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.isHideOnHover" target=_parent class=ISymbol>isHideOnHover</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_isHighlightAt><div class=IEntry><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.isHighlightAt" target=_parent class=ISymbol>isHighlightAt</a>, <span class=IParent>mxCellHighlight</span></div></div><div class=SRResult id=SR_isHorizontal><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isHorizontal')" class=ISymbol>isHorizontal</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.isHorizontal" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.isHorizontal" target=_parent class=IParent>mxPartitionLayout</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.isHorizontal" target=_parent class=IParent>mxStackLayout</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.isHorizontal" target=_parent class=IParent>mxSwimlane</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.isHorizontal" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_isHotspotEnabled><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.isHotspotEnabled" target=_parent class=ISymbol>isHotspotEnabled</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_isHtmlAllowed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isHtmlAllowed')" class=ISymbol>isHtmlAllowed</a><div class=ISubIndex><a href="../files/shape/mxImageShape-js.html#mxImageShape.isHtmlAllowed" target=_parent class=IParent>mxImageShape</a><a href="../files/shape/mxLabel-js.html#mxLabel.isHtmlAllowed" target=_parent class=IParent>mxLabel</a><a href="../files/shape/mxRectangleShape-js.html#mxRectangleShape.isHtmlAllowed" target=_parent class=IParent>mxRectangleShape</a><a href="../files/shape/mxShape-js.html#mxShape.isHtmlAllowed" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.isHtmlAllowed" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_isHtmlLabel><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isHtmlLabel" target=_parent class=ISymbol>isHtmlLabel</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isHtmlLabels><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isHtmlLabels" target=_parent class=ISymbol>isHtmlLabels</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isHtmlRequired><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.isHtmlRequired" target=_parent class=ISymbol>isHtmlRequired</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_isIgnoredAttribute><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.isIgnoredAttribute" target=_parent class=ISymbol>isIgnoredAttribute</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_isIgnoreTerminalEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isIgnoreTerminalEvent" target=_parent class=ISymbol>isIgnoreTerminalEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isImmediateConnectSource><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isImmediateConnectSource" target=_parent class=ISymbol>isImmediateConnectSource</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_isInsertBefore><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isInsertBefore" target=_parent class=ISymbol>isInsertBefore</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_isInteger><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.isInteger" target=_parent class=ISymbol>isInteger</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_isInvokesStopCellEditing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isInvokesStopCellEditing" target=_parent class=ISymbol>isInvokesStopCellEditing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isKeepFocusEvent><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.isKeepFocusEvent" target=_parent class=ISymbol>isKeepFocusEvent</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_isLabelClipped><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isLabelClipped" target=_parent class=ISymbol>isLabelClipped</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isLabelEvent><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.isLabelEvent" target=_parent class=ISymbol>isLabelEvent</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_isLabelMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isLabelMovable" target=_parent class=ISymbol>isLabelMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isLanguageSupported><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.isLanguageSupported" target=_parent class=ISymbol>isLanguageSupported</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_isLayer><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isLayer" target=_parent class=ISymbol>isLayer</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_isLeftMouseButton><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isLeftMouseButton" target=_parent class=ISymbol>isLeftMouseButton</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isLegacyEditor><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.isLegacyEditor" target=_parent class=ISymbol>isLegacyEditor</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_isLivePreviewBorder><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isLivePreviewBorder" target=_parent class=ISymbol>isLivePreviewBorder</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_isLoop><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isLoop" target=_parent class=ISymbol>isLoop</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isLoopStyleEnabled><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.isLoopStyleEnabled" target=_parent class=ISymbol>isLoopStyleEnabled</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_isMarkerEnd><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.isMarkerEnd" target=_parent class=ISymbol>isMarkerEnd</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_isMarkerStart><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.isMarkerStart" target=_parent class=ISymbol>isMarkerStart</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_isMenuShowing><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.isMenuShowing" target=_parent class=ISymbol>isMenuShowing</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_isMetaDown><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isMetaDown" target=_parent class=ISymbol>isMetaDown</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isMiddleMouseButton><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isMiddleMouseButton" target=_parent class=ISymbol>isMiddleMouseButton</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isModified><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.isModified" target=_parent class=ISymbol>isModified</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_isMouseDown><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isMouseDown" target=_parent class=ISymbol>isMouseDown</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isMouseEvent><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isMouseEvent" target=_parent class=ISymbol>isMouseEvent</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isMoveable><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.isMoveable" target=_parent class=ISymbol>isMoveable</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_isMoveEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isMoveEnabled" target=_parent class=ISymbol>isMoveEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_isMoveIconToFrontForState><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isMoveIconToFrontForState" target=_parent class=ISymbol>isMoveIconToFrontForState</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_isMultigraph><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isMultigraph" target=_parent class=ISymbol>isMultigraph</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isMultiTouchEvent><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isMultiTouchEvent" target=_parent class=ISymbol>isMultiTouchEvent</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isNaN><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.isNaN" target=_parent class=ISymbol>isNaN</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_isNode><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.isNode" target=_parent class=ISymbol>isNode</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_isNumeric><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.isNumeric" target=_parent class=ISymbol>isNumeric</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_isNumericAttribute><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.isNumericAttribute" target=_parent class=ISymbol>isNumericAttribute</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_isOpenEnded><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.isOpenEnded" target=_parent class=ISymbol>isOpenEnded</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_isOrthogonal><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isOrthogonal" target=_parent class=ISymbol>isOrthogonal</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isOutlineConnectEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isOutlineConnectEvent')" class=ISymbol>isOutlineConnectEvent</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isOutlineConnectEvent" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isOutlineConnectEvent" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_isPaintBoundsInverted><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isPaintBoundsInverted')" class=ISymbol>isPaintBoundsInverted</a><div class=ISubIndex><a href="../files/shape/mxPolyline-js.html#mxPolyline.isPaintBoundsInverted" target=_parent class=IParent>mxPolyline</a><a href="../files/shape/mxShape-js.html#mxShape.isPaintBoundsInverted" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.isPaintBoundsInverted" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_isPanningEnabled><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.isPanningEnabled" target=_parent class=ISymbol>isPanningEnabled</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_isPanningTrigger><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.isPanningTrigger" target=_parent class=ISymbol>isPanningTrigger</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_isParentHighlightVisible><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isParentHighlightVisible')" class=ISymbol>isParentHighlightVisible</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isParentHighlightVisible" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isParentHighlightVisible" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_isParseVml><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isParseVml')" class=ISymbol>isParseVml</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.isParseVml" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.isParseVml" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_isPenEvent><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isPenEvent" target=_parent class=ISymbol>isPenEvent</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isPinchEnabled><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.isPinchEnabled" target=_parent class=ISymbol>isPinchEnabled</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_isPopupTrigger><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isPopupTrigger')" class=ISymbol>isPopupTrigger</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.isPopupTrigger" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.isPopupTrigger" target=_parent class=IParent>mxMouseEvent</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.isPopupTrigger" target=_parent class=IParent>mxPopupMenu</a></div></div></div><div class=SRResult id=SR_isPort><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isPort')" class=ISymbol>isPort</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.isPort" target=_parent class=IParent>mxGraph</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.isPort" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.isPort" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_isPortsEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isPortsEnabled" target=_parent class=ISymbol>isPortsEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isPropagateSelectionCell><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isPropagateSelectionCell" target=_parent class=ISymbol>isPropagateSelectionCell</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_isPropertiesVisible><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.isPropertiesVisible" target=_parent class=ISymbol>isPropertiesVisible</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_isReady><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.isReady" target=_parent class=ISymbol>isReady</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_isRecursiveResize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isRecursiveResize')" class=ISymbol>isRecursiveResize</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.isRecursiveResize" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isRecursiveResize" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_isReference><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isReference')" class=ISymbol>isReference</a><div class=ISubIndex><a href="../files/io/mxChildChangeCodec-js.html#mxChildChangeCodec.isReference" target=_parent class=IParent>mxChildChangeCodec</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.isReference" target=_parent class=IParent>mxObjectCodec</a></div></div></div><div class=SRResult id=SR_isRelativeUrl><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.isRelativeUrl" target=_parent class=ISymbol>isRelativeUrl</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_isRemoveCellsFromParent><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isRemoveCellsFromParent" target=_parent class=ISymbol>isRemoveCellsFromParent</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_isRemovePointEvent><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isRemovePointEvent" target=_parent class=ISymbol>isRemovePointEvent</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_isRendering><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.isRendering" target=_parent class=ISymbol>isRendering</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_isResizable><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.isResizable" target=_parent class=ISymbol>isResizable</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_isResizeContainer><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isResizeContainer" target=_parent class=ISymbol>isResizeContainer</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isResizeEnabled><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.isResizeEnabled" target=_parent class=ISymbol>isResizeEnabled</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_isReversed><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.isReversed" target=_parent class=ISymbol>isReversed</a>, <span class=IParent>mxGraphHierarchyEdge</span></div></div><div class=SRResult id=SR_isRightMouseButton><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isRightMouseButton" target=_parent class=ISymbol>isRightMouseButton</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isRoot><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isRoot" target=_parent class=ISymbol>isRoot</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_isRotationHandleVisible><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isRotationHandleVisible" target=_parent class=ISymbol>isRotationHandleVisible</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_isRoundable><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isRoundable')" class=ISymbol>isRoundable</a><div class=ISubIndex><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.isRoundable" target=_parent class=IParent>mxArrowConnector</a><a href="../files/shape/mxImageShape-js.html#mxImageShape.isRoundable" target=_parent class=IParent>mxImageShape</a><a href="../files/shape/mxRectangleShape-js.html#mxRectangleShape.isRoundable" target=_parent class=IParent>mxRectangleShape</a><a href="../files/shape/mxRhombus-js.html#mxRhombus.isRoundable" target=_parent class=IParent>mxRhombus</a><a href="../files/shape/mxShape-js.html#mxShape.isRoundable" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.isRoundable" target=_parent class=IParent>mxSwimlane</a><a href="../files/shape/mxTriangle-js.html#mxTriangle.isRoundable" target=_parent class=IParent>mxTriangle</a></div></div></div><div class=SRResult id=SR_isRunning><div class=IEntry><a href="../files/util/mxAnimation-js.html#mxAnimation.isRunning" target=_parent class=ISymbol>isRunning</a>, <span class=IParent>mxAnimation</span></div></div><div class=SRResult id=SR_isScrollEvent><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.isScrollEvent" target=_parent class=ISymbol>isScrollEvent</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_isSelected><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.isSelected" target=_parent class=ISymbol>isSelected</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_isSelectEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isSelectEnabled" target=_parent class=ISymbol>isSelectEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_isSelectionDashed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isSelectionDashed')" class=ISymbol>isSelectionDashed</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isSelectionDashed" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isSelectionDashed" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_isSelectionEmpty><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSelectionEmpty" target=_parent class=ISymbol>isSelectionEmpty</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isSelectOnPopup><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.isSelectOnPopup" target=_parent class=ISymbol>isSelectOnPopup</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_isSelectText><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.isSelectText" target=_parent class=ISymbol>isSelectText</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_isShapeEvent><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.isShapeEvent" target=_parent class=ISymbol>isShapeEvent</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_isShapeInvalid><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.isShapeInvalid" target=_parent class=ISymbol>isShapeInvalid</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_isShiftDown><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isShiftDown" target=_parent class=ISymbol>isShiftDown</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isSiblingSelected><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSiblingSelected" target=_parent class=ISymbol>isSiblingSelected</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isSignificant><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.isSignificant" target=_parent class=ISymbol>isSignificant</a>, <span class=IParent>mxUndoableEdit</span></div></div><div class=SRResult id=SR_isSingleSelection><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.isSingleSelection" target=_parent class=ISymbol>isSingleSelection</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_isSizerVisible><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.isSizerVisible" target=_parent class=ISymbol>isSizerVisible</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_isSnapToTerminalsEvent><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isSnapToTerminalsEvent" target=_parent class=ISymbol>isSnapToTerminalsEvent</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_isSource><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.isSource" target=_parent class=ISymbol>isSource</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_isSplitEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSplitEnabled" target=_parent class=ISymbol>isSplitEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isSplitTarget><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSplitTarget" target=_parent class=ISymbol>isSplitTarget</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isStartEvent><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isStartEvent" target=_parent class=ISymbol>isStartEvent</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_isStateIgnored><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isStateIgnored')" class=ISymbol>isStateIgnored</a><div class=ISubIndex><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.isStateIgnored" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/util/mxGuide-js.html#mxGuide.isStateIgnored" target=_parent class=IParent>mxGuide</a></div></div></div><div class=SRResult id=SR_isStopEditingEvent><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.isStopEditingEvent" target=_parent class=ISymbol>isStopEditingEvent</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_isStopEvent><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isStopEvent" target=_parent class=ISymbol>isStopEvent</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_isSwimlane><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSwimlane" target=_parent class=ISymbol>isSwimlane</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isSwimlaneIgnored><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.isSwimlaneIgnored" target=_parent class=ISymbol>isSwimlaneIgnored</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_isSwimlaneNesting><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSwimlaneNesting" target=_parent class=ISymbol>isSwimlaneNesting</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isSwimlaneSelectionEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSwimlaneSelectionEnabled" target=_parent class=ISymbol>isSwimlaneSelectionEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isSyntheticEventIgnored><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isSyntheticEventIgnored" target=_parent class=ISymbol>isSyntheticEventIgnored</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isTerminalPointMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isTerminalPointMovable" target=_parent class=ISymbol>isTerminalPointMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isTextShapeInvalid><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.isTextShapeInvalid" target=_parent class=ISymbol>isTextShapeInvalid</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_isToggleEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isToggleEvent" target=_parent class=ISymbol>isToggleEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isTouchEvent><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.isTouchEvent" target=_parent class=ISymbol>isTouchEvent</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_isTransparentClickEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isTransparentClickEvent" target=_parent class=ISymbol>isTransparentClickEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isTransparentState><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isTransparentState" target=_parent class=ISymbol>isTransparentState</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isValidAncestor><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isValidAncestor" target=_parent class=ISymbol>isValidAncestor</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isValidConnection><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isValidConnection" target=_parent class=ISymbol>isValidConnection</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isValidDropTarget><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isValidDropTarget')" class=ISymbol>isValidDropTarget</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.isValidDropTarget" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.isValidDropTarget" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_isValidRoot><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isValidRoot" target=_parent class=ISymbol>isValidRoot</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isValidSource><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isValidSource')" class=ISymbol>isValidSource</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isValidSource" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.isValidSource" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_isValidState><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.isValidState" target=_parent class=ISymbol>isValidState</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_isValidTarget><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isValidTarget')" class=ISymbol>isValidTarget</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.isValidTarget" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.isValidTarget" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_isVertex><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isVertex')" class=ISymbol>isVertex</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.isVertex" target=_parent class=IParent>mxCell</a><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.isVertex" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.isVertex" target=_parent class=IParent>mxGraphHierarchyNode</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isVertex" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_isVertexIgnored><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isVertexIgnored')" class=ISymbol>isVertexIgnored</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.isVertexIgnored" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.isVertexIgnored" target=_parent class=IParent>mxFastOrganicLayout</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.isVertexIgnored" target=_parent class=IParent>mxGraphLayout</a><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.isVertexIgnored" target=_parent class=IParent>mxRadialTreeLayout</a></div></div></div><div class=SRResult id=SR_isVertexLabelsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isVertexLabelsMovable" target=_parent class=ISymbol>isVertexLabelsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isVertexMovable><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.isVertexMovable" target=_parent class=ISymbol>isVertexMovable</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_isVirtualBendsEnabled><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.isVirtualBendsEnabled" target=_parent class=ISymbol>isVirtualBendsEnabled</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_isVisible><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isVisible')" class=ISymbol>isVisible</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.isVisible" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.isVisible" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxLog-js.html#mxLog.isVisible" target=_parent class=IParent>mxLog</a><a href="../files/util/mxWindow-js.html#mxWindow.isVisible" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_isVml><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.isVml" target=_parent class=ISymbol>isVml</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_isWrapping><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isWrapping" target=_parent class=ISymbol>isWrapping</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_itemCount><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.itemCount" target=_parent class=ISymbol>itemCount</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_iteration><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.iteration" target=_parent class=ISymbol>iteration</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_iterationsWithoutImprovement><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.iterationsWithoutImprovement" target=_parent class=ISymbol>iterationsWithoutImprovement</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralJ.html b/docs/js-api/search/GeneralJ.html
index 5b9b45c5b..42b5148d7 100644
--- a/docs/js-api/search/GeneralJ.html
+++ b/docs/js-api/search/GeneralJ.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jettyPositions><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.jettyPositions" target=_parent class=ISymbol>jettyPositions</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_join><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.join" target=_parent class=ISymbol>join</a>, <span class=IParent>mxCompactTreeLayout</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralK.html b/docs/js-api/search/GeneralK.html
index 4c56249cc..2413f48cd 100644
--- a/docs/js-api/search/GeneralK.html
+++ b/docs/js-api/search/GeneralK.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_keepEdgesInBackground><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.keepEdgesInBackground" target=_parent class=ISymbol>keepEdgesInBackground</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_keepEdgesInForeground><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.keepEdgesInForeground" target=_parent class=ISymbol>keepEdgesInForeground</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_keepFirstLocation><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.keepFirstLocation" target=_parent class=ISymbol>keepFirstLocation</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_keepOnTop><div class=IEntry><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.keepOnTop" target=_parent class=ISymbol>keepOnTop</a>, <span class=IParent>mxCellHighlight</span></div></div><div class=SRResult id=SR_keepSelectionVisibleOnZoom><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.keepSelectionVisibleOnZoom" target=_parent class=ISymbol>keepSelectionVisibleOnZoom</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_keyDown><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.keyDown" target=_parent class=ISymbol>keyDown</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_keyHandler><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.keyHandler" target=_parent class=ISymbol>keyHandler</a>, <span class=IParent>mxEditor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralL.html b/docs/js-api/search/GeneralL.html
index a48659980..b79d0b26e 100644
--- a/docs/js-api/search/GeneralL.html
+++ b/docs/js-api/search/GeneralL.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_LABEL_undCHANGED><div class=IEntry><a href="javascript:searchResults.Toggle('SR_LABEL_undCHANGED')" class=ISymbol>LABEL_CHANGED</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.LABEL_CHANGED" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.LABEL_CHANGED" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_LABEL_undHANDLE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.LABEL_HANDLE" target=_parent class=ISymbol>LABEL_HANDLE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_LABEL_undHANDLE_undFILLCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.LABEL_HANDLE_FILLCOLOR" target=_parent class=ISymbol>LABEL_HANDLE_FILLCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_LABEL_undHANDLE_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.LABEL_HANDLE_SIZE" target=_parent class=ISymbol>LABEL_HANDLE_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_labelChanged><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.labelChanged" target=_parent class=ISymbol>labelChanged</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_labels><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.labels" target=_parent class=ISymbol>labels</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_labelShape><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.labelShape" target=_parent class=ISymbol>labelShape</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_labelsVisible><div class=IEntry><a href="javascript:searchResults.Toggle('SR_labelsVisible')" class=ISymbol>labelsVisible</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.labelsVisible" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxOutline-js.html#mxOutline.labelsVisible" target=_parent class=IParent>mxOutline</a></div></div></div><div class=SRResult id=SR_language><div class=IEntry><a href="../files/mxClient-js.html#mxClient.language" target=_parent class=ISymbol>language</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_languages><div class=IEntry><a href="../files/mxClient-js.html#mxClient.languages" target=_parent class=ISymbol>languages</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_lastForegroundHtmlNode><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.lastForegroundHtmlNode" target=_parent class=ISymbol>lastForegroundHtmlNode</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_lastForegroundNode><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.lastForegroundNode" target=_parent class=ISymbol>lastForegroundNode</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_lastHtmlNode><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.lastHtmlNode" target=_parent class=ISymbol>lastHtmlNode</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_lastNode><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.lastNode" target=_parent class=ISymbol>lastNode</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_lastSavedResource><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.lastSavedResource" target=_parent class=ISymbol>lastSavedResource</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_lastSnapshot><div class=IEntry><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.lastSnapshot" target=_parent class=ISymbol>lastSnapshot</a>, <span class=IParent>mxAutoSaveManager</span></div></div><div class=SRResult id=SR_lastTouchTime><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.lastTouchTime" target=_parent class=ISymbol>lastTouchTime</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_lastTouchX><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.lastTouchX" target=_parent class=ISymbol>lastTouchX</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_lastValue><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.lastValue" target=_parent class=ISymbol>lastValue</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_lastX><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.lastX" target=_parent class=ISymbol>lastX</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_lastY><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.lastY" target=_parent class=ISymbol>lastY</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_layeringStage><div class=IEntry><a href="javascript:searchResults.Toggle('SR_layeringStage')" class=ISymbol>layeringStage</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.layeringStage" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.layeringStage" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_layout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_layout')" class=ISymbol>layout</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.layout" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.layout" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.layout" target=_parent class=IParent>mxMedianHybridCrossingReduction</a><a href="../files/layout/hierarchical/stage/mxMinimumCycleRemover-js.html#mxMinimumCycleRemover.layout" target=_parent class=IParent>mxMinimumCycleRemover</a><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.layout" target=_parent class=IParent>mxParallelEdgeLayout</a><a href="../files/layout/hierarchical/stage/mxSwimlaneOrdering-js.html#mxSwimlaneOrdering.layout" target=_parent class=IParent>mxSwimlaneOrdering</a></div></div></div><div class=SRResult id=SR_LAYOUT_undCELLS><div class=IEntry><a href="javascript:searchResults.Toggle('SR_LAYOUT_undCELLS')" class=ISymbol>LAYOUT_CELLS</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.LAYOUT_CELLS" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.mxEvent.LAYOUT_CELLS" target=_parent class=IParent>mxLayoutManager.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_layoutCells><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.layoutCells" target=_parent class=ISymbol>layoutCells</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_layoutDiagram><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.layoutDiagram" target=_parent class=ISymbol>layoutDiagram</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_layoutLeaf><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.layoutLeaf" target=_parent class=ISymbol>layoutLeaf</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_layouts><div class=IEntry><a href="../files/layout/mxCompositeLayout-js.html#mxCompositeLayout.layouts" target=_parent class=ISymbol>layouts</a>, <span class=IParent>mxCompositeLayout</span></div></div><div class=SRResult id=SR_layoutSwimlanes><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.layoutSwimlanes" target=_parent class=ISymbol>layoutSwimlanes</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_leave><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.leave" target=_parent class=ISymbol>leave</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_legacyControlPosition><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.legacyControlPosition" target=_parent class=ISymbol>legacyControlPosition</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_legacySpacing><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.legacySpacing" target=_parent class=ISymbol>legacySpacing</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_length><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.length" target=_parent class=ISymbol>length</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_levelDistance><div class=IEntry><a href="javascript:searchResults.Toggle('SR_levelDistance')" class=ISymbol>levelDistance</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.levelDistance" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.levelDistance" target=_parent class=IParent>mxRadialTreeLayout</a></div></div></div><div class=SRResult id=SR_limitX><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.limitX" target=_parent class=ISymbol>limitX</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_LINE_undARCSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.LINE_ARCSIZE" target=_parent class=ISymbol>LINE_ARCSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_LINE_undHEIGHT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.LINE_HEIGHT" target=_parent class=ISymbol>LINE_HEIGHT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_lineFeed><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.lineFeed" target=_parent class=ISymbol>lineFeed</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_lineHeightCorrection><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.lineHeightCorrection" target=_parent class=ISymbol>lineHeightCorrection</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_lineOp><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineOp')" class=ISymbol>lineOp</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.lineOp" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.lineOp" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_lineTo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineTo')" class=ISymbol>lineTo</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.lineTo" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.lineTo" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_link><div class=IEntry><a href="javascript:searchResults.Toggle('SR_link')" class=ISymbol>link</a><div class=ISubIndex><a href="../files/mxClient-js.html#mxClient.link" target=_parent class=IParent>mxClient</a><a href="../files/util/mxUtils-js.html#mxUtils.link" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_linkAction><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.linkAction" target=_parent class=ISymbol>linkAction</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_linkInvoke><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.linkInvoke" target=_parent class=ISymbol>linkInvoke</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_livePreview><div class=IEntry><a href="javascript:searchResults.Toggle('SR_livePreview')" class=ISymbol>livePreview</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.livePreview" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.livePreview" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_load><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.load" target=_parent class=ISymbol>load</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_loadDefaultBundle><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.loadDefaultBundle" target=_parent class=ISymbol>loadDefaultBundle</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_loadInto><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.loadInto" target=_parent class=ISymbol>loadInto</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_loadResources><div class=IEntry><a href="javascript:searchResults.Toggle('SR_loadResources')" class=ISymbol>loadResources</a><div class=ISubIndex><a href="../files/mxClient-js.html#mxClient.loadResources" target=_parent class=IParent>mxClient</a><a href="../files/util/mxResources-js.html#mxResources.loadResources" target=_parent class=IParent>mxResources</a></div></div></div><div class=SRResult id=SR_localEdgeProcessing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_localEdgeProcessing')" class=ISymbol>localEdgeProcessing</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.localEdgeProcessing" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.localEdgeProcessing" target=_parent class=IParent>mxCoordinateAssignment</a></div></div></div><div class=SRResult id=SR_LOCKED_undHANDLE_undFILLCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.LOCKED_HANDLE_FILLCOLOR" target=_parent class=ISymbol>LOCKED_HANDLE_FILLCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_lookup><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.lookup" target=_parent class=ISymbol>lookup</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_Loop><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.Loop" target=_parent class=ISymbol>Loop</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_ltrim><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.ltrim" target=_parent class=ISymbol>ltrim</a>, <span class=IParent>mxUtils</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralM.html b/docs/js-api/search/GeneralM.html
index 1bf196b48..b37692a24 100644
--- a/docs/js-api/search/GeneralM.html
+++ b/docs/js-api/search/GeneralM.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_maintainEdgeParent><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.maintainEdgeParent" target=_parent class=ISymbol>maintainEdgeParent</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_maintainParentLocation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_maintainParentLocation')" class=ISymbol>maintainParentLocation</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.maintainParentLocation" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.maintainParentLocation" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.maintainParentLocation" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_maintainSwimlanes><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.maintainSwimlanes" target=_parent class=ISymbol>maintainSwimlanes</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_makeDraggable><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.makeDraggable" target=_parent class=ISymbol>makeDraggable</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_manageLabelHandle><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.manageLabelHandle" target=_parent class=ISymbol>manageLabelHandle</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_manageSizers><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.manageSizers" target=_parent class=ISymbol>manageSizers</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_map><div class=IEntry><a href="../files/util/mxDictionary-js.html#mxDictionary.map" target=_parent class=ISymbol>map</a>, <span class=IParent>mxDictionary</span></div></div><div class=SRResult id=SR_mapping><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.mapping" target=_parent class=ISymbol>mapping</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_marginBottom><div class=IEntry><a href="javascript:searchResults.Toggle('SR_marginBottom')" class=ISymbol>marginBottom</a><div class=ISubIndex><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.marginBottom" target=_parent class=IParent>mxPrintPreview</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.marginBottom" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_marginLeft><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.marginLeft" target=_parent class=ISymbol>marginLeft</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_marginRight><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.marginRight" target=_parent class=ISymbol>marginRight</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_marginTop><div class=IEntry><a href="javascript:searchResults.Toggle('SR_marginTop')" class=ISymbol>marginTop</a><div class=ISubIndex><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.marginTop" target=_parent class=IParent>mxPrintPreview</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.marginTop" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_mark><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mark')" class=ISymbol>mark</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.mark" target=_parent class=IParent>mxCellHighlight</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.mark" target=_parent class=IParent>mxCellMarker</a></div></div></div><div class=SRResult id=SR2_MARK><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_MARK')" class=ISymbol>MARK</a><div class=ISubIndex><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.mxEvent.MARK" target=_parent class=IParent>mxCellMarker.<wbr>mxEvent</a><a href="../files/util/mxEvent-js.html#mxEvent.MARK" target=_parent class=IParent>mxEvent</a></div></div></div><div class=SRResult id=SR_markCell><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.markCell" target=_parent class=ISymbol>markCell</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_markedState><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.markedState" target=_parent class=ISymbol>markedState</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_marker><div class=IEntry><a href="javascript:searchResults.Toggle('SR_marker')" class=ISymbol>marker</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.marker" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.marker" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_markers><div class=IEntry><a href="../files/shape/mxMarker-js.html#mxMarker.markers" target=_parent class=ISymbol>markers</a>, <span class=IParent>mxMarker</span></div></div><div class=SRResult id=SR_master><div class=IEntry><a href="../files/layout/mxCompositeLayout-js.html#mxCompositeLayout.master" target=_parent class=ISymbol>master</a>, <span class=IParent>mxCompositeLayout</span></div></div><div class=SRResult id=SR_matchHtmlAlignment><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.matchHtmlAlignment" target=_parent class=ISymbol>matchHtmlAlignment</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_max><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.max" target=_parent class=ISymbol>max</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_MAX_undHOTSPOT_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.MAX_HOTSPOT_SIZE" target=_parent class=ISymbol>MAX_HOTSPOT_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_maxCells><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.maxCells" target=_parent class=ISymbol>maxCells</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_maxChainDfs><div class=IEntry><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.maxChainDfs" target=_parent class=ISymbol>maxChainDfs</a>, <span class=IParent>mxSwimlaneModel</span></div></div><div class=SRResult id=SR_maxDistanceLimit><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.maxDistanceLimit" target=_parent class=ISymbol>maxDistanceLimit</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_maxFitScale><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.maxFitScale" target=_parent class=ISymbol>maxFitScale</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_maxHandlers><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.maxHandlers" target=_parent class=ISymbol>maxHandlers</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_maxHeight><div class=IEntry><a href="../files/shape/mxCylinder-js.html#mxCylinder.maxHeight" target=_parent class=ISymbol>maxHeight</a>, <span class=IParent>mxCylinder</span></div></div><div class=SRResult id=SR_MAXIMIZE><div class=IEntry><a href="javascript:searchResults.Toggle('SR_MAXIMIZE')" class=ISymbol>MAXIMIZE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.MAXIMIZE" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.MAXIMIZE" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_maximizeImage><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.maximizeImage" target=_parent class=ISymbol>maximizeImage</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_maximumContainerSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.maximumContainerSize" target=_parent class=ISymbol>maximumContainerSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_maximumGraphBounds><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.maximumGraphBounds" target=_parent class=ISymbol>maximumGraphBounds</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_maxIterations><div class=IEntry><a href="javascript:searchResults.Toggle('SR_maxIterations')" class=ISymbol>maxIterations</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.maxIterations" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.maxIterations" target=_parent class=IParent>mxFastOrganicLayout</a><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.maxIterations" target=_parent class=IParent>mxMedianHybridCrossingReduction</a></div></div></div><div class=SRResult id=SR_maxLivePreview><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.maxLivePreview" target=_parent class=ISymbol>maxLivePreview</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_maxNoImprovementIterations><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.maxNoImprovementIterations" target=_parent class=ISymbol>maxNoImprovementIterations</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_maxRank><div class=IEntry><a href="javascript:searchResults.Toggle('SR_maxRank')" class=ISymbol>maxRank</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.maxRank" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.maxRank" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.maxRank" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_maxRankHeight><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.maxRankHeight" target=_parent class=ISymbol>maxRankHeight</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_maxScale><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.maxScale" target=_parent class=ISymbol>maxScale</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_MedianCellSorter><div class=IEntry><a href="javascript:searchResults.Toggle('SR_MedianCellSorter')" class=ISymbol>MedianCellSorter</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#MedianCellSorter" target=_parent class=IParent>Global</a><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#MedianCellSorter.MedianCellSorter" target=_parent class=IParent>MedianCellSorter</a></div></div></div><div class=SRResult id=SR_medianPos><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.medianPos" target=_parent class=ISymbol>medianPos</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_medianRank><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.medianRank" target=_parent class=ISymbol>medianRank</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_medianValue><div class=IEntry><a href="javascript:searchResults.Toggle('SR_medianValue')" class=ISymbol>medianValue</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#MedianCellSorter.medianValue" target=_parent class=IParent>MedianCellSorter</a><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.medianValue" target=_parent class=IParent>mxMedianHybridCrossingReduction</a></div></div></div><div class=SRResult id=SR_medianXValue><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.medianXValue" target=_parent class=ISymbol>medianXValue</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_merge><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.merge" target=_parent class=ISymbol>merge</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_mergeChildren><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mergeChildren" target=_parent class=ISymbol>mergeChildren</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_mergeRemoveEnabled><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.mergeRemoveEnabled" target=_parent class=ISymbol>mergeRemoveEnabled</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_method><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.method" target=_parent class=ISymbol>method</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_min><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.min" target=_parent class=ISymbol>min</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_MIN_undHOTSPOT_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.MIN_HOTSPOT_SIZE" target=_parent class=ISymbol>MIN_HOTSPOT_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_minDistanceLimit><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.minDistanceLimit" target=_parent class=ISymbol>minDistanceLimit</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_minDistanceLimitSquared><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.minDistanceLimitSquared" target=_parent class=ISymbol>minDistanceLimitSquared</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_minEdgeJetty><div class=IEntry><a href="javascript:searchResults.Toggle('SR_minEdgeJetty')" class=ISymbol>minEdgeJetty</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.minEdgeJetty" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.minEdgeJetty" target=_parent class=IParent>mxCoordinateAssignment</a></div></div></div><div class=SRResult id=SR_minFitScale><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.minFitScale" target=_parent class=ISymbol>minFitScale</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_MINIMIZE><div class=IEntry><a href="javascript:searchResults.Toggle('SR_MINIMIZE')" class=ISymbol>MINIMIZE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.MINIMIZE" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.MINIMIZE" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_minimizeImage><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.minimizeImage" target=_parent class=ISymbol>minimizeImage</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_minimumContainerSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.minimumContainerSize" target=_parent class=ISymbol>minimumContainerSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_minimumGraphSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.minimumGraphSize" target=_parent class=ISymbol>minimumGraphSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_minimumSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_minimumSize')" class=ISymbol>minimumSize</a><div class=ISubIndex><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.minimumSize" target=_parent class=IParent>mxGraphHandler</a><a href="../files/util/mxWindow-js.html#mxWindow.minimumSize" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_minNode><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.minNode" target=_parent class=ISymbol>minNode</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_minPageBreakDist><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.minPageBreakDist" target=_parent class=ISymbol>minPageBreakDist</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_minPath><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.minPath" target=_parent class=ISymbol>minPath</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_minRank><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.minRank" target=_parent class=ISymbol>minRank</a>, <span class=IParent>mxGraphAbstractHierarchyCell</span></div></div><div class=SRResult id=SR_minResize><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.minResize" target=_parent class=ISymbol>minResize</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_minScale><div class=IEntry><a href="javascript:searchResults.Toggle('SR_minScale')" class=ISymbol>minScale</a><div class=ISubIndex><a href="../files/view/mxOutline-js.html#mxOutline.minScale" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.minScale" target=_parent class=IParent>mxPanningHandler</a></div></div></div><div class=SRResult id=SR_minStrokeWidth><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.minStrokeWidth" target=_parent class=ISymbol>minStrokeWidth</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_minSvgStrokeWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_minSvgStrokeWidth')" class=ISymbol>minSvgStrokeWidth</a><div class=ISubIndex><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.minSvgStrokeWidth" target=_parent class=IParent>mxCellRenderer</a><a href="../files/shape/mxShape-js.html#mxShape.minSvgStrokeWidth" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_mod><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.mod" target=_parent class=ISymbol>mod</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_model><div class=IEntry><a href="javascript:searchResults.Toggle('SR_model')" class=ISymbol>model</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.model" target=_parent class=IParent>mxGraph</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.model" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.model" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_modified><div class=IEntry><a href="javascript:searchResults.Toggle('SR_modified')" class=ISymbol>modified</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.modified" target=_parent class=IParent>mxCellEditor</a><a href="../files/editor/mxEditor-js.html#mxEditor.modified" target=_parent class=IParent>mxEditor</a></div></div></div><div class=SRResult id=SR_MOUSE_undDOWN><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.MOUSE_DOWN" target=_parent class=ISymbol>MOUSE_DOWN</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_MOUSE_undMOVE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.MOUSE_MOVE" target=_parent class=ISymbol>MOUSE_MOVE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_MOUSE_undUP><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.MOUSE_UP" target=_parent class=ISymbol>MOUSE_UP</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_mouseDown><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mouseDown')" class=ISymbol>mouseDown</a><div class=ISubIndex><a href="../files/handler/mxCellTracker-js.html#mxCellTracker.mouseDown" target=_parent class=IParent>mxCellTracker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mouseDown" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/util/mxDragSource-js.html#mxDragSource.mouseDown" target=_parent class=IParent>mxDragSource</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.mouseDown" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.mouseDown" target=_parent class=IParent>mxGraphHandler</a><a href="../files/view/mxOutline-js.html#mxOutline.mouseDown" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.mouseDown" target=_parent class=IParent>mxPanningHandler</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.mouseDown" target=_parent class=IParent>mxPopupMenuHandler</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.mouseDown" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.mouseDown" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.mouseDown" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.mouseDown" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_mouseDownCounter><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mouseDownCounter" target=_parent class=ISymbol>mouseDownCounter</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_mouseListeners><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mouseListeners" target=_parent class=ISymbol>mouseListeners</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_mouseMove><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mouseMove')" class=ISymbol>mouseMove</a><div class=ISubIndex><a href="../files/handler/mxCellTracker-js.html#mxCellTracker.mouseMove" target=_parent class=IParent>mxCellTracker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mouseMove" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/util/mxDragSource-js.html#mxDragSource.mouseMove" target=_parent class=IParent>mxDragSource</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.mouseMove" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.mouseMove" target=_parent class=IParent>mxGraphHandler</a><a href="../files/view/mxOutline-js.html#mxOutline.mouseMove" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.mouseMove" target=_parent class=IParent>mxPanningHandler</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.mouseMove" target=_parent class=IParent>mxPopupMenuHandler</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.mouseMove" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.mouseMove" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.mouseMove" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.mouseMove" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_mouseUp><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mouseUp')" class=ISymbol>mouseUp</a><div class=ISubIndex><a href="../files/handler/mxCellTracker-js.html#mxCellTracker.mouseUp" target=_parent class=IParent>mxCellTracker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mouseUp" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/util/mxDragSource-js.html#mxDragSource.mouseUp" target=_parent class=IParent>mxDragSource</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.mouseUp" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.mouseUp" target=_parent class=IParent>mxGraphHandler</a><a href="../files/view/mxOutline-js.html#mxOutline.mouseUp" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.mouseUp" target=_parent class=IParent>mxPanningHandler</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.mouseUp" target=_parent class=IParent>mxPopupMenuHandler</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.mouseUp" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.mouseUp" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.mouseUp" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.mouseUp" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_move><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.move" target=_parent class=ISymbol>move</a>, <span class=IParent>mxGuide</span></div></div><div class=SRResult id=SR2_MOVE><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_MOVE')" class=ISymbol>MOVE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.MOVE" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.MOVE" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_MOVE_undCELLS><div class=IEntry><a href="javascript:searchResults.Toggle('SR_MOVE_undCELLS')" class=ISymbol>MOVE_CELLS</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.MOVE_CELLS" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.MOVE_CELLS" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_MOVE_undEND><div class=IEntry><a href="javascript:searchResults.Toggle('SR_MOVE_undEND')" class=ISymbol>MOVE_END</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.MOVE_END" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.MOVE_END" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_MOVE_undSTART><div class=IEntry><a href="javascript:searchResults.Toggle('SR_MOVE_undSTART')" class=ISymbol>MOVE_START</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.MOVE_START" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.MOVE_START" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_moveCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_moveCell')" class=ISymbol>moveCell</a><div class=ISubIndex><a href="../files/layout/mxCompositeLayout-js.html#mxCompositeLayout.moveCell" target=_parent class=IParent>mxCompositeLayout</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.moveCell" target=_parent class=IParent>mxGraphLayout</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.moveCell" target=_parent class=IParent>mxPartitionLayout</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.moveCell" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_moveCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_moveCells')" class=ISymbol>moveCells</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.moveCells" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.moveCells" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_moveChildren><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.moveChildren" target=_parent class=ISymbol>moveChildren</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_moveCircle><div class=IEntry><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.moveCircle" target=_parent class=ISymbol>moveCircle</a>, <span class=IParent>mxCircleLayout</span></div></div><div class=SRResult id=SR_moveEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.moveEnabled" target=_parent class=ISymbol>moveEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_moveHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_moveHandler')" class=ISymbol>moveHandler</a><div class=ISubIndex><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.moveHandler" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.moveHandler" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_moveIconBack><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.moveIconBack" target=_parent class=ISymbol>moveIconBack</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_moveIconFront><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.moveIconFront" target=_parent class=ISymbol>moveIconFront</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_moveLabel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_moveLabel')" class=ISymbol>moveLabel</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.moveLabel" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.moveLabel" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_moveNode><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.moveNode" target=_parent class=ISymbol>moveNode</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_moveOp><div class=IEntry><a href="javascript:searchResults.Toggle('SR_moveOp')" class=ISymbol>moveOp</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.moveOp" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.moveOp" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_moveParent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_moveParent')" class=ISymbol>moveParent</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.moveParent" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.moveParent" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_movePreviewAway><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.movePreviewAway" target=_parent class=ISymbol>movePreviewAway</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_movePreviewToFront><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.movePreviewToFront" target=_parent class=ISymbol>movePreviewToFront</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_movePropertiesDialog><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.movePropertiesDialog" target=_parent class=ISymbol>movePropertiesDialog</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_moveState><div class=IEntry><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.moveState" target=_parent class=ISymbol>moveState</a>, <span class=IParent>mxCellStatePreview</span></div></div><div class=SRResult id=SR_moveTo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_moveTo')" class=ISymbol>moveTo</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.moveTo" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.moveTo" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_moveToFront><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.moveToFront" target=_parent class=ISymbol>moveToFront</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_moveTree><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.moveTree" target=_parent class=ISymbol>moveTree</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_multigraph><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.multigraph" target=_parent class=ISymbol>multigraph</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_multiplicities><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.multiplicities" target=_parent class=ISymbol>multiplicities</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_mxAbstractCanvas2D><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxAbstractCanvas2D')" class=ISymbol>mxAbstractCanvas2D</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D" target=_parent class=IParent>Global</a><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.mxAbstractCanvas2D" target=_parent class=IParent>mxAbstractCanvas2D</a></div></div></div><div class=SRResult id=SR_mxActor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxActor')" class=ISymbol>mxActor</a><div class=ISubIndex><a href="../files/shape/mxActor-js.html#mxActor" target=_parent class=IParent>Global</a><a href="../files/shape/mxActor-js.html#mxActor.mxActor" target=_parent class=IParent>mxActor</a></div></div></div><div class=SRResult id=SR_mxAnimation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxAnimation')" class=ISymbol>mxAnimation</a><div class=ISubIndex><a href="../files/util/mxAnimation-js.html#mxAnimation" target=_parent class=IParent>Global</a><a href="../files/util/mxAnimation-js.html#mxAnimation.mxAnimation" target=_parent class=IParent>mxAnimation</a></div></div></div><div class=SRResult id=SR_mxArrow><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxArrow')" class=ISymbol>mxArrow</a><div class=ISubIndex><a href="../files/shape/mxArrow-js.html#mxArrow" target=_parent class=IParent>Global</a><a href="../files/shape/mxArrow-js.html#mxArrow.mxArrow" target=_parent class=IParent>mxArrow</a></div></div></div><div class=SRResult id=SR_mxArrowConnector><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxArrowConnector')" class=ISymbol>mxArrowConnector</a><div class=ISubIndex><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector" target=_parent class=IParent>Global</a><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.mxArrowConnector" target=_parent class=IParent>mxArrowConnector</a></div></div></div><div class=SRResult id=SR_mxAutoSaveManager><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxAutoSaveManager')" class=ISymbol>mxAutoSaveManager</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager" target=_parent class=IParent>Global</a><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.mxAutoSaveManager" target=_parent class=IParent>mxAutoSaveManager</a></div></div></div><div class=SRResult id=SR_mxCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCell')" class=ISymbol>mxCell</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell" target=_parent class=IParent>Global</a><a href="../files/model/mxCell-js.html#mxCell.mxCell" target=_parent class=IParent>mxCell</a></div></div></div><div class=SRResult id=SR_mxCellAttributeChange><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCellAttributeChange')" class=ISymbol>mxCellAttributeChange</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxCellAttributeChange" target=_parent class=IParent>Global</a><a href="../files/model/mxGraphModel-js.html#mxCellAttributeChange.mxCellAttributeChange" target=_parent class=IParent>mxCellAttributeChange</a></div></div></div><div class=SRResult id=SR_mxCellCodec><div class=IEntry><a href="../files/io/mxCellCodec-js.html#mxCellCodec" target=_parent class=ISymbol>mxCellCodec</a></div></div><div class=SRResult id=SR_mxCellEditor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCellEditor')" class=ISymbol>mxCellEditor</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor" target=_parent class=IParent>Global</a><a href="../files/view/mxCellEditor-js.html#mxCellEditor.mxCellEditor" target=_parent class=IParent>mxCellEditor</a></div></div></div><div class=SRResult id=SR_mxCellHighlight><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCellHighlight')" class=ISymbol>mxCellHighlight</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight" target=_parent class=IParent>Global</a><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.mxCellHighlight" target=_parent class=IParent>mxCellHighlight</a></div></div></div><div class=SRResult id=SR_mxCellMarker><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCellMarker')" class=ISymbol>mxCellMarker</a><div class=ISubIndex><a href="../files/handler/mxCellMarker-js.html#mxCellMarker" target=_parent class=IParent>Global</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.mxCellMarker" target=_parent class=IParent>mxCellMarker</a></div></div></div><div class=SRResult id=SR_mxCellOverlay><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCellOverlay')" class=ISymbol>mxCellOverlay</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay" target=_parent class=IParent>Global</a><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.mxCellOverlay" target=_parent class=IParent>mxCellOverlay</a></div></div></div><div class=SRResult id=SR_mxCellPath><div class=IEntry><a href="../files/model/mxCellPath-js.html#mxCellPath" target=_parent class=ISymbol>mxCellPath</a></div></div><div class=SRResult id=SR_mxCellRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCellRenderer')" class=ISymbol>mxCellRenderer</a><div class=ISubIndex><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer" target=_parent class=IParent>Global</a><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.mxCellRenderer" target=_parent class=IParent>mxCellRenderer</a></div></div></div><div class=SRResult id=SR_mxCellState><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCellState')" class=ISymbol>mxCellState</a><div class=ISubIndex><a href="../files/view/mxCellState-js.html#mxCellState" target=_parent class=IParent>Global</a><a href="../files/view/mxCellState-js.html#mxCellState.mxCellState" target=_parent class=IParent>mxCellState</a></div></div></div><div class=SRResult id=SR_mxCellStatePreview><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCellStatePreview')" class=ISymbol>mxCellStatePreview</a><div class=ISubIndex><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview" target=_parent class=IParent>Global</a><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.mxCellStatePreview" target=_parent class=IParent>mxCellStatePreview</a></div></div></div><div class=SRResult id=SR_mxCellTracker><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCellTracker')" class=ISymbol>mxCellTracker</a><div class=ISubIndex><a href="../files/handler/mxCellTracker-js.html#mxCellTracker" target=_parent class=IParent>Global</a><a href="../files/handler/mxCellTracker-js.html#mxCellTracker.mxCellTracker" target=_parent class=IParent>mxCellTracker</a></div></div></div><div class=SRResult id=SR_mxChildChange><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxChildChange')" class=ISymbol>mxChildChange</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxChildChange" target=_parent class=IParent>Global</a><a href="../files/model/mxGraphModel-js.html#mxChildChange.mxChildChange" target=_parent class=IParent>mxChildChange</a></div></div></div><div class=SRResult id=SR_mxChildChangeCodec><div class=IEntry><a href="../files/io/mxChildChangeCodec-js.html#mxChildChangeCodec" target=_parent class=ISymbol>mxChildChangeCodec</a></div></div><div class=SRResult id=SR_mxCircleLayout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCircleLayout')" class=ISymbol>mxCircleLayout</a><div class=ISubIndex><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout" target=_parent class=IParent>Global</a><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.mxCircleLayout" target=_parent class=IParent>mxCircleLayout</a></div></div></div><div class=SRResult id=SR_mxClient><div class=IEntry><a href="../files/mxClient-js.html#mxClient" target=_parent class=ISymbol>mxClient</a></div></div><div class=SRResult id=SR_mxClipboard><div class=IEntry><a href="../files/util/mxClipboard-js.html#mxClipboard" target=_parent class=ISymbol>mxClipboard</a></div></div><div class=SRResult id=SR_mxCloud><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCloud')" class=ISymbol>mxCloud</a><div class=ISubIndex><a href="../files/shape/mxCloud-js.html#mxCloud" target=_parent class=IParent>Global</a><a href="../files/shape/mxCloud-js.html#mxCloud.mxCloud" target=_parent class=IParent>mxCloud</a></div></div></div><div class=SRResult id=SR_mxCodec><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCodec')" class=ISymbol>mxCodec</a><div class=ISubIndex><a href="../files/io/mxCodec-js.html#mxCodec" target=_parent class=IParent>Global</a><a href="../files/io/mxCodec-js.html#mxCodec.mxCodec" target=_parent class=IParent>mxCodec</a></div></div></div><div class=SRResult id=SR_mxCodecRegistry><div class=IEntry><a href="../files/io/mxCodecRegistry-js.html#mxCodecRegistry" target=_parent class=ISymbol>mxCodecRegistry</a></div></div><div class=SRResult id=SR_mxCollapseChange><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCollapseChange')" class=ISymbol>mxCollapseChange</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxCollapseChange" target=_parent class=IParent>Global</a><a href="../files/model/mxGraphModel-js.html#mxCollapseChange.mxCollapseChange" target=_parent class=IParent>mxCollapseChange</a></div></div></div><div class=SRResult id=SR_mxCompactTreeLayout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCompactTreeLayout')" class=ISymbol>mxCompactTreeLayout</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout" target=_parent class=IParent>Global</a><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.mxCompactTreeLayout" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.mxCompactTreeLayout" target=_parent class=IParent>mxFastOrganicLayout</a></div></div></div><div class=SRResult id=SR_mxCompositeLayout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCompositeLayout')" class=ISymbol>mxCompositeLayout</a><div class=ISubIndex><a href="../files/layout/mxCompositeLayout-js.html#mxCompositeLayout" target=_parent class=IParent>Global</a><a href="../files/layout/mxCompositeLayout-js.html#mxCompositeLayout.mxCompositeLayout" target=_parent class=IParent>mxCompositeLayout</a></div></div></div><div class=SRResult id=SR_mxConnectionConstraint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxConnectionConstraint')" class=ISymbol>mxConnectionConstraint</a><div class=ISubIndex><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint" target=_parent class=IParent>Global</a><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint.mxConnectionConstraint" target=_parent class=IParent>mxConnectionConstraint</a></div></div></div><div class=SRResult id=SR_mxConnectionHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxConnectionHandler')" class=ISymbol>mxConnectionHandler</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler" target=_parent class=IParent>Global</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mxConnectionHandler" target=_parent class=IParent>mxConnectionHandler</a></div></div></div><div class=SRResult id=SR_mxConnector><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxConnector')" class=ISymbol>mxConnector</a><div class=ISubIndex><a href="../files/shape/mxConnector-js.html#mxConnector" target=_parent class=IParent>Global</a><a href="../files/shape/mxConnector-js.html#mxConnector.mxConnector" target=_parent class=IParent>mxConnector</a></div></div></div><div class=SRResult id=SR_mxConstants><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants" target=_parent class=ISymbol>mxConstants</a></div></div><div class=SRResult id=SR_mxConstraintHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxConstraintHandler')" class=ISymbol>mxConstraintHandler</a><div class=ISubIndex><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler" target=_parent class=IParent>Global</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.mxConstraintHandler" target=_parent class=IParent>mxConstraintHandler</a></div></div></div><div class=SRResult id=SR_mxCoordinateAssignment><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCoordinateAssignment')" class=ISymbol>mxCoordinateAssignment</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment" target=_parent class=IParent>Global</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.mxCoordinateAssignment" target=_parent class=IParent>mxCoordinateAssignment</a></div></div></div><div class=SRResult id=SR_mxCurrentRootChange><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCurrentRootChange')" class=ISymbol>mxCurrentRootChange</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxCurrentRootChange" target=_parent class=IParent>Global</a><a href="../files/view/mxGraphView-js.html#mxCurrentRootChange.mxCurrentRootChange" target=_parent class=IParent>mxCurrentRootChange</a><a href="../files/view/mxGraphSelectionModel-js.html#mxSelectionChange.mxCurrentRootChange" target=_parent class=IParent>mxSelectionChange</a></div></div></div><div class=SRResult id=SR_mxCylinder><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxCylinder')" class=ISymbol>mxCylinder</a><div class=ISubIndex><a href="../files/shape/mxCylinder-js.html#mxCylinder" target=_parent class=IParent>Global</a><a href="../files/shape/mxCylinder-js.html#mxCylinder.mxCylinder" target=_parent class=IParent>mxCylinder</a></div></div></div><div class=SRResult id=SR_mxDefaultKeyHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxDefaultKeyHandler')" class=ISymbol>mxDefaultKeyHandler</a><div class=ISubIndex><a href="../files/editor/mxDefaultKeyHandler-js.html#mxDefaultKeyHandler" target=_parent class=IParent>Global</a><a href="../files/editor/mxDefaultKeyHandler-js.html#mxDefaultKeyHandler.mxDefaultKeyHandler" target=_parent class=IParent>mxDefaultKeyHandler</a></div></div></div><div class=SRResult id=SR_mxDefaultKeyHandlerCodec><div class=IEntry><a href="../files/io/mxDefaultKeyHandlerCodec-js.html#mxDefaultKeyHandlerCodec" target=_parent class=ISymbol>mxDefaultKeyHandlerCodec</a></div></div><div class=SRResult id=SR_mxDefaultPopupMenu><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxDefaultPopupMenu')" class=ISymbol>mxDefaultPopupMenu</a><div class=ISubIndex><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu" target=_parent class=IParent>Global</a><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.mxDefaultPopupMenu" target=_parent class=IParent>mxDefaultPopupMenu</a></div></div></div><div class=SRResult id=SR_mxDefaultPopupMenuCodec><div class=IEntry><a href="../files/io/mxDefaultPopupMenuCodec-js.html#mxDefaultPopupMenuCodec" target=_parent class=ISymbol>mxDefaultPopupMenuCodec</a></div></div><div class=SRResult id=SR_mxDefaultToolbar><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxDefaultToolbar')" class=ISymbol>mxDefaultToolbar</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar" target=_parent class=IParent>Global</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.mxDefaultToolbar" target=_parent class=IParent>mxDefaultToolbar</a></div></div></div><div class=SRResult id=SR_mxDefaultToolbarCodec><div class=IEntry><a href="../files/io/mxDefaultToolbarCodec-js.html#mxDefaultToolbarCodec" target=_parent class=ISymbol>mxDefaultToolbarCodec</a></div></div><div class=SRResult id=SR_mxDictionary><div class=IEntry><a href="../files/util/mxDictionary-js.html#mxDictionary" target=_parent class=ISymbol>mxDictionary</a></div></div><div class=SRResult id=SR_mxDivResizer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxDivResizer')" class=ISymbol>mxDivResizer</a><div class=ISubIndex><a href="../files/util/mxDivResizer-js.html#mxDivResizer" target=_parent class=IParent>Global</a><a href="../files/util/mxDivResizer-js.html#mxDivResizer.mxDivResizer" target=_parent class=IParent>mxDivResizer</a></div></div></div><div class=SRResult id=SR_mxDoubleEllipse><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxDoubleEllipse')" class=ISymbol>mxDoubleEllipse</a><div class=ISubIndex><a href="../files/shape/mxDoubleEllipse-js.html#mxDoubleEllipse" target=_parent class=IParent>Global</a><a href="../files/shape/mxDoubleEllipse-js.html#mxDoubleEllipse.mxDoubleEllipse" target=_parent class=IParent>mxDoubleEllipse</a></div></div></div><div class=SRResult id=SR_mxDragSource><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxDragSource')" class=ISymbol>mxDragSource</a><div class=ISubIndex><a href="../files/util/mxDragSource-js.html#mxDragSource" target=_parent class=IParent>Global</a><a href="../files/util/mxDragSource-js.html#mxDragSource.mxDragSource" target=_parent class=IParent>mxDragSource</a></div></div></div><div class=SRResult id=SR_mxEdgeHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxEdgeHandler')" class=ISymbol>mxEdgeHandler</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler" target=_parent class=IParent>Global</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.mxEdgeHandler" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.mxEdgeHandler" target=_parent class=IParent>mxElbowEdgeHandler</a></div></div></div><div class=SRResult id=SR_mxEdgeLabelLayout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxEdgeLabelLayout')" class=ISymbol>mxEdgeLabelLayout</a><div class=ISubIndex><a href="../files/layout/mxEdgeLabelLayout-js.html#mxEdgeLabelLayout" target=_parent class=IParent>Global</a><a href="../files/layout/mxEdgeLabelLayout-js.html#mxEdgeLabelLayout.mxEdgeLabelLayout" target=_parent class=IParent>mxEdgeLabelLayout</a></div></div></div><div class=SRResult id=SR_mxEdgeSegmentHandler_perjs><div class=IEntry><a href="../files/handler/mxEdgeSegmentHandler-js.html#mxEdgeSegmentHandler.js" target=_parent class=ISymbol>mxEdgeSegmentHandler.js</a></div></div><div class=SRResult id=SR_mxEdgeStyle><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle" target=_parent class=ISymbol>mxEdgeStyle</a></div></div><div class=SRResult id=SR_mxEditor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxEditor')" class=ISymbol>mxEditor</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor" target=_parent class=IParent>Global</a><a href="../files/editor/mxEditor-js.html#mxEditor.mxEditor" target=_parent class=IParent>mxEditor</a></div></div></div><div class=SRResult id=SR_mxEditorCodec><div class=IEntry><a href="../files/io/mxEditorCodec-js.html#mxEditorCodec" target=_parent class=ISymbol>mxEditorCodec</a></div></div><div class=SRResult id=SR_mxEffects><div class=IEntry><a href="../files/util/mxEffects-js.html#mxEffects" target=_parent class=ISymbol>mxEffects</a></div></div><div class=SRResult id=SR_mxElbowEdgeHandler><div class=IEntry><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler" target=_parent class=ISymbol>mxElbowEdgeHandler</a></div></div><div class=SRResult id=SR_mxEllipse><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxEllipse')" class=ISymbol>mxEllipse</a><div class=ISubIndex><a href="../files/shape/mxEllipse-js.html#mxEllipse" target=_parent class=IParent>Global</a><a href="../files/shape/mxEllipse-js.html#mxEllipse.mxEllipse" target=_parent class=IParent>mxEllipse</a></div></div></div><div class=SRResult id=SR_mxEvent><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent" target=_parent class=ISymbol>mxEvent</a></div></div><div class=SRResult id=SR_mxEventObject><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxEventObject')" class=ISymbol>mxEventObject</a><div class=ISubIndex><a href="../files/util/mxEventObject-js.html#mxEventObject" target=_parent class=IParent>Global</a><a href="../files/util/mxEventObject-js.html#mxEventObject.mxEventObject" target=_parent class=IParent>mxEventObject</a></div></div></div><div class=SRResult id=SR_mxEventSource><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxEventSource')" class=ISymbol>mxEventSource</a><div class=ISubIndex><a href="../files/util/mxEventSource-js.html#mxEventSource" target=_parent class=IParent>Global</a><a href="../files/util/mxDictionary-js.html#mxDictionary.mxEventSource" target=_parent class=IParent>mxDictionary</a><a href="../files/util/mxEventSource-js.html#mxEventSource.mxEventSource" target=_parent class=IParent>mxEventSource</a></div></div></div><div class=SRResult id=SR_mxFastOrganicLayout><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout" target=_parent class=ISymbol>mxFastOrganicLayout</a></div></div><div class=SRResult id=SR_mxForceIncludes><div class=IEntry><a href="../files/mxClient-js.html#mxClient.mxForceIncludes" target=_parent class=ISymbol>mxForceIncludes</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_mxForm><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxForm')" class=ISymbol>mxForm</a><div class=ISubIndex><a href="../files/util/mxForm-js.html#mxForm" target=_parent class=IParent>Global</a><a href="../files/util/mxForm-js.html#mxForm.mxForm" target=_parent class=IParent>mxForm</a></div></div></div><div class=SRResult id=SR_mxGenericChangeCodec><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxGenericChangeCodec')" class=ISymbol>mxGenericChangeCodec</a><div class=ISubIndex><a href="../files/io/mxGenericChangeCodec-js.html#mxGenericChangeCodec" target=_parent class=IParent>Global</a><a href="../files/io/mxGenericChangeCodec-js.html#mxGenericChangeCodec.mxGenericChangeCodec" target=_parent class=IParent>mxGenericChangeCodec</a></div></div></div><div class=SRResult id=SR_mxGeometry><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxGeometry')" class=ISymbol>mxGeometry</a><div class=ISubIndex><a href="../files/model/mxGeometry-js.html#mxGeometry" target=_parent class=IParent>Global</a><a href="../files/model/mxGeometry-js.html#mxGeometry.mxGeometry" target=_parent class=IParent>mxGeometry</a></div></div></div><div class=SRResult id=SR_mxGeometryChange><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxGeometryChange')" class=ISymbol>mxGeometryChange</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGeometryChange" target=_parent class=IParent>Global</a><a href="../files/model/mxGraphModel-js.html#mxGeometryChange.mxGeometryChange" target=_parent class=IParent>mxGeometryChange</a></div></div></div><div class=SRResult id=SR_mxGraph><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxGraph')" class=ISymbol>mxGraph</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph" target=_parent class=IParent>Global</a><a href="../files/view/mxGraph-js.html#mxGraph.mxGraph" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_mxgraph_equseen><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxgraph=seen" target=_parent class=ISymbol>mxgraph=seen</a></div></div><div class=SRResult id=SR_mxGraphAbstractHierarchyCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxGraphAbstractHierarchyCell')" class=ISymbol>mxGraphAbstractHierarchyCell</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell" target=_parent class=IParent>Global</a><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.mxGraphAbstractHierarchyCell" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a></div></div></div><div class=SRResult id=SR_mxGraphCodec><div class=IEntry><a href="../files/io/mxGraphCodec-js.html#mxGraphCodec" target=_parent class=ISymbol>mxGraphCodec</a></div></div><div class=SRResult id=SR_mxGraphHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxGraphHandler')" class=ISymbol>mxGraphHandler</a><div class=ISubIndex><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler" target=_parent class=IParent>Global</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.mxGraphHandler" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_mxGraphHierarchyEdge><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxGraphHierarchyEdge')" class=ISymbol>mxGraphHierarchyEdge</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge" target=_parent class=IParent>Global</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.mxGraphHierarchyEdge" target=_parent class=IParent>mxGraphHierarchyEdge</a></div></div></div><div class=SRResult id=SR_mxGraphHierarchyModel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxGraphHierarchyModel')" class=ISymbol>mxGraphHierarchyModel</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel" target=_parent class=IParent>Global</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.mxGraphHierarchyModel" target=_parent class=IParent>mxGraphHierarchyModel</a></div></div></div><div class=SRResult id=SR_mxGraphHierarchyNode><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxGraphHierarchyNode')" class=ISymbol>mxGraphHierarchyNode</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode" target=_parent class=IParent>Global</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.mxGraphHierarchyNode" target=_parent class=IParent>mxGraphHierarchyNode</a></div></div></div><div class=SRResult id=SR_mxGraphLayout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxGraphLayout')" class=ISymbol>mxGraphLayout</a><div class=ISubIndex><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout" target=_parent class=IParent>Global</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.mxGraphLayout" target=_parent class=IParent>mxGraphLayout</a></div></div></div><div class=SRResult id=SR_mxGraphModel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxGraphModel')" class=ISymbol>mxGraphModel</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxGraphModel" target=_parent class=IParent>Global</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxGraphModel" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_mxGraphSelectionModel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxGraphSelectionModel')" class=ISymbol>mxGraphSelectionModel</a><div class=ISubIndex><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel" target=_parent class=IParent>Global</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.mxGraphSelectionModel" target=_parent class=IParent>mxGraphSelectionModel</a></div></div></div><div class=SRResult id=SR_mxGraphView><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxGraphView')" class=ISymbol>mxGraphView</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxGraphView" target=_parent class=IParent>Global</a><a href="../files/view/mxGraphView-js.html#mxGraphView.mxGraphView" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_mxGraphViewCodec><div class=IEntry><a href="../files/io/mxGraphViewCodec-js.html#mxGraphViewCodec" target=_parent class=ISymbol>mxGraphViewCodec</a></div></div><div class=SRResult id=SR_mxGuide><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxGuide')" class=ISymbol>mxGuide</a><div class=ISubIndex><a href="../files/util/mxGuide-js.html#mxGuide" target=_parent class=IParent>Global</a><a href="../files/util/mxGuide-js.html#mxGuide.mxGuide" target=_parent class=IParent>mxGuide</a></div></div></div><div class=SRResult id=SR_mxHandle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxHandle')" class=ISymbol>mxHandle</a><div class=ISubIndex><a href="../files/handler/mxHandle-js.html#mxHandle" target=_parent class=IParent>Global</a><a href="../files/handler/mxHandle-js.html#mxHandle.mxHandle" target=_parent class=IParent>mxHandle</a></div></div></div><div class=SRResult id=SR_mxHexagon><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxHexagon')" class=ISymbol>mxHexagon</a><div class=ISubIndex><a href="../files/shape/mxHexagon-js.html#mxHexagon" target=_parent class=IParent>Global</a><a href="../files/shape/mxHexagon-js.html#mxHexagon.mxHexagon" target=_parent class=IParent>mxHexagon</a></div></div></div><div class=SRResult id=SR_mxHierarchicalLayout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxHierarchicalLayout')" class=ISymbol>mxHierarchicalLayout</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout" target=_parent class=IParent>Global</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.mxHierarchicalLayout" target=_parent class=IParent>mxHierarchicalLayout</a></div></div></div><div class=SRResult id=SR_mxHierarchicalLayoutStage><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxHierarchicalLayoutStage')" class=ISymbol>mxHierarchicalLayoutStage</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxHierarchicalLayoutStage-js.html#mxHierarchicalLayoutStage" target=_parent class=IParent>Global</a><a href="../files/layout/hierarchical/stage/mxHierarchicalLayoutStage-js.html#mxHierarchicalLayoutStage.mxHierarchicalLayoutStage" target=_parent class=IParent>mxHierarchicalLayoutStage</a></div></div></div><div class=SRResult id=SR_mxImage><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxImage')" class=ISymbol>mxImage</a><div class=ISubIndex><a href="../files/util/mxImage-js.html#mxImage" target=_parent class=IParent>Global</a><a href="../files/util/mxImage-js.html#mxImage.mxImage" target=_parent class=IParent>mxImage</a></div></div></div><div class=SRResult id=SR_mxImageBundle><div class=IEntry><a href="../files/util/mxImageBundle-js.html#mxImageBundle" target=_parent class=ISymbol>mxImageBundle</a></div></div><div class=SRResult id=SR_mxImageExport><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxImageExport')" class=ISymbol>mxImageExport</a><div class=ISubIndex><a href="../files/util/mxImageExport-js.html#mxImageExport" target=_parent class=IParent>Global</a><a href="../files/util/mxImageExport-js.html#mxImageExport.mxImageExport" target=_parent class=IParent>mxImageExport</a></div></div></div><div class=SRResult id=SR_mxImageShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxImageShape')" class=ISymbol>mxImageShape</a><div class=ISubIndex><a href="../files/shape/mxImageShape-js.html#mxImageShape" target=_parent class=IParent>Global</a><a href="../files/shape/mxImageShape-js.html#mxImageShape.mxImageShape" target=_parent class=IParent>mxImageShape</a></div></div></div><div class=SRResult id=SR_mxKeyHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxKeyHandler')" class=ISymbol>mxKeyHandler</a><div class=ISubIndex><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler" target=_parent class=IParent>Global</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.mxKeyHandler" target=_parent class=IParent>mxKeyHandler</a></div></div></div><div class=SRResult id=SR_mxLabel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxLabel')" class=ISymbol>mxLabel</a><div class=ISubIndex><a href="../files/shape/mxLabel-js.html#mxLabel" target=_parent class=IParent>Global</a><a href="../files/shape/mxLabel-js.html#mxLabel.mxLabel" target=_parent class=IParent>mxLabel</a></div></div></div><div class=SRResult id=SR_mxLayoutManager><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxLayoutManager')" class=ISymbol>mxLayoutManager</a><div class=ISubIndex><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager" target=_parent class=IParent>Global</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.mxLayoutManager" target=_parent class=IParent>mxLayoutManager</a></div></div></div><div class=SRResult id=SR_mxLine><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxLine')" class=ISymbol>mxLine</a><div class=ISubIndex><a href="../files/shape/mxLine-js.html#mxLine" target=_parent class=IParent>Global</a><a href="../files/shape/mxLine-js.html#mxLine.mxLine" target=_parent class=IParent>mxLine</a></div></div></div><div class=SRResult id=SR_mxLoadResources><div class=IEntry><a href="../files/mxClient-js.html#mxClient.mxLoadResources" target=_parent class=ISymbol>mxLoadResources</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_mxLoadStylesheets><div class=IEntry><a href="../files/mxClient-js.html#mxClient.mxLoadStylesheets" target=_parent class=ISymbol>mxLoadStylesheets</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_mxLog><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog" target=_parent class=ISymbol>mxLog</a></div></div><div class=SRResult id=SR_mxMarker><div class=IEntry><a href="../files/shape/mxMarker-js.html#mxMarker" target=_parent class=ISymbol>mxMarker</a></div></div><div class=SRResult id=SR_mxMedianHybridCrossingReduction><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxMedianHybridCrossingReduction')" class=ISymbol>mxMedianHybridCrossingReduction</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction" target=_parent class=IParent>Global</a><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.mxMedianHybridCrossingReduction" target=_parent class=IParent>mxMedianHybridCrossingReduction</a></div></div></div><div class=SRResult id=SR_mxMinimumCycleRemover><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxMinimumCycleRemover')" class=ISymbol>mxMinimumCycleRemover</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxMinimumCycleRemover-js.html#mxMinimumCycleRemover" target=_parent class=IParent>Global</a><a href="../files/layout/hierarchical/stage/mxMinimumCycleRemover-js.html#mxMinimumCycleRemover.mxMinimumCycleRemover" target=_parent class=IParent>mxMinimumCycleRemover</a></div></div></div><div class=SRResult id=SR_mxModelCodec><div class=IEntry><a href="../files/io/mxModelCodec-js.html#mxModelCodec" target=_parent class=ISymbol>mxModelCodec</a></div></div><div class=SRResult id=SR_mxMorphing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxMorphing')" class=ISymbol>mxMorphing</a><div class=ISubIndex><a href="../files/util/mxMorphing-js.html#mxMorphing" target=_parent class=IParent>Global</a><a href="../files/util/mxMorphing-js.html#mxMorphing.mxMorphing" target=_parent class=IParent>mxMorphing</a></div></div></div><div class=SRResult id=SR_mxMouseEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxMouseEvent')" class=ISymbol>mxMouseEvent</a><div class=ISubIndex><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent" target=_parent class=IParent>Global</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.mxMouseEvent" target=_parent class=IParent>mxMouseEvent</a></div></div></div><div class=SRResult id=SR_mxMultiplicity><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxMultiplicity')" class=ISymbol>mxMultiplicity</a><div class=ISubIndex><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity" target=_parent class=IParent>Global</a><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.mxMultiplicity" target=_parent class=IParent>mxMultiplicity</a></div></div></div><div class=SRResult id=SR_mxObjectCodec><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxObjectCodec')" class=ISymbol>mxObjectCodec</a><div class=ISubIndex><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec" target=_parent class=IParent>Global</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.mxObjectCodec" target=_parent class=IParent>mxObjectCodec</a></div></div></div><div class=SRResult id=SR_mxObjectIdentity><div class=IEntry><a href="../files/util/mxObjectIdentity-js.html#mxObjectIdentity" target=_parent class=ISymbol>mxObjectIdentity</a></div></div><div class=SRResult id=SR_mxOutline><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxOutline')" class=ISymbol>mxOutline</a><div class=ISubIndex><a href="../files/view/mxOutline-js.html#mxOutline" target=_parent class=IParent>Global</a><a href="../files/view/mxOutline-js.html#mxOutline.mxOutline" target=_parent class=IParent>mxOutline</a></div></div></div><div class=SRResult id=SR_mxPanningHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxPanningHandler')" class=ISymbol>mxPanningHandler</a><div class=ISubIndex><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler" target=_parent class=IParent>Global</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.mxPanningHandler" target=_parent class=IParent>mxPanningHandler</a></div></div></div><div class=SRResult id=SR_mxPanningManager><div class=IEntry><a href="../files/util/mxPanningManager-js.html#mxPanningManager" target=_parent class=ISymbol>mxPanningManager</a></div></div><div class=SRResult id=SR_mxParallelEdgeLayout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxParallelEdgeLayout')" class=ISymbol>mxParallelEdgeLayout</a><div class=ISubIndex><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout" target=_parent class=IParent>Global</a><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.mxParallelEdgeLayout" target=_parent class=IParent>mxParallelEdgeLayout</a></div></div></div><div class=SRResult id=SR_mxPartitionLayout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxPartitionLayout')" class=ISymbol>mxPartitionLayout</a><div class=ISubIndex><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout" target=_parent class=IParent>Global</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.mxPartitionLayout" target=_parent class=IParent>mxPartitionLayout</a></div></div></div><div class=SRResult id=SR_mxPerimeter><div class=IEntry><a href="../files/view/mxPerimeter-js.html#mxPerimeter" target=_parent class=ISymbol>mxPerimeter</a></div></div><div class=SRResult id=SR_mxPoint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxPoint')" class=ISymbol>mxPoint</a><div class=ISubIndex><a href="../files/util/mxPoint-js.html#mxPoint" target=_parent class=IParent>Global</a><a href="../files/util/mxPoint-js.html#mxPoint.mxPoint" target=_parent class=IParent>mxPoint</a></div></div></div><div class=SRResult id=SR_mxPolyline><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxPolyline')" class=ISymbol>mxPolyline</a><div class=ISubIndex><a href="../files/shape/mxPolyline-js.html#mxPolyline" target=_parent class=IParent>Global</a><a href="../files/shape/mxPolyline-js.html#mxPolyline.mxPolyline" target=_parent class=IParent>mxPolyline</a></div></div></div><div class=SRResult id=SR_mxPopupMenu><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxPopupMenu')" class=ISymbol>mxPopupMenu</a><div class=ISubIndex><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu" target=_parent class=IParent>Global</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.mxPopupMenu" target=_parent class=IParent>mxPopupMenu</a></div></div></div><div class=SRResult id=SR_mxPopupMenuHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxPopupMenuHandler')" class=ISymbol>mxPopupMenuHandler</a><div class=ISubIndex><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler" target=_parent class=IParent>Global</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.mxPopupMenuHandler" target=_parent class=IParent>mxPopupMenuHandler</a></div></div></div><div class=SRResult id=SR_mxPrintPreview><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxPrintPreview')" class=ISymbol>mxPrintPreview</a><div class=ISubIndex><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview" target=_parent class=IParent>Global</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.mxPrintPreview" target=_parent class=IParent>mxPrintPreview</a></div></div></div><div class=SRResult id=SR_mxRadialTreeLayout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxRadialTreeLayout')" class=ISymbol>mxRadialTreeLayout</a><div class=ISubIndex><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout" target=_parent class=IParent>Global</a><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.mxRadialTreeLayout" target=_parent class=IParent>mxRadialTreeLayout</a></div></div></div><div class=SRResult id=SR_mxRectangle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxRectangle')" class=ISymbol>mxRectangle</a><div class=ISubIndex><a href="../files/util/mxRectangle-js.html#mxRectangle" target=_parent class=IParent>Global</a><a href="../files/util/mxRectangle-js.html#mxRectangle.mxRectangle" target=_parent class=IParent>mxRectangle</a></div></div></div><div class=SRResult id=SR_mxRectangleShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxRectangleShape')" class=ISymbol>mxRectangleShape</a><div class=ISubIndex><a href="../files/shape/mxRectangleShape-js.html#mxRectangleShape" target=_parent class=IParent>Global</a><a href="../files/shape/mxRectangleShape-js.html#mxRectangleShape.mxRectangleShape" target=_parent class=IParent>mxRectangleShape</a></div></div></div><div class=SRResult id=SR_mxResourceExtension><div class=IEntry><a href="../files/mxClient-js.html#mxClient.mxResourceExtension" target=_parent class=ISymbol>mxResourceExtension</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_mxResources><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources" target=_parent class=ISymbol>mxResources</a></div></div><div class=SRResult id=SR_mxRhombus><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxRhombus')" class=ISymbol>mxRhombus</a><div class=ISubIndex><a href="../files/shape/mxRhombus-js.html#mxRhombus" target=_parent class=IParent>Global</a><a href="../files/shape/mxRhombus-js.html#mxRhombus.mxRhombus" target=_parent class=IParent>mxRhombus</a></div></div></div><div class=SRResult id=SR_mxRootChange><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxRootChange')" class=ISymbol>mxRootChange</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxRootChange" target=_parent class=IParent>Global</a><a href="../files/model/mxGraphModel-js.html#mxRootChange.mxRootChange" target=_parent class=IParent>mxRootChange</a></div></div></div><div class=SRResult id=SR_mxRootChangeCodec><div class=IEntry><a href="../files/io/mxRootChangeCodec-js.html#mxRootChangeCodec" target=_parent class=ISymbol>mxRootChangeCodec</a></div></div><div class=SRResult id=SR_mxRubberband><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxRubberband')" class=ISymbol>mxRubberband</a><div class=ISubIndex><a href="../files/handler/mxRubberband-js.html#mxRubberband" target=_parent class=IParent>Global</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.mxRubberband" target=_parent class=IParent>mxRubberband</a></div></div></div><div class=SRResult id=SR_mxSelectionCellsHandler><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler" target=_parent class=ISymbol>mxSelectionCellsHandler</a></div></div><div class=SRResult id=SR_mxSelectionChange><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxSelectionChange" target=_parent class=ISymbol>mxSelectionChange</a></div></div><div class=SRResult id=SR_mxShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxShape')" class=ISymbol>mxShape</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape" target=_parent class=IParent>Global</a><a href="../files/shape/mxShape-js.html#mxShape.mxShape" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_mxStackLayout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxStackLayout')" class=ISymbol>mxStackLayout</a><div class=ISubIndex><a href="../files/layout/mxStackLayout-js.html#mxStackLayout" target=_parent class=IParent>Global</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.mxStackLayout" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_mxStencil><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxStencil')" class=ISymbol>mxStencil</a><div class=ISubIndex><a href="../files/shape/mxStencil-js.html#mxStencil" target=_parent class=IParent>Global</a><a href="../files/shape/mxStencil-js.html#mxStencil.mxStencil" target=_parent class=IParent>mxStencil</a></div></div></div><div class=SRResult id=SR_mxStencilRegistry><div class=IEntry><a href="../files/shape/mxStencilRegistry-js.html#mxStencilRegistry" target=_parent class=ISymbol>mxStencilRegistry</a></div></div><div class=SRResult id=SR_mxStyleChange><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxStyleChange')" class=ISymbol>mxStyleChange</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxStyleChange" target=_parent class=IParent>Global</a><a href="../files/model/mxGraphModel-js.html#mxStyleChange.mxStyleChange" target=_parent class=IParent>mxStyleChange</a></div></div></div><div class=SRResult id=SR_mxStyleRegistry><div class=IEntry><a href="../files/view/mxStyleRegistry-js.html#mxStyleRegistry" target=_parent class=ISymbol>mxStyleRegistry</a></div></div><div class=SRResult id=SR_mxStylesheet><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxStylesheet')" class=ISymbol>mxStylesheet</a><div class=ISubIndex><a href="../files/view/mxStylesheet-js.html#mxStylesheet" target=_parent class=IParent>Global</a><a href="../files/view/mxStylesheet-js.html#mxStylesheet.mxStylesheet" target=_parent class=IParent>mxStylesheet</a></div></div></div><div class=SRResult id=SR_mxStylesheetCodec><div class=IEntry><a href="../files/io/mxStylesheetCodec-js.html#mxStylesheetCodec" target=_parent class=ISymbol>mxStylesheetCodec</a></div></div><div class=SRResult id=SR_mxSvgCanvas2D><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxSvgCanvas2D')" class=ISymbol>mxSvgCanvas2D</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D" target=_parent class=IParent>Global</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.mxSvgCanvas2D" target=_parent class=IParent>mxSvgCanvas2D</a></div></div></div><div class=SRResult id=SR_mxSwimlane><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxSwimlane')" class=ISymbol>mxSwimlane</a><div class=ISubIndex><a href="../files/shape/mxSwimlane-js.html#mxSwimlane" target=_parent class=IParent>Global</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.mxSwimlane" target=_parent class=IParent>mxSwimlane</a></div></div></div><div class=SRResult id=SR_mxSwimlaneLayout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxSwimlaneLayout')" class=ISymbol>mxSwimlaneLayout</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout" target=_parent class=IParent>Global</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.mxSwimlaneLayout" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_mxSwimlaneManager><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxSwimlaneManager')" class=ISymbol>mxSwimlaneManager</a><div class=ISubIndex><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager" target=_parent class=IParent>Global</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.mxSwimlaneManager" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_mxSwimlaneModel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxSwimlaneModel')" class=ISymbol>mxSwimlaneModel</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel" target=_parent class=IParent>Global</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.mxSwimlaneModel" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_mxSwimlaneOrdering><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxSwimlaneOrdering')" class=ISymbol>mxSwimlaneOrdering</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxSwimlaneOrdering-js.html#mxSwimlaneOrdering" target=_parent class=IParent>Global</a><a href="../files/layout/hierarchical/stage/mxSwimlaneOrdering-js.html#mxSwimlaneOrdering.mxSwimlaneOrdering" target=_parent class=IParent>mxSwimlaneOrdering</a></div></div></div><div class=SRResult id=SR_mxTemporaryCellStates><div class=IEntry><a href="../files/view/mxTemporaryCellStates-js.html#mxTemporaryCellStates" target=_parent class=ISymbol>mxTemporaryCellStates</a></div></div><div class=SRResult id=SR_mxTerminalChange><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxTerminalChange')" class=ISymbol>mxTerminalChange</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxTerminalChange" target=_parent class=IParent>Global</a><a href="../files/model/mxGraphModel-js.html#mxTerminalChange.mxTerminalChange" target=_parent class=IParent>mxTerminalChange</a></div></div></div><div class=SRResult id=SR_mxTerminalChangeCodec><div class=IEntry><a href="../files/io/mxTerminalChangeCodec-js.html#mxTerminalChangeCodec" target=_parent class=ISymbol>mxTerminalChangeCodec</a></div></div><div class=SRResult id=SR_mxText><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxText')" class=ISymbol>mxText</a><div class=ISubIndex><a href="../files/shape/mxText-js.html#mxText" target=_parent class=IParent>Global</a><a href="../files/shape/mxText-js.html#mxText.mxText" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_mxToolbar><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxToolbar')" class=ISymbol>mxToolbar</a><div class=ISubIndex><a href="../files/util/mxToolbar-js.html#mxToolbar" target=_parent class=IParent>Global</a><a href="../files/util/mxToolbar-js.html#mxToolbar.mxToolbar" target=_parent class=IParent>mxToolbar</a></div></div></div><div class=SRResult id=SR_mxTooltipHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxTooltipHandler')" class=ISymbol>mxTooltipHandler</a><div class=ISubIndex><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler" target=_parent class=IParent>Global</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.mxTooltipHandler" target=_parent class=IParent>mxTooltipHandler</a></div></div></div><div class=SRResult id=SR_mxTransient><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.mxTransient" target=_parent class=ISymbol>mxTransient</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_mxTriangle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxTriangle')" class=ISymbol>mxTriangle</a><div class=ISubIndex><a href="../files/shape/mxTriangle-js.html#mxTriangle" target=_parent class=IParent>Global</a><a href="../files/shape/mxTriangle-js.html#mxTriangle.mxTriangle" target=_parent class=IParent>mxTriangle</a></div></div></div><div class=SRResult id=SR_mxUndoableEdit><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxUndoableEdit')" class=ISymbol>mxUndoableEdit</a><div class=ISubIndex><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit" target=_parent class=IParent>Global</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.mxUndoableEdit" target=_parent class=IParent>mxUndoableEdit</a></div></div></div><div class=SRResult id=SR_mxUndoManager><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxUndoManager')" class=ISymbol>mxUndoManager</a><div class=ISubIndex><a href="../files/util/mxUndoManager-js.html#mxUndoManager" target=_parent class=IParent>Global</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.mxUndoManager" target=_parent class=IParent>mxUndoManager</a></div></div></div><div class=SRResult id=SR_mxUrlConverter><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter" target=_parent class=ISymbol>mxUrlConverter</a></div></div><div class=SRResult id=SR_mxUtils><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils" target=_parent class=ISymbol>mxUtils</a></div></div><div class=SRResult id=SR_mxValueChange><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxValueChange')" class=ISymbol>mxValueChange</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxValueChange" target=_parent class=IParent>Global</a><a href="../files/model/mxGraphModel-js.html#mxValueChange.mxValueChange" target=_parent class=IParent>mxValueChange</a></div></div></div><div class=SRResult id=SR_mxVertexHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxVertexHandler')" class=ISymbol>mxVertexHandler</a><div class=ISubIndex><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler" target=_parent class=IParent>Global</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.mxVertexHandler" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_mxVisibleChange><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxVisibleChange')" class=ISymbol>mxVisibleChange</a><div class=ISubIndex><a href="../files/model/mxGraphModel-js.html#mxVisibleChange" target=_parent class=IParent>Global</a><a href="../files/model/mxGraphModel-js.html#mxVisibleChange.mxVisibleChange" target=_parent class=IParent>mxVisibleChange</a></div></div></div><div class=SRResult id=SR_mxVmlCanvas2D><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D" target=_parent class=ISymbol>mxVmlCanvas2D</a></div></div><div class=SRResult id=SR_mxWindow><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxWindow')" class=ISymbol>mxWindow</a><div class=ISubIndex><a href="../files/util/mxWindow-js.html#mxWindow" target=_parent class=IParent>Global</a><a href="../files/util/mxWindow-js.html#mxWindow.mxWindow" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_mxXmlCanvas2D><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxXmlCanvas2D')" class=ISymbol>mxXmlCanvas2D</a><div class=ISubIndex><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D" target=_parent class=IParent>Global</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.mxXmlCanvas2D" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_mxXmlRequest><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mxXmlRequest')" class=ISymbol>mxXmlRequest</a><div class=ISubIndex><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest" target=_parent class=IParent>Global</a><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.mxXmlRequest" target=_parent class=IParent>mxXmlRequest</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralN.html b/docs/js-api/search/GeneralN.html
index 6837e4eea..a2280abf8 100644
--- a/docs/js-api/search/GeneralN.html
+++ b/docs/js-api/search/GeneralN.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_name><div class=IEntry><a href="javascript:searchResults.Toggle('SR_name')" class=ISymbol>name</a><div class=ISubIndex><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint.name" target=_parent class=IParent>mxConnectionConstraint</a><a href="../files/util/mxEventObject-js.html#mxEventObject.name" target=_parent class=IParent>mxEventObject</a></div></div></div><div class=SRResult id=SR_nativeDoubleClickEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.nativeDoubleClickEnabled" target=_parent class=ISymbol>nativeDoubleClickEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_neighbours><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.neighbours" target=_parent class=ISymbol>neighbours</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_nestedBestRanks><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.nestedBestRanks" target=_parent class=ISymbol>nestedBestRanks</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_nextId><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.nextId" target=_parent class=ISymbol>nextId</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_nextLayerConnectedCache><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.nextLayerConnectedCache" target=_parent class=ISymbol>nextLayerConnectedCache</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_nextLayerConnectedCells><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.nextLayerConnectedCells" target=_parent class=ISymbol>nextLayerConnectedCells</a>, <span class=IParent>mxGraphAbstractHierarchyCell</span></div></div><div class=SRResult id=SR_NO_undFO><div class=IEntry><a href="../files/mxClient-js.html#mxClient.NO_FO" target=_parent class=ISymbol>NO_FO</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_node><div class=IEntry><a href="javascript:searchResults.Toggle('SR_node')" class=ISymbol>node</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.node" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/shape/mxShape-js.html#mxShape.node" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_nodeDistance><div class=IEntry><a href="javascript:searchResults.Toggle('SR_nodeDistance')" class=ISymbol>nodeDistance</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.nodeDistance" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.nodeDistance" target=_parent class=IParent>mxRadialTreeLayout</a></div></div></div><div class=SRResult id=SR_NODETYPE_undATTRIBUTE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_ATTRIBUTE" target=_parent class=ISymbol>NODETYPE_ATTRIBUTE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undCDATA><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_CDATA" target=_parent class=ISymbol>NODETYPE_CDATA</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undCOMMENT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_COMMENT" target=_parent class=ISymbol>NODETYPE_COMMENT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undDOCUMENT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_DOCUMENT" target=_parent class=ISymbol>NODETYPE_DOCUMENT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undDOCUMENT_undFRAGMENT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_DOCUMENT_FRAGMENT" target=_parent class=ISymbol>NODETYPE_DOCUMENT_FRAGMENT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undDOCUMENTTYPE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_DOCUMENTTYPE" target=_parent class=ISymbol>NODETYPE_DOCUMENTTYPE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undELEMENT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_ELEMENT" target=_parent class=ISymbol>NODETYPE_ELEMENT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undENTITY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_ENTITY" target=_parent class=ISymbol>NODETYPE_ENTITY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undENTITY_undREFERENCE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_ENTITY_REFERENCE" target=_parent class=ISymbol>NODETYPE_ENTITY_REFERENCE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undNOTATION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_NOTATION" target=_parent class=ISymbol>NODETYPE_NOTATION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undPROCESSING_undINSTRUCTION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_PROCESSING_INSTRUCTION" target=_parent class=ISymbol>NODETYPE_PROCESSING_INSTRUCTION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undTEXT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_TEXT" target=_parent class=ISymbol>NODETYPE_TEXT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NONE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NONE" target=_parent class=ISymbol>NONE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_noReset><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.noReset" target=_parent class=ISymbol>noReset</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_NORMALIZE><div class=IEntry><a href="javascript:searchResults.Toggle('SR_NORMALIZE')" class=ISymbol>NORMALIZE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.NORMALIZE" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.NORMALIZE" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_normalizeImage><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.normalizeImage" target=_parent class=ISymbol>normalizeImage</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_normalKeys><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.normalKeys" target=_parent class=ISymbol>normalKeys</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_notify><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.notify" target=_parent class=ISymbol>notify</a>, <span class=IParent>mxUndoableEdit</span></div></div><div class=SRResult id=SR2_NOTIFY><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_NOTIFY')" class=ISymbol>NOTIFY</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.NOTIFY" target=_parent class=IParent>mxEvent</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.NOTIFY" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_NS_undSVG><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NS_SVG" target=_parent class=ISymbol>NS_SVG</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NS_undXHTML><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NS_XHTML" target=_parent class=ISymbol>NS_XHTML</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NS_undXLINK><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NS_XLINK" target=_parent class=ISymbol>NS_XLINK</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_nudge><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.nudge" target=_parent class=ISymbol>nudge</a>, <span class=IParent>WeightedCellSorter</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralO.html b/docs/js-api/search/GeneralO.html
index 49cc429f7..3ab88a5bd 100644
--- a/docs/js-api/search/GeneralO.html
+++ b/docs/js-api/search/GeneralO.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_objects><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.objects" target=_parent class=ISymbol>objects</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_OFFICE_undPREFIX><div class=IEntry><a href="../files/mxClient-js.html#mxClient.OFFICE_PREFIX" target=_parent class=ISymbol>OFFICE_PREFIX</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_offset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_offset')" class=ISymbol>offset</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.offset" target=_parent class=IParent>mxCellOverlay</a><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.offset" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/model/mxGeometry-js.html#mxGeometry.offset" target=_parent class=IParent>mxGeometry</a></div></div></div><div class=SRResult id=SR_oldBounds><div class=IEntry><a href="../files/view/mxTemporaryCellStates-js.html#mxTemporaryCellStates.oldBounds" target=_parent class=ISymbol>oldBounds</a>, <span class=IParent>mxTemporaryCellStates</span></div></div><div class=SRResult id=SR_oldScale><div class=IEntry><a href="../files/view/mxTemporaryCellStates-js.html#mxTemporaryCellStates.oldScale" target=_parent class=ISymbol>oldScale</a>, <span class=IParent>mxTemporaryCellStates</span></div></div><div class=SRResult id=SR_oldStates><div class=IEntry><a href="../files/view/mxTemporaryCellStates-js.html#mxTemporaryCellStates.oldStates" target=_parent class=ISymbol>oldStates</a>, <span class=IParent>mxTemporaryCellStates</span></div></div><div class=SRResult id=SR_onEncode><div class=IEntry><a href="../files/io/mxRootChangeCodec-js.html#mxRootChangeCodec.onEncode" target=_parent class=ISymbol>onEncode</a>, <span class=IParent>mxRootChangeCodec</span></div></div><div class=SRResult id=SR_onInit><div class=IEntry><a href="javascript:searchResults.Toggle('SR_onInit')" class=ISymbol>onInit</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.onInit" target=_parent class=IParent>mxCell</a><a href="../files/editor/mxEditor-js.html#mxEditor.onInit" target=_parent class=IParent>mxEditor</a></div></div></div><div class=SRResult id=SR_open><div class=IEntry><a href="javascript:searchResults.Toggle('SR_open')" class=ISymbol>open</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.open" target=_parent class=IParent>mxEditor</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.open" target=_parent class=IParent>mxPrintPreview</a></div></div></div><div class=SRResult id=SR2_OPEN><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_OPEN')" class=ISymbol>OPEN</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.OPEN" target=_parent class=IParent>mxEditor.<wbr>mxEvent</a><a href="../files/util/mxEvent-js.html#mxEvent.OPEN" target=_parent class=IParent>mxEvent</a></div></div></div><div class=SRResult id=SR_optimizeVmlReflows><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.optimizeVmlReflows" target=_parent class=ISymbol>optimizeVmlReflows</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_Order><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Order" target=_parent class=ISymbol>Order</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_ORDER_undCELLS><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ORDER_undCELLS')" class=ISymbol>ORDER_CELLS</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.ORDER_CELLS" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.ORDER_CELLS" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_orderCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.orderCells" target=_parent class=ISymbol>orderCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_orientation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_orientation')" class=ISymbol>orientation</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.orientation" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.orientation" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.orientation" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_origin><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.origin" target=_parent class=ISymbol>origin</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_OrthConnector><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.OrthConnector" target=_parent class=ISymbol>OrthConnector</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_outline><div class=IEntry><a href="javascript:searchResults.Toggle('SR_outline')" class=ISymbol>outline</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.outline" target=_parent class=IParent>mxEditor</a><a href="../files/view/mxOutline-js.html#mxOutline.outline" target=_parent class=IParent>mxOutline</a><a href="../files/shape/mxShape-js.html#mxShape.outline" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_OUTLINE_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.OUTLINE_COLOR" target=_parent class=ISymbol>OUTLINE_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_OUTLINE_undHANDLE_undFILLCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.OUTLINE_HANDLE_FILLCOLOR" target=_parent class=ISymbol>OUTLINE_HANDLE_FILLCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_OUTLINE_undHANDLE_undSTROKECOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.OUTLINE_HANDLE_STROKECOLOR" target=_parent class=ISymbol>OUTLINE_HANDLE_STROKECOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_OUTLINE_undHIGHLIGHT_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.OUTLINE_HIGHLIGHT_COLOR" target=_parent class=ISymbol>OUTLINE_HIGHLIGHT_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_OUTLINE_undSTROKEWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.OUTLINE_STROKEWIDTH" target=_parent class=ISymbol>OUTLINE_STROKEWIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_outlineConnect><div class=IEntry><a href="javascript:searchResults.Toggle('SR_outlineConnect')" class=ISymbol>outlineConnect</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.outlineConnect" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.outlineConnect" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_outlineResource><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.outlineResource" target=_parent class=ISymbol>outlineResource</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_Overlays><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Overlays" target=_parent class=ISymbol>Overlays</a>, <span class=IParent>mxGraph</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralP.html b/docs/js-api/search/GeneralP.html
index 31d37abca..2cdcd1b75 100644
--- a/docs/js-api/search/GeneralP.html
+++ b/docs/js-api/search/GeneralP.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_PAGE_undFORMAT_undA4_undPORTRAIT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.PAGE_FORMAT_A4_PORTRAIT" target=_parent class=ISymbol>PAGE_FORMAT_A4_PORTRAIT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_PAGE_undFORMAT_undLETTER_undPORTRAIT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.PAGE_FORMAT_LETTER_PORTRAIT" target=_parent class=ISymbol>PAGE_FORMAT_LETTER_PORTRAIT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_pageBreakColor><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.pageBreakColor" target=_parent class=ISymbol>pageBreakColor</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_pageBreakDashed><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.pageBreakDashed" target=_parent class=ISymbol>pageBreakDashed</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_pageBreaksVisible><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.pageBreaksVisible" target=_parent class=ISymbol>pageBreaksVisible</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_pageCount><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.pageCount" target=_parent class=ISymbol>pageCount</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_pageFormat><div class=IEntry><a href="javascript:searchResults.Toggle('SR_pageFormat')" class=ISymbol>pageFormat</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.pageFormat" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.pageFormat" target=_parent class=IParent>mxPrintPreview</a></div></div></div><div class=SRResult id=SR_pageScale><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.pageScale" target=_parent class=ISymbol>pageScale</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_pageSelector><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.pageSelector" target=_parent class=ISymbol>pageSelector</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_pageVisible><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.pageVisible" target=_parent class=ISymbol>pageVisible</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_paint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_paint')" class=ISymbol>paint</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.paint" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.paint" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_paintBackground><div class=IEntry><a href="javascript:searchResults.Toggle('SR_paintBackground')" class=ISymbol>paintBackground</a><div class=ISubIndex><a href="../files/shape/mxDoubleEllipse-js.html#mxDoubleEllipse.paintBackground" target=_parent class=IParent>mxDoubleEllipse</a><a href="../files/shape/mxRectangleShape-js.html#mxRectangleShape.paintBackground" target=_parent class=IParent>mxRectangleShape</a><a href="../files/shape/mxShape-js.html#mxShape.paintBackground" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_paintCurvedLine><div class=IEntry><a href="../files/shape/mxPolyline-js.html#mxPolyline.paintCurvedLine" target=_parent class=ISymbol>paintCurvedLine</a>, <span class=IParent>mxPolyline</span></div></div><div class=SRResult id=SR_paintDivider><div class=IEntry><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.paintDivider" target=_parent class=ISymbol>paintDivider</a>, <span class=IParent>mxSwimlane</span></div></div><div class=SRResult id=SR_paintEdgeShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_paintEdgeShape')" class=ISymbol>paintEdgeShape</a><div class=ISubIndex><a href="../files/shape/mxArrow-js.html#mxArrow.paintEdgeShape" target=_parent class=IParent>mxArrow</a><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.paintEdgeShape" target=_parent class=IParent>mxArrowConnector</a><a href="../files/shape/mxConnector-js.html#mxConnector.paintEdgeShape" target=_parent class=IParent>mxConnector</a><a href="../files/shape/mxPolyline-js.html#mxPolyline.paintEdgeShape" target=_parent class=IParent>mxPolyline</a><a href="../files/shape/mxShape-js.html#mxShape.paintEdgeShape" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_paintForeground><div class=IEntry><a href="javascript:searchResults.Toggle('SR_paintForeground')" class=ISymbol>paintForeground</a><div class=ISubIndex><a href="../files/shape/mxDoubleEllipse-js.html#mxDoubleEllipse.paintForeground" target=_parent class=IParent>mxDoubleEllipse</a><a href="../files/shape/mxLabel-js.html#mxLabel.paintForeground" target=_parent class=IParent>mxLabel</a><a href="../files/shape/mxRectangleShape-js.html#mxRectangleShape.paintForeground" target=_parent class=IParent>mxRectangleShape</a><a href="../files/shape/mxShape-js.html#mxShape.paintForeground" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_paintGlassEffect><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.paintGlassEffect" target=_parent class=ISymbol>paintGlassEffect</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_paintImage><div class=IEntry><a href="../files/shape/mxLabel-js.html#mxLabel.paintImage" target=_parent class=ISymbol>paintImage</a>, <span class=IParent>mxLabel</span></div></div><div class=SRResult id=SR_paintIndicator><div class=IEntry><a href="../files/shape/mxLabel-js.html#mxLabel.paintIndicator" target=_parent class=ISymbol>paintIndicator</a>, <span class=IParent>mxLabel</span></div></div><div class=SRResult id=SR_paintLine><div class=IEntry><a href="../files/shape/mxPolyline-js.html#mxPolyline.paintLine" target=_parent class=ISymbol>paintLine</a>, <span class=IParent>mxPolyline</span></div></div><div class=SRResult id=SR_paintMarker><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.paintMarker" target=_parent class=ISymbol>paintMarker</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_paintRoundedSwimlane><div class=IEntry><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.paintRoundedSwimlane" target=_parent class=ISymbol>paintRoundedSwimlane</a>, <span class=IParent>mxSwimlane</span></div></div><div class=SRResult id=SR_paintSeparator><div class=IEntry><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.paintSeparator" target=_parent class=ISymbol>paintSeparator</a>, <span class=IParent>mxSwimlane</span></div></div><div class=SRResult id=SR_paintSwimlane><div class=IEntry><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.paintSwimlane" target=_parent class=ISymbol>paintSwimlane</a>, <span class=IParent>mxSwimlane</span></div></div><div class=SRResult id=SR_paintVertexShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_paintVertexShape')" class=ISymbol>paintVertexShape</a><div class=ISubIndex><a href="../files/shape/mxActor-js.html#mxActor.paintVertexShape" target=_parent class=IParent>mxActor</a><a href="../files/shape/mxCylinder-js.html#mxCylinder.paintVertexShape" target=_parent class=IParent>mxCylinder</a><a href="../files/shape/mxEllipse-js.html#mxEllipse.paintVertexShape" target=_parent class=IParent>mxEllipse</a><a href="../files/shape/mxImageShape-js.html#mxImageShape.paintVertexShape" target=_parent class=IParent>mxImageShape</a><a href="../files/shape/mxLine-js.html#mxLine.paintVertexShape" target=_parent class=IParent>mxLine</a><a href="../files/shape/mxRhombus-js.html#mxRhombus.paintVertexShape" target=_parent class=IParent>mxRhombus</a><a href="../files/shape/mxShape-js.html#mxShape.paintVertexShape" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.paintVertexShape" target=_parent class=IParent>mxSwimlane</a></div></div></div><div class=SRResult id=SR_PAN><div class=IEntry><a href="javascript:searchResults.Toggle('SR_PAN')" class=ISymbol>PAN</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.PAN" target=_parent class=IParent>mxEvent</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.mxEvent.PAN" target=_parent class=IParent>mxPanningHandler.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_PAN_undEND><div class=IEntry><a href="javascript:searchResults.Toggle('SR_PAN_undEND')" class=ISymbol>PAN_END</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.PAN_END" target=_parent class=IParent>mxEvent</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.mxEvent.PAN_END" target=_parent class=IParent>mxPanningHandler.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_PAN_undSTART><div class=IEntry><a href="javascript:searchResults.Toggle('SR_PAN_undSTART')" class=ISymbol>PAN_START</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.PAN_START" target=_parent class=IParent>mxEvent</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.mxEvent.PAN_START" target=_parent class=IParent>mxPanningHandler.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_panDx><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.panDx" target=_parent class=ISymbol>panDx</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_panDy><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.panDy" target=_parent class=ISymbol>panDy</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_panGraph><div class=IEntry><a href="javascript:searchResults.Toggle('SR_panGraph')" class=ISymbol>panGraph</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.panGraph" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.panGraph" target=_parent class=IParent>mxPanningHandler</a></div></div></div><div class=SRResult id=SR_panningEnabled><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.panningEnabled" target=_parent class=ISymbol>panningEnabled</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_para><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.para" target=_parent class=ISymbol>para</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_parallelEdgeSpacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_parallelEdgeSpacing')" class=ISymbol>parallelEdgeSpacing</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.parallelEdgeSpacing" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.parallelEdgeSpacing" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.parallelEdgeSpacing" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_params><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.params" target=_parent class=ISymbol>params</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_parent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_parent')" class=ISymbol>parent</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.parent" target=_parent class=IParent>mxCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.parent" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.parent" target=_parent class=IParent>mxGraphLayout</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.parent" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_parentBorder><div class=IEntry><a href="javascript:searchResults.Toggle('SR_parentBorder')" class=ISymbol>parentBorder</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.parentBorder" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.parentBorder" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_parentForCellChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.parentForCellChanged" target=_parent class=ISymbol>parentForCellChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_parentHighlightEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_parentHighlightEnabled')" class=ISymbol>parentHighlightEnabled</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.parentHighlightEnabled" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.parentHighlightEnabled" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_parentsChanged><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.parentsChanged" target=_parent class=ISymbol>parentsChanged</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_parse><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.parse" target=_parent class=ISymbol>parse</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_parseConstraint><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.parseConstraint" target=_parent class=ISymbol>parseConstraint</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_parseConstraints><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.parseConstraints" target=_parent class=ISymbol>parseConstraints</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_parseCssNumber><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.parseCssNumber" target=_parent class=ISymbol>parseCssNumber</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_parseDescription><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.parseDescription" target=_parent class=ISymbol>parseDescription</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_parseXml><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.parseXml" target=_parent class=ISymbol>parseXml</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_password><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.password" target=_parent class=ISymbol>password</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_paste><div class=IEntry><a href="../files/util/mxClipboard-js.html#mxClipboard.paste" target=_parent class=ISymbol>paste</a>, <span class=IParent>mxClipboard</span></div></div><div class=SRResult id=SR_path><div class=IEntry><a href="javascript:searchResults.Toggle('SR_path')" class=ISymbol>path</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.path" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.path" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.path" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_PATH_undSEPARATOR><div class=IEntry><a href="../files/model/mxCellPath-js.html#mxCellPath.PATH_SEPARATOR" target=_parent class=ISymbol>PATH_SEPARATOR</a>, <span class=IParent>mxCellPath</span></div></div><div class=SRResult id=SR_perimeter><div class=IEntry><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint.perimeter" target=_parent class=ISymbol>perimeter</a>, <span class=IParent>mxConnectionConstraint</span></div></div><div class=SRResult id=SR_PERIMETER_undELLIPSE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.PERIMETER_ELLIPSE" target=_parent class=ISymbol>PERIMETER_ELLIPSE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_PERIMETER_undHEXAGON><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.PERIMETER_HEXAGON" target=_parent class=ISymbol>PERIMETER_HEXAGON</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_PERIMETER_undRECTANGLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.PERIMETER_RECTANGLE" target=_parent class=ISymbol>PERIMETER_RECTANGLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_PERIMETER_undRHOMBUS><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.PERIMETER_RHOMBUS" target=_parent class=ISymbol>PERIMETER_RHOMBUS</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_PERIMETER_undTRIANGLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.PERIMETER_TRIANGLE" target=_parent class=ISymbol>PERIMETER_TRIANGLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_PINCH_undTHRESHOLD><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.PINCH_THRESHOLD" target=_parent class=ISymbol>PINCH_THRESHOLD</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_pinchEnabled><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.pinchEnabled" target=_parent class=ISymbol>pinchEnabled</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_placeLabels><div class=IEntry><a href="../files/layout/mxEdgeLabelLayout-js.html#mxEdgeLabelLayout.placeLabels" target=_parent class=ISymbol>placeLabels</a>, <span class=IParent>mxEdgeLabelLayout</span></div></div><div class=SRResult id=SR_placementStage><div class=IEntry><a href="javascript:searchResults.Toggle('SR_placementStage')" class=ISymbol>placementStage</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.placementStage" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.placementStage" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_plainText><div class=IEntry><a href="javascript:searchResults.Toggle('SR_plainText')" class=ISymbol>plainText</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.plainText" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.plainText" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_point><div class=IEntry><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint.point" target=_parent class=ISymbol>point</a>, <span class=IParent>mxConnectionConstraint</span></div></div><div class=SRResult id=SR_pointerEvents><div class=IEntry><a href="javascript:searchResults.Toggle('SR_pointerEvents')" class=ISymbol>pointerEvents</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.pointerEvents" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/shape/mxShape-js.html#mxShape.pointerEvents" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_pointerEventsValue><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.pointerEventsValue" target=_parent class=ISymbol>pointerEventsValue</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_pointImage><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.pointImage" target=_parent class=ISymbol>pointImage</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_points><div class=IEntry><a href="javascript:searchResults.Toggle('SR_points')" class=ISymbol>points</a><div class=ISubIndex><a href="../files/model/mxGeometry-js.html#mxGeometry.points" target=_parent class=IParent>mxGeometry</a><a href="../files/shape/mxShape-js.html#mxShape.points" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_popup><div class=IEntry><a href="javascript:searchResults.Toggle('SR_popup')" class=ISymbol>popup</a><div class=ISubIndex><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.popup" target=_parent class=IParent>mxPopupMenu</a><a href="../files/util/mxUtils-js.html#mxUtils.popup" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_popupHandler><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.popupHandler" target=_parent class=ISymbol>popupHandler</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_portsEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.portsEnabled" target=_parent class=ISymbol>portsEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_positionChanged><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.positionChanged" target=_parent class=ISymbol>positionChanged</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_post><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.post" target=_parent class=ISymbol>post</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR2_POST><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_POST')" class=ISymbol>POST</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.POST" target=_parent class=IParent>mxEditor.<wbr>mxEvent</a><a href="../files/util/mxEvent-js.html#mxEvent.POST" target=_parent class=IParent>mxEvent</a></div></div></div><div class=SRResult id=SR_postConfigureShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.postConfigureShape" target=_parent class=ISymbol>postConfigureShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_postDiagram><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.postDiagram" target=_parent class=ISymbol>postDiagram</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_postfix><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.postfix" target=_parent class=ISymbol>postfix</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_postParameterName><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.postParameterName" target=_parent class=ISymbol>postParameterName</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_postProcessCellStyle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.postProcessCellStyle" target=_parent class=ISymbol>postProcessCellStyle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_preferHtml><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.preferHtml" target=_parent class=ISymbol>preferHtml</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_preferPageSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.preferPageSize" target=_parent class=ISymbol>preferPageSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_prefHozEdgeSep><div class=IEntry><a href="javascript:searchResults.Toggle('SR_prefHozEdgeSep')" class=ISymbol>prefHozEdgeSep</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.prefHozEdgeSep" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.prefHozEdgeSep" target=_parent class=IParent>mxCoordinateAssignment</a></div></div></div><div class=SRResult id=SR_prefix><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.prefix" target=_parent class=ISymbol>prefix</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_prefVertEdgeOff><div class=IEntry><a href="javascript:searchResults.Toggle('SR_prefVertEdgeOff')" class=ISymbol>prefVertEdgeOff</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.prefVertEdgeOff" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.prefVertEdgeOff" target=_parent class=IParent>mxCoordinateAssignment</a></div></div></div><div class=SRResult id=SR_prepareTextarea><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.prepareTextarea" target=_parent class=ISymbol>prepareTextarea</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_preserveImageAspect><div class=IEntry><a href="../files/shape/mxImageShape-js.html#mxImageShape.preserveImageAspect" target=_parent class=ISymbol>preserveImageAspect</a>, <span class=IParent>mxImageShape</span></div></div><div class=SRResult id=SR_previewColor><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.previewColor" target=_parent class=ISymbol>previewColor</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_previewElement><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.previewElement" target=_parent class=ISymbol>previewElement</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_previewEnabled><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.previewEnabled" target=_parent class=ISymbol>previewEnabled</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_previewOffset><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.previewOffset" target=_parent class=ISymbol>previewOffset</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_previousLayerConnectedCache><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.previousLayerConnectedCache" target=_parent class=ISymbol>previousLayerConnectedCache</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_previousLayerConnectedCells><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.previousLayerConnectedCells" target=_parent class=ISymbol>previousLayerConnectedCells</a>, <span class=IParent>mxGraphAbstractHierarchyCell</span></div></div><div class=SRResult id=SR_print><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.print" target=_parent class=ISymbol>print</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_printBackgroundImage><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.printBackgroundImage" target=_parent class=ISymbol>printBackgroundImage</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_printControls><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.printControls" target=_parent class=ISymbol>printControls</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_printOverlays><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.printOverlays" target=_parent class=ISymbol>printOverlays</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_printScreen><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.printScreen" target=_parent class=ISymbol>printScreen</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_process><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.process" target=_parent class=ISymbol>process</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_processChange><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.processChange" target=_parent class=ISymbol>processChange</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_processEvent><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.processEvent" target=_parent class=ISymbol>processEvent</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_processInclude><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.processInclude" target=_parent class=ISymbol>processInclude</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_processNodeOutgoing><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.processNodeOutgoing" target=_parent class=ISymbol>processNodeOutgoing</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_processReversedEdge><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.processReversedEdge" target=_parent class=ISymbol>processReversedEdge</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_prompt><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.prompt" target=_parent class=ISymbol>prompt</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_properties><div class=IEntry><a href="../files/util/mxEventObject-js.html#mxEventObject.properties" target=_parent class=ISymbol>properties</a>, <span class=IParent>mxEventObject</span></div></div><div class=SRResult id=SR_propertiesHeight><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.propertiesHeight" target=_parent class=ISymbol>propertiesHeight</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_propertiesResource><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.propertiesResource" target=_parent class=ISymbol>propertiesResource</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_propertiesWidth><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.propertiesWidth" target=_parent class=ISymbol>propertiesWidth</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_ptLineDist><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.ptLineDist" target=_parent class=ISymbol>ptLineDist</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_ptSegDistSq><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.ptSegDistSq" target=_parent class=ISymbol>ptSegDistSq</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_put><div class=IEntry><a href="../files/util/mxDictionary-js.html#mxDictionary.put" target=_parent class=ISymbol>put</a>, <span class=IParent>mxDictionary</span></div></div><div class=SRResult id=SR_putCellStyle><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.putCellStyle" target=_parent class=ISymbol>putCellStyle</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_putDefaultEdgeStyle><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.putDefaultEdgeStyle" target=_parent class=ISymbol>putDefaultEdgeStyle</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_putDefaultVertexStyle><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.putDefaultVertexStyle" target=_parent class=ISymbol>putDefaultVertexStyle</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_putImage><div class=IEntry><a href="../files/util/mxImageBundle-js.html#mxImageBundle.putImage" target=_parent class=ISymbol>putImage</a>, <span class=IParent>mxImageBundle</span></div></div><div class=SRResult id=SR_putObject><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.putObject" target=_parent class=ISymbol>putObject</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_putValue><div class=IEntry><a href="../files/view/mxStyleRegistry-js.html#mxStyleRegistry.putValue" target=_parent class=ISymbol>putValue</a>, <span class=IParent>mxStyleRegistry</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralQ.html b/docs/js-api/search/GeneralQ.html
index 4fefb496f..46370e4c5 100644
--- a/docs/js-api/search/GeneralQ.html
+++ b/docs/js-api/search/GeneralQ.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_quadOp><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.quadOp" target=_parent class=ISymbol>quadOp</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_quadTo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_quadTo')" class=ISymbol>quadTo</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.quadTo" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.quadTo" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.quadTo" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralR.html b/docs/js-api/search/GeneralR.html
index 1fa50bc8c..fde35e176 100644
--- a/docs/js-api/search/GeneralR.html
+++ b/docs/js-api/search/GeneralR.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_radius><div class=IEntry><a href="javascript:searchResults.Toggle('SR_radius')" class=ISymbol>radius</a><div class=ISubIndex><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.radius" target=_parent class=IParent>mxCircleLayout</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.radius" target=_parent class=IParent>mxFastOrganicLayout</a></div></div></div><div class=SRResult id=SR_radiusSquared><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.radiusSquared" target=_parent class=ISymbol>radiusSquared</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_rankBottomY><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.rankBottomY" target=_parent class=ISymbol>rankBottomY</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_rankCoordinates><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.rankCoordinates" target=_parent class=ISymbol>rankCoordinates</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_rankIndex><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.rankIndex" target=_parent class=ISymbol>rankIndex</a>, <span class=IParent>WeightedCellSorter</span></div></div><div class=SRResult id=SR_rankMedianPosition><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.rankMedianPosition" target=_parent class=ISymbol>rankMedianPosition</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_ranks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ranks')" class=ISymbol>ranks</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.ranks" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.ranks" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_ranksPerGroup><div class=IEntry><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.ranksPerGroup" target=_parent class=ISymbol>ranksPerGroup</a>, <span class=IParent>mxSwimlaneModel</span></div></div><div class=SRResult id=SR_rankTopY><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.rankTopY" target=_parent class=ISymbol>rankTopY</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_rankWidths><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.rankWidths" target=_parent class=ISymbol>rankWidths</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_rankY><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.rankY" target=_parent class=ISymbol>rankY</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_readGraphModel><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.readGraphModel" target=_parent class=ISymbol>readGraphModel</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_RECEIVE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.RECEIVE" target=_parent class=ISymbol>RECEIVE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_reconfigure><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.reconfigure" target=_parent class=ISymbol>reconfigure</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_rect><div class=IEntry><a href="javascript:searchResults.Toggle('SR_rect')" class=ISymbol>rect</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.rect" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.rect" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.rect" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_RECTANGLE_undROUNDING_undFACTOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.RECTANGLE_ROUNDING_FACTOR" target=_parent class=ISymbol>RECTANGLE_ROUNDING_FACTOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_rectangleIntersectsSegment><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.rectangleIntersectsSegment" target=_parent class=ISymbol>rectangleIntersectsSegment</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_RectanglePerimeter><div class=IEntry><a href="../files/view/mxPerimeter-js.html#mxPerimeter.RectanglePerimeter" target=_parent class=ISymbol>RectanglePerimeter</a>, <span class=IParent>mxPerimeter</span></div></div><div class=SRResult id=SR_recursiveResize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.recursiveResize" target=_parent class=ISymbol>recursiveResize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_redirectMouseEvents><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.redirectMouseEvents" target=_parent class=ISymbol>redirectMouseEvents</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_redo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_redo')" class=ISymbol>redo</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.redo" target=_parent class=IParent>mxEditor</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.redo" target=_parent class=IParent>mxUndoableEdit</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.redo" target=_parent class=IParent>mxUndoManager</a></div></div></div><div class=SRResult id=SR2_REDO><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_REDO')" class=ISymbol>REDO</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.REDO" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.mxEvent.REDO" target=_parent class=IParent>mxUndoManager.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_redone><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.redone" target=_parent class=ISymbol>redone</a>, <span class=IParent>mxUndoableEdit</span></div></div><div class=SRResult id=SR_redraw><div class=IEntry><a href="javascript:searchResults.Toggle('SR_redraw')" class=ISymbol>redraw</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#redraw" target=_parent class=IParent>Global</a><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.redraw" target=_parent class=IParent>mxCellRenderer</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.redraw" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.redraw" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxHandle-js.html#mxHandle.redraw" target=_parent class=IParent>mxHandle</a><a href="../files/shape/mxImageShape-js.html#mxImageShape.redraw" target=_parent class=IParent>mxImageShape</a><a href="../files/shape/mxLabel-js.html#mxLabel.redraw" target=_parent class=IParent>mxLabel</a><a href="../files/shape/mxShape-js.html#mxShape.redraw" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.redraw" target=_parent class=IParent>mxText</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.redraw" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_redrawBackgroundImage><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.redrawBackgroundImage" target=_parent class=ISymbol>redrawBackgroundImage</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_redrawCellOverlays><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.redrawCellOverlays" target=_parent class=ISymbol>redrawCellOverlays</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_redrawControl><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.redrawControl" target=_parent class=ISymbol>redrawControl</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_redrawHandles><div class=IEntry><a href="javascript:searchResults.Toggle('SR_redrawHandles')" class=ISymbol>redrawHandles</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.redrawHandles" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.redrawHandles" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.redrawHandles" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_redrawHtml><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.redrawHtml" target=_parent class=ISymbol>redrawHtml</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_redrawHtmlShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_redrawHtmlShape')" class=ISymbol>redrawHtmlShape</a><div class=ISubIndex><a href="../files/shape/mxLabel-js.html#mxLabel.redrawHtmlShape" target=_parent class=IParent>mxLabel</a><a href="../files/shape/mxText-js.html#mxText.redrawHtmlShape" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_redrawHtmlShapeWithCss3><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.redrawHtmlShapeWithCss3" target=_parent class=ISymbol>redrawHtmlShapeWithCss3</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_redrawIcons><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.redrawIcons" target=_parent class=ISymbol>redrawIcons</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_redrawInnerBends><div class=IEntry><a href="javascript:searchResults.Toggle('SR_redrawInnerBends')" class=ISymbol>redrawInnerBends</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#redrawInnerBends" target=_parent class=IParent>Global</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.redrawInnerBends" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.redrawInnerBends" target=_parent class=IParent>mxElbowEdgeHandler</a></div></div></div><div class=SRResult id=SR_redrawLabel><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.redrawLabel" target=_parent class=ISymbol>redrawLabel</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_redrawLabelShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.redrawLabelShape" target=_parent class=ISymbol>redrawLabelShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_redrawPath><div class=IEntry><a href="javascript:searchResults.Toggle('SR_redrawPath')" class=ISymbol>redrawPath</a><div class=ISubIndex><a href="../files/shape/mxActor-js.html#mxActor.redrawPath" target=_parent class=IParent>mxActor</a><a href="../files/shape/mxCloud-js.html#mxCloud.redrawPath" target=_parent class=IParent>mxCloud</a><a href="../files/shape/mxCylinder-js.html#mxCylinder.redrawPath" target=_parent class=IParent>mxCylinder</a><a href="../files/shape/mxHexagon-js.html#mxHexagon.redrawPath" target=_parent class=IParent>mxHexagon</a><a href="../files/shape/mxTriangle-js.html#mxTriangle.redrawPath" target=_parent class=IParent>mxTriangle</a></div></div></div><div class=SRResult id=SR_redrawShape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_redrawShape')" class=ISymbol>redrawShape</a><div class=ISubIndex><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.redrawShape" target=_parent class=IParent>mxCellRenderer</a><a href="../files/shape/mxShape-js.html#mxShape.redrawShape" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_reduceTemperature><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.reduceTemperature" target=_parent class=ISymbol>reduceTemperature</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_refCount><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.refCount" target=_parent class=ISymbol>refCount</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_reference><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.reference" target=_parent class=ISymbol>reference</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_refresh><div class=IEntry><a href="javascript:searchResults.Toggle('SR_refresh')" class=ISymbol>refresh</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.refresh" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.refresh" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphView-js.html#mxGraphView.refresh" target=_parent class=IParent>mxGraphView</a><a href="../files/view/mxOutline-js.html#mxOutline.refresh" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.refresh" target=_parent class=IParent>mxSelectionCellsHandler</a></div></div></div><div class=SRResult id=SR2_REFRESH><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_REFRESH')" class=ISymbol>REFRESH</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.REFRESH" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.REFRESH" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_refreshHandler><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.refreshHandler" target=_parent class=ISymbol>refreshHandler</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_refreshTasks><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.refreshTasks" target=_parent class=ISymbol>refreshTasks</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_register><div class=IEntry><a href="../files/io/mxCodecRegistry-js.html#mxCodecRegistry.register" target=_parent class=ISymbol>register</a>, <span class=IParent>mxCodecRegistry</span></div></div><div class=SRResult id=SR_registerShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.registerShape" target=_parent class=ISymbol>registerShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_relative><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.relative" target=_parent class=ISymbol>relative</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_relativeCcw><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.relativeCcw" target=_parent class=ISymbol>relativeCcw</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_release><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.release" target=_parent class=ISymbol>release</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_releaseSvgGradients><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.releaseSvgGradients" target=_parent class=ISymbol>releaseSvgGradients</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_remove><div class=IEntry><a href="javascript:searchResults.Toggle('SR_remove')" class=ISymbol>remove</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.remove" target=_parent class=IParent>mxCell</a><a href="../files/util/mxDictionary-js.html#mxDictionary.remove" target=_parent class=IParent>mxDictionary</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.remove" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxUtils-js.html#mxUtils.remove" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR2_REMOVE><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_REMOVE')" class=ISymbol>REMOVE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.REMOVE" target=_parent class=IParent>mxEvent</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.mxEvent.REMOVE" target=_parent class=IParent>mxSelectionCellsHandler.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_REMOVE_undCELLS><div class=IEntry><a href="javascript:searchResults.Toggle('SR_REMOVE_undCELLS')" class=ISymbol>REMOVE_CELLS</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.REMOVE_CELLS" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.REMOVE_CELLS" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_REMOVE_undCELLS_undFROM_undPARENT><div class=IEntry><a href="javascript:searchResults.Toggle('SR_REMOVE_undCELLS_undFROM_undPARENT')" class=ISymbol>REMOVE_CELLS_FROM_PARENT</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.REMOVE_CELLS_FROM_PARENT" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.REMOVE_CELLS_FROM_PARENT" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_REMOVE_undOVERLAY><div class=IEntry><a href="javascript:searchResults.Toggle('SR_REMOVE_undOVERLAY')" class=ISymbol>REMOVE_OVERLAY</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.REMOVE_OVERLAY" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.REMOVE_OVERLAY" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_removeAllListeners><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.removeAllListeners" target=_parent class=ISymbol>removeAllListeners</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_removeAllStylenames><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.removeAllStylenames" target=_parent class=ISymbol>removeAllStylenames</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_removeCell><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.removeCell" target=_parent class=ISymbol>removeCell</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_removeCellOverlay><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeCellOverlay" target=_parent class=ISymbol>removeCellOverlay</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeCellOverlays><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeCellOverlays" target=_parent class=ISymbol>removeCellOverlays</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_removeCells')" class=ISymbol>removeCells</a><div class=ISubIndex><a href="../files/util/mxClipboard-js.html#mxClipboard.removeCells" target=_parent class=IParent>mxClipboard</a><a href="../files/view/mxGraph-js.html#mxGraph.removeCells" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.removeCells" target=_parent class=IParent>mxGraphSelectionModel</a></div></div></div><div class=SRResult id=SR_removeCellsAfterUngroup><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeCellsAfterUngroup" target=_parent class=ISymbol>removeCellsAfterUngroup</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeCellsFromParent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_removeCellsFromParent')" class=ISymbol>removeCellsFromParent</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.removeCellsFromParent" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.removeCellsFromParent" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_removeCursors><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.removeCursors" target=_parent class=ISymbol>removeCursors</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_removeDragElement><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.removeDragElement" target=_parent class=ISymbol>removeDragElement</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_removeDuplicates><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.removeDuplicates" target=_parent class=ISymbol>removeDuplicates</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_removeEdge><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.removeEdge" target=_parent class=ISymbol>removeEdge</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_removeEmptyParents><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.removeEmptyParents" target=_parent class=ISymbol>removeEmptyParents</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_removeEnabled><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.removeEnabled" target=_parent class=ISymbol>removeEnabled</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_removeFromParent><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.removeFromParent" target=_parent class=ISymbol>removeFromParent</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_removeFromTerminal><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.removeFromTerminal" target=_parent class=ISymbol>removeFromTerminal</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_removeGestureListeners><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.removeGestureListeners" target=_parent class=ISymbol>removeGestureListeners</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_removeHint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_removeHint')" class=ISymbol>removeHint</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.removeHint" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.removeHint" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.removeHint" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_removeImageBundle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeImageBundle" target=_parent class=ISymbol>removeImageBundle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeListener><div class=IEntry><a href="javascript:searchResults.Toggle('SR_removeListener')" class=ISymbol>removeListener</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.removeListener" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxEventSource-js.html#mxEventSource.removeListener" target=_parent class=IParent>mxEventSource</a></div></div></div><div class=SRResult id=SR_removeListeners><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.removeListeners" target=_parent class=ISymbol>removeListeners</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_removeMouseListener><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeMouseListener" target=_parent class=ISymbol>removeMouseListener</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removePoint><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.removePoint" target=_parent class=ISymbol>removePoint</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_removeSelectionCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeSelectionCell" target=_parent class=ISymbol>removeSelectionCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeSelectionCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeSelectionCells" target=_parent class=ISymbol>removeSelectionCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeState><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.removeState" target=_parent class=ISymbol>removeState</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_removeStateForCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.removeStateForCell" target=_parent class=ISymbol>removeStateForCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_removeStylename><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.removeStylename" target=_parent class=ISymbol>removeStylename</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_removeWhitespace><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.removeWhitespace" target=_parent class=ISymbol>removeWhitespace</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_renderHint><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.renderHint" target=_parent class=ISymbol>renderHint</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_rendering><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.rendering" target=_parent class=ISymbol>rendering</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_RENDERING_undHINT_undEXACT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.RENDERING_HINT_EXACT" target=_parent class=ISymbol>RENDERING_HINT_EXACT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_RENDERING_undHINT_undFASTER><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.RENDERING_HINT_FASTER" target=_parent class=ISymbol>RENDERING_HINT_FASTER</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_RENDERING_undHINT_undFASTEST><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.RENDERING_HINT_FASTEST" target=_parent class=ISymbol>RENDERING_HINT_FASTEST</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_renderPage><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.renderPage" target=_parent class=ISymbol>renderPage</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_repaint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_repaint')" class=ISymbol>repaint</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.repaint" target=_parent class=IParent>mxCellHighlight</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.repaint" target=_parent class=IParent>mxRubberband</a></div></div></div><div class=SRResult id=SR_replaceLinefeeds><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.replaceLinefeeds" target=_parent class=ISymbol>replaceLinefeeds</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_replacePlaceholders><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.replacePlaceholders" target=_parent class=ISymbol>replacePlaceholders</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_replaceTrailingNewlines><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.replaceTrailingNewlines" target=_parent class=ISymbol>replaceTrailingNewlines</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_repositionValid><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.repositionValid" target=_parent class=ISymbol>repositionValid</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_request><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.request" target=_parent class=ISymbol>request</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_reset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_reset')" class=ISymbol>reset</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.reset" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.reset" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.reset" target=_parent class=IParent>mxCellMarker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.reset" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.reset" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/util/mxDragSource-js.html#mxDragSource.reset" target=_parent class=IParent>mxDragSource</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.reset" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.reset" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxHandle-js.html#mxHandle.reset" target=_parent class=IParent>mxHandle</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.reset" target=_parent class=IParent>mxPanningHandler</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.reset" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.reset" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.reset" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.reset" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.reset" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR2_RESET><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_RESET')" class=ISymbol>RESET</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mxEvent.RESET" target=_parent class=IParent>mxConnectionHandler.<wbr>mxEvent</a><a href="../files/util/mxEvent-js.html#mxEvent.RESET" target=_parent class=IParent>mxEvent</a></div></div></div><div class=SRResult id=SR_resetEdge><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resetEdge" target=_parent class=ISymbol>resetEdge</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resetEdges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_resetEdges')" class=ISymbol>resetEdges</a><div class=ISubIndex><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.resetEdges" target=_parent class=IParent>mxCircleLayout</a><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.resetEdges" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.resetEdges" target=_parent class=IParent>mxFastOrganicLayout</a><a href="../files/view/mxGraph-js.html#mxGraph.resetEdges" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_resetEdgesOnConnect><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resetEdgesOnConnect" target=_parent class=ISymbol>resetEdgesOnConnect</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resetEdgesOnMove><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resetEdgesOnMove" target=_parent class=ISymbol>resetEdgesOnMove</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resetEdgesOnResize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resetEdgesOnResize" target=_parent class=ISymbol>resetEdgesOnResize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resetFirstTime><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.resetFirstTime" target=_parent class=ISymbol>resetFirstTime</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_resetHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_resetHandler')" class=ISymbol>resetHandler</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.resetHandler" target=_parent class=IParent>mxCellHighlight</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.resetHandler" target=_parent class=IParent>mxDefaultToolbar</a></div></div></div><div class=SRResult id=SR_resetHistory><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.resetHistory" target=_parent class=ISymbol>resetHistory</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_resetLivePreview><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.resetLivePreview" target=_parent class=ISymbol>resetLivePreview</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_resetMode><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.resetMode" target=_parent class=ISymbol>resetMode</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_resetPreviewStates><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.resetPreviewStates" target=_parent class=ISymbol>resetPreviewStates</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_resetStyles><div class=IEntry><a href="javascript:searchResults.Toggle('SR_resetStyles')" class=ISymbol>resetStyles</a><div class=ISubIndex><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.resetStyles" target=_parent class=IParent>mxArrowConnector</a><a href="../files/shape/mxShape-js.html#mxShape.resetStyles" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.resetStyles" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_resetTimer><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.resetTimer" target=_parent class=ISymbol>resetTimer</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_resetValidationState><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.resetValidationState" target=_parent class=ISymbol>resetValidationState</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_resetViewOnRootChange><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resetViewOnRootChange" target=_parent class=ISymbol>resetViewOnRootChange</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_resize')" class=ISymbol>resize</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.resize" target=_parent class=IParent>mxCellEditor</a><a href="../files/util/mxDivResizer-js.html#mxDivResizer.resize" target=_parent class=IParent>mxDivResizer</a></div></div></div><div class=SRResult id=SR2_RESIZE><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_RESIZE')" class=ISymbol>RESIZE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.RESIZE" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.RESIZE" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_RESIZE_undCELLS><div class=IEntry><a href="javascript:searchResults.Toggle('SR_RESIZE_undCELLS')" class=ISymbol>RESIZE_CELLS</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.RESIZE_CELLS" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.RESIZE_CELLS" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_RESIZE_undEND><div class=IEntry><a href="javascript:searchResults.Toggle('SR_RESIZE_undEND')" class=ISymbol>RESIZE_END</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.RESIZE_END" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.RESIZE_END" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_RESIZE_undSTART><div class=IEntry><a href="javascript:searchResults.Toggle('SR_RESIZE_undSTART')" class=ISymbol>RESIZE_START</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.RESIZE_START" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.RESIZE_START" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_resizeCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_resizeCell')" class=ISymbol>resizeCell</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.resizeCell" target=_parent class=IParent>mxGraph</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.resizeCell" target=_parent class=IParent>mxGraphLayout</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.resizeCell" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_resizeCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resizeCells" target=_parent class=ISymbol>resizeCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resizeChildCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resizeChildCells" target=_parent class=ISymbol>resizeChildCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resizeContainer><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resizeContainer" target=_parent class=ISymbol>resizeContainer</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resizeEnabled><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.resizeEnabled" target=_parent class=ISymbol>resizeEnabled</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_resizeHandler><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.resizeHandler" target=_parent class=ISymbol>resizeHandler</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_resizeHeight><div class=IEntry><a href="../files/util/mxDivResizer-js.html#mxDivResizer.resizeHeight" target=_parent class=ISymbol>resizeHeight</a>, <span class=IParent>mxDivResizer</span></div></div><div class=SRResult id=SR_resizeImage><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.resizeImage" target=_parent class=ISymbol>resizeImage</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_resizeLast><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.resizeLast" target=_parent class=ISymbol>resizeLast</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_resizeParent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_resizeParent')" class=ISymbol>resizeParent</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.resizeParent" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.resizeParent" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.resizeParent" target=_parent class=IParent>mxStackLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.resizeParent" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_resizeParentMax><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.resizeParentMax" target=_parent class=ISymbol>resizeParentMax</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_resizeSwimlane><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.resizeSwimlane" target=_parent class=ISymbol>resizeSwimlane</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_resizeVertex><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.resizeVertex" target=_parent class=ISymbol>resizeVertex</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_resizeVertices><div class=IEntry><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.resizeVertices" target=_parent class=ISymbol>resizeVertices</a>, <span class=IParent>mxPartitionLayout</span></div></div><div class=SRResult id=SR_resizeWidth><div class=IEntry><a href="../files/util/mxDivResizer-js.html#mxDivResizer.resizeWidth" target=_parent class=ISymbol>resizeWidth</a>, <span class=IParent>mxDivResizer</span></div></div><div class=SRResult id=SR_resolve><div class=IEntry><a href="../files/model/mxCellPath-js.html#mxCellPath.resolve" target=_parent class=ISymbol>resolve</a>, <span class=IParent>mxCellPath</span></div></div><div class=SRResult id=SR_resolveColor><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.resolveColor" target=_parent class=ISymbol>resolveColor</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_resources><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.resources" target=_parent class=ISymbol>resources</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_resourcesEncoded><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.resourcesEncoded" target=_parent class=ISymbol>resourcesEncoded</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_restore><div class=IEntry><a href="javascript:searchResults.Toggle('SR_restore')" class=ISymbol>restore</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.restore" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.restore" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_restoreClone><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.restoreClone" target=_parent class=ISymbol>restoreClone</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_resume><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.resume" target=_parent class=ISymbol>resume</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR2_RESUME><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.RESUME" target=_parent class=ISymbol>RESUME</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_revalidate><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.revalidate" target=_parent class=ISymbol>revalidate</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_revalidateState><div class=IEntry><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.revalidateState" target=_parent class=ISymbol>revalidateState</a>, <span class=IParent>mxCellStatePreview</span></div></div><div class=SRResult id=SR_reverse><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.reverse" target=_parent class=ISymbol>reverse</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_reversePortConstraints><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.reversePortConstraints" target=_parent class=ISymbol>reversePortConstraints</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_RhombusPerimeter><div class=IEntry><a href="../files/view/mxPerimeter-js.html#mxPerimeter.RhombusPerimeter" target=_parent class=ISymbol>RhombusPerimeter</a>, <span class=IParent>mxPerimeter</span></div></div><div class=SRResult id=SR_root><div class=IEntry><a href="javascript:searchResults.Toggle('SR_root')" class=ISymbol>root</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.root" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.root" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.root" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.root" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.root" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR2_ROOT><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_ROOT')" class=ISymbol>ROOT</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.ROOT" target=_parent class=IParent>mxEditor.<wbr>mxEvent</a><a href="../files/util/mxEvent-js.html#mxEvent.ROOT" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.ROOT" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_rootChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.rootChanged" target=_parent class=ISymbol>rootChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_roots><div class=IEntry><a href="javascript:searchResults.Toggle('SR_roots')" class=ISymbol>roots</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.roots" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.roots" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.roots" target=_parent class=IParent>mxSwimlaneLayout</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.roots" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_rootx><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.rootx" target=_parent class=ISymbol>rootx</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rooty><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.rooty" target=_parent class=ISymbol>rooty</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rotate><div class=IEntry><a href="javascript:searchResults.Toggle('SR_rotate')" class=ISymbol>rotate</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.rotate" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/model/mxGeometry-js.html#mxGeometry.rotate" target=_parent class=IParent>mxGeometry</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.rotate" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.rotate" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.rotate" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_rotate90><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.rotate90" target=_parent class=ISymbol>rotate90</a>, <span class=IParent>mxRectangle</span></div></div><div class=SRResult id=SR_rotateCell><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.rotateCell" target=_parent class=ISymbol>rotateCell</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_rotateClick><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.rotateClick" target=_parent class=ISymbol>rotateClick</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_rotatedHtmlBackground><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.rotatedHtmlBackground" target=_parent class=ISymbol>rotatedHtmlBackground</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_rotateHtml><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.rotateHtml" target=_parent class=ISymbol>rotateHtml</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_rotateLabelBounds><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.rotateLabelBounds" target=_parent class=ISymbol>rotateLabelBounds</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_rotatePoint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_rotatePoint')" class=ISymbol>rotatePoint</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.rotatePoint" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/handler/mxHandle-js.html#mxHandle.rotatePoint" target=_parent class=IParent>mxHandle</a></div></div></div><div class=SRResult id=SR_rotateVertex><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.rotateVertex" target=_parent class=ISymbol>rotateVertex</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_ROTATION_undHANDLE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.ROTATION_HANDLE" target=_parent class=ISymbol>ROTATION_HANDLE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_rotationCursor><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.rotationCursor" target=_parent class=ISymbol>rotationCursor</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_rotationEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_rotationEnabled')" class=ISymbol>rotationEnabled</a><div class=ISubIndex><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.rotationEnabled" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.rotationEnabled" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_rotationHandleVSpacing><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.rotationHandleVSpacing" target=_parent class=ISymbol>rotationHandleVSpacing</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_rotationRaster><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.rotationRaster" target=_parent class=ISymbol>rotationRaster</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_roundAngle><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.roundAngle" target=_parent class=ISymbol>roundAngle</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_rounded><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.rounded" target=_parent class=ISymbol>rounded</a>, <span class=IParent>mxGuide</span></div></div><div class=SRResult id=SR_roundLength><div class=IEntry><a href="javascript:searchResults.Toggle('SR_roundLength')" class=ISymbol>roundLength</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.roundLength" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.roundLength" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.roundLength" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_roundrect><div class=IEntry><a href="javascript:searchResults.Toggle('SR_roundrect')" class=ISymbol>roundrect</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.roundrect" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.roundrect" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.roundrect" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_route><div class=IEntry><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.route" target=_parent class=ISymbol>route</a>, <span class=IParent>mxParallelEdgeLayout</span></div></div><div class=SRResult id=SR_row><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.row" target=_parent class=ISymbol>row</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rowMaxCenX><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.rowMaxCenX" target=_parent class=ISymbol>rowMaxCenX</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rowMaxX><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.rowMaxX" target=_parent class=ISymbol>rowMaxX</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rowMinCenX><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.rowMinCenX" target=_parent class=ISymbol>rowMinCenX</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rowMinX><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.rowMinX" target=_parent class=ISymbol>rowMinX</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rowRadi><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.rowRadi" target=_parent class=ISymbol>rowRadi</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rtrim><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.rtrim" target=_parent class=ISymbol>rtrim</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_run><div class=IEntry><a href="javascript:searchResults.Toggle('SR_run')" class=ISymbol>run</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.run" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.run" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralS.html b/docs/js-api/search/GeneralS.html
index 164d55c76..e4d341440 100644
--- a/docs/js-api/search/GeneralS.html
+++ b/docs/js-api/search/GeneralS.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_save><div class=IEntry><a href="javascript:searchResults.Toggle('SR_save')" class=ISymbol>save</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.save" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.save" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/editor/mxEditor-js.html#mxEditor.save" target=_parent class=IParent>mxEditor</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.save" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR2_SAVE><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_SAVE')" class=ISymbol>SAVE</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.mxEvent.SAVE" target=_parent class=IParent>mxEditor.<wbr>mxEvent</a><a href="../files/util/mxEvent-js.html#mxEvent.SAVE" target=_parent class=IParent>mxEvent</a></div></div></div><div class=SRResult id=SR_scale><div class=IEntry><a href="javascript:searchResults.Toggle('SR_scale')" class=ISymbol>scale</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.scale" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/model/mxGeometry-js.html#mxGeometry.scale" target=_parent class=IParent>mxGeometry</a><a href="../files/view/mxGraphView-js.html#mxGraphView.scale" target=_parent class=IParent>mxGraphView</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.scale" target=_parent class=IParent>mxPrintPreview</a><a href="../files/shape/mxShape-js.html#mxShape.scale" target=_parent class=IParent>mxShape</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.scale" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR2_SCALE><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_SCALE')" class=ISymbol>SCALE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.SCALE" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraphView-js.html#mxGraphView.mxEvent.SCALE" target=_parent class=IParent>mxGraphView.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_SCALE_undAND_undTRANSLATE><div class=IEntry><a href="javascript:searchResults.Toggle('SR_SCALE_undAND_undTRANSLATE')" class=ISymbol>SCALE_AND_TRANSLATE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.SCALE_AND_TRANSLATE" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraphView-js.html#mxGraphView.mxEvent.SCALE_AND_TRANSLATE" target=_parent class=IParent>mxGraphView.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_scaleAndTranslate><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.scaleAndTranslate" target=_parent class=ISymbol>scaleAndTranslate</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_scaleCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.scaleCell" target=_parent class=ISymbol>scaleCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_scaleCellState><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.scaleCellState" target=_parent class=ISymbol>scaleCellState</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_scaleGrid><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.scaleGrid" target=_parent class=ISymbol>scaleGrid</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_scalePointArray><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.scalePointArray" target=_parent class=ISymbol>scalePointArray</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_screenX><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.screenX" target=_parent class=ISymbol>screenX</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_screenY><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.screenY" target=_parent class=ISymbol>screenY</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_scrollCellToVisible><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.scrollCellToVisible" target=_parent class=ISymbol>scrollCellToVisible</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_scrollOnMove><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.scrollOnMove" target=_parent class=ISymbol>scrollOnMove</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_scrollPointToVisible><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.scrollPointToVisible" target=_parent class=ISymbol>scrollPointToVisible</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_scrollRectToVisible><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.scrollRectToVisible" target=_parent class=ISymbol>scrollRectToVisible</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_SegmentConnector><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.SegmentConnector" target=_parent class=ISymbol>SegmentConnector</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_segments><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.segments" target=_parent class=ISymbol>segments</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_select><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.select" target=_parent class=ISymbol>select</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR2_SELECT><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_SELECT')" class=ISymbol>SELECT</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.SELECT" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxToolbar-js.html#mxToolbar.mxEvent.SELECT" target=_parent class=IParent>mxToolbar.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_selectAll><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectAll" target=_parent class=ISymbol>selectAll</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectCell" target=_parent class=ISymbol>selectCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectCellForEvent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_selectCellForEvent')" class=ISymbol>selectCellForEvent</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.selectCellForEvent" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.selectCellForEvent" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_selectCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_selectCells')" class=ISymbol>selectCells</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.selectCells" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.selectCells" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_selectCellsForEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectCellsForEvent" target=_parent class=ISymbol>selectCellsForEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectChildCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectChildCell" target=_parent class=ISymbol>selectChildCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectDelayed><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.selectDelayed" target=_parent class=ISymbol>selectDelayed</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_selectEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.selectEnabled" target=_parent class=ISymbol>selectEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_Selection><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Selection" target=_parent class=ISymbol>Selection</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_Selection_spcstate><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Selection_state" target=_parent class=ISymbol>Selection state</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_SELECTION_undDASHED><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SELECTION_DASHED" target=_parent class=ISymbol>SELECTION_DASHED</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_selectionModel><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectionModel" target=_parent class=ISymbol>selectionModel</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectMode><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.selectMode" target=_parent class=ISymbol>selectMode</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_selectNextCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectNextCell" target=_parent class=ISymbol>selectNextCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectOnPopup><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.selectOnPopup" target=_parent class=ISymbol>selectOnPopup</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_selectParentCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectParentCell" target=_parent class=ISymbol>selectParentCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectPreviousCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectPreviousCell" target=_parent class=ISymbol>selectPreviousCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectRegion><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectRegion" target=_parent class=ISymbol>selectRegion</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectText><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.selectText" target=_parent class=ISymbol>selectText</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_selectVertices><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectVertices" target=_parent class=ISymbol>selectVertices</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_send><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.send" target=_parent class=ISymbol>send</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_setAbsoluteTerminalPoint><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.setAbsoluteTerminalPoint" target=_parent class=ISymbol>setAbsoluteTerminalPoint</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_setAddEnabled><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.setAddEnabled" target=_parent class=ISymbol>setAddEnabled</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_setAlign><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.setAlign" target=_parent class=ISymbol>setAlign</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_setAllowDanglingEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setAllowDanglingEdges" target=_parent class=ISymbol>setAllowDanglingEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setAllowEval><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.setAllowEval" target=_parent class=ISymbol>setAllowEval</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_setAllowLoops><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setAllowLoops" target=_parent class=ISymbol>setAllowLoops</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setAlpha><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setAlpha')" class=ISymbol>setAlpha</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setAlpha" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setAlpha" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setAttribute><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setAttribute')" class=ISymbol>setAttribute</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setAttribute" target=_parent class=IParent>mxCell</a><a href="../files/io/mxCodec-js.html#mxCodec.setAttribute" target=_parent class=IParent>mxCodec</a></div></div></div><div class=SRResult id=SR_setAutoSizeCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setAutoSizeCells" target=_parent class=ISymbol>setAutoSizeCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setBackgroundImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setBackgroundImage" target=_parent class=ISymbol>setBackgroundImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setBaseDomain><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.setBaseDomain" target=_parent class=ISymbol>setBaseDomain</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_setBaseUrl><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.setBaseUrl" target=_parent class=ISymbol>setBaseUrl</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_setBinary><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.setBinary" target=_parent class=ISymbol>setBinary</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_setBorder><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setBorder" target=_parent class=ISymbol>setBorder</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setBubbling><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.setBubbling" target=_parent class=ISymbol>setBubbling</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_setCell><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.setCell" target=_parent class=ISymbol>setCell</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_setCellHeights><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.setCellHeights" target=_parent class=ISymbol>setCellHeights</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_setCellLocations><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.setCellLocations" target=_parent class=ISymbol>setCellLocations</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_setCells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setCells')" class=ISymbol>setCells</a><div class=ISubIndex><a href="../files/util/mxClipboard-js.html#mxClipboard.setCells" target=_parent class=IParent>mxClipboard</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.setCells" target=_parent class=IParent>mxGraphSelectionModel</a></div></div></div><div class=SRResult id=SR_setCellsBendable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsBendable" target=_parent class=ISymbol>setCellsBendable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsCloneable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsCloneable" target=_parent class=ISymbol>setCellsCloneable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsDeletable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsDeletable" target=_parent class=ISymbol>setCellsDeletable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsDisconnectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsDisconnectable" target=_parent class=ISymbol>setCellsDisconnectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsEditable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsEditable" target=_parent class=ISymbol>setCellsEditable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsLocked><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsLocked" target=_parent class=ISymbol>setCellsLocked</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsMovable" target=_parent class=ISymbol>setCellsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsResizable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsResizable" target=_parent class=ISymbol>setCellsResizable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellsSelectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellsSelectable" target=_parent class=ISymbol>setCellsSelectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellStyle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellStyle" target=_parent class=ISymbol>setCellStyle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCellStyleFlags><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setCellStyleFlags')" class=ISymbol>setCellStyleFlags</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.setCellStyleFlags" target=_parent class=IParent>mxGraph</a><a href="../files/util/mxUtils-js.html#mxUtils.setCellStyleFlags" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_setCellStyles><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setCellStyles')" class=ISymbol>setCellStyles</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.setCellStyles" target=_parent class=IParent>mxGraph</a><a href="../files/util/mxUtils-js.html#mxUtils.setCellStyles" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_setCellWarning><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCellWarning" target=_parent class=ISymbol>setCellWarning</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setChildGeometry><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.setChildGeometry" target=_parent class=ISymbol>setChildGeometry</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_setCloneEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.setCloneEnabled" target=_parent class=ISymbol>setCloneEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_setCloneInvalidEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setCloneInvalidEdges" target=_parent class=ISymbol>setCloneInvalidEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setClosable><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setClosable" target=_parent class=ISymbol>setClosable</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setCollapsed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setCollapsed')" class=ISymbol>setCollapsed</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setCollapsed" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setCollapsed" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_setConnectable><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setConnectable')" class=ISymbol>setConnectable</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setConnectable" target=_parent class=IParent>mxCell</a><a href="../files/view/mxGraph-js.html#mxGraph.setConnectable" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_setConnectableEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setConnectableEdges" target=_parent class=ISymbol>setConnectableEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setConnectionConstraint><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setConnectionConstraint" target=_parent class=ISymbol>setConnectionConstraint</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setConstrainChildren><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setConstrainChildren" target=_parent class=ISymbol>setConstrainChildren</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setConstrainRelativeChildren><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setConstrainRelativeChildren" target=_parent class=ISymbol>setConstrainRelativeChildren</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setCreateIds><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setCreateIds" target=_parent class=ISymbol>setCreateIds</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_setCreateTarget><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.setCreateTarget" target=_parent class=ISymbol>setCreateTarget</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_setCurrentRoot><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.setCurrentRoot" target=_parent class=ISymbol>setCurrentRoot</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_setCurrentState><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.setCurrentState" target=_parent class=ISymbol>setCurrentState</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_setCursor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setCursor')" class=ISymbol>setCursor</a><div class=ISubIndex><a href="../files/view/mxCellState-js.html#mxCellState.setCursor" target=_parent class=IParent>mxCellState</a><a href="../files/shape/mxShape-js.html#mxShape.setCursor" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_setDashed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setDashed')" class=ISymbol>setDashed</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setDashed" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setDashed" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setDashPattern><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setDashPattern')" class=ISymbol>setDashPattern</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setDashPattern" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setDashPattern" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setDefaultParent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setDefaultParent" target=_parent class=ISymbol>setDefaultParent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setDisconnectOnMove><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setDisconnectOnMove" target=_parent class=ISymbol>setDisconnectOnMove</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setDropEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setDropEnabled" target=_parent class=ISymbol>setDropEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setEdge><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.setEdge" target=_parent class=ISymbol>setEdge</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_setEdgePoints><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.setEdgePoints" target=_parent class=ISymbol>setEdgePoints</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_setEdgePosition><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.setEdgePosition" target=_parent class=ISymbol>setEdgePosition</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_setEdgeStyleEnabled><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.setEdgeStyleEnabled" target=_parent class=ISymbol>setEdgeStyleEnabled</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_setEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setEnabled')" class=ISymbol>setEnabled</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.setEnabled" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.setEnabled" target=_parent class=IParent>mxCellMarker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.setEnabled" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.setEnabled" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/util/mxDragSource-js.html#mxDragSource.setEnabled" target=_parent class=IParent>mxDragSource</a><a href="../files/view/mxGraph-js.html#mxGraph.setEnabled" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.setEnabled" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.setEnabled" target=_parent class=IParent>mxKeyHandler</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.setEnabled" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxOutline-js.html#mxOutline.setEnabled" target=_parent class=IParent>mxOutline</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.setEnabled" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.setEnabled" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.setEnabled" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.setEnabled" target=_parent class=IParent>mxSwimlaneManager</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.setEnabled" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.setEnabled" target=_parent class=IParent>mxUrlConverter</a></div></div></div><div class=SRResult id=SR_setEnterStopsCellEditing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setEnterStopsCellEditing" target=_parent class=ISymbol>setEnterStopsCellEditing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setEscapeEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setEscapeEnabled" target=_parent class=ISymbol>setEscapeEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setEventsEnabled><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.setEventsEnabled" target=_parent class=ISymbol>setEventsEnabled</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_setEventSource><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.setEventSource" target=_parent class=ISymbol>setEventSource</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_setExtendParents><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setExtendParents" target=_parent class=ISymbol>setExtendParents</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setExtendParentsOnAdd><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setExtendParentsOnAdd" target=_parent class=ISymbol>setExtendParentsOnAdd</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setExtendParentsOnMove><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setExtendParentsOnMove" target=_parent class=ISymbol>setExtendParentsOnMove</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setFillAlpha><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFillAlpha')" class=ISymbol>setFillAlpha</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFillAlpha" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFillAlpha" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setFillColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFillColor')" class=ISymbol>setFillColor</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFillColor" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFillColor" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setFocus><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.setFocus" target=_parent class=ISymbol>setFocus</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_setFontBackgroundColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFontBackgroundColor')" class=ISymbol>setFontBackgroundColor</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFontBackgroundColor" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFontBackgroundColor" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setFontBorderColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFontBorderColor')" class=ISymbol>setFontBorderColor</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFontBorderColor" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFontBorderColor" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setFontColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFontColor')" class=ISymbol>setFontColor</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFontColor" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFontColor" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setFontFamily><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFontFamily')" class=ISymbol>setFontFamily</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFontFamily" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFontFamily" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setFontSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFontSize')" class=ISymbol>setFontSize</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFontSize" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFontSize" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setFontStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setFontStyle')" class=ISymbol>setFontStyle</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setFontStyle" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setFontStyle" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setGeneralPurposeVariable><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGeneralPurposeVariable')" class=ISymbol>setGeneralPurposeVariable</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.setGeneralPurposeVariable" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.setGeneralPurposeVariable" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.setGeneralPurposeVariable" target=_parent class=IParent>mxGraphHierarchyNode</a></div></div></div><div class=SRResult id=SR_setGeometry><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGeometry')" class=ISymbol>setGeometry</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setGeometry" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setGeometry" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_setGradient><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGradient')" class=ISymbol>setGradient</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setGradient" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setGradient" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setGraph><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGraph')" class=ISymbol>setGraph</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.setGraph" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.setGraph" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.setGraph" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_setGraphBounds><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.setGraphBounds" target=_parent class=ISymbol>setGraphBounds</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_setGraphContainer><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.setGraphContainer" target=_parent class=ISymbol>setGraphContainer</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_setGridEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGridEnabled')" class=ISymbol>setGridEnabled</a><div class=ISubIndex><a href="../files/util/mxDragSource-js.html#mxDragSource.setGridEnabled" target=_parent class=IParent>mxDragSource</a><a href="../files/view/mxGraph-js.html#mxGraph.setGridEnabled" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_setGridSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setGridSize" target=_parent class=ISymbol>setGridSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setGuidesEnabled><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.setGuidesEnabled" target=_parent class=ISymbol>setGuidesEnabled</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_setHandlesVisibleForCells><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.setHandlesVisibleForCells" target=_parent class=ISymbol>setHandlesVisibleForCells</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_setHideOnHover><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.setHideOnHover" target=_parent class=ISymbol>setHideOnHover</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_setHighlightColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setHighlightColor')" class=ISymbol>setHighlightColor</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.setHighlightColor" target=_parent class=IParent>mxCellHighlight</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.setHighlightColor" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_setHorizontal><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.setHorizontal" target=_parent class=ISymbol>setHorizontal</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_setHotspot><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.setHotspot" target=_parent class=ISymbol>setHotspot</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_setHotspotEnabled><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.setHotspotEnabled" target=_parent class=ISymbol>setHotspotEnabled</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_setHtmlLabels><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setHtmlLabels" target=_parent class=ISymbol>setHtmlLabels</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setId><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.setId" target=_parent class=ISymbol>setId</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_setImage><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setImage" target=_parent class=ISymbol>setImage</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setInvokesStopCellEditing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setInvokesStopCellEditing" target=_parent class=ISymbol>setInvokesStopCellEditing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setLineCap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setLineCap')" class=ISymbol>setLineCap</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setLineCap" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setLineCap" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setLineJoin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setLineJoin')" class=ISymbol>setLineJoin</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setLineJoin" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setLineJoin" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setLink><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setLink')" class=ISymbol>setLink</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setLink" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.setLink" target=_parent class=IParent>mxSvgCanvas2D</a></div></div></div><div class=SRResult id=SR_setLocation><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setLocation" target=_parent class=ISymbol>setLocation</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setMaximizable><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setMaximizable" target=_parent class=ISymbol>setMaximizable</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setMinimizable><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setMinimizable" target=_parent class=ISymbol>setMinimizable</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setMiterLimit><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setMiterLimit')" class=ISymbol>setMiterLimit</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setMiterLimit" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setMiterLimit" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setMode><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.setMode" target=_parent class=ISymbol>setMode</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_setModified><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.setModified" target=_parent class=ISymbol>setModified</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_setMoveEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.setMoveEnabled" target=_parent class=ISymbol>setMoveEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_setMultigraph><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setMultigraph" target=_parent class=ISymbol>setMultigraph</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setOpacity><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.setOpacity" target=_parent class=ISymbol>setOpacity</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_setOrthogonalEdge><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.setOrthogonalEdge" target=_parent class=ISymbol>setOrthogonalEdge</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_setPanning><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setPanning" target=_parent class=ISymbol>setPanning</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setPanningEnabled><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.setPanningEnabled" target=_parent class=ISymbol>setPanningEnabled</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_setParent><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.setParent" target=_parent class=ISymbol>setParent</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_setPinchEnabled><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.setPinchEnabled" target=_parent class=ISymbol>setPinchEnabled</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_setPortsEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setPortsEnabled" target=_parent class=ISymbol>setPortsEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setPosition><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.setPosition" target=_parent class=ISymbol>setPosition</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_setPrefixedStyle><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.setPrefixedStyle" target=_parent class=ISymbol>setPrefixedStyle</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_setPreviewColor><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.setPreviewColor" target=_parent class=ISymbol>setPreviewColor</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_setRect><div class=IEntry><a href="../files/util/mxRectangle-js.html#mxRectangle.setRect" target=_parent class=ISymbol>setRect</a>, <span class=IParent>mxRectangle</span></div></div><div class=SRResult id=SR_setRecursiveResize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setRecursiveResize" target=_parent class=ISymbol>setRecursiveResize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setRemoveCellsFromParent><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.setRemoveCellsFromParent" target=_parent class=ISymbol>setRemoveCellsFromParent</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_setRendering><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.setRendering" target=_parent class=ISymbol>setRendering</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_setRequestHeaders><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.setRequestHeaders" target=_parent class=ISymbol>setRequestHeaders</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_setResizable><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setResizable" target=_parent class=ISymbol>setResizable</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setResizeContainer><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setResizeContainer" target=_parent class=ISymbol>setResizeContainer</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setResizeEnabled><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.setResizeEnabled" target=_parent class=ISymbol>setResizeEnabled</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_setRoot><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setRoot" target=_parent class=ISymbol>setRoot</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_setScale><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.setScale" target=_parent class=ISymbol>setScale</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_setScrollable><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setScrollable" target=_parent class=ISymbol>setScrollable</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setSelectEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.setSelectEnabled" target=_parent class=ISymbol>setSelectEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_setSelectionCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setSelectionCell" target=_parent class=ISymbol>setSelectionCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setSelectionCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setSelectionCells" target=_parent class=ISymbol>setSelectionCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setSelectionModel><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setSelectionModel" target=_parent class=ISymbol>setSelectionModel</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setShadow><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setShadow')" class=ISymbol>setShadow</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setShadow" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setShadow" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setShadowAlpha><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setShadowAlpha')" class=ISymbol>setShadowAlpha</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setShadowAlpha" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setShadowAlpha" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setShadowColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setShadowColor')" class=ISymbol>setShadowColor</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setShadowColor" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setShadowColor" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setShadowOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setShadowOffset')" class=ISymbol>setShadowOffset</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setShadowOffset" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setShadowOffset" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setSingleSelection><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.setSingleSelection" target=_parent class=ISymbol>setSingleSelection</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_setSize><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setSize" target=_parent class=ISymbol>setSize</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setSplitEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setSplitEnabled" target=_parent class=ISymbol>setSplitEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setState><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.setState" target=_parent class=ISymbol>setState</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_setStates><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setStates')" class=ISymbol>setStates</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxGraphView.setStates" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxGuide-js.html#mxGuide.setStates" target=_parent class=IParent>mxGuide</a></div></div></div><div class=SRResult id=SR_setStatus><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.setStatus" target=_parent class=ISymbol>setStatus</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_setStatusContainer><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.setStatusContainer" target=_parent class=ISymbol>setStatusContainer</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_setStrokeAlpha><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setStrokeAlpha')" class=ISymbol>setStrokeAlpha</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setStrokeAlpha" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setStrokeAlpha" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setStrokeColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setStrokeColor')" class=ISymbol>setStrokeColor</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setStrokeColor" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setStrokeColor" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setStrokeWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setStrokeWidth')" class=ISymbol>setStrokeWidth</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.setStrokeWidth" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.setStrokeWidth" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_setStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setStyle')" class=ISymbol>setStyle</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setStyle" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setStyle" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxUtils-js.html#mxUtils.setStyle" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_setStyleFlag><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.setStyleFlag" target=_parent class=ISymbol>setStyleFlag</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_setStylesheet><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setStylesheet" target=_parent class=ISymbol>setStylesheet</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setSwimlaneNesting><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setSwimlaneNesting" target=_parent class=ISymbol>setSwimlaneNesting</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setSwimlaneSelectionEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setSwimlaneSelectionEnabled" target=_parent class=ISymbol>setSwimlaneSelectionEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setTerminal><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setTerminal')" class=ISymbol>setTerminal</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setTerminal" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setTerminal" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_setTerminalPoint><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.setTerminalPoint" target=_parent class=ISymbol>setTerminalPoint</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_setTerminals><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setTerminals" target=_parent class=ISymbol>setTerminals</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_setTextContent><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.setTextContent" target=_parent class=ISymbol>setTextContent</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_setTitle><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.setTitle" target=_parent class=ISymbol>setTitle</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_setTitleContainer><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.setTitleContainer" target=_parent class=ISymbol>setTitleContainer</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_setTolerance><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setTolerance" target=_parent class=ISymbol>setTolerance</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setToolbarContainer><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.setToolbarContainer" target=_parent class=ISymbol>setToolbarContainer</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_setTooltips><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setTooltips" target=_parent class=ISymbol>setTooltips</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setTranslate><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.setTranslate" target=_parent class=ISymbol>setTranslate</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_setTransparentBackgroundImage><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.setTransparentBackgroundImage" target=_parent class=ISymbol>setTransparentBackgroundImage</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_setValue><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setValue')" class=ISymbol>setValue</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setValue" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setValue" target=_parent class=IParent>mxGraphModel</a></div></div></div><div class=SRResult id=SR_setVertex><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.setVertex" target=_parent class=ISymbol>setVertex</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_setVertexLabelsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.setVertexLabelsMovable" target=_parent class=ISymbol>setVertexLabelsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_setVertexLocation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setVertexLocation')" class=ISymbol>setVertexLocation</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.setVertexLocation" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.setVertexLocation" target=_parent class=IParent>mxGraphLayout</a></div></div></div><div class=SRResult id=SR_setVisible><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setVisible')" class=ISymbol>setVisible</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.setVisible" target=_parent class=IParent>mxCell</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.setVisible" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxGuide-js.html#mxGuide.setVisible" target=_parent class=IParent>mxGuide</a><a href="../files/handler/mxHandle-js.html#mxHandle.setVisible" target=_parent class=IParent>mxHandle</a><a href="../files/util/mxLog-js.html#mxLog.setVisible" target=_parent class=IParent>mxLog</a><a href="../files/util/mxWindow-js.html#mxWindow.setVisible" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_setVisibleTerminalState><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.setVisibleTerminalState" target=_parent class=ISymbol>setVisibleTerminalState</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_setX><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.setX" target=_parent class=ISymbol>setX</a>, <span class=IParent>mxGraphAbstractHierarchyCell</span></div></div><div class=SRResult id=SR_setY><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.setY" target=_parent class=ISymbol>setY</a>, <span class=IParent>mxGraphAbstractHierarchyCell</span></div></div><div class=SRResult id=SR_setZoomEnabled><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.setZoomEnabled" target=_parent class=ISymbol>setZoomEnabled</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_SHADOW_undOFFSET_undX><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHADOW_OFFSET_X" target=_parent class=ISymbol>SHADOW_OFFSET_X</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHADOW_undOFFSET_undY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHADOW_OFFSET_Y" target=_parent class=ISymbol>SHADOW_OFFSET_Y</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHADOW_undOPACITY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHADOW_OPACITY" target=_parent class=ISymbol>SHADOW_OPACITY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHADOWCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHADOWCOLOR" target=_parent class=ISymbol>SHADOWCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_shape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shape')" class=ISymbol>shape</a><div class=ISubIndex><a href="../files/view/mxCellState-js.html#mxCellState.shape" target=_parent class=IParent>mxCellState</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.shape" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.shape" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_SHAPE_undACTOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_ACTOR" target=_parent class=ISymbol>SHAPE_ACTOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undARROW><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_ARROW" target=_parent class=ISymbol>SHAPE_ARROW</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undARROW_undCONNECTOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_ARROW_CONNECTOR" target=_parent class=ISymbol>SHAPE_ARROW_CONNECTOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undCLOUD><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_CLOUD" target=_parent class=ISymbol>SHAPE_CLOUD</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undCONNECTOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_CONNECTOR" target=_parent class=ISymbol>SHAPE_CONNECTOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undCYLINDER><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_CYLINDER" target=_parent class=ISymbol>SHAPE_CYLINDER</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undDOUBLE_undELLIPSE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_DOUBLE_ELLIPSE" target=_parent class=ISymbol>SHAPE_DOUBLE_ELLIPSE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undELLIPSE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_ELLIPSE" target=_parent class=ISymbol>SHAPE_ELLIPSE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undHEXAGON><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_HEXAGON" target=_parent class=ISymbol>SHAPE_HEXAGON</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undIMAGE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_IMAGE" target=_parent class=ISymbol>SHAPE_IMAGE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undLABEL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_LABEL" target=_parent class=ISymbol>SHAPE_LABEL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undLINE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_LINE" target=_parent class=ISymbol>SHAPE_LINE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undRECTANGLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_RECTANGLE" target=_parent class=ISymbol>SHAPE_RECTANGLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undRHOMBUS><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_RHOMBUS" target=_parent class=ISymbol>SHAPE_RHOMBUS</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undSWIMLANE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_SWIMLANE" target=_parent class=ISymbol>SHAPE_SWIMLANE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undTRIANGLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_TRIANGLE" target=_parent class=ISymbol>SHAPE_TRIANGLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_shapePointerEvents><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.shapePointerEvents" target=_parent class=ISymbol>shapePointerEvents</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_sharedDiv><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband.sharedDiv" target=_parent class=ISymbol>sharedDiv</a>, <span class=IParent>mxRubberband</span></div></div><div class=SRResult id=SR_shiftKeys><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.shiftKeys" target=_parent class=ISymbol>shiftKeys</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_shouldRemoveCellsFromParent><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.shouldRemoveCellsFromParent" target=_parent class=ISymbol>shouldRemoveCellsFromParent</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_shouldRemoveParent><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.shouldRemoveParent" target=_parent class=ISymbol>shouldRemoveParent</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_show><div class=IEntry><a href="javascript:searchResults.Toggle('SR_show')" class=ISymbol>show</a><div class=ISubIndex><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.show" target=_parent class=IParent>mxCellStatePreview</a><a href="../files/util/mxLog-js.html#mxLog.show" target=_parent class=IParent>mxLog</a><a href="../files/util/mxMorphing-js.html#mxMorphing.show" target=_parent class=IParent>mxMorphing</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.show" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/util/mxUtils-js.html#mxUtils.show" target=_parent class=IParent>mxUtils</a><a href="../files/util/mxWindow-js.html#mxWindow.show" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR2_SHOW><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_SHOW')" class=ISymbol>SHOW</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.SHOW" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.mxEvent.SHOW" target=_parent class=IParent>mxPopupMenu.<wbr>mxEvent</a><a href="../files/util/mxWindow-js.html#mxWindow.mxEvent.SHOW" target=_parent class=IParent>mxWindow.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_showHelp><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.showHelp" target=_parent class=ISymbol>showHelp</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_showMenu><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.showMenu" target=_parent class=ISymbol>showMenu</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_showOutline><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.showOutline" target=_parent class=ISymbol>showOutline</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_showProperties><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.showProperties" target=_parent class=ISymbol>showProperties</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_showSubmenu><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.showSubmenu" target=_parent class=ISymbol>showSubmenu</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_showTasks><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.showTasks" target=_parent class=ISymbol>showTasks</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_showViewport><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.showViewport" target=_parent class=ISymbol>showViewport</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_SideToSide><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.SideToSide" target=_parent class=ISymbol>SideToSide</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_significant><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.significant" target=_parent class=ISymbol>significant</a>, <span class=IParent>mxUndoableEdit</span></div></div><div class=SRResult id=SR_simulate><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.simulate" target=_parent class=ISymbol>simulate</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_singleSelection><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.singleSelection" target=_parent class=ISymbol>singleSelection</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_singleSizer><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.singleSizer" target=_parent class=ISymbol>singleSizer</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_size><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.size" target=_parent class=ISymbol>size</a>, <span class=IParent>mxUndoManager</span></div></div><div class=SRResult id=SR2_SIZE><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_SIZE')" class=ISymbol>SIZE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.SIZE" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.SIZE" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_sizeDidChange><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.sizeDidChange" target=_parent class=ISymbol>sizeDidChange</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_sizerImage><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.sizerImage" target=_parent class=ISymbol>sizerImage</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_smartSeparators><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.smartSeparators" target=_parent class=ISymbol>smartSeparators</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_snap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_snap')" class=ISymbol>snap</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.snap" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.snap" target=_parent class=IParent>mxGraphHandler</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.snap" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_snapDelta><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.snapDelta" target=_parent class=ISymbol>snapDelta</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_snapPoint><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.snapPoint" target=_parent class=ISymbol>snapPoint</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_snapToPreview><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.snapToPreview" target=_parent class=ISymbol>snapToPreview</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_snapToTerminals><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.snapToTerminals" target=_parent class=ISymbol>snapToTerminals</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_sortCells><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.sortCells" target=_parent class=ISymbol>sortCells</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_sortEdges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_sortEdges')" class=ISymbol>sortEdges</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.sortEdges" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.sortEdges" target=_parent class=IParent>mxRadialTreeLayout</a></div></div></div><div class=SRResult id=SR_sortOutgoingEdges><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.sortOutgoingEdges" target=_parent class=ISymbol>sortOutgoingEdges</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_source><div class=IEntry><a href="javascript:searchResults.Toggle('SR_source')" class=ISymbol>source</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.source" target=_parent class=IParent>mxCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.source" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.source" target=_parent class=IParent>mxMultiplicity</a><a href="../files/view/mxOutline-js.html#mxOutline.source" target=_parent class=IParent>mxOutline</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.source" target=_parent class=IParent>mxUndoableEdit</a></div></div></div><div class=SRResult id=SR_sourcePoint><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.sourcePoint" target=_parent class=ISymbol>sourcePoint</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_SOURCESCANSTARTRANK><div class=IEntry><a href="javascript:searchResults.Toggle('SR_SOURCESCANSTARTRANK')" class=ISymbol>SOURCESCANSTARTRANK</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.SOURCESCANSTARTRANK" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.SOURCESCANSTARTRANK" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_sourceState><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.sourceState" target=_parent class=ISymbol>sourceState</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_spacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_spacing')" class=ISymbol>spacing</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.spacing" target=_parent class=IParent>mxCellHighlight</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.spacing" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/shape/mxLabel-js.html#mxLabel.spacing" target=_parent class=IParent>mxLabel</a><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.spacing" target=_parent class=IParent>mxParallelEdgeLayout</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.spacing" target=_parent class=IParent>mxPartitionLayout</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.spacing" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_SPLIT_undEDGE><div class=IEntry><a href="javascript:searchResults.Toggle('SR_SPLIT_undEDGE')" class=ISymbol>SPLIT_EDGE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.SPLIT_EDGE" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.SPLIT_EDGE" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_splitEdge><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.splitEdge" target=_parent class=ISymbol>splitEdge</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_splitEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.splitEnabled" target=_parent class=ISymbol>splitEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_src><div class=IEntry><a href="../files/util/mxImage-js.html#mxImage.src" target=_parent class=ISymbol>src</a>, <span class=IParent>mxImage</span></div></div><div class=SRResult id=SR_start><div class=IEntry><a href="javascript:searchResults.Toggle('SR_start')" class=ISymbol>start</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#start" target=_parent class=IParent>Global</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.start" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.start" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.start" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.start" target=_parent class=IParent>mxPanningHandler</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.start" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.start" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR2_START><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_START')" class=ISymbol>START</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mxEvent.START" target=_parent class=IParent>mxConnectionHandler.<wbr>mxEvent</a><a href="../files/util/mxEvent-js.html#mxEvent.START" target=_parent class=IParent>mxEvent</a></div></div></div><div class=SRResult id=SR_START_undEDIT><div class=IEntry><a href="javascript:searchResults.Toggle('SR_START_undEDIT')" class=ISymbol>START_EDIT</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.START_EDIT" target=_parent class=IParent>mxEvent</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.START_EDIT" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.mxEvent.START_EDIT" target=_parent class=IParent>mxUndoableEdit.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_START_undEDITING><div class=IEntry><a href="javascript:searchResults.Toggle('SR_START_undEDITING')" class=ISymbol>START_EDITING</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.START_EDITING" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.START_EDITING" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_startAnimation><div class=IEntry><a href="../files/util/mxAnimation-js.html#mxAnimation.startAnimation" target=_parent class=ISymbol>startAnimation</a>, <span class=IParent>mxAnimation</span></div></div><div class=SRResult id=SR_startDrag><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.startDrag" target=_parent class=ISymbol>startDrag</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_startEditing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_startEditing')" class=ISymbol>startEditing</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.startEditing" target=_parent class=IParent>mxCellEditor</a><a href="../files/view/mxGraph-js.html#mxGraph.startEditing" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_startEditingAtCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.startEditingAtCell" target=_parent class=ISymbol>startEditingAtCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_startX><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.startX" target=_parent class=ISymbol>startX</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_startY><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.startY" target=_parent class=ISymbol>startY</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_state><div class=IEntry><a href="javascript:searchResults.Toggle('SR_state')" class=ISymbol>state</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.state" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.state" target=_parent class=IParent>mxCellHighlight</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.state" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.state" target=_parent class=IParent>mxMouseEvent</a><a href="../files/shape/mxShape-js.html#mxShape.state" target=_parent class=IParent>mxShape</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.state" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_states><div class=IEntry><a href="javascript:searchResults.Toggle('SR_states')" class=ISymbol>states</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.states" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/view/mxGraphView-js.html#mxGraphView.states" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxGuide-js.html#mxGuide.states" target=_parent class=IParent>mxGuide</a></div></div></div><div class=SRResult id=SR_stateValidated><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.stateValidated" target=_parent class=ISymbol>stateValidated</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_status><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.status" target=_parent class=ISymbol>status</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_stencil><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.stencil" target=_parent class=ISymbol>stencil</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_stencilPointerEvents><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.stencilPointerEvents" target=_parent class=ISymbol>stencilPointerEvents</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_step><div class=IEntry><a href="../files/util/mxMorphing-js.html#mxMorphing.step" target=_parent class=ISymbol>step</a>, <span class=IParent>mxMorphing</span></div></div><div class=SRResult id=SR_steps><div class=IEntry><a href="../files/util/mxMorphing-js.html#mxMorphing.steps" target=_parent class=ISymbol>steps</a>, <span class=IParent>mxMorphing</span></div></div><div class=SRResult id=SR_STEPSIZE><div class=IEntry><a href="../files/util/mxClipboard-js.html#mxClipboard.STEPSIZE" target=_parent class=ISymbol>STEPSIZE</a>, <span class=IParent>mxClipboard</span></div></div><div class=SRResult id=SR_stopAnimation><div class=IEntry><a href="../files/util/mxAnimation-js.html#mxAnimation.stopAnimation" target=_parent class=ISymbol>stopAnimation</a>, <span class=IParent>mxAnimation</span></div></div><div class=SRResult id=SR_stopDrag><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.stopDrag" target=_parent class=ISymbol>stopDrag</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_stopEditing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_stopEditing')" class=ISymbol>stopEditing</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.stopEditing" target=_parent class=IParent>mxCellEditor</a><a href="../files/view/mxGraph-js.html#mxGraph.stopEditing" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_stopRecursion><div class=IEntry><a href="../files/util/mxMorphing-js.html#mxMorphing.stopRecursion" target=_parent class=ISymbol>stopRecursion</a>, <span class=IParent>mxMorphing</span></div></div><div class=SRResult id=SR_straightRemoveEnabled><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.straightRemoveEnabled" target=_parent class=ISymbol>straightRemoveEnabled</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_stroke><div class=IEntry><a href="javascript:searchResults.Toggle('SR_stroke')" class=ISymbol>stroke</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.stroke" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.stroke" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.stroke" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_strokeTolerance><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.strokeTolerance" target=_parent class=ISymbol>strokeTolerance</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_strokewidth><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.strokewidth" target=_parent class=ISymbol>strokewidth</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_style><div class=IEntry><a href="javascript:searchResults.Toggle('SR_style')" class=ISymbol>style</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.style" target=_parent class=IParent>mxCell</a><a href="../files/view/mxCellState-js.html#mxCellState.style" target=_parent class=IParent>mxCellState</a><a href="../files/shape/mxShape-js.html#mxShape.style" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_STYLE_undABSOLUTE_undARCSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ABSOLUTE_ARCSIZE" target=_parent class=ISymbol>STYLE_ABSOLUTE_ARCSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undALIGN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ALIGN" target=_parent class=ISymbol>STYLE_ALIGN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undANCHOR_undPOINT_undDIRECTION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ANCHOR_POINT_DIRECTION" target=_parent class=ISymbol>STYLE_ANCHOR_POINT_DIRECTION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undARCSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ARCSIZE" target=_parent class=ISymbol>STYLE_ARCSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undASPECT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ASPECT" target=_parent class=ISymbol>STYLE_ASPECT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undAUTOSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_AUTOSIZE" target=_parent class=ISymbol>STYLE_AUTOSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undBACKGROUND_undOUTLINE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_BACKGROUND_OUTLINE" target=_parent class=ISymbol>STYLE_BACKGROUND_OUTLINE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undBENDABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_BENDABLE" target=_parent class=ISymbol>STYLE_BENDABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undCLONEABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_CLONEABLE" target=_parent class=ISymbol>STYLE_CLONEABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undCURVED><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_CURVED" target=_parent class=ISymbol>STYLE_CURVED</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undDASH_undPATTERN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_DASH_PATTERN" target=_parent class=ISymbol>STYLE_DASH_PATTERN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undDASHED><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_DASHED" target=_parent class=ISymbol>STYLE_DASHED</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undDELETABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_DELETABLE" target=_parent class=ISymbol>STYLE_DELETABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undDIRECTION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_DIRECTION" target=_parent class=ISymbol>STYLE_DIRECTION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undEDGE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_EDGE" target=_parent class=ISymbol>STYLE_EDGE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undEDITABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_EDITABLE" target=_parent class=ISymbol>STYLE_EDITABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undELBOW><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ELBOW" target=_parent class=ISymbol>STYLE_ELBOW</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENDARROW><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENDARROW" target=_parent class=ISymbol>STYLE_ENDARROW</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENDFILL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENDFILL" target=_parent class=ISymbol>STYLE_ENDFILL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENDSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENDSIZE" target=_parent class=ISymbol>STYLE_ENDSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENTRY_undDX><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENTRY_DX" target=_parent class=ISymbol>STYLE_ENTRY_DX</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENTRY_undDY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENTRY_DY" target=_parent class=ISymbol>STYLE_ENTRY_DY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENTRY_undPERIMETER><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENTRY_PERIMETER" target=_parent class=ISymbol>STYLE_ENTRY_PERIMETER</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENTRY_undX><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENTRY_X" target=_parent class=ISymbol>STYLE_ENTRY_X</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENTRY_undY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENTRY_Y" target=_parent class=ISymbol>STYLE_ENTRY_Y</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undEXIT_undDX><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_EXIT_DX" target=_parent class=ISymbol>STYLE_EXIT_DX</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undEXIT_undDY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_EXIT_DY" target=_parent class=ISymbol>STYLE_EXIT_DY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undEXIT_undPERIMETER><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_EXIT_PERIMETER" target=_parent class=ISymbol>STYLE_EXIT_PERIMETER</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undEXIT_undX><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_EXIT_X" target=_parent class=ISymbol>STYLE_EXIT_X</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undEXIT_undY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_EXIT_Y" target=_parent class=ISymbol>STYLE_EXIT_Y</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFILL_undOPACITY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FILL_OPACITY" target=_parent class=ISymbol>STYLE_FILL_OPACITY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFILLCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FILLCOLOR" target=_parent class=ISymbol>STYLE_FILLCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFIX_undDASH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FIX_DASH" target=_parent class=ISymbol>STYLE_FIX_DASH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFLIPH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FLIPH" target=_parent class=ISymbol>STYLE_FLIPH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFLIPV><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FLIPV" target=_parent class=ISymbol>STYLE_FLIPV</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFOLDABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FOLDABLE" target=_parent class=ISymbol>STYLE_FOLDABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFONTCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FONTCOLOR" target=_parent class=ISymbol>STYLE_FONTCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFONTFAMILY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FONTFAMILY" target=_parent class=ISymbol>STYLE_FONTFAMILY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFONTSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FONTSIZE" target=_parent class=ISymbol>STYLE_FONTSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFONTSTYLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FONTSTYLE" target=_parent class=ISymbol>STYLE_FONTSTYLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undGLASS><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_GLASS" target=_parent class=ISymbol>STYLE_GLASS</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undGRADIENT_undDIRECTION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_GRADIENT_DIRECTION" target=_parent class=ISymbol>STYLE_GRADIENT_DIRECTION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undGRADIENTCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_GRADIENTCOLOR" target=_parent class=ISymbol>STYLE_GRADIENTCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undHORIZONTAL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_HORIZONTAL" target=_parent class=ISymbol>STYLE_HORIZONTAL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE" target=_parent class=ISymbol>STYLE_IMAGE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE_undALIGN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE_ALIGN" target=_parent class=ISymbol>STYLE_IMAGE_ALIGN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE_undASPECT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE_ASPECT" target=_parent class=ISymbol>STYLE_IMAGE_ASPECT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE_undBACKGROUND><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE_BACKGROUND" target=_parent class=ISymbol>STYLE_IMAGE_BACKGROUND</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE_undBORDER><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE_BORDER" target=_parent class=ISymbol>STYLE_IMAGE_BORDER</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE_undHEIGHT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE_HEIGHT" target=_parent class=ISymbol>STYLE_IMAGE_HEIGHT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE_undVERTICAL_undALIGN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE_VERTICAL_ALIGN" target=_parent class=ISymbol>STYLE_IMAGE_VERTICAL_ALIGN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE_undWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE_WIDTH" target=_parent class=ISymbol>STYLE_IMAGE_WIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_COLOR" target=_parent class=ISymbol>STYLE_INDICATOR_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undDIRECTION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_DIRECTION" target=_parent class=ISymbol>STYLE_INDICATOR_DIRECTION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undGRADIENTCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_GRADIENTCOLOR" target=_parent class=ISymbol>STYLE_INDICATOR_GRADIENTCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undHEIGHT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_HEIGHT" target=_parent class=ISymbol>STYLE_INDICATOR_HEIGHT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undIMAGE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_IMAGE" target=_parent class=ISymbol>STYLE_INDICATOR_IMAGE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undSHAPE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_SHAPE" target=_parent class=ISymbol>STYLE_INDICATOR_SHAPE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undSPACING><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_SPACING" target=_parent class=ISymbol>STYLE_INDICATOR_SPACING</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undSTROKECOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_STROKECOLOR" target=_parent class=ISymbol>STYLE_INDICATOR_STROKECOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_WIDTH" target=_parent class=ISymbol>STYLE_INDICATOR_WIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undJETTY_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_JETTY_SIZE" target=_parent class=ISymbol>STYLE_JETTY_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undLABEL_undBACKGROUNDCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_LABEL_BACKGROUNDCOLOR" target=_parent class=ISymbol>STYLE_LABEL_BACKGROUNDCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undLABEL_undBORDERCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_LABEL_BORDERCOLOR" target=_parent class=ISymbol>STYLE_LABEL_BORDERCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undLABEL_undPADDING><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_LABEL_PADDING" target=_parent class=ISymbol>STYLE_LABEL_PADDING</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undLABEL_undPOSITION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_LABEL_POSITION" target=_parent class=ISymbol>STYLE_LABEL_POSITION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undLABEL_undWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_LABEL_WIDTH" target=_parent class=ISymbol>STYLE_LABEL_WIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undLOOP><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_LOOP" target=_parent class=ISymbol>STYLE_LOOP</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undMARGIN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_MARGIN" target=_parent class=ISymbol>STYLE_MARGIN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undMOVABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_MOVABLE" target=_parent class=ISymbol>STYLE_MOVABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undNOEDGESTYLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_NOEDGESTYLE" target=_parent class=ISymbol>STYLE_NOEDGESTYLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undNOLABEL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_NOLABEL" target=_parent class=ISymbol>STYLE_NOLABEL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undOPACITY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_OPACITY" target=_parent class=ISymbol>STYLE_OPACITY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undORTHOGONAL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ORTHOGONAL" target=_parent class=ISymbol>STYLE_ORTHOGONAL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undORTHOGONAL_undLOOP><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ORTHOGONAL_LOOP" target=_parent class=ISymbol>STYLE_ORTHOGONAL_LOOP</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undOVERFLOW><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_OVERFLOW" target=_parent class=ISymbol>STYLE_OVERFLOW</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undPERIMETER><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_PERIMETER" target=_parent class=ISymbol>STYLE_PERIMETER</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undPERIMETER_undSPACING><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_PERIMETER_SPACING" target=_parent class=ISymbol>STYLE_PERIMETER_SPACING</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undPOINTER_undEVENTS><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_POINTER_EVENTS" target=_parent class=ISymbol>STYLE_POINTER_EVENTS</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undPORT_undCONSTRAINT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_PORT_CONSTRAINT" target=_parent class=ISymbol>STYLE_PORT_CONSTRAINT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undPORT_undCONSTRAINT_undROTATION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_PORT_CONSTRAINT_ROTATION" target=_parent class=ISymbol>STYLE_PORT_CONSTRAINT_ROTATION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undRESIZABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_RESIZABLE" target=_parent class=ISymbol>STYLE_RESIZABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undRESIZE_undWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_RESIZE_WIDTH" target=_parent class=ISymbol>STYLE_RESIZE_WIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undROTATABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ROTATABLE" target=_parent class=ISymbol>STYLE_ROTATABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undROTATION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ROTATION" target=_parent class=ISymbol>STYLE_ROTATION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undROUNDED><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ROUNDED" target=_parent class=ISymbol>STYLE_ROUNDED</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undROUTING_undCENTER_undX><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ROUTING_CENTER_X" target=_parent class=ISymbol>STYLE_ROUTING_CENTER_X</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undROUTING_undCENTER_undY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ROUTING_CENTER_Y" target=_parent class=ISymbol>STYLE_ROUTING_CENTER_Y</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSEGMENT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SEGMENT" target=_parent class=ISymbol>STYLE_SEGMENT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSEPARATORCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SEPARATORCOLOR" target=_parent class=ISymbol>STYLE_SEPARATORCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSHADOW><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SHADOW" target=_parent class=ISymbol>STYLE_SHADOW</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSHAPE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SHAPE" target=_parent class=ISymbol>STYLE_SHAPE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSOURCE_undJETTY_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SOURCE_JETTY_SIZE" target=_parent class=ISymbol>STYLE_SOURCE_JETTY_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSOURCE_undPERIMETER_undSPACING><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SOURCE_PERIMETER_SPACING" target=_parent class=ISymbol>STYLE_SOURCE_PERIMETER_SPACING</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSOURCE_undPORT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SOURCE_PORT" target=_parent class=ISymbol>STYLE_SOURCE_PORT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSOURCE_undPORT_undCONSTRAINT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SOURCE_PORT_CONSTRAINT" target=_parent class=ISymbol>STYLE_SOURCE_PORT_CONSTRAINT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSPACING><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SPACING" target=_parent class=ISymbol>STYLE_SPACING</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSPACING_undBOTTOM><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SPACING_BOTTOM" target=_parent class=ISymbol>STYLE_SPACING_BOTTOM</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSPACING_undLEFT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SPACING_LEFT" target=_parent class=ISymbol>STYLE_SPACING_LEFT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSPACING_undRIGHT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SPACING_RIGHT" target=_parent class=ISymbol>STYLE_SPACING_RIGHT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSPACING_undTOP><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SPACING_TOP" target=_parent class=ISymbol>STYLE_SPACING_TOP</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSTARTARROW><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_STARTARROW" target=_parent class=ISymbol>STYLE_STARTARROW</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSTARTFILL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_STARTFILL" target=_parent class=ISymbol>STYLE_STARTFILL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSTARTSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_STARTSIZE" target=_parent class=ISymbol>STYLE_STARTSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSTROKE_undOPACITY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_STROKE_OPACITY" target=_parent class=ISymbol>STYLE_STROKE_OPACITY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSTROKECOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_STROKECOLOR" target=_parent class=ISymbol>STYLE_STROKECOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSTROKEWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_STROKEWIDTH" target=_parent class=ISymbol>STYLE_STROKEWIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSWIMLANE_undFILLCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SWIMLANE_FILLCOLOR" target=_parent class=ISymbol>STYLE_SWIMLANE_FILLCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSWIMLANE_undLINE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SWIMLANE_LINE" target=_parent class=ISymbol>STYLE_SWIMLANE_LINE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undTARGET_undPERIMETER_undSPACING><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_TARGET_PERIMETER_SPACING" target=_parent class=ISymbol>STYLE_TARGET_PERIMETER_SPACING</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undTARGET_undPORT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_TARGET_PORT" target=_parent class=ISymbol>STYLE_TARGET_PORT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undTARGET_undPORT_undCONSTRAINT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_TARGET_PORT_CONSTRAINT" target=_parent class=ISymbol>STYLE_TARGET_PORT_CONSTRAINT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undTEXT_undDIRECTION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_TEXT_DIRECTION" target=_parent class=ISymbol>STYLE_TEXT_DIRECTION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undTEXT_undOPACITY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_TEXT_OPACITY" target=_parent class=ISymbol>STYLE_TEXT_OPACITY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undVERTICAL_undALIGN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_VERTICAL_ALIGN" target=_parent class=ISymbol>STYLE_VERTICAL_ALIGN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undVERTICAL_undLABEL_undPOSITION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_VERTICAL_LABEL_POSITION" target=_parent class=ISymbol>STYLE_VERTICAL_LABEL_POSITION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undWHITE_undSPACE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_WHITE_SPACE" target=_parent class=ISymbol>STYLE_WHITE_SPACE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_styleEnabled><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.styleEnabled" target=_parent class=ISymbol>styleEnabled</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_styleForCellChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.styleForCellChanged" target=_parent class=ISymbol>styleForCellChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_styles><div class=IEntry><a href="../files/view/mxStylesheet-js.html#mxStylesheet.styles" target=_parent class=ISymbol>styles</a>, <span class=IParent>mxStylesheet</span></div></div><div class=SRResult id=SR_stylesheet><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.stylesheet" target=_parent class=ISymbol>stylesheet</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_submenuImage><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.submenuImage" target=_parent class=ISymbol>submenuImage</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_submit><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.submit" target=_parent class=ISymbol>submit</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_suspend><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.suspend" target=_parent class=ISymbol>suspend</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR2_SUSPEND><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.SUSPEND" target=_parent class=ISymbol>SUSPEND</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_suspended><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.suspended" target=_parent class=ISymbol>suspended</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_svgPointerEvents><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.svgPointerEvents" target=_parent class=ISymbol>svgPointerEvents</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_svgStrokeTolerance><div class=IEntry><a href="javascript:searchResults.Toggle('SR_svgStrokeTolerance')" class=ISymbol>svgStrokeTolerance</a><div class=ISubIndex><a href="../files/shape/mxCylinder-js.html#mxCylinder.svgStrokeTolerance" target=_parent class=IParent>mxCylinder</a><a href="../files/shape/mxShape-js.html#mxShape.svgStrokeTolerance" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_swap><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.swap" target=_parent class=ISymbol>swap</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_swapBounds><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.swapBounds" target=_parent class=ISymbol>swapBounds</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_swapStyles><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.swapStyles" target=_parent class=ISymbol>swapStyles</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_swimlaneAdded><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.swimlaneAdded" target=_parent class=ISymbol>swimlaneAdded</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_swimlaneIndicatorColorAttribute><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.swimlaneIndicatorColorAttribute" target=_parent class=ISymbol>swimlaneIndicatorColorAttribute</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_swimlaneNesting><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.swimlaneNesting" target=_parent class=ISymbol>swimlaneNesting</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_swimlaneRequired><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.swimlaneRequired" target=_parent class=ISymbol>swimlaneRequired</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_swimlanes><div class=IEntry><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.swimlanes" target=_parent class=ISymbol>swimlanes</a>, <span class=IParent>mxSwimlaneLayout</span></div></div><div class=SRResult id=SR_swimlaneSelectionEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.swimlaneSelectionEnabled" target=_parent class=ISymbol>swimlaneSelectionEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_swimlaneSpacing><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.swimlaneSpacing" target=_parent class=ISymbol>swimlaneSpacing</a>, <span class=IParent>mxEditor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralT.html b/docs/js-api/search/GeneralT.html
index a8976748a..c379694c3 100644
--- a/docs/js-api/search/GeneralT.html
+++ b/docs/js-api/search/GeneralT.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_table><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.table" target=_parent class=ISymbol>table</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_TAP_undAND_undHOLD><div class=IEntry><a href="javascript:searchResults.Toggle('SR_TAP_undAND_undHOLD')" class=ISymbol>TAP_AND_HOLD</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.TAP_AND_HOLD" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.TAP_AND_HOLD" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_tapAndHold><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.tapAndHold" target=_parent class=ISymbol>tapAndHold</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_tapAndHoldDelay><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.tapAndHoldDelay" target=_parent class=ISymbol>tapAndHoldDelay</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_tapAndHoldEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.tapAndHoldEnabled" target=_parent class=ISymbol>tapAndHoldEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_tapAndHoldInProgress><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.tapAndHoldInProgress" target=_parent class=ISymbol>tapAndHoldInProgress</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_tapAndHoldValid><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.tapAndHoldValid" target=_parent class=ISymbol>tapAndHoldValid</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_target><div class=IEntry><a href="javascript:searchResults.Toggle('SR_target')" class=ISymbol>target</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.target" target=_parent class=IParent>mxCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.target" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.target" target=_parent class=IParent>mxKeyHandler</a></div></div></div><div class=SRResult id=SR_TARGET_undHIGHLIGHT_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.TARGET_HIGHLIGHT_COLOR" target=_parent class=ISymbol>TARGET_HIGHLIGHT_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_targetConnectImage><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.targetConnectImage" target=_parent class=ISymbol>targetConnectImage</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_targetJettySize><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.targetJettySize" target=_parent class=ISymbol>targetJettySize</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_targetPoint><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.targetPoint" target=_parent class=ISymbol>targetPoint</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_targetWindow><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.targetWindow" target=_parent class=ISymbol>targetWindow</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_tasks><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.tasks" target=_parent class=ISymbol>tasks</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_tasksResource><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.tasksResource" target=_parent class=ISymbol>tasksResource</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_tasksTop><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.tasksTop" target=_parent class=ISymbol>tasksTop</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_tasksWindowImage><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.tasksWindowImage" target=_parent class=ISymbol>tasksWindowImage</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_temp><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.temp" target=_parent class=ISymbol>temp</a>, <span class=IParent>mxGraphAbstractHierarchyCell</span></div></div><div class=SRResult id=SR_temperature><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.temperature" target=_parent class=ISymbol>temperature</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_template><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.template" target=_parent class=ISymbol>template</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_templates><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.templates" target=_parent class=ISymbol>templates</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR2_Templates><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.Templates" target=_parent class=ISymbol>Templates</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_terminalDistance><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.terminalDistance" target=_parent class=ISymbol>terminalDistance</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_terminalForCellChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.terminalForCellChanged" target=_parent class=ISymbol>terminalForCellChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_text><div class=IEntry><a href="javascript:searchResults.Toggle('SR_text')" class=ISymbol>text</a><div class=ISubIndex><a href="../files/view/mxCellState-js.html#mxCellState.text" target=_parent class=IParent>mxCellState</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.text" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.text" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.text" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_TEXT_undDIRECTION_undAUTO><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.TEXT_DIRECTION_AUTO" target=_parent class=ISymbol>TEXT_DIRECTION_AUTO</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_TEXT_undDIRECTION_undDEFAULT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.TEXT_DIRECTION_DEFAULT" target=_parent class=ISymbol>TEXT_DIRECTION_DEFAULT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_TEXT_undDIRECTION_undLTR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.TEXT_DIRECTION_LTR" target=_parent class=ISymbol>TEXT_DIRECTION_LTR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_TEXT_undDIRECTION_undRTL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.TEXT_DIRECTION_RTL" target=_parent class=ISymbol>TEXT_DIRECTION_RTL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_textarea><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.textarea" target=_parent class=ISymbol>textarea</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_textEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_textEnabled')" class=ISymbol>textEnabled</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.textEnabled" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.textEnabled" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.textEnabled" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_textNode><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.textNode" target=_parent class=ISymbol>textNode</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_textOffset><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.textOffset" target=_parent class=ISymbol>textOffset</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_textWidthPadding><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.textWidthPadding" target=_parent class=ISymbol>textWidthPadding</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_thread><div class=IEntry><a href="../files/util/mxAnimation-js.html#mxAnimation.thread" target=_parent class=ISymbol>thread</a>, <span class=IParent>mxAnimation</span></div></div><div class=SRResult id=SR_tightenToSource><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tightenToSource')" class=ISymbol>tightenToSource</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.tightenToSource" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.tightenToSource" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.tightenToSource" target=_parent class=IParent>mxSwimlaneLayout</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.tightenToSource" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_timerAutoScroll><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.timerAutoScroll" target=_parent class=ISymbol>timerAutoScroll</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_title><div class=IEntry><a href="javascript:searchResults.Toggle('SR_title')" class=ISymbol>title</a><div class=ISubIndex><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.title" target=_parent class=IParent>mxPrintPreview</a><a href="../files/util/mxWindow-js.html#mxWindow.title" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_toDegree><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.toDegree" target=_parent class=ISymbol>toDegree</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_TOGGLE_undCELLS><div class=IEntry><a href="javascript:searchResults.Toggle('SR_TOGGLE_undCELLS')" class=ISymbol>TOGGLE_CELLS</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.TOGGLE_CELLS" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.TOGGLE_CELLS" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_toggleCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.toggleCells" target=_parent class=ISymbol>toggleCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_toggleCellStyle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.toggleCellStyle" target=_parent class=ISymbol>toggleCellStyle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_toggleCellStyleFlags><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.toggleCellStyleFlags" target=_parent class=ISymbol>toggleCellStyleFlags</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_toggleCellStyles><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.toggleCellStyles" target=_parent class=ISymbol>toggleCellStyles</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_tolerance><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tolerance')" class=ISymbol>tolerance</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.tolerance" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.tolerance" target=_parent class=IParent>mxGraph</a><a href="../files/util/mxGuide-js.html#mxGuide.tolerance" target=_parent class=IParent>mxGuide</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.tolerance" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_toolbar><div class=IEntry><a href="javascript:searchResults.Toggle('SR_toolbar')" class=ISymbol>toolbar</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.toolbar" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/editor/mxEditor-js.html#mxEditor.toolbar" target=_parent class=IParent>mxEditor</a></div></div></div><div class=SRResult id=SR_tooltip><div class=IEntry><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.tooltip" target=_parent class=ISymbol>tooltip</a>, <span class=IParent>mxCellOverlay</span></div></div><div class=SRResult id=SR_TOOLTIP_undVERTICAL_undOFFSET><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.TOOLTIP_VERTICAL_OFFSET" target=_parent class=ISymbol>TOOLTIP_VERTICAL_OFFSET</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_TopToBottom><div class=IEntry><a href="../files/view/mxEdgeStyle-js.html#mxEdgeStyle.TopToBottom" target=_parent class=ISymbol>TopToBottom</a>, <span class=IParent>mxEdgeStyle</span></div></div><div class=SRResult id=SR_toRadians><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.toRadians" target=_parent class=ISymbol>toRadians</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_toString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_toString')" class=ISymbol>toString</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.toString" target=_parent class=IParent>mxCellOverlay</a><a href="../files/util/mxUtils-js.html#mxUtils.toString" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_TRACE><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.TRACE" target=_parent class=ISymbol>TRACE</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_transformControlPoint><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.transformControlPoint" target=_parent class=ISymbol>transformControlPoint</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_translate><div class=IEntry><a href="javascript:searchResults.Toggle('SR_translate')" class=ISymbol>translate</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.translate" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/model/mxGeometry-js.html#mxGeometry.translate" target=_parent class=IParent>mxGeometry</a><a href="../files/view/mxGraphView-js.html#mxGraphView.translate" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.translate" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR2_TRANSLATE><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_TRANSLATE')" class=ISymbol>TRANSLATE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.TRANSLATE" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraphView-js.html#mxGraphView.mxEvent.TRANSLATE" target=_parent class=IParent>mxGraphView.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_TRANSLATE_undCONTROL_undPOINTS><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.TRANSLATE_CONTROL_POINTS" target=_parent class=ISymbol>TRANSLATE_CONTROL_POINTS</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_translateCell><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.translateCell" target=_parent class=ISymbol>translateCell</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_translateState><div class=IEntry><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.translateState" target=_parent class=ISymbol>translateState</a>, <span class=IParent>mxCellStatePreview</span></div></div><div class=SRResult id=SR_translateToScrollPosition><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.translateToScrollPosition" target=_parent class=ISymbol>translateToScrollPosition</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_transpose><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.transpose" target=_parent class=ISymbol>transpose</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_traverse><div class=IEntry><a href="javascript:searchResults.Toggle('SR_traverse')" class=ISymbol>traverse</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.traverse" target=_parent class=IParent>mxGraph</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.traverse" target=_parent class=IParent>mxGraphLayout</a></div></div></div><div class=SRResult id=SR_traverseAncestors><div class=IEntry><a href="javascript:searchResults.Toggle('SR_traverseAncestors')" class=ISymbol>traverseAncestors</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.traverseAncestors" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.traverseAncestors" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_treeLayout><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.treeLayout" target=_parent class=ISymbol>treeLayout</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_TrianglePerimeter><div class=IEntry><a href="../files/view/mxPerimeter-js.html#mxPerimeter.TrianglePerimeter" target=_parent class=ISymbol>TrianglePerimeter</a>, <span class=IParent>mxPerimeter</span></div></div><div class=SRResult id=SR_trigger><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.trigger" target=_parent class=ISymbol>trigger</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_triggerX><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.triggerX" target=_parent class=ISymbol>triggerX</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_triggerY><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.triggerY" target=_parent class=ISymbol>triggerY</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_trim><div class=IEntry><a href="javascript:searchResults.Toggle('SR_trim')" class=ISymbol>trim</a><div class=ISubIndex><a href="../files/util/mxUndoManager-js.html#mxUndoManager.trim" target=_parent class=IParent>mxUndoManager</a><a href="../files/util/mxUtils-js.html#mxUtils.trim" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_type><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.type" target=_parent class=ISymbol>type</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_typeError><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.typeError" target=_parent class=ISymbol>typeError</a>, <span class=IParent>mxMultiplicity</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralU.html b/docs/js-api/search/GeneralU.html
index a32da3e66..32fda6649 100644
--- a/docs/js-api/search/GeneralU.html
+++ b/docs/js-api/search/GeneralU.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_undo><div class=IEntry><a href="javascript:searchResults.Toggle('SR_undo')" class=ISymbol>undo</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.undo" target=_parent class=IParent>mxEditor</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.undo" target=_parent class=IParent>mxUndoableEdit</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.undo" target=_parent class=IParent>mxUndoManager</a></div></div></div><div class=SRResult id=SR2_UNDO><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_UNDO')" class=ISymbol>UNDO</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.UNDO" target=_parent class=IParent>mxEvent</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.mxEvent.UNDO" target=_parent class=IParent>mxGraphModel.<wbr>mxEvent</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.mxEvent.UNDO" target=_parent class=IParent>mxGraphSelectionModel.<wbr>mxEvent</a><a href="../files/view/mxGraphView-js.html#mxGraphView.mxEvent.UNDO" target=_parent class=IParent>mxGraphView.<wbr>mxEvent</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.mxEvent.UNDO" target=_parent class=IParent>mxUndoManager.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_undoableEditHappened><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.undoableEditHappened" target=_parent class=ISymbol>undoableEditHappened</a>, <span class=IParent>mxUndoManager</span></div></div><div class=SRResult id=SR_undoHandler><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.undoHandler" target=_parent class=ISymbol>undoHandler</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_undoManager><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.undoManager" target=_parent class=ISymbol>undoManager</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_undone><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.undone" target=_parent class=ISymbol>undone</a>, <span class=IParent>mxUndoableEdit</span></div></div><div class=SRResult id=SR_UNGROUP_undCELLS><div class=IEntry><a href="javascript:searchResults.Toggle('SR_UNGROUP_undCELLS')" class=ISymbol>UNGROUP_CELLS</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.UNGROUP_CELLS" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.UNGROUP_CELLS" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_ungroupCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.ungroupCells" target=_parent class=ISymbol>ungroupCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_union><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.union" target=_parent class=ISymbol>union</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_unmark><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.unmark" target=_parent class=ISymbol>unmark</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_unscaledHeight><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.unscaledHeight" target=_parent class=ISymbol>unscaledHeight</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_unscaledWidth><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.unscaledWidth" target=_parent class=ISymbol>unscaledWidth</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_UP><div class=IEntry><a href="javascript:searchResults.Toggle('SR_UP')" class=ISymbol>UP</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.UP" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraphView-js.html#mxGraphView.mxEvent.DOWN_and_mxEvent.UP" target=_parent class=IParent>mxGraphView.<wbr>mxEvent.<wbr>DOWN and mxEvent</a></div></div></div><div class=SRResult id=SR_update><div class=IEntry><a href="javascript:searchResults.Toggle('SR_update')" class=ISymbol>update</a><div class=ISubIndex><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.update" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/view/mxOutline-js.html#mxOutline.update" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.update" target=_parent class=IParent>mxRubberband</a></div></div></div><div class=SRResult id=SR_UPDATE_undCELL_undSIZE><div class=IEntry><a href="javascript:searchResults.Toggle('SR_UPDATE_undCELL_undSIZE')" class=ISymbol>UPDATE_CELL_SIZE</a><div class=ISubIndex><a href="../files/util/mxEvent-js.html#mxEvent.UPDATE_CELL_SIZE" target=_parent class=IParent>mxEvent</a><a href="../files/view/mxGraph-js.html#mxGraph.mxEvent.UPDATE_CELL_SIZE" target=_parent class=IParent>mxGraph.<wbr>mxEvent</a></div></div></div><div class=SRResult id=SR_updateAlternateBounds><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.updateAlternateBounds" target=_parent class=ISymbol>updateAlternateBounds</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_updateAnimation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateAnimation')" class=ISymbol>updateAnimation</a><div class=ISubIndex><a href="../files/util/mxAnimation-js.html#mxAnimation.updateAnimation" target=_parent class=IParent>mxAnimation</a><a href="../files/util/mxMorphing-js.html#mxMorphing.updateAnimation" target=_parent class=IParent>mxMorphing</a></div></div></div><div class=SRResult id=SR_updateBaseUrl><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.updateBaseUrl" target=_parent class=ISymbol>updateBaseUrl</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_updateBoundingBox><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateBoundingBox')" class=ISymbol>updateBoundingBox</a><div class=ISubIndex><a href="../files/shape/mxConnector-js.html#mxConnector.updateBoundingBox" target=_parent class=IParent>mxConnector</a><a href="../files/shape/mxShape-js.html#mxShape.updateBoundingBox" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.updateBoundingBox" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_updateBoundsFromPoints><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.updateBoundsFromPoints" target=_parent class=ISymbol>updateBoundsFromPoints</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_updateBoundsFromStencil><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateBoundsFromStencil" target=_parent class=ISymbol>updateBoundsFromStencil</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateCachedBounds><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.updateCachedBounds" target=_parent class=ISymbol>updateCachedBounds</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_updateCellSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.updateCellSize" target=_parent class=ISymbol>updateCellSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_updateCellState><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateCellState" target=_parent class=ISymbol>updateCellState</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateContainerStyle><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateContainerStyle" target=_parent class=ISymbol>updateContainerStyle</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateCurrentState><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.updateCurrentState" target=_parent class=ISymbol>updateCurrentState</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_updateCursor><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.updateCursor" target=_parent class=ISymbol>updateCursor</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_updateDefaultMode><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.updateDefaultMode" target=_parent class=ISymbol>updateDefaultMode</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_updateEdgeBounds><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateEdgeBounds" target=_parent class=ISymbol>updateEdgeBounds</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateEdgeLabelOffset><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateEdgeLabelOffset" target=_parent class=ISymbol>updateEdgeLabelOffset</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateEdgeParent><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.updateEdgeParent" target=_parent class=ISymbol>updateEdgeParent</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_updateEdgeParents><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.updateEdgeParents" target=_parent class=ISymbol>updateEdgeParents</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_updateEdgeState><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateEdgeState')" class=ISymbol>updateEdgeState</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.updateEdgeState" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/view/mxGraphView-js.html#mxGraphView.updateEdgeState" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_updateElements><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.updateElements" target=_parent class=ISymbol>updateElements</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_updateFill><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.updateFill" target=_parent class=ISymbol>updateFill</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_updateFixedTerminalPoint><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateFixedTerminalPoint" target=_parent class=ISymbol>updateFixedTerminalPoint</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateFixedTerminalPoints><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateFixedTerminalPoints" target=_parent class=ISymbol>updateFixedTerminalPoints</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateFloatingTerminalPoint><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateFloatingTerminalPoint" target=_parent class=ISymbol>updateFloatingTerminalPoint</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateFloatingTerminalPoints><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateFloatingTerminalPoints" target=_parent class=ISymbol>updateFloatingTerminalPoints</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateFont><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateFont')" class=ISymbol>updateFont</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.updateFont" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/shape/mxText-js.html#mxText.updateFont" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_updateGroupBounds><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateGroupBounds')" class=ISymbol>updateGroupBounds</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.updateGroupBounds" target=_parent class=IParent>mxGraph</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.updateGroupBounds" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_updateHandler><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.updateHandler" target=_parent class=ISymbol>updateHandler</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_updateHint><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateHint')" class=ISymbol>updateHint</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.updateHint" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.updateHint" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.updateHint" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_updateHtmlBounds><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.updateHtmlBounds" target=_parent class=ISymbol>updateHtmlBounds</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_updateHtmlCanvasSize><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateHtmlCanvasSize" target=_parent class=ISymbol>updateHtmlCanvasSize</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateHtmlColors><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.updateHtmlColors" target=_parent class=ISymbol>updateHtmlColors</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_updateHtmlFilter><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.updateHtmlFilter" target=_parent class=ISymbol>updateHtmlFilter</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_updateHtmlFilters><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.updateHtmlFilters" target=_parent class=ISymbol>updateHtmlFilters</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_updateHtmlTransform><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.updateHtmlTransform" target=_parent class=ISymbol>updateHtmlTransform</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_updateIcons><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.updateIcons" target=_parent class=ISymbol>updateIcons</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_updateInnerHtml><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.updateInnerHtml" target=_parent class=ISymbol>updateInnerHtml</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_updateLevel><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.updateLevel" target=_parent class=ISymbol>updateLevel</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_updateLivePreview><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateLivePreview')" class=ISymbol>updateLivePreview</a><div class=ISubIndex><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.updateLivePreview" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.updateLivePreview" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_updateMinBounds><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.updateMinBounds" target=_parent class=ISymbol>updateMinBounds</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_updateMouseEvent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.updateMouseEvent" target=_parent class=ISymbol>updateMouseEvent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_updateOnPan><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.updateOnPan" target=_parent class=ISymbol>updateOnPan</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_updatePageBreaks><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.updatePageBreaks" target=_parent class=ISymbol>updatePageBreaks</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_updateParentGeometry><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.updateParentGeometry" target=_parent class=ISymbol>updateParentGeometry</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_updateParentHighlight><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateParentHighlight')" class=ISymbol>updateParentHighlight</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.updateParentHighlight" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.updateParentHighlight" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_updatePoints><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updatePoints" target=_parent class=ISymbol>updatePoints</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updatePreview><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.updatePreview" target=_parent class=ISymbol>updatePreview</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_updatePreviewShape><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.updatePreviewShape" target=_parent class=ISymbol>updatePreviewShape</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_updatePreviewState><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updatePreviewState')" class=ISymbol>updatePreviewState</a><div class=ISubIndex><a href="../files/handler/mxEdgeSegmentHandler-js.html#updatePreviewState" target=_parent class=IParent>Global</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.updatePreviewState" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_updateSelection><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.updateSelection" target=_parent class=ISymbol>updateSelection</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_updateSize><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.updateSize" target=_parent class=ISymbol>updateSize</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_updateStroke><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.updateStroke" target=_parent class=ISymbol>updateStroke</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_updateStrokeAttributes><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.updateStrokeAttributes" target=_parent class=ISymbol>updateStrokeAttributes</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_updateStyle><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateStyle" target=_parent class=ISymbol>updateStyle</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateTransform><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.updateTransform" target=_parent class=ISymbol>updateTransform</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_updateValue><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.updateValue" target=_parent class=ISymbol>updateValue</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_updateVertexLabelOffset><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateVertexLabelOffset" target=_parent class=ISymbol>updateVertexLabelOffset</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateVertexState><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateVertexState" target=_parent class=ISymbol>updateVertexState</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updateVmlContainer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_updateVmlContainer')" class=ISymbol>updateVmlContainer</a><div class=ISubIndex><a href="../files/shape/mxShape-js.html#mxShape.updateVmlContainer" target=_parent class=IParent>mxShape</a><a href="../files/shape/mxText-js.html#mxText.updateVmlContainer" target=_parent class=IParent>mxText</a></div></div></div><div class=SRResult id=SR_updatingDocumentResource><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updatingDocumentResource" target=_parent class=ISymbol>updatingDocumentResource</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updatingSelectionResource><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.updatingSelectionResource" target=_parent class=ISymbol>updatingSelectionResource</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_url><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.url" target=_parent class=ISymbol>url</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_urlHelp><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.urlHelp" target=_parent class=ISymbol>urlHelp</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_urlImage><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.urlImage" target=_parent class=ISymbol>urlImage</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_urlPost><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.urlPost" target=_parent class=ISymbol>urlPost</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_useBoundingBox><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.useBoundingBox" target=_parent class=ISymbol>useBoundingBox</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_useCssTransforms><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.useCssTransforms" target=_parent class=ISymbol>useCssTransforms</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_useGrid><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.useGrid" target=_parent class=ISymbol>useGrid</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_useGuidesForEvent><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.useGuidesForEvent" target=_parent class=ISymbol>useGuidesForEvent</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_useInputOrigin><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.useInputOrigin" target=_parent class=ISymbol>useInputOrigin</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_useLeftButtonForPanning><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.useLeftButtonForPanning" target=_parent class=ISymbol>useLeftButtonForPanning</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_useLeftButtonForPopup><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.useLeftButtonForPopup" target=_parent class=ISymbol>useLeftButtonForPopup</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_usePopupTrigger><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.usePopupTrigger" target=_parent class=ISymbol>usePopupTrigger</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_username><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.username" target=_parent class=ISymbol>username</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_useScrollbarsForPanning><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.useScrollbarsForPanning" target=_parent class=ISymbol>useScrollbarsForPanning</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_useSvgBoundingBox><div class=IEntry><a href="javascript:searchResults.Toggle('SR_useSvgBoundingBox')" class=ISymbol>useSvgBoundingBox</a><div class=ISubIndex><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.useSvgBoundingBox" target=_parent class=IParent>mxArrowConnector</a><a href="../files/shape/mxShape-js.html#mxShape.useSvgBoundingBox" target=_parent class=IParent>mxShape</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralV.html b/docs/js-api/search/GeneralV.html
index 29e525651..9f127a359 100644
--- a/docs/js-api/search/GeneralV.html
+++ b/docs/js-api/search/GeneralV.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_VALID_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.VALID_COLOR" target=_parent class=ISymbol>VALID_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_validate><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.validate" target=_parent class=ISymbol>validate</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_validateBackground><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.validateBackground" target=_parent class=ISymbol>validateBackground</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_validateBackgroundImage><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.validateBackgroundImage" target=_parent class=ISymbol>validateBackgroundImage</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_validateBackgroundPage><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.validateBackgroundPage" target=_parent class=ISymbol>validateBackgroundPage</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_validateCell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_validateCell')" class=ISymbol>validateCell</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.validateCell" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxGraphView-js.html#mxGraphView.validateCell" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_validateCellState><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.validateCellState" target=_parent class=ISymbol>validateCellState</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_validateConnection><div class=IEntry><a href="javascript:searchResults.Toggle('SR_validateConnection')" class=ISymbol>validateConnection</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.validateConnection" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.validateConnection" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_validateEdge><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.validateEdge" target=_parent class=ISymbol>validateEdge</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_validateGraph><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.validateGraph" target=_parent class=ISymbol>validateGraph</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_validating><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.validating" target=_parent class=ISymbol>validating</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_Validation><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.Validation" target=_parent class=ISymbol>Validation</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_validationAlert><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.validationAlert" target=_parent class=ISymbol>validationAlert</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_validColor><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.validColor" target=_parent class=ISymbol>validColor</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_validNeighbors><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.validNeighbors" target=_parent class=ISymbol>validNeighbors</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_validNeighborsAllowed><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.validNeighborsAllowed" target=_parent class=ISymbol>validNeighborsAllowed</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_validState><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.validState" target=_parent class=ISymbol>validState</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_value><div class=IEntry><a href="javascript:searchResults.Toggle('SR_value')" class=ISymbol>value</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.value" target=_parent class=IParent>mxCell</a><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.value" target=_parent class=IParent>mxMultiplicity</a></div></div></div><div class=SRResult id=SR_valueChanged><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.valueChanged" target=_parent class=ISymbol>valueChanged</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_valueForCellChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.valueForCellChanged" target=_parent class=ISymbol>valueForCellChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_values><div class=IEntry><a href="../files/view/mxStyleRegistry-js.html#mxStyleRegistry.values" target=_parent class=ISymbol>values</a>, <span class=IParent>mxStyleRegistry</span></div></div><div class=SRResult id=SR_Variables><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Variables')" class=ISymbol>Variables</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#MedianCellSorter.Variables" target=_parent class=IParent>MedianCellSorter</a><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.Variables" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxAnimation-js.html#mxAnimation.Variables" target=_parent class=IParent>mxAnimation</a><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.Variables" target=_parent class=IParent>mxArrowConnector</a><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.Variables" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/model/mxCell-js.html#mxCell.Variables" target=_parent class=IParent>mxCell</a><a href="../files/view/mxCellEditor-js.html#mxCellEditor.Variables" target=_parent class=IParent>mxCellEditor</a><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.Variables" target=_parent class=IParent>mxCellHighlight</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.Variables" target=_parent class=IParent>mxCellMarker</a><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.Variables" target=_parent class=IParent>mxCellOverlay</a><a href="../files/model/mxCellPath-js.html#mxCellPath.Variables" target=_parent class=IParent>mxCellPath</a><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.Variables" target=_parent class=IParent>mxCellRenderer</a><a href="../files/view/mxCellState-js.html#mxCellState.Variables" target=_parent class=IParent>mxCellState</a><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.Variables" target=_parent class=IParent>mxCellStatePreview</a><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.Variables" target=_parent class=IParent>mxCircleLayout</a><a href="../files/mxClient-js.html#mxClient.Variables" target=_parent class=IParent>mxClient</a><a href="../files/util/mxClipboard-js.html#mxClipboard.Variables" target=_parent class=IParent>mxClipboard</a><a href="../files/io/mxCodec-js.html#mxCodec.Variables" target=_parent class=IParent>mxCodec</a><a href="../files/io/mxCodecRegistry-js.html#mxCodecRegistry.Variables" target=_parent class=IParent>mxCodecRegistry</a><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.Variables" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxCompositeLayout-js.html#mxCompositeLayout.Variables" target=_parent class=IParent>mxCompositeLayout</a><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint.Variables" target=_parent class=IParent>mxConnectionConstraint</a><a href="../files/util/mxConstants-js.html#mxConstants.Variables" target=_parent class=IParent>mxConstants</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.Variables" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.Variables" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/shape/mxCylinder-js.html#mxCylinder.Variables" target=_parent class=IParent>mxCylinder</a><a href="../files/editor/mxDefaultKeyHandler-js.html#mxDefaultKeyHandler.Variables" target=_parent class=IParent>mxDefaultKeyHandler</a><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.Variables" target=_parent class=IParent>mxDefaultPopupMenu</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.Variables" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/io/mxDefaultToolbarCodec-js.html#mxDefaultToolbarCodec.Variables" target=_parent class=IParent>mxDefaultToolbarCodec</a><a href="../files/shape/mxDoubleEllipse-js.html#mxDoubleEllipse.Variables" target=_parent class=IParent>mxDoubleEllipse</a><a href="../files/util/mxDragSource-js.html#mxDragSource.Variables" target=_parent class=IParent>mxDragSource</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.Variables" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.Variables" target=_parent class=IParent>mxElbowEdgeHandler</a><a href="../files/util/mxEvent-js.html#mxEvent.Variables" target=_parent class=IParent>mxEvent</a><a href="../files/util/mxEventObject-js.html#mxEventObject.Variables" target=_parent class=IParent>mxEventObject</a><a href="../files/util/mxEventSource-js.html#mxEventSource.Variables" target=_parent class=IParent>mxEventSource</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.Variables" target=_parent class=IParent>mxFastOrganicLayout</a><a href="../files/util/mxForm-js.html#mxForm.Variables" target=_parent class=IParent>mxForm</a><a href="../files/model/mxGeometry-js.html#mxGeometry.Variables" target=_parent class=IParent>mxGeometry</a><a href="../files/view/mxGraph-js.html#mxGraph.Variables" target=_parent class=IParent>mxGraph</a><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.Variables" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.Variables" target=_parent class=IParent>mxGraphHandler</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.Variables" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.Variables" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.Variables" target=_parent class=IParent>mxGraphHierarchyNode</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.Variables" target=_parent class=IParent>mxGraphLayout</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.Variables" target=_parent class=IParent>mxGraphModel</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.Variables" target=_parent class=IParent>mxGraphSelectionModel</a><a href="../files/view/mxGraphView-js.html#mxGraphView.Variables" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxGuide-js.html#mxGuide.Variables" target=_parent class=IParent>mxGuide</a><a href="../files/handler/mxHandle-js.html#mxHandle.Variables" target=_parent class=IParent>mxHandle</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.Variables" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/util/mxImage-js.html#mxImage.Variables" target=_parent class=IParent>mxImage</a><a href="../files/util/mxImageBundle-js.html#mxImageBundle.Variables" target=_parent class=IParent>mxImageBundle</a><a href="../files/util/mxImageExport-js.html#mxImageExport.Variables" target=_parent class=IParent>mxImageExport</a><a href="../files/shape/mxImageShape-js.html#mxImageShape.Variables" target=_parent class=IParent>mxImageShape</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.Variables" target=_parent class=IParent>mxKeyHandler</a><a href="../files/shape/mxLabel-js.html#mxLabel.Variables" target=_parent class=IParent>mxLabel</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.Variables" target=_parent class=IParent>mxLayoutManager</a><a href="../files/util/mxLog-js.html#mxLog.Variables" target=_parent class=IParent>mxLog</a><a href="../files/shape/mxMarker-js.html#mxMarker.Variables" target=_parent class=IParent>mxMarker</a><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.Variables" target=_parent class=IParent>mxMedianHybridCrossingReduction</a><a href="../files/layout/hierarchical/stage/mxMinimumCycleRemover-js.html#mxMinimumCycleRemover.Variables" target=_parent class=IParent>mxMinimumCycleRemover</a><a href="../files/util/mxMorphing-js.html#mxMorphing.Variables" target=_parent class=IParent>mxMorphing</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.Variables" target=_parent class=IParent>mxMouseEvent</a><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.Variables" target=_parent class=IParent>mxMultiplicity</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.Variables" target=_parent class=IParent>mxObjectCodec</a><a href="../files/util/mxObjectIdentity-js.html#mxObjectIdentity.Variables" target=_parent class=IParent>mxObjectIdentity</a><a href="../files/view/mxOutline-js.html#mxOutline.Variables" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.Variables" target=_parent class=IParent>mxPanningHandler</a><a href="../files/util/mxPanningManager-js.html#mxPanningManager.Variables" target=_parent class=IParent>mxPanningManager</a><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.Variables" target=_parent class=IParent>mxParallelEdgeLayout</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.Variables" target=_parent class=IParent>mxPartitionLayout</a><a href="../files/util/mxPoint-js.html#mxPoint.Variables" target=_parent class=IParent>mxPoint</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.Variables" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.Variables" target=_parent class=IParent>mxPopupMenuHandler</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.Variables" target=_parent class=IParent>mxPrintPreview</a><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.Variables" target=_parent class=IParent>mxRadialTreeLayout</a><a href="../files/util/mxRectangle-js.html#mxRectangle.Variables" target=_parent class=IParent>mxRectangle</a><a href="../files/util/mxResources-js.html#mxResources.Variables" target=_parent class=IParent>mxResources</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.Variables" target=_parent class=IParent>mxRubberband</a><a href="../files/shape/mxShape-js.html#mxShape.Variables" target=_parent class=IParent>mxShape</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.Variables" target=_parent class=IParent>mxStackLayout</a><a href="../files/shape/mxStencil-js.html#mxStencil.Variables" target=_parent class=IParent>mxStencil</a><a href="../files/view/mxStyleRegistry-js.html#mxStyleRegistry.Variables" target=_parent class=IParent>mxStyleRegistry</a><a href="../files/io/mxStylesheetCodec-js.html#mxStylesheetCodec.Variables" target=_parent class=IParent>mxStylesheetCodec</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.Variables" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.Variables" target=_parent class=IParent>mxSwimlane</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.Variables" target=_parent class=IParent>mxSwimlaneLayout</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.Variables" target=_parent class=IParent>mxSwimlaneManager</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.Variables" target=_parent class=IParent>mxSwimlaneModel</a><a href="../files/layout/hierarchical/stage/mxSwimlaneOrdering-js.html#mxSwimlaneOrdering.Variables" target=_parent class=IParent>mxSwimlaneOrdering</a><a href="../files/view/mxTemporaryCellStates-js.html#mxTemporaryCellStates.Variables" target=_parent class=IParent>mxTemporaryCellStates</a><a href="../files/shape/mxText-js.html#mxText.Variables" target=_parent class=IParent>mxText</a><a href="../files/util/mxToolbar-js.html#mxToolbar.Variables" target=_parent class=IParent>mxToolbar</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.Variables" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.Variables" target=_parent class=IParent>mxUndoableEdit</a><a href="../files/util/mxUndoManager-js.html#mxUndoManager.Variables" target=_parent class=IParent>mxUndoManager</a><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.Variables" target=_parent class=IParent>mxUrlConverter</a><a href="../files/util/mxUtils-js.html#mxUtils.Variables" target=_parent class=IParent>mxUtils</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.Variables" target=_parent class=IParent>mxVertexHandler</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.Variables" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxWindow-js.html#mxWindow.Variables" target=_parent class=IParent>mxWindow</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.Variables" target=_parent class=IParent>mxXmlCanvas2D</a><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.Variables" target=_parent class=IParent>mxXmlRequest</a><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.Variables" target=_parent class=IParent>WeightedCellSorter</a></div></div></div><div class=SRResult id=SR_VERSION><div class=IEntry><a href="../files/mxClient-js.html#mxClient.VERSION" target=_parent class=ISymbol>VERSION</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_vertex><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.vertex" target=_parent class=ISymbol>vertex</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_VERTEX_undSELECTION_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.VERTEX_SELECTION_COLOR" target=_parent class=ISymbol>VERTEX_SELECTION_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_VERTEX_undSELECTION_undSTROKEWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.VERTEX_SELECTION_STROKEWIDTH" target=_parent class=ISymbol>VERTEX_SELECTION_STROKEWIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_vertexArray><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.vertexArray" target=_parent class=ISymbol>vertexArray</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_vertexLabelsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.vertexLabelsMovable" target=_parent class=ISymbol>vertexLabelsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_vertexMapper><div class=IEntry><a href="javascript:searchResults.Toggle('SR_vertexMapper')" class=ISymbol>vertexMapper</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.vertexMapper" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.vertexMapper" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_vertical><div class=IEntry><a href="javascript:searchResults.Toggle('SR_vertical')" class=ISymbol>vertical</a><div class=ISubIndex><a href="../files/util/mxGuide-js.html#mxGuide.vertical" target=_parent class=IParent>mxGuide</a><a href="../files/shape/mxLine-js.html#mxLine.vertical" target=_parent class=IParent>mxLine</a></div></div></div><div class=SRResult id=SR_verticalAlign><div class=IEntry><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.verticalAlign" target=_parent class=ISymbol>verticalAlign</a>, <span class=IParent>mxCellOverlay</span></div></div><div class=SRResult id=SR_verticalLayout><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.verticalLayout" target=_parent class=ISymbol>verticalLayout</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_verticalOffset><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.verticalOffset" target=_parent class=ISymbol>verticalOffset</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_verticalTextRotation><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.verticalTextRotation" target=_parent class=ISymbol>verticalTextRotation</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_view><div class=IEntry><a href="javascript:searchResults.Toggle('SR_view')" class=ISymbol>view</a><div class=ISubIndex><a href="../files/view/mxCellState-js.html#mxCellState.view" target=_parent class=IParent>mxCellState</a><a href="../files/view/mxGraph-js.html#mxGraph.view" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxTemporaryCellStates-js.html#mxTemporaryCellStates.view" target=_parent class=IParent>mxTemporaryCellStates</a></div></div></div><div class=SRResult id=SR_viewStateChanged><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.viewStateChanged" target=_parent class=ISymbol>viewStateChanged</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_VIRTUAL_undHANDLE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.VIRTUAL_HANDLE" target=_parent class=ISymbol>VIRTUAL_HANDLE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_virtualBendOpacity><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.virtualBendOpacity" target=_parent class=ISymbol>virtualBendOpacity</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_virtualBendsEnabled><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.virtualBendsEnabled" target=_parent class=ISymbol>virtualBendsEnabled</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_visible><div class=IEntry><a href="javascript:searchResults.Toggle('SR_visible')" class=ISymbol>visible</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.visible" target=_parent class=IParent>mxCell</a><a href="../files/shape/mxShape-js.html#mxShape.visible" target=_parent class=IParent>mxShape</a><a href="../files/util/mxWindow-js.html#mxWindow.visible" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_visibleSourceState><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.visibleSourceState" target=_parent class=ISymbol>visibleSourceState</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_visibleStateForCellChanged><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.visibleStateForCellChanged" target=_parent class=ISymbol>visibleStateForCellChanged</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_visibleTargetState><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.visibleTargetState" target=_parent class=ISymbol>visibleTargetState</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_visit><div class=IEntry><a href="javascript:searchResults.Toggle('SR_visit')" class=ISymbol>visit</a><div class=ISubIndex><a href="../files/util/mxDictionary-js.html#mxDictionary.visit" target=_parent class=IParent>mxDictionary</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.visit" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.visit" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_visited><div class=IEntry><a href="javascript:searchResults.Toggle('SR_visited')" class=ISymbol>visited</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.visited" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.visited" target=_parent class=IParent>WeightedCellSorter</a></div></div></div><div class=SRResult id=SR_visitStatesRecursive><div class=IEntry><a href="../files/util/mxImageExport-js.html#mxImageExport.visitStatesRecursive" target=_parent class=ISymbol>visitStatesRecursive</a>, <span class=IParent>mxImageExport</span></div></div><div class=SRResult id=SR_VML_undPREFIX><div class=IEntry><a href="../files/mxClient-js.html#mxClient.VML_PREFIX" target=_parent class=ISymbol>VML_PREFIX</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_VML_undSHADOWCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.VML_SHADOWCOLOR" target=_parent class=ISymbol>VML_SHADOWCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_vmlScale><div class=IEntry><a href="javascript:searchResults.Toggle('SR_vmlScale')" class=ISymbol>vmlScale</a><div class=ISubIndex><a href="../files/shape/mxDoubleEllipse-js.html#mxDoubleEllipse.vmlScale" target=_parent class=IParent>mxDoubleEllipse</a><a href="../files/shape/mxShape-js.html#mxShape.vmlScale" target=_parent class=IParent>mxShape</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.vmlScale" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralW.html b/docs/js-api/search/GeneralW.html
index a7cb1bf85..f4406aec0 100644
--- a/docs/js-api/search/GeneralW.html
+++ b/docs/js-api/search/GeneralW.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_w0><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.w0" target=_parent class=ISymbol>w0</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_warn><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.warn" target=_parent class=ISymbol>warn</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR2_WARN><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.WARN" target=_parent class=ISymbol>WARN</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_warningImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.warningImage" target=_parent class=ISymbol>warningImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_waypointsEnabled><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.waypointsEnabled" target=_parent class=ISymbol>waypointsEnabled</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_WeightedCellSorter><div class=IEntry><a href="javascript:searchResults.Toggle('SR_WeightedCellSorter')" class=ISymbol>WeightedCellSorter</a><div class=ISubIndex><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter" target=_parent class=IParent>Global</a><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.WeightedCellSorter" target=_parent class=IParent>WeightedCellSorter</a></div></div></div><div class=SRResult id=SR_weightedMedian><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.weightedMedian" target=_parent class=ISymbol>weightedMedian</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_weightedValue><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.weightedValue" target=_parent class=ISymbol>weightedValue</a>, <span class=IParent>WeightedCellSorter</span></div></div><div class=SRResult id=SR_widestRank><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.widestRank" target=_parent class=ISymbol>widestRank</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_widestRankValue><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.widestRankValue" target=_parent class=ISymbol>widestRankValue</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_width><div class=IEntry><a href="javascript:searchResults.Toggle('SR_width')" class=ISymbol>width</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.width" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/util/mxImage-js.html#mxImage.width" target=_parent class=IParent>mxImage</a><a href="../files/util/mxRectangle-js.html#mxRectangle.width" target=_parent class=IParent>mxRectangle</a></div></div></div><div class=SRResult id=SR_Windows><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.Windows" target=_parent class=ISymbol>Windows</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_withCredentials><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.withCredentials" target=_parent class=ISymbol>withCredentials</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_wnd><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.wnd" target=_parent class=ISymbol>wnd</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_WORD_undWRAP><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.WORD_WRAP" target=_parent class=ISymbol>WORD_WRAP</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_wordWrapPadding><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.wordWrapPadding" target=_parent class=ISymbol>wordWrapPadding</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_wrap><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.wrap" target=_parent class=ISymbol>wrap</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_write><div class=IEntry><a href="javascript:searchResults.Toggle('SR_write')" class=ISymbol>write</a><div class=ISubIndex><a href="../files/util/mxLog-js.html#mxLog.write" target=_parent class=IParent>mxLog</a><a href="../files/util/mxUtils-js.html#mxUtils.write" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_writeAttribute><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.writeAttribute" target=_parent class=ISymbol>writeAttribute</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_writeComplexAttribute><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.writeComplexAttribute" target=_parent class=ISymbol>writeComplexAttribute</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_writeDefaults><div class=IEntry><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.writeDefaults" target=_parent class=ISymbol>writeDefaults</a>, <span class=IParent>mxXmlCanvas2D</span></div></div><div class=SRResult id=SR_writeGraphModel><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.writeGraphModel" target=_parent class=ISymbol>writeGraphModel</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_writeHead><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.writeHead" target=_parent class=ISymbol>writeHead</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_writeln><div class=IEntry><a href="javascript:searchResults.Toggle('SR_writeln')" class=ISymbol>writeln</a><div class=ISubIndex><a href="../files/util/mxLog-js.html#mxLog.writeln" target=_parent class=IParent>mxLog</a><a href="../files/util/mxUtils-js.html#mxUtils.writeln" target=_parent class=IParent>mxUtils</a></div></div></div><div class=SRResult id=SR_writePostfix><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.writePostfix" target=_parent class=ISymbol>writePostfix</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_writePrimitiveAttribute><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.writePrimitiveAttribute" target=_parent class=ISymbol>writePrimitiveAttribute</a>, <span class=IParent>mxObjectCodec</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralX.html b/docs/js-api/search/GeneralX.html
index 2fe36ecb4..b177fe9be 100644
--- a/docs/js-api/search/GeneralX.html
+++ b/docs/js-api/search/GeneralX.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_x><div class=IEntry><a href="javascript:searchResults.Toggle('SR_x')" class=ISymbol>x</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.x" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/util/mxPoint-js.html#mxPoint.x" target=_parent class=IParent>mxPoint</a></div></div></div><div class=SRResult id=SR_x0><div class=IEntry><a href="javascript:searchResults.Toggle('SR_x0')" class=ISymbol>x0</a><div class=ISubIndex><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.x0" target=_parent class=IParent>mxCircleLayout</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.x0" target=_parent class=IParent>mxPrintPreview</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.x0" target=_parent class=IParent>mxStackLayout</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralY.html b/docs/js-api/search/GeneralY.html
index d807c16c0..fecd55fae 100644
--- a/docs/js-api/search/GeneralY.html
+++ b/docs/js-api/search/GeneralY.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_y><div class=IEntry><a href="javascript:searchResults.Toggle('SR_y')" class=ISymbol>y</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.y" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/util/mxPoint-js.html#mxPoint.y" target=_parent class=IParent>mxPoint</a></div></div></div><div class=SRResult id=SR_y0><div class=IEntry><a href="javascript:searchResults.Toggle('SR_y0')" class=ISymbol>y0</a><div class=ISubIndex><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.y0" target=_parent class=IParent>mxCircleLayout</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.y0" target=_parent class=IParent>mxPrintPreview</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.y0" target=_parent class=IParent>mxStackLayout</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/GeneralZ.html b/docs/js-api/search/GeneralZ.html
index b85b2afd5..72da18975 100644
--- a/docs/js-api/search/GeneralZ.html
+++ b/docs/js-api/search/GeneralZ.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zIndex><div class=IEntry><a href="javascript:searchResults.Toggle('SR_zIndex')" class=ISymbol>zIndex</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.zIndex" target=_parent class=IParent>mxCellEditor</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.zIndex" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.zIndex" target=_parent class=IParent>mxTooltipHandler</a></div></div></div><div class=SRResult id=SR_zoom><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.zoom" target=_parent class=ISymbol>zoom</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_zoomActual><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.zoomActual" target=_parent class=ISymbol>zoomActual</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_zoomFactor><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.zoomFactor" target=_parent class=ISymbol>zoomFactor</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_zoomGraph><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.zoomGraph" target=_parent class=ISymbol>zoomGraph</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_zoomIn><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.zoomIn" target=_parent class=ISymbol>zoomIn</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_zoomOut><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.zoomOut" target=_parent class=ISymbol>zoomOut</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_zoomTo><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.zoomTo" target=_parent class=ISymbol>zoomTo</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_zoomToRect><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.zoomToRect" target=_parent class=ISymbol>zoomToRect</a>, <span class=IParent>mxGraph</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesA.html b/docs/js-api/search/VariablesA.html
index 3141021e5..8bd58acd8 100644
--- a/docs/js-api/search/VariablesA.html
+++ b/docs/js-api/search/VariablesA.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_ABSOLUTE_undLINE_undHEIGHT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ABSOLUTE_LINE_HEIGHT" target=_parent class=ISymbol>ABSOLUTE_LINE_HEIGHT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_absoluteOffset><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.absoluteOffset" target=_parent class=ISymbol>absoluteOffset</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_absolutePoints><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.absolutePoints" target=_parent class=ISymbol>absolutePoints</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_actions><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.actions" target=_parent class=ISymbol>actions</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_ACTIVATE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.ACTIVATE" target=_parent class=ISymbol>ACTIVATE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_ADD><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.ADD" target=_parent class=ISymbol>ADD</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_ADD_undCELLS><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.ADD_CELLS" target=_parent class=ISymbol>ADD_CELLS</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_ADD_undOVERLAY><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.ADD_OVERLAY" target=_parent class=ISymbol>ADD_OVERLAY</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_ADD_undVERTEX><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.ADD_VERTEX" target=_parent class=ISymbol>ADD_VERTEX</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_addEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_addEnabled')" class=ISymbol>addEnabled</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.addEnabled" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.addEnabled" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_AFTER_undADD_undVERTEX><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.AFTER_ADD_VERTEX" target=_parent class=ISymbol>AFTER_ADD_VERTEX</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_aliases><div class=IEntry><a href="../files/io/mxCodecRegistry-js.html#mxCodecRegistry.aliases" target=_parent class=ISymbol>aliases</a>, <span class=IParent>mxCodecRegistry</span></div></div><div class=SRResult id=SR_align><div class=IEntry><a href="javascript:searchResults.Toggle('SR_align')" class=ISymbol>align</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.align" target=_parent class=IParent>mxCellEditor</a><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.align" target=_parent class=IParent>mxCellOverlay</a></div></div></div><div class=SRResult id=SR_ALIGN_undBOTTOM><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ALIGN_BOTTOM" target=_parent class=ISymbol>ALIGN_BOTTOM</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ALIGN_undCELLS><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.ALIGN_CELLS" target=_parent class=ISymbol>ALIGN_CELLS</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_ALIGN_undCENTER><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ALIGN_CENTER" target=_parent class=ISymbol>ALIGN_CENTER</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ALIGN_undLEFT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ALIGN_LEFT" target=_parent class=ISymbol>ALIGN_LEFT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ALIGN_undMIDDLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ALIGN_MIDDLE" target=_parent class=ISymbol>ALIGN_MIDDLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ALIGN_undRIGHT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ALIGN_RIGHT" target=_parent class=ISymbol>ALIGN_RIGHT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ALIGN_undTOP><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ALIGN_TOP" target=_parent class=ISymbol>ALIGN_TOP</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_alignRanks><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.alignRanks" target=_parent class=ISymbol>alignRanks</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_allowAutoPanning><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.allowAutoPanning" target=_parent class=ISymbol>allowAutoPanning</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_allowDanglingEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.allowDanglingEdges" target=_parent class=ISymbol>allowDanglingEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_allowedToRun><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.allowedToRun" target=_parent class=ISymbol>allowedToRun</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_allowEval><div class=IEntry><a href="javascript:searchResults.Toggle('SR_allowEval')" class=ISymbol>allowEval</a><div class=ISubIndex><a href="../files/io/mxDefaultToolbarCodec-js.html#mxDefaultToolbarCodec.allowEval" target=_parent class=IParent>mxDefaultToolbarCodec</a><a href="../files/view/mxGraphView-js.html#mxGraphView.allowEval" target=_parent class=IParent>mxGraphView</a><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.allowEval" target=_parent class=IParent>mxObjectCodec</a><a href="../files/io/mxStylesheetCodec-js.html#mxStylesheetCodec.allowEval" target=_parent class=IParent>mxStylesheetCodec</a></div></div></div><div class=SRResult id=SR_allowGaps><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.allowGaps" target=_parent class=ISymbol>allowGaps</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_allowHandleBoundsCheck><div class=IEntry><a href="javascript:searchResults.Toggle('SR_allowHandleBoundsCheck')" class=ISymbol>allowHandleBoundsCheck</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.allowHandleBoundsCheck" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.allowHandleBoundsCheck" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_allowLivePreview><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.allowLivePreview" target=_parent class=ISymbol>allowLivePreview</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_allowLoops><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.allowLoops" target=_parent class=ISymbol>allowLoops</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_allowNegativeCoordinates><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.allowNegativeCoordinates" target=_parent class=ISymbol>allowNegativeCoordinates</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_alreadyConnectedResource><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.alreadyConnectedResource" target=_parent class=ISymbol>alreadyConnectedResource</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_alt><div class=IEntry><a href="../files/util/mxImageBundle-js.html#mxImageBundle.alt" target=_parent class=ISymbol>alt</a>, <span class=IParent>mxImageBundle</span></div></div><div class=SRResult id=SR_alternateBounds><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.alternateBounds" target=_parent class=ISymbol>alternateBounds</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_alternateEdgeStyle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.alternateEdgeStyle" target=_parent class=ISymbol>alternateEdgeStyle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_angleOffset><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.angleOffset" target=_parent class=ISymbol>angleOffset</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_antiAlias><div class=IEntry><a href="javascript:searchResults.Toggle('SR_antiAlias')" class=ISymbol>antiAlias</a><div class=ISubIndex><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.antiAlias" target=_parent class=IParent>mxCellRenderer</a><a href="../files/shape/mxShape-js.html#mxShape.antiAlias" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_ARROW_undBLOCK><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_BLOCK" target=_parent class=ISymbol>ARROW_BLOCK</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undBLOCK_undTHIN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_BLOCK_THIN" target=_parent class=ISymbol>ARROW_BLOCK_THIN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undCLASSIC><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_CLASSIC" target=_parent class=ISymbol>ARROW_CLASSIC</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undCLASSIC_undTHIN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_CLASSIC_THIN" target=_parent class=ISymbol>ARROW_CLASSIC_THIN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undDIAMOND><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_DIAMOND" target=_parent class=ISymbol>ARROW_DIAMOND</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undDIAMOND_undTHIN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_DIAMOND_THIN" target=_parent class=ISymbol>ARROW_DIAMOND_THIN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undOPEN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_OPEN" target=_parent class=ISymbol>ARROW_OPEN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undOPEN_undTHIN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_OPEN_THIN" target=_parent class=ISymbol>ARROW_OPEN_THIN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undOVAL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_OVAL" target=_parent class=ISymbol>ARROW_OVAL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_SIZE" target=_parent class=ISymbol>ARROW_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undSPACING><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_SPACING" target=_parent class=ISymbol>ARROW_SPACING</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ARROW_undWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ARROW_WIDTH" target=_parent class=ISymbol>ARROW_WIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_askZoomResource><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.askZoomResource" target=_parent class=ISymbol>askZoomResource</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_aspect><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.aspect" target=_parent class=ISymbol>aspect</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_async><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.async" target=_parent class=ISymbol>async</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_attr><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.attr" target=_parent class=ISymbol>attr</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_autoExpand><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.autoExpand" target=_parent class=ISymbol>autoExpand</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_autoExtend><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.autoExtend" target=_parent class=ISymbol>autoExtend</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_autoOrigin><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.autoOrigin" target=_parent class=ISymbol>autoOrigin</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_autoRadius><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.autoRadius" target=_parent class=ISymbol>autoRadius</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_autoSaveDelay><div class=IEntry><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.autoSaveDelay" target=_parent class=ISymbol>autoSaveDelay</a>, <span class=IParent>mxAutoSaveManager</span></div></div><div class=SRResult id=SR_autoSaveThreshold><div class=IEntry><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.autoSaveThreshold" target=_parent class=ISymbol>autoSaveThreshold</a>, <span class=IParent>mxAutoSaveManager</span></div></div><div class=SRResult id=SR_autoSaveThrottle><div class=IEntry><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.autoSaveThrottle" target=_parent class=ISymbol>autoSaveThrottle</a>, <span class=IParent>mxAutoSaveManager</span></div></div><div class=SRResult id=SR_autoscroll><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.autoscroll" target=_parent class=ISymbol>autoscroll</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR2_autoScroll><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.autoScroll" target=_parent class=ISymbol>autoScroll</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_autoSize><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.autoSize" target=_parent class=ISymbol>autoSize</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_autoSizeCells><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.autoSizeCells" target=_parent class=ISymbol>autoSizeCells</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_autoSizeCellsOnAdd><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.autoSizeCellsOnAdd" target=_parent class=ISymbol>autoSizeCellsOnAdd</a>, <span class=IParent>mxGraph</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesB.html b/docs/js-api/search/VariablesB.html
index f0dca822f..d78bb1332 100644
--- a/docs/js-api/search/VariablesB.html
+++ b/docs/js-api/search/VariablesB.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_backgroundColor><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.backgroundColor" target=_parent class=ISymbol>backgroundColor</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_backgroundImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.backgroundImage" target=_parent class=ISymbol>backgroundImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_baseDomain><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.baseDomain" target=_parent class=ISymbol>baseDomain</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_basePath><div class=IEntry><a href="../files/mxClient-js.html#mxClient.basePath" target=_parent class=ISymbol>basePath</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_baseSpacingBottom><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.baseSpacingBottom" target=_parent class=ISymbol>baseSpacingBottom</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_baseSpacingLeft><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.baseSpacingLeft" target=_parent class=ISymbol>baseSpacingLeft</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_baseSpacingRight><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.baseSpacingRight" target=_parent class=ISymbol>baseSpacingRight</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_baseSpacingTop><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.baseSpacingTop" target=_parent class=ISymbol>baseSpacingTop</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_baseUrl><div class=IEntry><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.baseUrl" target=_parent class=ISymbol>baseUrl</a>, <span class=IParent>mxUrlConverter</span></div></div><div class=SRResult id=SR_BEFORE_undADD_undVERTEX><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.BEFORE_ADD_VERTEX" target=_parent class=ISymbol>BEFORE_ADD_VERTEX</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_BEFORE_undUNDO><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.BEFORE_UNDO" target=_parent class=ISymbol>BEFORE_UNDO</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_BEGIN_undUPDATE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.BEGIN_UPDATE" target=_parent class=ISymbol>BEGIN_UPDATE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_bends><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.bends" target=_parent class=ISymbol>bends</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_bgNodes><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.bgNodes" target=_parent class=ISymbol>bgNodes</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_binary><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.binary" target=_parent class=ISymbol>binary</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_blurEnabled><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.blurEnabled" target=_parent class=ISymbol>blurEnabled</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_body><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.body" target=_parent class=ISymbol>body</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_border><div class=IEntry><a href="javascript:searchResults.Toggle('SR_border')" class=ISymbol>border</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.border" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxOutline-js.html#mxOutline.border" target=_parent class=IParent>mxOutline</a><a href="../files/util/mxPanningManager-js.html#mxPanningManager.border" target=_parent class=IParent>mxPanningManager</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.border" target=_parent class=IParent>mxPartitionLayout</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.border" target=_parent class=IParent>mxPrintPreview</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.border" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_borderCollapse><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.borderCollapse" target=_parent class=ISymbol>borderCollapse</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_borderColor><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.borderColor" target=_parent class=ISymbol>borderColor</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_boundingBox><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.boundingBox" target=_parent class=ISymbol>boundingBox</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_bounds><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.bounds" target=_parent class=ISymbol>bounds</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_bubbling><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.bubbling" target=_parent class=ISymbol>bubbling</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_buffer><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.buffer" target=_parent class=ISymbol>buffer</a>, <span class=IParent>mxLog</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesC.html b/docs/js-api/search/VariablesC.html
index 7765bc363..30de3da4a 100644
--- a/docs/js-api/search/VariablesC.html
+++ b/docs/js-api/search/VariablesC.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_cacheEnabled><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.cacheEnabled" target=_parent class=ISymbol>cacheEnabled</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_cacheOffsetSize><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.cacheOffsetSize" target=_parent class=ISymbol>cacheOffsetSize</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_captureDocumentGesture><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.captureDocumentGesture" target=_parent class=ISymbol>captureDocumentGesture</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_cell><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cell')" class=ISymbol>cell</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#MedianCellSorter.cell" target=_parent class=IParent>MedianCellSorter</a><a href="../files/view/mxCellState-js.html#mxCellState.cell" target=_parent class=IParent>mxCellState</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.cell" target=_parent class=IParent>mxGraphHierarchyNode</a><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.cell" target=_parent class=IParent>WeightedCellSorter</a></div></div></div><div class=SRResult id=SR_CELL_undCONNECTED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CELL_CONNECTED" target=_parent class=ISymbol>CELL_CONNECTED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_cellEditor><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellEditor" target=_parent class=ISymbol>cellEditor</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellLocation><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.cellLocation" target=_parent class=ISymbol>cellLocation</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_cellRenderer><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellRenderer" target=_parent class=ISymbol>cellRenderer</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cells><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cells')" class=ISymbol>cells</a><div class=ISubIndex><a href="../files/util/mxClipboard-js.html#mxClipboard.cells" target=_parent class=IParent>mxClipboard</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.cells" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxMorphing-js.html#mxMorphing.cells" target=_parent class=IParent>mxMorphing</a></div></div></div><div class=SRResult id=SR_CELLS_undADDED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CELLS_ADDED" target=_parent class=ISymbol>CELLS_ADDED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_CELLS_undFOLDED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CELLS_FOLDED" target=_parent class=ISymbol>CELLS_FOLDED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_CELLS_undMOVED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CELLS_MOVED" target=_parent class=ISymbol>CELLS_MOVED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_CELLS_undORDERED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CELLS_ORDERED" target=_parent class=ISymbol>CELLS_ORDERED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_CELLS_undREMOVED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CELLS_REMOVED" target=_parent class=ISymbol>CELLS_REMOVED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_CELLS_undRESIZED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CELLS_RESIZED" target=_parent class=ISymbol>CELLS_RESIZED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_CELLS_undTOGGLED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CELLS_TOGGLED" target=_parent class=ISymbol>CELLS_TOGGLED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_cellsBendable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsBendable" target=_parent class=ISymbol>cellsBendable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsCloneable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsCloneable" target=_parent class=ISymbol>cellsCloneable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsDeletable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsDeletable" target=_parent class=ISymbol>cellsDeletable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsDisconnectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsDisconnectable" target=_parent class=ISymbol>cellsDisconnectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsEditable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsEditable" target=_parent class=ISymbol>cellsEditable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsLocked><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsLocked" target=_parent class=ISymbol>cellsLocked</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsMovable" target=_parent class=ISymbol>cellsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsResizable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsResizable" target=_parent class=ISymbol>cellsResizable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_cellsSelectable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cellsSelectable" target=_parent class=ISymbol>cellsSelectable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_centerZoom><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.centerZoom" target=_parent class=ISymbol>centerZoom</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_CHANGE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CHANGE" target=_parent class=ISymbol>CHANGE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_changeHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_changeHandler')" class=ISymbol>changeHandler</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.changeHandler" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.changeHandler" target=_parent class=IParent>mxConnectionHandler</a></div></div></div><div class=SRResult id=SR_changes><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.changes" target=_parent class=ISymbol>changes</a>, <span class=IParent>mxUndoableEdit</span></div></div><div class=SRResult id=SR_channelBuffer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_channelBuffer')" class=ISymbol>channelBuffer</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.channelBuffer" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.channelBuffer" target=_parent class=IParent>mxCoordinateAssignment</a></div></div></div><div class=SRResult id=SR_checkEventSource><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.checkEventSource" target=_parent class=ISymbol>checkEventSource</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_checkOverlap><div class=IEntry><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.checkOverlap" target=_parent class=ISymbol>checkOverlap</a>, <span class=IParent>mxParallelEdgeLayout</span></div></div><div class=SRResult id=SR_children><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.children" target=_parent class=ISymbol>children</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_CLEAR><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CLEAR" target=_parent class=ISymbol>CLEAR</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_clearSelectionOnBackground><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.clearSelectionOnBackground" target=_parent class=ISymbol>clearSelectionOnBackground</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_CLICK><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CLICK" target=_parent class=ISymbol>CLICK</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_clipping><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.clipping" target=_parent class=ISymbol>clipping</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_cloneEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cloneEnabled')" class=ISymbol>cloneEnabled</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.cloneEnabled" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.cloneEnabled" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_cloneInvalidEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.cloneInvalidEdges" target=_parent class=ISymbol>cloneInvalidEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_CLOSE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CLOSE" target=_parent class=ISymbol>CLOSE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_closeImage><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.closeImage" target=_parent class=ISymbol>closeImage</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_closeOp><div class=IEntry><a href="javascript:searchResults.Toggle('SR_closeOp')" class=ISymbol>closeOp</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.closeOp" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.closeOp" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_closeResource><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.closeResource" target=_parent class=ISymbol>closeResource</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_codecs><div class=IEntry><a href="../files/io/mxCodecRegistry-js.html#mxCodecRegistry.codecs" target=_parent class=ISymbol>codecs</a>, <span class=IParent>mxCodecRegistry</span></div></div><div class=SRResult id=SR_collapsed><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.collapsed" target=_parent class=ISymbol>collapsed</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_collapsedImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.collapsedImage" target=_parent class=ISymbol>collapsedImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_collapseExpandResource><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.collapseExpandResource" target=_parent class=ISymbol>collapseExpandResource</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_collapseToPreferredSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.collapseToPreferredSize" target=_parent class=ISymbol>collapseToPreferredSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_compressed><div class=IEntry><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.compressed" target=_parent class=ISymbol>compressed</a>, <span class=IParent>mxXmlCanvas2D</span></div></div><div class=SRResult id=SR_config><div class=IEntry><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.config" target=_parent class=ISymbol>config</a>, <span class=IParent>mxDefaultPopupMenu</span></div></div><div class=SRResult id=SR_CONNECT><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CONNECT" target=_parent class=ISymbol>CONNECT</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_CONNECT_undCELL><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CONNECT_CELL" target=_parent class=ISymbol>CONNECT_CELL</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_CONNECT_undHANDLE_undFILLCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CONNECT_HANDLE_FILLCOLOR" target=_parent class=ISymbol>CONNECT_HANDLE_FILLCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_connectable><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.connectable" target=_parent class=ISymbol>connectable</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_connectableEdges><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.connectableEdges" target=_parent class=ISymbol>connectableEdges</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_connectIconOffset><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.connectIconOffset" target=_parent class=ISymbol>connectIconOffset</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_connectImage><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.connectImage" target=_parent class=ISymbol>connectImage</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_connectOnDrop><div class=IEntry><a href="javascript:searchResults.Toggle('SR_connectOnDrop')" class=ISymbol>connectOnDrop</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.connectOnDrop" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.connectOnDrop" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_connectsAsSource><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.connectsAsSource" target=_parent class=ISymbol>connectsAsSource</a>, <span class=IParent>mxGraphHierarchyNode</span></div></div><div class=SRResult id=SR_connectsAsTarget><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.connectsAsTarget" target=_parent class=ISymbol>connectsAsTarget</a>, <span class=IParent>mxGraphHierarchyNode</span></div></div><div class=SRResult id=SR_consoleName><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.consoleName" target=_parent class=ISymbol>consoleName</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_constrainChildren><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.constrainChildren" target=_parent class=ISymbol>constrainChildren</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_constrainGroupByChildren><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.constrainGroupByChildren" target=_parent class=ISymbol>constrainGroupByChildren</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_constrainRelativeChildren><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.constrainRelativeChildren" target=_parent class=ISymbol>constrainRelativeChildren</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_CONSTRAINT_undHIGHLIGHT_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CONSTRAINT_HIGHLIGHT_SIZE" target=_parent class=ISymbol>CONSTRAINT_HIGHLIGHT_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_constraintHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_constraintHandler')" class=ISymbol>constraintHandler</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.constraintHandler" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.constraintHandler" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_constraints><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.constraints" target=_parent class=ISymbol>constraints</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_consumed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_consumed')" class=ISymbol>consumed</a><div class=ISubIndex><a href="../files/util/mxEventObject-js.html#mxEventObject.consumed" target=_parent class=IParent>mxEventObject</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.consumed" target=_parent class=IParent>mxMouseEvent</a></div></div></div><div class=SRResult id=SR_container><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.container" target=_parent class=ISymbol>container</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_containsValidationErrorsResource><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.containsValidationErrorsResource" target=_parent class=ISymbol>containsValidationErrorsResource</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_content><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.content" target=_parent class=ISymbol>content</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_contentHeightCorrection><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.contentHeightCorrection" target=_parent class=ISymbol>contentHeightCorrection</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_controlKeys><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.controlKeys" target=_parent class=ISymbol>controlKeys</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_controlShiftKeys><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.controlShiftKeys" target=_parent class=ISymbol>controlShiftKeys</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_converter><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.converter" target=_parent class=ISymbol>converter</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_count><div class=IEntry><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.count" target=_parent class=ISymbol>count</a>, <span class=IParent>mxCellStatePreview</span></div></div><div class=SRResult id=SR_counter><div class=IEntry><a href="../files/util/mxObjectIdentity-js.html#mxObjectIdentity.counter" target=_parent class=ISymbol>counter</a>, <span class=IParent>mxObjectIdentity</span></div></div><div class=SRResult id=SR_countError><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.countError" target=_parent class=ISymbol>countError</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_createIds><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.createIds" target=_parent class=ISymbol>createIds</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_createTarget><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.createTarget" target=_parent class=ISymbol>createTarget</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_currentBestCrossings><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.currentBestCrossings" target=_parent class=ISymbol>currentBestCrossings</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_currentColor><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.currentColor" target=_parent class=ISymbol>currentColor</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_currentDropTarget><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.currentDropTarget" target=_parent class=ISymbol>currentDropTarget</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_currentDx><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.currentDx" target=_parent class=ISymbol>currentDx</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_currentDy><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.currentDy" target=_parent class=ISymbol>currentDy</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_currentEdit><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.currentEdit" target=_parent class=ISymbol>currentEdit</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_currentFileResource><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.currentFileResource" target=_parent class=ISymbol>currentFileResource</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_currentGraph><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.currentGraph" target=_parent class=ISymbol>currentGraph</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_currentGuide><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.currentGuide" target=_parent class=ISymbol>currentGuide</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_currentPoint><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.currentPoint" target=_parent class=ISymbol>currentPoint</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_currentRoot><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.currentRoot" target=_parent class=ISymbol>currentRoot</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_currentX><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband.currentX" target=_parent class=ISymbol>currentX</a>, <span class=IParent>mxRubberband</span></div></div><div class=SRResult id=SR_currentXDelta><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.currentXDelta" target=_parent class=ISymbol>currentXDelta</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_currentY><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband.currentY" target=_parent class=ISymbol>currentY</a>, <span class=IParent>mxRubberband</span></div></div><div class=SRResult id=SR_cursor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_cursor')" class=ISymbol>cursor</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.cursor" target=_parent class=IParent>mxCellOverlay</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.cursor" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxHandle-js.html#mxHandle.cursor" target=_parent class=IParent>mxHandle</a></div></div></div><div class=SRResult id=SR_CURSOR_undBEND_undHANDLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CURSOR_BEND_HANDLE" target=_parent class=ISymbol>CURSOR_BEND_HANDLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_CURSOR_undCONNECT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CURSOR_CONNECT" target=_parent class=ISymbol>CURSOR_CONNECT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_CURSOR_undLABEL_undHANDLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CURSOR_LABEL_HANDLE" target=_parent class=ISymbol>CURSOR_LABEL_HANDLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_CURSOR_undMOVABLE_undEDGE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CURSOR_MOVABLE_EDGE" target=_parent class=ISymbol>CURSOR_MOVABLE_EDGE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_CURSOR_undMOVABLE_undVERTEX><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CURSOR_MOVABLE_VERTEX" target=_parent class=ISymbol>CURSOR_MOVABLE_VERTEX</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_CURSOR_undTERMINAL_undHANDLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CURSOR_TERMINAL_HANDLE" target=_parent class=ISymbol>CURSOR_TERMINAL_HANDLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_CURSOR_undVIRTUAL_undBEND_undHANDLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.CURSOR_VIRTUAL_BEND_HANDLE" target=_parent class=ISymbol>CURSOR_VIRTUAL_BEND_HANDLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_curveOp><div class=IEntry><a href="javascript:searchResults.Toggle('SR_curveOp')" class=ISymbol>curveOp</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.curveOp" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.curveOp" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_CUSTOM_undHANDLE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.CUSTOM_HANDLE" target=_parent class=ISymbol>CUSTOM_HANDLE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_cycleAttributeIndex><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.cycleAttributeIndex" target=_parent class=ISymbol>cycleAttributeIndex</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_cycleAttributeName><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.cycleAttributeName" target=_parent class=ISymbol>cycleAttributeName</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_cycleAttributeValues><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.cycleAttributeValues" target=_parent class=ISymbol>cycleAttributeValues</a>, <span class=IParent>mxEditor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesD.html b/docs/js-api/search/VariablesD.html
index d9fba2b1b..c946dfec4 100644
--- a/docs/js-api/search/VariablesD.html
+++ b/docs/js-api/search/VariablesD.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_damper><div class=IEntry><a href="../files/util/mxPanningManager-js.html#mxPanningManager.damper" target=_parent class=ISymbol>damper</a>, <span class=IParent>mxPanningManager</span></div></div><div class=SRResult id=SR_dblClickAction><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.dblClickAction" target=_parent class=ISymbol>dblClickAction</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_dblClickRemoveEnabled><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.dblClickRemoveEnabled" target=_parent class=ISymbol>dblClickRemoveEnabled</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_DEBUG><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.DEBUG" target=_parent class=ISymbol>DEBUG</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_decodeSimulateValues><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.decodeSimulateValues" target=_parent class=ISymbol>decodeSimulateValues</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_DEFAULT_undFONTFAMILY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_FONTFAMILY" target=_parent class=ISymbol>DEFAULT_FONTFAMILY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undFONTSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_FONTSIZE" target=_parent class=ISymbol>DEFAULT_FONTSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undFONTSTYLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_FONTSTYLE" target=_parent class=ISymbol>DEFAULT_FONTSTYLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undHOTSPOT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_HOTSPOT" target=_parent class=ISymbol>DEFAULT_HOTSPOT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undIMAGESIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_IMAGESIZE" target=_parent class=ISymbol>DEFAULT_IMAGESIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undINVALID_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_INVALID_COLOR" target=_parent class=ISymbol>DEFAULT_INVALID_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undMARKERSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_MARKERSIZE" target=_parent class=ISymbol>DEFAULT_MARKERSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undSTARTSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_STARTSIZE" target=_parent class=ISymbol>DEFAULT_STARTSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undTEXT_undDIRECTION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_TEXT_DIRECTION" target=_parent class=ISymbol>DEFAULT_TEXT_DIRECTION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DEFAULT_undVALID_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DEFAULT_VALID_COLOR" target=_parent class=ISymbol>DEFAULT_VALID_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_defaultBundles><div class=IEntry><a href="../files/mxClient-js.html#mxClient.defaultBundles" target=_parent class=ISymbol>defaultBundles</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_defaultEdge><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.defaultEdge" target=_parent class=ISymbol>defaultEdge</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_defaultEdgeShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.defaultEdgeShape" target=_parent class=ISymbol>defaultEdgeShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_defaultEdgeStyle><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.defaultEdgeStyle" target=_parent class=ISymbol>defaultEdgeStyle</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_defaultGroup><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.defaultGroup" target=_parent class=ISymbol>defaultGroup</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_defaultLanguage><div class=IEntry><a href="../files/mxClient-js.html#mxClient.defaultLanguage" target=_parent class=ISymbol>defaultLanguage</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_defaultLocalized><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.defaultLocalized" target=_parent class=ISymbol>defaultLocalized</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_defaultLoopStyle><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.defaultLoopStyle" target=_parent class=ISymbol>defaultLoopStyle</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_defaultOpacity><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband.defaultOpacity" target=_parent class=ISymbol>defaultOpacity</a>, <span class=IParent>mxRubberband</span></div></div><div class=SRResult id=SR_defaultOverlap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_defaultOverlap')" class=ISymbol>defaultOverlap</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.defaultOverlap" target=_parent class=IParent>mxCellOverlay</a><a href="../files/view/mxGraph-js.html#mxGraph.defaultOverlap" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_defaultParent><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.defaultParent" target=_parent class=ISymbol>defaultParent</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_defaultShapes><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.defaultShapes" target=_parent class=ISymbol>defaultShapes</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_defaultTextShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.defaultTextShape" target=_parent class=ISymbol>defaultTextShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_defaultVertexShape><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.defaultVertexShape" target=_parent class=ISymbol>defaultVertexShape</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_defs><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.defs" target=_parent class=ISymbol>defs</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_delay><div class=IEntry><a href="javascript:searchResults.Toggle('SR_delay')" class=ISymbol>delay</a><div class=ISubIndex><a href="../files/util/mxAnimation-js.html#mxAnimation.delay" target=_parent class=IParent>mxAnimation</a><a href="../files/util/mxPanningManager-js.html#mxPanningManager.delay" target=_parent class=IParent>mxPanningManager</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.delay" target=_parent class=IParent>mxTooltipHandler</a></div></div></div><div class=SRResult id=SR_deltas><div class=IEntry><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.deltas" target=_parent class=ISymbol>deltas</a>, <span class=IParent>mxCellStatePreview</span></div></div><div class=SRResult id=SR_desc><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.desc" target=_parent class=ISymbol>desc</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_DESTROY><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.DESTROY" target=_parent class=ISymbol>DESTROY</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_destroyed><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.destroyed" target=_parent class=ISymbol>destroyed</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_destroyOnClose><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.destroyOnClose" target=_parent class=ISymbol>destroyOnClose</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_dfsCount><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dfsCount')" class=ISymbol>dfsCount</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.dfsCount" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.dfsCount" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_dialect><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dialect')" class=ISymbol>dialect</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.dialect" target=_parent class=IParent>mxGraph</a><a href="../files/shape/mxShape-js.html#mxShape.dialect" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_DIALECT_undMIXEDHTML><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIALECT_MIXEDHTML" target=_parent class=ISymbol>DIALECT_MIXEDHTML</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIALECT_undPREFERHTML><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIALECT_PREFERHTML" target=_parent class=ISymbol>DIALECT_PREFERHTML</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIALECT_undSTRICTHTML><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIALECT_STRICTHTML" target=_parent class=ISymbol>DIALECT_STRICTHTML</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIALECT_undSVG><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIALECT_SVG" target=_parent class=ISymbol>DIALECT_SVG</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIALECT_undVML><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIALECT_VML" target=_parent class=ISymbol>DIALECT_VML</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undEAST><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_EAST" target=_parent class=ISymbol>DIRECTION_EAST</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undMASK_undALL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_MASK_ALL" target=_parent class=ISymbol>DIRECTION_MASK_ALL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undMASK_undEAST><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_MASK_EAST" target=_parent class=ISymbol>DIRECTION_MASK_EAST</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undMASK_undNONE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_MASK_NONE" target=_parent class=ISymbol>DIRECTION_MASK_NONE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undMASK_undNORTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_MASK_NORTH" target=_parent class=ISymbol>DIRECTION_MASK_NORTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undMASK_undSOUTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_MASK_SOUTH" target=_parent class=ISymbol>DIRECTION_MASK_SOUTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undMASK_undWEST><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_MASK_WEST" target=_parent class=ISymbol>DIRECTION_MASK_WEST</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undNORTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_NORTH" target=_parent class=ISymbol>DIRECTION_NORTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undSOUTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_SOUTH" target=_parent class=ISymbol>DIRECTION_SOUTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_DIRECTION_undWEST><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DIRECTION_WEST" target=_parent class=ISymbol>DIRECTION_WEST</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_disableContextMenu><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.disableContextMenu" target=_parent class=ISymbol>disableContextMenu</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_disableEdgeStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_disableEdgeStyle')" class=ISymbol>disableEdgeStyle</a><div class=ISubIndex><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.disableEdgeStyle" target=_parent class=IParent>mxCircleLayout</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.disableEdgeStyle" target=_parent class=IParent>mxFastOrganicLayout</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.disableEdgeStyle" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.disableEdgeStyle" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_DISCONNECT><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.DISCONNECT" target=_parent class=ISymbol>DISCONNECT</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_disconnectOnMove><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.disconnectOnMove" target=_parent class=ISymbol>disconnectOnMove</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_dispX><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.dispX" target=_parent class=ISymbol>dispX</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_dispY><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.dispY" target=_parent class=ISymbol>dispY</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_div><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband.div" target=_parent class=ISymbol>div</a>, <span class=IParent>mxRubberband</span></div></div><div class=SRResult id=SR_document><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.document" target=_parent class=ISymbol>document</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_DONE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.DONE" target=_parent class=ISymbol>DONE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_doneResource><div class=IEntry><a href="javascript:searchResults.Toggle('SR_doneResource')" class=ISymbol>doneResource</a><div class=ISubIndex><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.doneResource" target=_parent class=IParent>mxGraphSelectionModel</a><a href="../files/view/mxGraphView-js.html#mxGraphView.doneResource" target=_parent class=IParent>mxGraphView</a></div></div></div><div class=SRResult id=SR_DOUBLE_undCLICK><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.DOUBLE_CLICK" target=_parent class=ISymbol>DOUBLE_CLICK</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_doubleClickOrientationResource><div class=IEntry><a href="../files/handler/mxElbowEdgeHandler-js.html#mxElbowEdgeHandler.doubleClickOrientationResource" target=_parent class=ISymbol>doubleClickOrientationResource</a>, <span class=IParent>mxElbowEdgeHandler</span></div></div><div class=SRResult id=SR_doubleTapEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.doubleTapEnabled" target=_parent class=ISymbol>doubleTapEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_doubleTapTimeout><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.doubleTapTimeout" target=_parent class=ISymbol>doubleTapTimeout</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_doubleTapTolerance><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.doubleTapTolerance" target=_parent class=ISymbol>doubleTapTolerance</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_DOWN><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.DOWN" target=_parent class=ISymbol>DOWN</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_dragElement><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dragElement" target=_parent class=ISymbol>dragElement</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_dragElementOpacity><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dragElementOpacity" target=_parent class=ISymbol>dragElementOpacity</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_dragElementZIndex><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dragElementZIndex" target=_parent class=ISymbol>dragElementZIndex</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_dragOffset><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dragOffset" target=_parent class=ISymbol>dragOffset</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_drillHandler><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.drillHandler" target=_parent class=ISymbol>drillHandler</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_DROP_undTARGET_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.DROP_TARGET_COLOR" target=_parent class=ISymbol>DROP_TARGET_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_dropEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.dropEnabled" target=_parent class=ISymbol>dropEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_dropHandler><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.dropHandler" target=_parent class=ISymbol>dropHandler</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_dummyVertexWidth><div class=IEntry><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.dummyVertexWidth" target=_parent class=ISymbol>dummyVertexWidth</a>, <span class=IParent>mxSwimlaneLayout</span></div></div><div class=SRResult id=SR_dx><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dx')" class=ISymbol>dx</a><div class=ISubIndex><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint.dx" target=_parent class=IParent>mxConnectionConstraint</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.dx" target=_parent class=IParent>mxPanningHandler</a></div></div></div><div class=SRResult id=SR_dy><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dy')" class=ISymbol>dy</a><div class=ISubIndex><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint.dy" target=_parent class=IParent>mxConnectionConstraint</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.dy" target=_parent class=IParent>mxPanningHandler</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesE.html b/docs/js-api/search/VariablesE.html
index 4bd428d54..2af2464d9 100644
--- a/docs/js-api/search/VariablesE.html
+++ b/docs/js-api/search/VariablesE.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_ease><div class=IEntry><a href="../files/util/mxMorphing-js.html#mxMorphing.ease" target=_parent class=ISymbol>ease</a>, <span class=IParent>mxMorphing</span></div></div><div class=SRResult id=SR_edge><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.edge" target=_parent class=ISymbol>edge</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_EDGE_undSELECTION_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGE_SELECTION_COLOR" target=_parent class=ISymbol>EDGE_SELECTION_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDGE_undSELECTION_undSTROKEWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGE_SELECTION_STROKEWIDTH" target=_parent class=ISymbol>EDGE_SELECTION_STROKEWIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_edgeLabelsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.edgeLabelsMovable" target=_parent class=ISymbol>edgeLabelsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_edgeMapper><div class=IEntry><a href="javascript:searchResults.Toggle('SR_edgeMapper')" class=ISymbol>edgeMapper</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.edgeMapper" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.edgeMapper" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_edgeRouting><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.edgeRouting" target=_parent class=ISymbol>edgeRouting</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_edges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_edges')" class=ISymbol>edges</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.edges" target=_parent class=IParent>mxCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.edges" target=_parent class=IParent>mxGraphHierarchyEdge</a></div></div></div><div class=SRResult id=SR_edgesSet><div class=IEntry><a href="javascript:searchResults.Toggle('SR_edgesSet')" class=ISymbol>edgesSet</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.edgesSet" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.edgesSet" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_edgeState><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.edgeState" target=_parent class=ISymbol>edgeState</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_edgeStyle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_edgeStyle')" class=ISymbol>edgeStyle</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.edgeStyle" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.edgeStyle" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_EDGESTYLE_undELBOW><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGESTYLE_ELBOW" target=_parent class=ISymbol>EDGESTYLE_ELBOW</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDGESTYLE_undENTITY_undRELATION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGESTYLE_ENTITY_RELATION" target=_parent class=ISymbol>EDGESTYLE_ENTITY_RELATION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDGESTYLE_undLOOP><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGESTYLE_LOOP" target=_parent class=ISymbol>EDGESTYLE_LOOP</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDGESTYLE_undORTHOGONAL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGESTYLE_ORTHOGONAL" target=_parent class=ISymbol>EDGESTYLE_ORTHOGONAL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDGESTYLE_undSEGMENT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGESTYLE_SEGMENT" target=_parent class=ISymbol>EDGESTYLE_SEGMENT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDGESTYLE_undSIDETOSIDE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGESTYLE_SIDETOSIDE" target=_parent class=ISymbol>EDGESTYLE_SIDETOSIDE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDGESTYLE_undTOPTOBOTTOM><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.EDGESTYLE_TOPTOBOTTOM" target=_parent class=ISymbol>EDGESTYLE_TOPTOBOTTOM</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_EDITING_undSTARTED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.EDITING_STARTED" target=_parent class=ISymbol>EDITING_STARTED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_EDITING_undSTOPPED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.EDITING_STOPPED" target=_parent class=ISymbol>EDITING_STOPPED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_editingCell><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.editingCell" target=_parent class=ISymbol>editingCell</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_editor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_editor')" class=ISymbol>editor</a><div class=ISubIndex><a href="../files/editor/mxDefaultKeyHandler-js.html#mxDefaultKeyHandler.editor" target=_parent class=IParent>mxDefaultKeyHandler</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.editor" target=_parent class=IParent>mxDefaultToolbar</a></div></div></div><div class=SRResult id=SR_ELBOW_undHORIZONTAL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ELBOW_HORIZONTAL" target=_parent class=ISymbol>ELBOW_HORIZONTAL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_ELBOW_undVERTICAL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ELBOW_VERTICAL" target=_parent class=ISymbol>ELBOW_VERTICAL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_element><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.element" target=_parent class=ISymbol>element</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_elements><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.elements" target=_parent class=ISymbol>elements</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_emptyLabelText><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.emptyLabelText" target=_parent class=ISymbol>emptyLabelText</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_enabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_enabled')" class=ISymbol>enabled</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.enabled" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.enabled" target=_parent class=IParent>mxCellMarker</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.enabled" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.enabled" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/util/mxDragSource-js.html#mxDragSource.enabled" target=_parent class=IParent>mxDragSource</a><a href="../files/view/mxGraph-js.html#mxGraph.enabled" target=_parent class=IParent>mxGraph</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.enabled" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.enabled" target=_parent class=IParent>mxKeyHandler</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.enabled" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxOutline-js.html#mxOutline.enabled" target=_parent class=IParent>mxOutline</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.enabled" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxRubberband-js.html#mxRubberband.enabled" target=_parent class=IParent>mxRubberband</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.enabled" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.enabled" target=_parent class=IParent>mxSwimlaneManager</a><a href="../files/util/mxToolbar-js.html#mxToolbar.enabled" target=_parent class=IParent>mxToolbar</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.enabled" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/util/mxUrlConverter-js.html#mxUrlConverter.enabled" target=_parent class=IParent>mxUrlConverter</a></div></div></div><div class=SRResult id=SR_encodeDefaults><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.encodeDefaults" target=_parent class=ISymbol>encodeDefaults</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_END_undEDIT><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.END_EDIT" target=_parent class=ISymbol>END_EDIT</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_END_undUPDATE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.END_UPDATE" target=_parent class=ISymbol>END_UPDATE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_endingUpdate><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.endingUpdate" target=_parent class=ISymbol>endingUpdate</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_enterStopsCellEditing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.enterStopsCellEditing" target=_parent class=ISymbol>enterStopsCellEditing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_ENTITY_undSEGMENT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.ENTITY_SEGMENT" target=_parent class=ISymbol>ENTITY_SEGMENT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_error><div class=IEntry><a href="javascript:searchResults.Toggle('SR_error')" class=ISymbol>error</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.error" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.error" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_errorImage><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.errorImage" target=_parent class=ISymbol>errorImage</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_errorResource><div class=IEntry><a href="../files/util/mxUtils-js.html#mxUtils.errorResource" target=_parent class=ISymbol>errorResource</a>, <span class=IParent>mxUtils</span></div></div><div class=SRResult id=SR_ESCAPE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.ESCAPE" target=_parent class=ISymbol>ESCAPE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_escapeCancelsEditing><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.escapeCancelsEditing" target=_parent class=ISymbol>escapeCancelsEditing</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_escapeEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.escapeEnabled" target=_parent class=ISymbol>escapeEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_escapePostData><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.escapePostData" target=_parent class=ISymbol>escapePostData</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_eventListeners><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.eventListeners" target=_parent class=ISymbol>eventListeners</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_eventsEnabled><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.eventsEnabled" target=_parent class=ISymbol>eventsEnabled</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_eventSource><div class=IEntry><a href="../files/util/mxEventSource-js.html#mxEventSource.eventSource" target=_parent class=ISymbol>eventSource</a>, <span class=IParent>mxEventSource</span></div></div><div class=SRResult id=SR_evt><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.evt" target=_parent class=ISymbol>evt</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_exclude><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.exclude" target=_parent class=ISymbol>exclude</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_EXECUTE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.EXECUTE" target=_parent class=ISymbol>EXECUTE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_EXECUTED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.EXECUTED" target=_parent class=ISymbol>EXECUTED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_expandedImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.expandedImage" target=_parent class=ISymbol>expandedImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_exportEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.exportEnabled" target=_parent class=ISymbol>exportEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_extendParents><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.extendParents" target=_parent class=ISymbol>extendParents</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_extendParentsOnAdd><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.extendParentsOnAdd" target=_parent class=ISymbol>extendParentsOnAdd</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_extension><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.extension" target=_parent class=ISymbol>extension</a>, <span class=IParent>mxResources</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesF.html b/docs/js-api/search/VariablesF.html
index 779003a0b..7e357b626 100644
--- a/docs/js-api/search/VariablesF.html
+++ b/docs/js-api/search/VariablesF.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_factoryMethod><div class=IEntry><a href="javascript:searchResults.Toggle('SR_factoryMethod')" class=ISymbol>factoryMethod</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.factoryMethod" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.factoryMethod" target=_parent class=IParent>mxPopupMenu</a></div></div></div><div class=SRResult id=SR_fadeOut><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband.fadeOut" target=_parent class=ISymbol>fadeOut</a>, <span class=IParent>mxRubberband</span></div></div><div class=SRResult id=SR_fgNodes><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.fgNodes" target=_parent class=ISymbol>fgNodes</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_FIELD_undNAME><div class=IEntry><a href="../files/util/mxObjectIdentity-js.html#mxObjectIdentity.FIELD_NAME" target=_parent class=ISymbol>FIELD_NAME</a>, <span class=IParent>mxObjectIdentity</span></div></div><div class=SRResult id=SR_filename><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.filename" target=_parent class=ISymbol>filename</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_fill><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.fill" target=_parent class=ISymbol>fill</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_fineTuning><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fineTuning')" class=ISymbol>fineTuning</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.fineTuning" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.fineTuning" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.fineTuning" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_FIRE_undMOUSE_undEVENT><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.FIRE_MOUSE_EVENT" target=_parent class=ISymbol>FIRE_MOUSE_EVENT</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_FIRED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.FIRED" target=_parent class=ISymbol>FIRED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_first><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.first" target=_parent class=ISymbol>first</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_FLIP_undEDGE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.FLIP_EDGE" target=_parent class=ISymbol>FLIP_EDGE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_foAltText><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.foAltText" target=_parent class=ISymbol>foAltText</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_foEnabled><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.foEnabled" target=_parent class=ISymbol>foEnabled</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_FOLD_undCELLS><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.FOLD_CELLS" target=_parent class=ISymbol>FOLD_CELLS</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_foldingEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.foldingEnabled" target=_parent class=ISymbol>foldingEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_FONT_undBOLD><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.FONT_BOLD" target=_parent class=ISymbol>FONT_BOLD</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_FONT_undITALIC><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.FONT_ITALIC" target=_parent class=ISymbol>FONT_ITALIC</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_FONT_undSTRIKETHROUGH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.FONT_STRIKETHROUGH" target=_parent class=ISymbol>FONT_STRIKETHROUGH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_FONT_undUNDERLINE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.FONT_UNDERLINE" target=_parent class=ISymbol>FONT_UNDERLINE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_fontMetricsPadding><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.fontMetricsPadding" target=_parent class=ISymbol>fontMetricsPadding</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_foOffset><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.foOffset" target=_parent class=ISymbol>foOffset</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_forceConstant><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.forceConstant" target=_parent class=ISymbol>forceConstant</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_forceConstantSquared><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.forceConstantSquared" target=_parent class=ISymbol>forceConstantSquared</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_forceControlClickHandler><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.forceControlClickHandler" target=_parent class=ISymbol>forceControlClickHandler</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_forcedInserting><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.forcedInserting" target=_parent class=ISymbol>forcedInserting</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_forceVmlHandles><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.forceVmlHandles" target=_parent class=ISymbol>forceVmlHandles</a>, <span class=IParent>mxOutline</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesG.html b/docs/js-api/search/VariablesG.html
index ce226da84..8071577b4 100644
--- a/docs/js-api/search/VariablesG.html
+++ b/docs/js-api/search/VariablesG.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_geometry><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.geometry" target=_parent class=ISymbol>geometry</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_GESTURE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.GESTURE" target=_parent class=ISymbol>GESTURE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_GET><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.GET" target=_parent class=ISymbol>GET</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_gradients><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.gradients" target=_parent class=ISymbol>gradients</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_graph><div class=IEntry><a href="javascript:searchResults.Toggle('SR_graph')" class=ISymbol>graph</a><div class=ISubIndex><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.graph" target=_parent class=IParent>mxAutoSaveManager</a><a href="../files/view/mxCellEditor-js.html#mxCellEditor.graph" target=_parent class=IParent>mxCellEditor</a><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.graph" target=_parent class=IParent>mxCellHighlight</a><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.graph" target=_parent class=IParent>mxCellMarker</a><a href="../files/view/mxCellStatePreview-js.html#mxCellStatePreview.graph" target=_parent class=IParent>mxCellStatePreview</a><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.graph" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.graph" target=_parent class=IParent>mxConstraintHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.graph" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/editor/mxEditor-js.html#mxEditor.graph" target=_parent class=IParent>mxEditor</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.graph" target=_parent class=IParent>mxGraphHandler</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.graph" target=_parent class=IParent>mxGraphLayout</a><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.graph" target=_parent class=IParent>mxGraphSelectionModel</a><a href="../files/view/mxGraphView-js.html#mxGraphView.graph" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxGuide-js.html#mxGuide.graph" target=_parent class=IParent>mxGuide</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.graph" target=_parent class=IParent>mxKeyHandler</a><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.graph" target=_parent class=IParent>mxLayoutManager</a><a href="../files/util/mxMorphing-js.html#mxMorphing.graph" target=_parent class=IParent>mxMorphing</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.graph" target=_parent class=IParent>mxPanningHandler</a><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.graph" target=_parent class=IParent>mxPopupMenuHandler</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.graph" target=_parent class=IParent>mxPrintPreview</a><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.graph" target=_parent class=IParent>mxSelectionCellsHandler</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.graph" target=_parent class=IParent>mxSwimlaneManager</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.graph" target=_parent class=IParent>mxTooltipHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.graph" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_graphBounds><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.graphBounds" target=_parent class=ISymbol>graphBounds</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_graphRenderHint><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.graphRenderHint" target=_parent class=ISymbol>graphRenderHint</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_graphX><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.graphX" target=_parent class=ISymbol>graphX</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_graphY><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.graphY" target=_parent class=ISymbol>graphY</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_gridEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_gridEnabled')" class=ISymbol>gridEnabled</a><div class=ISubIndex><a href="../files/util/mxDragSource-js.html#mxDragSource.gridEnabled" target=_parent class=IParent>mxDragSource</a><a href="../files/view/mxGraph-js.html#mxGraph.gridEnabled" target=_parent class=IParent>mxGraph</a></div></div></div><div class=SRResult id=SR_gridSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_gridSize')" class=ISymbol>gridSize</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.gridSize" target=_parent class=IParent>mxGraph</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.gridSize" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_GROUP_undCELLS><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.GROUP_CELLS" target=_parent class=ISymbol>GROUP_CELLS</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_groupBorderSize><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.groupBorderSize" target=_parent class=ISymbol>groupBorderSize</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_groupPadding><div class=IEntry><a href="javascript:searchResults.Toggle('SR_groupPadding')" class=ISymbol>groupPadding</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.groupPadding" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.groupPadding" target=_parent class=IParent>mxCoordinateAssignment</a></div></div></div><div class=SRResult id=SR_groupPaddingBottom><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.groupPaddingBottom" target=_parent class=ISymbol>groupPaddingBottom</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_groupPaddingLeft><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.groupPaddingLeft" target=_parent class=ISymbol>groupPaddingLeft</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_groupPaddingRight><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.groupPaddingRight" target=_parent class=ISymbol>groupPaddingRight</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_groupPaddingTop><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.groupPaddingTop" target=_parent class=ISymbol>groupPaddingTop</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_guide><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.guide" target=_parent class=ISymbol>guide</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_GUIDE_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.GUIDE_COLOR" target=_parent class=ISymbol>GUIDE_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_GUIDE_undSTROKEWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.GUIDE_STROKEWIDTH" target=_parent class=ISymbol>GUIDE_STROKEWIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_guidesEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_guidesEnabled')" class=ISymbol>guidesEnabled</a><div class=ISubIndex><a href="../files/util/mxDragSource-js.html#mxDragSource.guidesEnabled" target=_parent class=IParent>mxDragSource</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.guidesEnabled" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_guideX><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.guideX" target=_parent class=ISymbol>guideX</a>, <span class=IParent>mxGuide</span></div></div><div class=SRResult id=SR_guideY><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.guideY" target=_parent class=ISymbol>guideY</a>, <span class=IParent>mxGuide</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesH.html b/docs/js-api/search/VariablesH.html
index b6d98508c..f45fff54e 100644
--- a/docs/js-api/search/VariablesH.html
+++ b/docs/js-api/search/VariablesH.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_h0><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.h0" target=_parent class=ISymbol>h0</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_HANDLE_undFILLCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.HANDLE_FILLCOLOR" target=_parent class=ISymbol>HANDLE_FILLCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_HANDLE_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.HANDLE_SIZE" target=_parent class=ISymbol>HANDLE_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_HANDLE_undSTROKECOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.HANDLE_STROKECOLOR" target=_parent class=ISymbol>HANDLE_STROKECOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_handleImage><div class=IEntry><a href="javascript:searchResults.Toggle('SR_handleImage')" class=ISymbol>handleImage</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.handleImage" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.handleImage" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_handleMouseOut><div class=IEntry><a href="../files/util/mxPanningManager-js.html#mxPanningManager.handleMouseOut" target=_parent class=ISymbol>handleMouseOut</a>, <span class=IParent>mxPanningManager</span></div></div><div class=SRResult id=SR_handler><div class=IEntry><a href="../files/editor/mxDefaultKeyHandler-js.html#mxDefaultKeyHandler.handler" target=_parent class=ISymbol>handler</a>, <span class=IParent>mxDefaultKeyHandler</span></div></div><div class=SRResult id=SR_handlers><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.handlers" target=_parent class=ISymbol>handlers</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_handlesVisible><div class=IEntry><a href="javascript:searchResults.Toggle('SR_handlesVisible')" class=ISymbol>handlesVisible</a><div class=ISubIndex><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.handlesVisible" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.handlesVisible" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_hashCode><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.hashCode" target=_parent class=ISymbol>hashCode</a>, <span class=IParent>mxGraphHierarchyNode</span></div></div><div class=SRResult id=SR_height><div class=IEntry><a href="javascript:searchResults.Toggle('SR_height')" class=ISymbol>height</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.height" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/util/mxImage-js.html#mxImage.height" target=_parent class=IParent>mxImage</a><a href="../files/util/mxRectangle-js.html#mxRectangle.height" target=_parent class=IParent>mxRectangle</a></div></div></div><div class=SRResult id=SR_help><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.help" target=_parent class=ISymbol>help</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_helpHeight><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.helpHeight" target=_parent class=ISymbol>helpHeight</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_helpResource><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.helpResource" target=_parent class=ISymbol>helpResource</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_helpWidth><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.helpWidth" target=_parent class=ISymbol>helpWidth</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_helpWindowImage><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.helpWindowImage" target=_parent class=ISymbol>helpWindowImage</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_HIDE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.HIDE" target=_parent class=ISymbol>HIDE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_hideOnHover><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.hideOnHover" target=_parent class=ISymbol>hideOnHover</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_HIGHLIGHT_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.HIGHLIGHT_COLOR" target=_parent class=ISymbol>HIGHLIGHT_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_HIGHLIGHT_undOPACITY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.HIGHLIGHT_OPACITY" target=_parent class=ISymbol>HIGHLIGHT_OPACITY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_HIGHLIGHT_undSTROKEWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.HIGHLIGHT_STROKEWIDTH" target=_parent class=ISymbol>HIGHLIGHT_STROKEWIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_highlightColor><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.highlightColor" target=_parent class=ISymbol>highlightColor</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_highlightDropTargets><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.highlightDropTargets" target=_parent class=ISymbol>highlightDropTargets</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_highlightEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.highlightEnabled" target=_parent class=ISymbol>highlightEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_history><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.history" target=_parent class=ISymbol>history</a>, <span class=IParent>mxUndoManager</span></div></div><div class=SRResult id=SR_horizontal><div class=IEntry><a href="javascript:searchResults.Toggle('SR_horizontal')" class=ISymbol>horizontal</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.horizontal" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/util/mxGuide-js.html#mxGuide.horizontal" target=_parent class=IParent>mxGuide</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.horizontal" target=_parent class=IParent>mxPartitionLayout</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.horizontal" target=_parent class=IParent>mxStackLayout</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.horizontal" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_horizontalFlow><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.horizontalFlow" target=_parent class=ISymbol>horizontalFlow</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_horizontalOffset><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.horizontalOffset" target=_parent class=ISymbol>horizontalOffset</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_hotspot><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.hotspot" target=_parent class=ISymbol>hotspot</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_hotspotEnabled><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.hotspotEnabled" target=_parent class=ISymbol>hotspotEnabled</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_htmlLabels><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.htmlLabels" target=_parent class=ISymbol>htmlLabels</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_htmlPreview><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.htmlPreview" target=_parent class=ISymbol>htmlPreview</a>, <span class=IParent>mxGraphHandler</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesI.html b/docs/js-api/search/VariablesI.html
index 4ad7e5ac7..fdb26ec98 100644
--- a/docs/js-api/search/VariablesI.html
+++ b/docs/js-api/search/VariablesI.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_id><div class=IEntry><a href="javascript:searchResults.Toggle('SR_id')" class=ISymbol>id</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.id" target=_parent class=IParent>mxCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyNode-js.html#mxGraphHierarchyNode.id" target=_parent class=IParent>mxGraphHierarchyNode</a></div></div></div><div class=SRResult id=SR_idrefs><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.idrefs" target=_parent class=ISymbol>idrefs</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_ids><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.ids" target=_parent class=ISymbol>ids</a>, <span class=IParent>mxGraphHierarchyEdge</span></div></div><div class=SRResult id=SR_ignoreCell><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.ignoreCell" target=_parent class=ISymbol>ignoreCell</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_ignoreClippedStringSize><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.ignoreClippedStringSize" target=_parent class=ISymbol>ignoreClippedStringSize</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_ignoredChanges><div class=IEntry><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.ignoredChanges" target=_parent class=ISymbol>ignoredChanges</a>, <span class=IParent>mxAutoSaveManager</span></div></div><div class=SRResult id=SR_ignoreGrid><div class=IEntry><a href="../files/handler/mxHandle-js.html#mxHandle.ignoreGrid" target=_parent class=ISymbol>ignoreGrid</a>, <span class=IParent>mxHandle</span></div></div><div class=SRResult id=SR_ignoreMouseDown><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.ignoreMouseDown" target=_parent class=ISymbol>ignoreMouseDown</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_ignoreRelativeEdgeParent><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.ignoreRelativeEdgeParent" target=_parent class=ISymbol>ignoreRelativeEdgeParent</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_ignoreScrollbars><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.ignoreScrollbars" target=_parent class=ISymbol>ignoreScrollbars</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_ignoreStringSize><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.ignoreStringSize" target=_parent class=ISymbol>ignoreStringSize</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_ignoreTouchEvents><div class=IEntry><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.ignoreTouchEvents" target=_parent class=ISymbol>ignoreTouchEvents</a>, <span class=IParent>mxTooltipHandler</span></div></div><div class=SRResult id=SR_image><div class=IEntry><a href="javascript:searchResults.Toggle('SR_image')" class=ISymbol>image</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.image" target=_parent class=IParent>mxCellOverlay</a><a href="../files/handler/mxHandle-js.html#mxHandle.image" target=_parent class=IParent>mxHandle</a></div></div></div><div class=SRResult id=SR_imageBasePath><div class=IEntry><a href="javascript:searchResults.Toggle('SR_imageBasePath')" class=ISymbol>imageBasePath</a><div class=ISubIndex><a href="../files/mxClient-js.html#mxClient.imageBasePath" target=_parent class=IParent>mxClient</a><a href="../files/editor/mxDefaultPopupMenu-js.html#mxDefaultPopupMenu.imageBasePath" target=_parent class=IParent>mxDefaultPopupMenu</a></div></div></div><div class=SRResult id=SR_imageBundles><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.imageBundles" target=_parent class=ISymbol>imageBundles</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_imageOffset><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.imageOffset" target=_parent class=ISymbol>imageOffset</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_images><div class=IEntry><a href="../files/util/mxImageBundle-js.html#mxImageBundle.images" target=_parent class=ISymbol>images</a>, <span class=IParent>mxImageBundle</span></div></div><div class=SRResult id=SR_imageSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_imageSize')" class=ISymbol>imageSize</a><div class=ISubIndex><a href="../files/shape/mxLabel-js.html#mxLabel.imageSize" target=_parent class=IParent>mxLabel</a><a href="../files/shape/mxSwimlane-js.html#mxSwimlane.imageSize" target=_parent class=IParent>mxSwimlane</a></div></div></div><div class=SRResult id=SR_importEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.importEnabled" target=_parent class=ISymbol>importEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_includeOverlays><div class=IEntry><a href="../files/util/mxImageExport-js.html#mxImageExport.includeOverlays" target=_parent class=ISymbol>includeOverlays</a>, <span class=IParent>mxImageExport</span></div></div><div class=SRResult id=SR_index><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.index" target=_parent class=ISymbol>index</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_indexOfNextAdd><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.indexOfNextAdd" target=_parent class=ISymbol>indexOfNextAdd</a>, <span class=IParent>mxUndoManager</span></div></div><div class=SRResult id=SR_indicatorSize><div class=IEntry><a href="../files/shape/mxLabel-js.html#mxLabel.indicatorSize" target=_parent class=ISymbol>indicatorSize</a>, <span class=IParent>mxLabel</span></div></div><div class=SRResult id=SR_indicatorSpacing><div class=IEntry><a href="../files/shape/mxLabel-js.html#mxLabel.indicatorSpacing" target=_parent class=ISymbol>indicatorSpacing</a>, <span class=IParent>mxLabel</span></div></div><div class=SRResult id=SR_indices><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.indices" target=_parent class=ISymbol>indices</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_initialTemp><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.initialTemp" target=_parent class=ISymbol>initialTemp</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_initialTouchX><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.initialTouchX" target=_parent class=ISymbol>initialTouchX</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_initialTouchY><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.initialTouchY" target=_parent class=ISymbol>initialTouchY</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_initialValue><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.initialValue" target=_parent class=ISymbol>initialValue</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_initialX><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.initialX" target=_parent class=ISymbol>initialX</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_insertBeforeSource><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.insertBeforeSource" target=_parent class=ISymbol>insertBeforeSource</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_insertCount><div class=IEntry><a href="../files/util/mxClipboard-js.html#mxClipboard.insertCount" target=_parent class=ISymbol>insertCount</a>, <span class=IParent>mxClipboard</span></div></div><div class=SRResult id=SR_insertFunction><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.insertFunction" target=_parent class=ISymbol>insertFunction</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_interHierarchySpacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_interHierarchySpacing')" class=ISymbol>interHierarchySpacing</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.interHierarchySpacing" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.interHierarchySpacing" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_interRankCellSpacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_interRankCellSpacing')" class=ISymbol>interRankCellSpacing</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.interRankCellSpacing" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.interRankCellSpacing" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.interRankCellSpacing" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_intraCellSpacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_intraCellSpacing')" class=ISymbol>intraCellSpacing</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.intraCellSpacing" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.intraCellSpacing" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.intraCellSpacing" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_invalid><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.invalid" target=_parent class=ISymbol>invalid</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_INVALID_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.INVALID_COLOR" target=_parent class=ISymbol>INVALID_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_INVALID_undCONNECT_undTARGET_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.INVALID_CONNECT_TARGET_COLOR" target=_parent class=ISymbol>INVALID_CONNECT_TARGET_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_invalidColor><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.invalidColor" target=_parent class=ISymbol>invalidColor</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_invalidStyle><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.invalidStyle" target=_parent class=ISymbol>invalidStyle</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_invert><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.invert" target=_parent class=ISymbol>invert</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_invokesStopCellEditing><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.invokesStopCellEditing" target=_parent class=ISymbol>invokesStopCellEditing</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_IS_undANDROID><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_ANDROID" target=_parent class=ISymbol>IS_ANDROID</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undCHROMEAPP><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_CHROMEAPP" target=_parent class=ISymbol>IS_CHROMEAPP</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undCHROMEOS><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_CHROMEOS" target=_parent class=ISymbol>IS_CHROMEOS</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undEDGE><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_EDGE" target=_parent class=ISymbol>IS_EDGE</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undEM><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_EM" target=_parent class=ISymbol>IS_EM</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undFF><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_FF" target=_parent class=ISymbol>IS_FF</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undGC><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_GC" target=_parent class=ISymbol>IS_GC</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undIE><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_IE" target=_parent class=ISymbol>IS_IE</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undIE11><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_IE11" target=_parent class=ISymbol>IS_IE11</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undIE6><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_IE6" target=_parent class=ISymbol>IS_IE6</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undIOS><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_IOS" target=_parent class=ISymbol>IS_IOS</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undLOCAL><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_LOCAL" target=_parent class=ISymbol>IS_LOCAL</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undMAC><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_MAC" target=_parent class=ISymbol>IS_MAC</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undMT><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_MT" target=_parent class=ISymbol>IS_MT</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undNS><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_NS" target=_parent class=ISymbol>IS_NS</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undOP><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_OP" target=_parent class=ISymbol>IS_OP</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undOT><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_OT" target=_parent class=ISymbol>IS_OT</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undPOINTER><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_POINTER" target=_parent class=ISymbol>IS_POINTER</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undQUIRKS><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_QUIRKS" target=_parent class=ISymbol>IS_QUIRKS</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undSF><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_SF" target=_parent class=ISymbol>IS_SF</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undSVG><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_SVG" target=_parent class=ISymbol>IS_SVG</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undTOUCH><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_TOUCH" target=_parent class=ISymbol>IS_TOUCH</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undVML><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_VML" target=_parent class=ISymbol>IS_VML</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_IS_undWIN><div class=IEntry><a href="../files/mxClient-js.html#mxClient.IS_WIN" target=_parent class=ISymbol>IS_WIN</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_isMouseDown><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.isMouseDown" target=_parent class=ISymbol>isMouseDown</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_isMoveable><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.isMoveable" target=_parent class=ISymbol>isMoveable</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_isReversed><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.isReversed" target=_parent class=ISymbol>isReversed</a>, <span class=IParent>mxGraphHierarchyEdge</span></div></div><div class=SRResult id=SR_itemCount><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.itemCount" target=_parent class=ISymbol>itemCount</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_iteration><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.iteration" target=_parent class=ISymbol>iteration</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_iterationsWithoutImprovement><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.iterationsWithoutImprovement" target=_parent class=ISymbol>iterationsWithoutImprovement</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesJ.html b/docs/js-api/search/VariablesJ.html
index 6c518b9d3..5bdae7506 100644
--- a/docs/js-api/search/VariablesJ.html
+++ b/docs/js-api/search/VariablesJ.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jettyPositions><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.jettyPositions" target=_parent class=ISymbol>jettyPositions</a>, <span class=IParent>mxCoordinateAssignment</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesK.html b/docs/js-api/search/VariablesK.html
index e1a042866..b3d268ce6 100644
--- a/docs/js-api/search/VariablesK.html
+++ b/docs/js-api/search/VariablesK.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_keepEdgesInBackground><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.keepEdgesInBackground" target=_parent class=ISymbol>keepEdgesInBackground</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_keepEdgesInForeground><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.keepEdgesInForeground" target=_parent class=ISymbol>keepEdgesInForeground</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_keepFirstLocation><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.keepFirstLocation" target=_parent class=ISymbol>keepFirstLocation</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_keepOnTop><div class=IEntry><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.keepOnTop" target=_parent class=ISymbol>keepOnTop</a>, <span class=IParent>mxCellHighlight</span></div></div><div class=SRResult id=SR_keepSelectionVisibleOnZoom><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.keepSelectionVisibleOnZoom" target=_parent class=ISymbol>keepSelectionVisibleOnZoom</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_keyHandler><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.keyHandler" target=_parent class=ISymbol>keyHandler</a>, <span class=IParent>mxEditor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesL.html b/docs/js-api/search/VariablesL.html
index f062249cd..dabcc7d39 100644
--- a/docs/js-api/search/VariablesL.html
+++ b/docs/js-api/search/VariablesL.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_LABEL_undCHANGED><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.LABEL_CHANGED" target=_parent class=ISymbol>LABEL_CHANGED</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_LABEL_undHANDLE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.LABEL_HANDLE" target=_parent class=ISymbol>LABEL_HANDLE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_LABEL_undHANDLE_undFILLCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.LABEL_HANDLE_FILLCOLOR" target=_parent class=ISymbol>LABEL_HANDLE_FILLCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_LABEL_undHANDLE_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.LABEL_HANDLE_SIZE" target=_parent class=ISymbol>LABEL_HANDLE_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_labels><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.labels" target=_parent class=ISymbol>labels</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_labelShape><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.labelShape" target=_parent class=ISymbol>labelShape</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_labelsVisible><div class=IEntry><a href="javascript:searchResults.Toggle('SR_labelsVisible')" class=ISymbol>labelsVisible</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.labelsVisible" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxOutline-js.html#mxOutline.labelsVisible" target=_parent class=IParent>mxOutline</a></div></div></div><div class=SRResult id=SR_language><div class=IEntry><a href="../files/mxClient-js.html#mxClient.language" target=_parent class=ISymbol>language</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_languages><div class=IEntry><a href="../files/mxClient-js.html#mxClient.languages" target=_parent class=ISymbol>languages</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_lastForegroundHtmlNode><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.lastForegroundHtmlNode" target=_parent class=ISymbol>lastForegroundHtmlNode</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_lastForegroundNode><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.lastForegroundNode" target=_parent class=ISymbol>lastForegroundNode</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_lastHtmlNode><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.lastHtmlNode" target=_parent class=ISymbol>lastHtmlNode</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_lastNode><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.lastNode" target=_parent class=ISymbol>lastNode</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_lastSavedResource><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.lastSavedResource" target=_parent class=ISymbol>lastSavedResource</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_lastSnapshot><div class=IEntry><a href="../files/util/mxAutoSaveManager-js.html#mxAutoSaveManager.lastSnapshot" target=_parent class=ISymbol>lastSnapshot</a>, <span class=IParent>mxAutoSaveManager</span></div></div><div class=SRResult id=SR_lastTouchTime><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.lastTouchTime" target=_parent class=ISymbol>lastTouchTime</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_lastTouchX><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.lastTouchX" target=_parent class=ISymbol>lastTouchX</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_lastValue><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.lastValue" target=_parent class=ISymbol>lastValue</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_lastX><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.lastX" target=_parent class=ISymbol>lastX</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_lastY><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.lastY" target=_parent class=ISymbol>lastY</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_layout><div class=IEntry><a href="javascript:searchResults.Toggle('SR_layout')" class=ISymbol>layout</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.layout" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.layout" target=_parent class=IParent>mxMedianHybridCrossingReduction</a><a href="../files/layout/hierarchical/stage/mxMinimumCycleRemover-js.html#mxMinimumCycleRemover.layout" target=_parent class=IParent>mxMinimumCycleRemover</a><a href="../files/layout/hierarchical/stage/mxSwimlaneOrdering-js.html#mxSwimlaneOrdering.layout" target=_parent class=IParent>mxSwimlaneOrdering</a></div></div></div><div class=SRResult id=SR_LAYOUT_undCELLS><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.LAYOUT_CELLS" target=_parent class=ISymbol>LAYOUT_CELLS</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_layoutDiagram><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.layoutDiagram" target=_parent class=ISymbol>layoutDiagram</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_layouts><div class=IEntry><a href="../files/layout/mxCompositeLayout-js.html#mxCompositeLayout.layouts" target=_parent class=ISymbol>layouts</a>, <span class=IParent>mxCompositeLayout</span></div></div><div class=SRResult id=SR_layoutSwimlanes><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.layoutSwimlanes" target=_parent class=ISymbol>layoutSwimlanes</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_legacyControlPosition><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.legacyControlPosition" target=_parent class=ISymbol>legacyControlPosition</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_legacySpacing><div class=IEntry><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.legacySpacing" target=_parent class=ISymbol>legacySpacing</a>, <span class=IParent>mxCellRenderer</span></div></div><div class=SRResult id=SR_length><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.length" target=_parent class=ISymbol>length</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_levelDistance><div class=IEntry><a href="javascript:searchResults.Toggle('SR_levelDistance')" class=ISymbol>levelDistance</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.levelDistance" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.levelDistance" target=_parent class=IParent>mxRadialTreeLayout</a></div></div></div><div class=SRResult id=SR_limitX><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.limitX" target=_parent class=ISymbol>limitX</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_LINE_undARCSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.LINE_ARCSIZE" target=_parent class=ISymbol>LINE_ARCSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_LINE_undHEIGHT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.LINE_HEIGHT" target=_parent class=ISymbol>LINE_HEIGHT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_lineFeed><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.lineFeed" target=_parent class=ISymbol>lineFeed</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_lineHeightCorrection><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.lineHeightCorrection" target=_parent class=ISymbol>lineHeightCorrection</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_lineOp><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineOp')" class=ISymbol>lineOp</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.lineOp" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.lineOp" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_livePreview><div class=IEntry><a href="javascript:searchResults.Toggle('SR_livePreview')" class=ISymbol>livePreview</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.livePreview" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.livePreview" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_loadDefaultBundle><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.loadDefaultBundle" target=_parent class=ISymbol>loadDefaultBundle</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_LOCKED_undHANDLE_undFILLCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.LOCKED_HANDLE_FILLCOLOR" target=_parent class=ISymbol>LOCKED_HANDLE_FILLCOLOR</a>, <span class=IParent>mxConstants</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesM.html b/docs/js-api/search/VariablesM.html
index 99cbdd208..523ba2b04 100644
--- a/docs/js-api/search/VariablesM.html
+++ b/docs/js-api/search/VariablesM.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_maintainEdgeParent><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.maintainEdgeParent" target=_parent class=ISymbol>maintainEdgeParent</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_maintainParentLocation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_maintainParentLocation')" class=ISymbol>maintainParentLocation</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.maintainParentLocation" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.maintainParentLocation" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.maintainParentLocation" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_maintainSwimlanes><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.maintainSwimlanes" target=_parent class=ISymbol>maintainSwimlanes</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_manageLabelHandle><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.manageLabelHandle" target=_parent class=ISymbol>manageLabelHandle</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_manageSizers><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.manageSizers" target=_parent class=ISymbol>manageSizers</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_mapping><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.mapping" target=_parent class=ISymbol>mapping</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_marginBottom><div class=IEntry><a href="javascript:searchResults.Toggle('SR_marginBottom')" class=ISymbol>marginBottom</a><div class=ISubIndex><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.marginBottom" target=_parent class=IParent>mxPrintPreview</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.marginBottom" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_marginLeft><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.marginLeft" target=_parent class=ISymbol>marginLeft</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_marginRight><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.marginRight" target=_parent class=ISymbol>marginRight</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_marginTop><div class=IEntry><a href="javascript:searchResults.Toggle('SR_marginTop')" class=ISymbol>marginTop</a><div class=ISubIndex><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.marginTop" target=_parent class=IParent>mxPrintPreview</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.marginTop" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_MARK><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.MARK" target=_parent class=ISymbol>MARK</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_markedState><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.markedState" target=_parent class=ISymbol>markedState</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_marker><div class=IEntry><a href="javascript:searchResults.Toggle('SR_marker')" class=ISymbol>marker</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.marker" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.marker" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_markers><div class=IEntry><a href="../files/shape/mxMarker-js.html#mxMarker.markers" target=_parent class=ISymbol>markers</a>, <span class=IParent>mxMarker</span></div></div><div class=SRResult id=SR_master><div class=IEntry><a href="../files/layout/mxCompositeLayout-js.html#mxCompositeLayout.master" target=_parent class=ISymbol>master</a>, <span class=IParent>mxCompositeLayout</span></div></div><div class=SRResult id=SR_matchHtmlAlignment><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.matchHtmlAlignment" target=_parent class=ISymbol>matchHtmlAlignment</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_max><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.max" target=_parent class=ISymbol>max</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_MAX_undHOTSPOT_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.MAX_HOTSPOT_SIZE" target=_parent class=ISymbol>MAX_HOTSPOT_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_maxCells><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.maxCells" target=_parent class=ISymbol>maxCells</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_maxDistanceLimit><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.maxDistanceLimit" target=_parent class=ISymbol>maxDistanceLimit</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_maxFitScale><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.maxFitScale" target=_parent class=ISymbol>maxFitScale</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_maxHandlers><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.maxHandlers" target=_parent class=ISymbol>maxHandlers</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_maxHeight><div class=IEntry><a href="../files/shape/mxCylinder-js.html#mxCylinder.maxHeight" target=_parent class=ISymbol>maxHeight</a>, <span class=IParent>mxCylinder</span></div></div><div class=SRResult id=SR_MAXIMIZE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.MAXIMIZE" target=_parent class=ISymbol>MAXIMIZE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_maximizeImage><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.maximizeImage" target=_parent class=ISymbol>maximizeImage</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_maximumContainerSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.maximumContainerSize" target=_parent class=ISymbol>maximumContainerSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_maximumGraphBounds><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.maximumGraphBounds" target=_parent class=ISymbol>maximumGraphBounds</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_maxIterations><div class=IEntry><a href="javascript:searchResults.Toggle('SR_maxIterations')" class=ISymbol>maxIterations</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.maxIterations" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.maxIterations" target=_parent class=IParent>mxFastOrganicLayout</a><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.maxIterations" target=_parent class=IParent>mxMedianHybridCrossingReduction</a></div></div></div><div class=SRResult id=SR_maxLivePreview><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.maxLivePreview" target=_parent class=ISymbol>maxLivePreview</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_maxNoImprovementIterations><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.maxNoImprovementIterations" target=_parent class=ISymbol>maxNoImprovementIterations</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_maxRank><div class=IEntry><a href="javascript:searchResults.Toggle('SR_maxRank')" class=ISymbol>maxRank</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.maxRank" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.maxRank" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.maxRank" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_maxRankHeight><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.maxRankHeight" target=_parent class=ISymbol>maxRankHeight</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_maxScale><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.maxScale" target=_parent class=ISymbol>maxScale</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_medianValue><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#MedianCellSorter.medianValue" target=_parent class=ISymbol>medianValue</a>, <span class=IParent>MedianCellSorter</span></div></div><div class=SRResult id=SR_mergeRemoveEnabled><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.mergeRemoveEnabled" target=_parent class=ISymbol>mergeRemoveEnabled</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_method><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.method" target=_parent class=ISymbol>method</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_min><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.min" target=_parent class=ISymbol>min</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_MIN_undHOTSPOT_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.MIN_HOTSPOT_SIZE" target=_parent class=ISymbol>MIN_HOTSPOT_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_minDistanceLimit><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.minDistanceLimit" target=_parent class=ISymbol>minDistanceLimit</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_minDistanceLimitSquared><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.minDistanceLimitSquared" target=_parent class=ISymbol>minDistanceLimitSquared</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_minEdgeJetty><div class=IEntry><a href="javascript:searchResults.Toggle('SR_minEdgeJetty')" class=ISymbol>minEdgeJetty</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.minEdgeJetty" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.minEdgeJetty" target=_parent class=IParent>mxCoordinateAssignment</a></div></div></div><div class=SRResult id=SR_minFitScale><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.minFitScale" target=_parent class=ISymbol>minFitScale</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_MINIMIZE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.MINIMIZE" target=_parent class=ISymbol>MINIMIZE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_minimizeImage><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.minimizeImage" target=_parent class=ISymbol>minimizeImage</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_minimumContainerSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.minimumContainerSize" target=_parent class=ISymbol>minimumContainerSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_minimumGraphSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.minimumGraphSize" target=_parent class=ISymbol>minimumGraphSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_minimumSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_minimumSize')" class=ISymbol>minimumSize</a><div class=ISubIndex><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.minimumSize" target=_parent class=IParent>mxGraphHandler</a><a href="../files/util/mxWindow-js.html#mxWindow.minimumSize" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_minPageBreakDist><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.minPageBreakDist" target=_parent class=ISymbol>minPageBreakDist</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_minRank><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.minRank" target=_parent class=ISymbol>minRank</a>, <span class=IParent>mxGraphAbstractHierarchyCell</span></div></div><div class=SRResult id=SR_minResize><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.minResize" target=_parent class=ISymbol>minResize</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_minScale><div class=IEntry><a href="javascript:searchResults.Toggle('SR_minScale')" class=ISymbol>minScale</a><div class=ISubIndex><a href="../files/view/mxOutline-js.html#mxOutline.minScale" target=_parent class=IParent>mxOutline</a><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.minScale" target=_parent class=IParent>mxPanningHandler</a></div></div></div><div class=SRResult id=SR_minStrokeWidth><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.minStrokeWidth" target=_parent class=ISymbol>minStrokeWidth</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_minSvgStrokeWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_minSvgStrokeWidth')" class=ISymbol>minSvgStrokeWidth</a><div class=ISubIndex><a href="../files/view/mxCellRenderer-js.html#mxCellRenderer.minSvgStrokeWidth" target=_parent class=IParent>mxCellRenderer</a><a href="../files/shape/mxShape-js.html#mxShape.minSvgStrokeWidth" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_model><div class=IEntry><a href="javascript:searchResults.Toggle('SR_model')" class=ISymbol>model</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.model" target=_parent class=IParent>mxGraph</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.model" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.model" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_modified><div class=IEntry><a href="javascript:searchResults.Toggle('SR_modified')" class=ISymbol>modified</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.modified" target=_parent class=IParent>mxCellEditor</a><a href="../files/editor/mxEditor-js.html#mxEditor.modified" target=_parent class=IParent>mxEditor</a></div></div></div><div class=SRResult id=SR_MOUSE_undDOWN><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.MOUSE_DOWN" target=_parent class=ISymbol>MOUSE_DOWN</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_MOUSE_undMOVE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.MOUSE_MOVE" target=_parent class=ISymbol>MOUSE_MOVE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_MOUSE_undUP><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.MOUSE_UP" target=_parent class=ISymbol>MOUSE_UP</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_mouseDownCounter><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.mouseDownCounter" target=_parent class=ISymbol>mouseDownCounter</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_mouseListeners><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.mouseListeners" target=_parent class=ISymbol>mouseListeners</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_MOVE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.MOVE" target=_parent class=ISymbol>MOVE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_MOVE_undCELLS><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.MOVE_CELLS" target=_parent class=ISymbol>MOVE_CELLS</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_MOVE_undEND><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.MOVE_END" target=_parent class=ISymbol>MOVE_END</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_MOVE_undSTART><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.MOVE_START" target=_parent class=ISymbol>MOVE_START</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_moveCircle><div class=IEntry><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.moveCircle" target=_parent class=ISymbol>moveCircle</a>, <span class=IParent>mxCircleLayout</span></div></div><div class=SRResult id=SR_moveEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.moveEnabled" target=_parent class=ISymbol>moveEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_moveHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_moveHandler')" class=ISymbol>moveHandler</a><div class=ISubIndex><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.moveHandler" target=_parent class=IParent>mxLayoutManager</a><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.moveHandler" target=_parent class=IParent>mxSwimlaneManager</a></div></div></div><div class=SRResult id=SR_moveIconBack><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.moveIconBack" target=_parent class=ISymbol>moveIconBack</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_moveIconFront><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.moveIconFront" target=_parent class=ISymbol>moveIconFront</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_moveOp><div class=IEntry><a href="javascript:searchResults.Toggle('SR_moveOp')" class=ISymbol>moveOp</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.moveOp" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.moveOp" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_moveParent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_moveParent')" class=ISymbol>moveParent</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.moveParent" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.moveParent" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_movePreviewAway><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.movePreviewAway" target=_parent class=ISymbol>movePreviewAway</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_movePreviewToFront><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.movePreviewToFront" target=_parent class=ISymbol>movePreviewToFront</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_movePropertiesDialog><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.movePropertiesDialog" target=_parent class=ISymbol>movePropertiesDialog</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_moveTree><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.moveTree" target=_parent class=ISymbol>moveTree</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_multigraph><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.multigraph" target=_parent class=ISymbol>multigraph</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_multiplicities><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.multiplicities" target=_parent class=ISymbol>multiplicities</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_mxForceIncludes><div class=IEntry><a href="../files/mxClient-js.html#mxClient.mxForceIncludes" target=_parent class=ISymbol>mxForceIncludes</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_mxLoadResources><div class=IEntry><a href="../files/mxClient-js.html#mxClient.mxLoadResources" target=_parent class=ISymbol>mxLoadResources</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_mxLoadStylesheets><div class=IEntry><a href="../files/mxClient-js.html#mxClient.mxLoadStylesheets" target=_parent class=ISymbol>mxLoadStylesheets</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_mxResourceExtension><div class=IEntry><a href="../files/mxClient-js.html#mxClient.mxResourceExtension" target=_parent class=ISymbol>mxResourceExtension</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_mxTransient><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.mxTransient" target=_parent class=ISymbol>mxTransient</a>, <span class=IParent>mxCell</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesN.html b/docs/js-api/search/VariablesN.html
index f93c07cee..79b01d6b8 100644
--- a/docs/js-api/search/VariablesN.html
+++ b/docs/js-api/search/VariablesN.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_name><div class=IEntry><a href="javascript:searchResults.Toggle('SR_name')" class=ISymbol>name</a><div class=ISubIndex><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint.name" target=_parent class=IParent>mxConnectionConstraint</a><a href="../files/util/mxEventObject-js.html#mxEventObject.name" target=_parent class=IParent>mxEventObject</a></div></div></div><div class=SRResult id=SR_nativeDoubleClickEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.nativeDoubleClickEnabled" target=_parent class=ISymbol>nativeDoubleClickEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_neighbours><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.neighbours" target=_parent class=ISymbol>neighbours</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_nestedBestRanks><div class=IEntry><a href="../files/layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html#mxMedianHybridCrossingReduction.nestedBestRanks" target=_parent class=ISymbol>nestedBestRanks</a>, <span class=IParent>mxMedianHybridCrossingReduction</span></div></div><div class=SRResult id=SR_nextId><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.nextId" target=_parent class=ISymbol>nextId</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_nextLayerConnectedCache><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.nextLayerConnectedCache" target=_parent class=ISymbol>nextLayerConnectedCache</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_nextLayerConnectedCells><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.nextLayerConnectedCells" target=_parent class=ISymbol>nextLayerConnectedCells</a>, <span class=IParent>mxGraphAbstractHierarchyCell</span></div></div><div class=SRResult id=SR_NO_undFO><div class=IEntry><a href="../files/mxClient-js.html#mxClient.NO_FO" target=_parent class=ISymbol>NO_FO</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_node><div class=IEntry><a href="javascript:searchResults.Toggle('SR_node')" class=ISymbol>node</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.node" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/shape/mxShape-js.html#mxShape.node" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_nodeDistance><div class=IEntry><a href="javascript:searchResults.Toggle('SR_nodeDistance')" class=ISymbol>nodeDistance</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.nodeDistance" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.nodeDistance" target=_parent class=IParent>mxRadialTreeLayout</a></div></div></div><div class=SRResult id=SR_NODETYPE_undATTRIBUTE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_ATTRIBUTE" target=_parent class=ISymbol>NODETYPE_ATTRIBUTE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undCDATA><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_CDATA" target=_parent class=ISymbol>NODETYPE_CDATA</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undCOMMENT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_COMMENT" target=_parent class=ISymbol>NODETYPE_COMMENT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undDOCUMENT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_DOCUMENT" target=_parent class=ISymbol>NODETYPE_DOCUMENT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undDOCUMENT_undFRAGMENT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_DOCUMENT_FRAGMENT" target=_parent class=ISymbol>NODETYPE_DOCUMENT_FRAGMENT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undDOCUMENTTYPE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_DOCUMENTTYPE" target=_parent class=ISymbol>NODETYPE_DOCUMENTTYPE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undELEMENT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_ELEMENT" target=_parent class=ISymbol>NODETYPE_ELEMENT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undENTITY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_ENTITY" target=_parent class=ISymbol>NODETYPE_ENTITY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undENTITY_undREFERENCE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_ENTITY_REFERENCE" target=_parent class=ISymbol>NODETYPE_ENTITY_REFERENCE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undNOTATION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_NOTATION" target=_parent class=ISymbol>NODETYPE_NOTATION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undPROCESSING_undINSTRUCTION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_PROCESSING_INSTRUCTION" target=_parent class=ISymbol>NODETYPE_PROCESSING_INSTRUCTION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NODETYPE_undTEXT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NODETYPE_TEXT" target=_parent class=ISymbol>NODETYPE_TEXT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NONE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NONE" target=_parent class=ISymbol>NONE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_noReset><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.noReset" target=_parent class=ISymbol>noReset</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_NORMALIZE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.NORMALIZE" target=_parent class=ISymbol>NORMALIZE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_normalizeImage><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.normalizeImage" target=_parent class=ISymbol>normalizeImage</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_normalKeys><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.normalKeys" target=_parent class=ISymbol>normalKeys</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_NOTIFY><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.NOTIFY" target=_parent class=ISymbol>NOTIFY</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_NS_undSVG><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NS_SVG" target=_parent class=ISymbol>NS_SVG</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NS_undXHTML><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NS_XHTML" target=_parent class=ISymbol>NS_XHTML</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_NS_undXLINK><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.NS_XLINK" target=_parent class=ISymbol>NS_XLINK</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_nudge><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.nudge" target=_parent class=ISymbol>nudge</a>, <span class=IParent>WeightedCellSorter</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesO.html b/docs/js-api/search/VariablesO.html
index ee8e77a6e..526af45d3 100644
--- a/docs/js-api/search/VariablesO.html
+++ b/docs/js-api/search/VariablesO.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_objects><div class=IEntry><a href="../files/io/mxCodec-js.html#mxCodec.objects" target=_parent class=ISymbol>objects</a>, <span class=IParent>mxCodec</span></div></div><div class=SRResult id=SR_OFFICE_undPREFIX><div class=IEntry><a href="../files/mxClient-js.html#mxClient.OFFICE_PREFIX" target=_parent class=ISymbol>OFFICE_PREFIX</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_offset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_offset')" class=ISymbol>offset</a><div class=ISubIndex><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.offset" target=_parent class=IParent>mxCellOverlay</a><a href="../files/model/mxGeometry-js.html#mxGeometry.offset" target=_parent class=IParent>mxGeometry</a></div></div></div><div class=SRResult id=SR_oldBounds><div class=IEntry><a href="../files/view/mxTemporaryCellStates-js.html#mxTemporaryCellStates.oldBounds" target=_parent class=ISymbol>oldBounds</a>, <span class=IParent>mxTemporaryCellStates</span></div></div><div class=SRResult id=SR_oldScale><div class=IEntry><a href="../files/view/mxTemporaryCellStates-js.html#mxTemporaryCellStates.oldScale" target=_parent class=ISymbol>oldScale</a>, <span class=IParent>mxTemporaryCellStates</span></div></div><div class=SRResult id=SR_oldStates><div class=IEntry><a href="../files/view/mxTemporaryCellStates-js.html#mxTemporaryCellStates.oldStates" target=_parent class=ISymbol>oldStates</a>, <span class=IParent>mxTemporaryCellStates</span></div></div><div class=SRResult id=SR_OPEN><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.OPEN" target=_parent class=ISymbol>OPEN</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_optimizeVmlReflows><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.optimizeVmlReflows" target=_parent class=ISymbol>optimizeVmlReflows</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_ORDER_undCELLS><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.ORDER_CELLS" target=_parent class=ISymbol>ORDER_CELLS</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_orientation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_orientation')" class=ISymbol>orientation</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.orientation" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.orientation" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.orientation" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_origin><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.origin" target=_parent class=ISymbol>origin</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_outline><div class=IEntry><a href="javascript:searchResults.Toggle('SR_outline')" class=ISymbol>outline</a><div class=ISubIndex><a href="../files/editor/mxEditor-js.html#mxEditor.outline" target=_parent class=IParent>mxEditor</a><a href="../files/shape/mxShape-js.html#mxShape.outline" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_OUTLINE_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.OUTLINE_COLOR" target=_parent class=ISymbol>OUTLINE_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_OUTLINE_undHANDLE_undFILLCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.OUTLINE_HANDLE_FILLCOLOR" target=_parent class=ISymbol>OUTLINE_HANDLE_FILLCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_OUTLINE_undHANDLE_undSTROKECOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.OUTLINE_HANDLE_STROKECOLOR" target=_parent class=ISymbol>OUTLINE_HANDLE_STROKECOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_OUTLINE_undHIGHLIGHT_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.OUTLINE_HIGHLIGHT_COLOR" target=_parent class=ISymbol>OUTLINE_HIGHLIGHT_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_OUTLINE_undSTROKEWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.OUTLINE_STROKEWIDTH" target=_parent class=ISymbol>OUTLINE_STROKEWIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_outlineConnect><div class=IEntry><a href="javascript:searchResults.Toggle('SR_outlineConnect')" class=ISymbol>outlineConnect</a><div class=ISubIndex><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.outlineConnect" target=_parent class=IParent>mxConnectionHandler</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.outlineConnect" target=_parent class=IParent>mxEdgeHandler</a></div></div></div><div class=SRResult id=SR_outlineResource><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.outlineResource" target=_parent class=ISymbol>outlineResource</a>, <span class=IParent>mxEditor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesP.html b/docs/js-api/search/VariablesP.html
index 411dcc51a..cdabecdbd 100644
--- a/docs/js-api/search/VariablesP.html
+++ b/docs/js-api/search/VariablesP.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_PAGE_undFORMAT_undA4_undPORTRAIT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.PAGE_FORMAT_A4_PORTRAIT" target=_parent class=ISymbol>PAGE_FORMAT_A4_PORTRAIT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_PAGE_undFORMAT_undLETTER_undPORTRAIT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.PAGE_FORMAT_LETTER_PORTRAIT" target=_parent class=ISymbol>PAGE_FORMAT_LETTER_PORTRAIT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_pageBreakColor><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.pageBreakColor" target=_parent class=ISymbol>pageBreakColor</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_pageBreakDashed><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.pageBreakDashed" target=_parent class=ISymbol>pageBreakDashed</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_pageBreaksVisible><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.pageBreaksVisible" target=_parent class=ISymbol>pageBreaksVisible</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_pageCount><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.pageCount" target=_parent class=ISymbol>pageCount</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_pageFormat><div class=IEntry><a href="javascript:searchResults.Toggle('SR_pageFormat')" class=ISymbol>pageFormat</a><div class=ISubIndex><a href="../files/view/mxGraph-js.html#mxGraph.pageFormat" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.pageFormat" target=_parent class=IParent>mxPrintPreview</a></div></div></div><div class=SRResult id=SR_pageScale><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.pageScale" target=_parent class=ISymbol>pageScale</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_pageSelector><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.pageSelector" target=_parent class=ISymbol>pageSelector</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_pageVisible><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.pageVisible" target=_parent class=ISymbol>pageVisible</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_PAN><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.PAN" target=_parent class=ISymbol>PAN</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_PAN_undEND><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.PAN_END" target=_parent class=ISymbol>PAN_END</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_PAN_undSTART><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.PAN_START" target=_parent class=ISymbol>PAN_START</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_panDx><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.panDx" target=_parent class=ISymbol>panDx</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_panDy><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.panDy" target=_parent class=ISymbol>panDy</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_panningEnabled><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.panningEnabled" target=_parent class=ISymbol>panningEnabled</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_parallelEdgeSpacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_parallelEdgeSpacing')" class=ISymbol>parallelEdgeSpacing</a><div class=ISubIndex><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.parallelEdgeSpacing" target=_parent class=IParent>mxCoordinateAssignment</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.parallelEdgeSpacing" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.parallelEdgeSpacing" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_params><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.params" target=_parent class=ISymbol>params</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_parent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_parent')" class=ISymbol>parent</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.parent" target=_parent class=IParent>mxCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.parent" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.parent" target=_parent class=IParent>mxGraphLayout</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.parent" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_parentBorder><div class=IEntry><a href="javascript:searchResults.Toggle('SR_parentBorder')" class=ISymbol>parentBorder</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.parentBorder" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.parentBorder" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_parentHighlightEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_parentHighlightEnabled')" class=ISymbol>parentHighlightEnabled</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.parentHighlightEnabled" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.parentHighlightEnabled" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_parentsChanged><div class=IEntry><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.parentsChanged" target=_parent class=ISymbol>parentsChanged</a>, <span class=IParent>mxCompactTreeLayout</span></div></div><div class=SRResult id=SR_password><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.password" target=_parent class=ISymbol>password</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_path><div class=IEntry><a href="javascript:searchResults.Toggle('SR_path')" class=ISymbol>path</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.path" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.path" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.path" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div><div class=SRResult id=SR_PATH_undSEPARATOR><div class=IEntry><a href="../files/model/mxCellPath-js.html#mxCellPath.PATH_SEPARATOR" target=_parent class=ISymbol>PATH_SEPARATOR</a>, <span class=IParent>mxCellPath</span></div></div><div class=SRResult id=SR_perimeter><div class=IEntry><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint.perimeter" target=_parent class=ISymbol>perimeter</a>, <span class=IParent>mxConnectionConstraint</span></div></div><div class=SRResult id=SR_PERIMETER_undELLIPSE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.PERIMETER_ELLIPSE" target=_parent class=ISymbol>PERIMETER_ELLIPSE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_PERIMETER_undHEXAGON><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.PERIMETER_HEXAGON" target=_parent class=ISymbol>PERIMETER_HEXAGON</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_PERIMETER_undRECTANGLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.PERIMETER_RECTANGLE" target=_parent class=ISymbol>PERIMETER_RECTANGLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_PERIMETER_undRHOMBUS><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.PERIMETER_RHOMBUS" target=_parent class=ISymbol>PERIMETER_RHOMBUS</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_PERIMETER_undTRIANGLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.PERIMETER_TRIANGLE" target=_parent class=ISymbol>PERIMETER_TRIANGLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_PINCH_undTHRESHOLD><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.PINCH_THRESHOLD" target=_parent class=ISymbol>PINCH_THRESHOLD</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_pinchEnabled><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.pinchEnabled" target=_parent class=ISymbol>pinchEnabled</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_point><div class=IEntry><a href="../files/view/mxConnectionConstraint-js.html#mxConnectionConstraint.point" target=_parent class=ISymbol>point</a>, <span class=IParent>mxConnectionConstraint</span></div></div><div class=SRResult id=SR_pointerEvents><div class=IEntry><a href="javascript:searchResults.Toggle('SR_pointerEvents')" class=ISymbol>pointerEvents</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.pointerEvents" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/shape/mxShape-js.html#mxShape.pointerEvents" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_pointerEventsValue><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.pointerEventsValue" target=_parent class=ISymbol>pointerEventsValue</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_pointImage><div class=IEntry><a href="../files/handler/mxConstraintHandler-js.html#mxConstraintHandler.pointImage" target=_parent class=ISymbol>pointImage</a>, <span class=IParent>mxConstraintHandler</span></div></div><div class=SRResult id=SR_points><div class=IEntry><a href="javascript:searchResults.Toggle('SR_points')" class=ISymbol>points</a><div class=ISubIndex><a href="../files/model/mxGeometry-js.html#mxGeometry.points" target=_parent class=IParent>mxGeometry</a><a href="../files/shape/mxShape-js.html#mxShape.points" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_popupHandler><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.popupHandler" target=_parent class=ISymbol>popupHandler</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_portsEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.portsEnabled" target=_parent class=ISymbol>portsEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_POST><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.POST" target=_parent class=ISymbol>POST</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_postfix><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.postfix" target=_parent class=ISymbol>postfix</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_postParameterName><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.postParameterName" target=_parent class=ISymbol>postParameterName</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_preferHtml><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.preferHtml" target=_parent class=ISymbol>preferHtml</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_preferPageSize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.preferPageSize" target=_parent class=ISymbol>preferPageSize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_prefHozEdgeSep><div class=IEntry><a href="javascript:searchResults.Toggle('SR_prefHozEdgeSep')" class=ISymbol>prefHozEdgeSep</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.prefHozEdgeSep" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.prefHozEdgeSep" target=_parent class=IParent>mxCoordinateAssignment</a></div></div></div><div class=SRResult id=SR_prefix><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.prefix" target=_parent class=ISymbol>prefix</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_prefVertEdgeOff><div class=IEntry><a href="javascript:searchResults.Toggle('SR_prefVertEdgeOff')" class=ISymbol>prefVertEdgeOff</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.prefVertEdgeOff" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.prefVertEdgeOff" target=_parent class=IParent>mxCoordinateAssignment</a></div></div></div><div class=SRResult id=SR_preserveImageAspect><div class=IEntry><a href="../files/shape/mxImageShape-js.html#mxImageShape.preserveImageAspect" target=_parent class=ISymbol>preserveImageAspect</a>, <span class=IParent>mxImageShape</span></div></div><div class=SRResult id=SR_previewColor><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.previewColor" target=_parent class=ISymbol>previewColor</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_previewElement><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.previewElement" target=_parent class=ISymbol>previewElement</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_previewEnabled><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.previewEnabled" target=_parent class=ISymbol>previewEnabled</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_previewOffset><div class=IEntry><a href="../files/util/mxDragSource-js.html#mxDragSource.previewOffset" target=_parent class=ISymbol>previewOffset</a>, <span class=IParent>mxDragSource</span></div></div><div class=SRResult id=SR_previousLayerConnectedCache><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.previousLayerConnectedCache" target=_parent class=ISymbol>previousLayerConnectedCache</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_previousLayerConnectedCells><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.previousLayerConnectedCells" target=_parent class=ISymbol>previousLayerConnectedCells</a>, <span class=IParent>mxGraphAbstractHierarchyCell</span></div></div><div class=SRResult id=SR_printBackgroundImage><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.printBackgroundImage" target=_parent class=ISymbol>printBackgroundImage</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_printControls><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.printControls" target=_parent class=ISymbol>printControls</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_printOverlays><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.printOverlays" target=_parent class=ISymbol>printOverlays</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_properties><div class=IEntry><a href="../files/util/mxEventObject-js.html#mxEventObject.properties" target=_parent class=ISymbol>properties</a>, <span class=IParent>mxEventObject</span></div></div><div class=SRResult id=SR_propertiesHeight><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.propertiesHeight" target=_parent class=ISymbol>propertiesHeight</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_propertiesResource><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.propertiesResource" target=_parent class=ISymbol>propertiesResource</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_propertiesWidth><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.propertiesWidth" target=_parent class=ISymbol>propertiesWidth</a>, <span class=IParent>mxEditor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesQ.html b/docs/js-api/search/VariablesQ.html
index ba5008de2..af29eefdf 100644
--- a/docs/js-api/search/VariablesQ.html
+++ b/docs/js-api/search/VariablesQ.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_quadOp><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.quadOp" target=_parent class=ISymbol>quadOp</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesR.html b/docs/js-api/search/VariablesR.html
index 8738a3ec7..11d25ae86 100644
--- a/docs/js-api/search/VariablesR.html
+++ b/docs/js-api/search/VariablesR.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_radius><div class=IEntry><a href="javascript:searchResults.Toggle('SR_radius')" class=ISymbol>radius</a><div class=ISubIndex><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.radius" target=_parent class=IParent>mxCircleLayout</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.radius" target=_parent class=IParent>mxFastOrganicLayout</a></div></div></div><div class=SRResult id=SR_radiusSquared><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.radiusSquared" target=_parent class=ISymbol>radiusSquared</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_rankBottomY><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.rankBottomY" target=_parent class=ISymbol>rankBottomY</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_rankIndex><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.rankIndex" target=_parent class=ISymbol>rankIndex</a>, <span class=IParent>WeightedCellSorter</span></div></div><div class=SRResult id=SR_ranks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ranks')" class=ISymbol>ranks</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.ranks" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.ranks" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_ranksPerGroup><div class=IEntry><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.ranksPerGroup" target=_parent class=ISymbol>ranksPerGroup</a>, <span class=IParent>mxSwimlaneModel</span></div></div><div class=SRResult id=SR_rankTopY><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.rankTopY" target=_parent class=ISymbol>rankTopY</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_rankWidths><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.rankWidths" target=_parent class=ISymbol>rankWidths</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_rankY><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.rankY" target=_parent class=ISymbol>rankY</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_RECEIVE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.RECEIVE" target=_parent class=ISymbol>RECEIVE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_RECTANGLE_undROUNDING_undFACTOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.RECTANGLE_ROUNDING_FACTOR" target=_parent class=ISymbol>RECTANGLE_ROUNDING_FACTOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_recursiveResize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.recursiveResize" target=_parent class=ISymbol>recursiveResize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_REDO><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.REDO" target=_parent class=ISymbol>REDO</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_redone><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.redone" target=_parent class=ISymbol>redone</a>, <span class=IParent>mxUndoableEdit</span></div></div><div class=SRResult id=SR_refCount><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.refCount" target=_parent class=ISymbol>refCount</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_REFRESH><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.REFRESH" target=_parent class=ISymbol>REFRESH</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_refreshHandler><div class=IEntry><a href="../files/handler/mxSelectionCellsHandler-js.html#mxSelectionCellsHandler.refreshHandler" target=_parent class=ISymbol>refreshHandler</a>, <span class=IParent>mxSelectionCellsHandler</span></div></div><div class=SRResult id=SR_relative><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.relative" target=_parent class=ISymbol>relative</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_REMOVE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.REMOVE" target=_parent class=ISymbol>REMOVE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_REMOVE_undCELLS><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.REMOVE_CELLS" target=_parent class=ISymbol>REMOVE_CELLS</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_REMOVE_undCELLS_undFROM_undPARENT><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.REMOVE_CELLS_FROM_PARENT" target=_parent class=ISymbol>REMOVE_CELLS_FROM_PARENT</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_REMOVE_undOVERLAY><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.REMOVE_OVERLAY" target=_parent class=ISymbol>REMOVE_OVERLAY</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_removeCellsFromParent><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.removeCellsFromParent" target=_parent class=ISymbol>removeCellsFromParent</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_removeEmptyParents><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.removeEmptyParents" target=_parent class=ISymbol>removeEmptyParents</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_removeEnabled><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.removeEnabled" target=_parent class=ISymbol>removeEnabled</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_renderHint><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.renderHint" target=_parent class=ISymbol>renderHint</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_rendering><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.rendering" target=_parent class=ISymbol>rendering</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_RENDERING_undHINT_undEXACT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.RENDERING_HINT_EXACT" target=_parent class=ISymbol>RENDERING_HINT_EXACT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_RENDERING_undHINT_undFASTER><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.RENDERING_HINT_FASTER" target=_parent class=ISymbol>RENDERING_HINT_FASTER</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_RENDERING_undHINT_undFASTEST><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.RENDERING_HINT_FASTEST" target=_parent class=ISymbol>RENDERING_HINT_FASTEST</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_replaceLinefeeds><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.replaceLinefeeds" target=_parent class=ISymbol>replaceLinefeeds</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_request><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.request" target=_parent class=ISymbol>request</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_RESET><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.RESET" target=_parent class=ISymbol>RESET</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_resetEdges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_resetEdges')" class=ISymbol>resetEdges</a><div class=ISubIndex><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.resetEdges" target=_parent class=IParent>mxCircleLayout</a><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.resetEdges" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.resetEdges" target=_parent class=IParent>mxFastOrganicLayout</a></div></div></div><div class=SRResult id=SR_resetEdgesOnConnect><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resetEdgesOnConnect" target=_parent class=ISymbol>resetEdgesOnConnect</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resetEdgesOnMove><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resetEdgesOnMove" target=_parent class=ISymbol>resetEdgesOnMove</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resetEdgesOnResize><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resetEdgesOnResize" target=_parent class=ISymbol>resetEdgesOnResize</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resetHandler><div class=IEntry><a href="javascript:searchResults.Toggle('SR_resetHandler')" class=ISymbol>resetHandler</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.resetHandler" target=_parent class=IParent>mxCellHighlight</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.resetHandler" target=_parent class=IParent>mxDefaultToolbar</a></div></div></div><div class=SRResult id=SR_resetStyles><div class=IEntry><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.resetStyles" target=_parent class=ISymbol>resetStyles</a>, <span class=IParent>mxArrowConnector</span></div></div><div class=SRResult id=SR_resetViewOnRootChange><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resetViewOnRootChange" target=_parent class=ISymbol>resetViewOnRootChange</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_RESIZE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.RESIZE" target=_parent class=ISymbol>RESIZE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_RESIZE_undCELLS><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.RESIZE_CELLS" target=_parent class=ISymbol>RESIZE_CELLS</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_RESIZE_undEND><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.RESIZE_END" target=_parent class=ISymbol>RESIZE_END</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_RESIZE_undSTART><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.RESIZE_START" target=_parent class=ISymbol>RESIZE_START</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_resizeContainer><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.resizeContainer" target=_parent class=ISymbol>resizeContainer</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_resizeEnabled><div class=IEntry><a href="../files/view/mxSwimlaneManager-js.html#mxSwimlaneManager.resizeEnabled" target=_parent class=ISymbol>resizeEnabled</a>, <span class=IParent>mxSwimlaneManager</span></div></div><div class=SRResult id=SR_resizeHandler><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.resizeHandler" target=_parent class=ISymbol>resizeHandler</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_resizeImage><div class=IEntry><a href="../files/util/mxWindow-js.html#mxWindow.resizeImage" target=_parent class=ISymbol>resizeImage</a>, <span class=IParent>mxWindow</span></div></div><div class=SRResult id=SR_resizeLast><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.resizeLast" target=_parent class=ISymbol>resizeLast</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_resizeParent><div class=IEntry><a href="javascript:searchResults.Toggle('SR_resizeParent')" class=ISymbol>resizeParent</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.resizeParent" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.resizeParent" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.resizeParent" target=_parent class=IParent>mxStackLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.resizeParent" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_resizeParentMax><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.resizeParentMax" target=_parent class=ISymbol>resizeParentMax</a>, <span class=IParent>mxStackLayout</span></div></div><div class=SRResult id=SR_resizeVertices><div class=IEntry><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.resizeVertices" target=_parent class=ISymbol>resizeVertices</a>, <span class=IParent>mxPartitionLayout</span></div></div><div class=SRResult id=SR_resources><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.resources" target=_parent class=ISymbol>resources</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_resourcesEncoded><div class=IEntry><a href="../files/util/mxResources-js.html#mxResources.resourcesEncoded" target=_parent class=ISymbol>resourcesEncoded</a>, <span class=IParent>mxResources</span></div></div><div class=SRResult id=SR_RESUME><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.RESUME" target=_parent class=ISymbol>RESUME</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_reverse><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.reverse" target=_parent class=ISymbol>reverse</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_root><div class=IEntry><a href="javascript:searchResults.Toggle('SR_root')" class=ISymbol>root</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.root" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/model/mxGraphModel-js.html#mxGraphModel.root" target=_parent class=IParent>mxGraphModel</a><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.root" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.root" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.root" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR2_ROOT><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.ROOT" target=_parent class=ISymbol>ROOT</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_roots><div class=IEntry><a href="javascript:searchResults.Toggle('SR_roots')" class=ISymbol>roots</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.roots" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.roots" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.roots" target=_parent class=IParent>mxSwimlaneLayout</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.roots" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_rootx><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.rootx" target=_parent class=ISymbol>rootx</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rooty><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.rooty" target=_parent class=ISymbol>rooty</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rotatedHtmlBackground><div class=IEntry><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.rotatedHtmlBackground" target=_parent class=ISymbol>rotatedHtmlBackground</a>, <span class=IParent>mxVmlCanvas2D</span></div></div><div class=SRResult id=SR_rotateHtml><div class=IEntry><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.rotateHtml" target=_parent class=ISymbol>rotateHtml</a>, <span class=IParent>mxAbstractCanvas2D</span></div></div><div class=SRResult id=SR_ROTATION_undHANDLE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.ROTATION_HANDLE" target=_parent class=ISymbol>ROTATION_HANDLE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_rotationCursor><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.rotationCursor" target=_parent class=ISymbol>rotationCursor</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_rotationEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_rotationEnabled')" class=ISymbol>rotationEnabled</a><div class=ISubIndex><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.rotationEnabled" target=_parent class=IParent>mxGraphHandler</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.rotationEnabled" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_rotationHandleVSpacing><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.rotationHandleVSpacing" target=_parent class=ISymbol>rotationHandleVSpacing</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_rotationRaster><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.rotationRaster" target=_parent class=ISymbol>rotationRaster</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_rounded><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.rounded" target=_parent class=ISymbol>rounded</a>, <span class=IParent>mxGuide</span></div></div><div class=SRResult id=SR_row><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.row" target=_parent class=ISymbol>row</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rowMaxCenX><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.rowMaxCenX" target=_parent class=ISymbol>rowMaxCenX</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rowMaxX><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.rowMaxX" target=_parent class=ISymbol>rowMaxX</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rowMinCenX><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.rowMinCenX" target=_parent class=ISymbol>rowMinCenX</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rowMinX><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.rowMinX" target=_parent class=ISymbol>rowMinX</a>, <span class=IParent>mxRadialTreeLayout</span></div></div><div class=SRResult id=SR_rowRadi><div class=IEntry><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.rowRadi" target=_parent class=ISymbol>rowRadi</a>, <span class=IParent>mxRadialTreeLayout</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesS.html b/docs/js-api/search/VariablesS.html
index 24cddafd5..e08f70b31 100644
--- a/docs/js-api/search/VariablesS.html
+++ b/docs/js-api/search/VariablesS.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_SAVE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.SAVE" target=_parent class=ISymbol>SAVE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_scale><div class=IEntry><a href="javascript:searchResults.Toggle('SR_scale')" class=ISymbol>scale</a><div class=ISubIndex><a href="../files/view/mxGraphView-js.html#mxGraphView.scale" target=_parent class=IParent>mxGraphView</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.scale" target=_parent class=IParent>mxPrintPreview</a><a href="../files/shape/mxShape-js.html#mxShape.scale" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR2_SCALE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.SCALE" target=_parent class=ISymbol>SCALE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_SCALE_undAND_undTRANSLATE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.SCALE_AND_TRANSLATE" target=_parent class=ISymbol>SCALE_AND_TRANSLATE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_scaleGrid><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.scaleGrid" target=_parent class=ISymbol>scaleGrid</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_screenX><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.screenX" target=_parent class=ISymbol>screenX</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_screenY><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.screenY" target=_parent class=ISymbol>screenY</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_scrollOnMove><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.scrollOnMove" target=_parent class=ISymbol>scrollOnMove</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_segments><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.segments" target=_parent class=ISymbol>segments</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_select><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.select" target=_parent class=ISymbol>select</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR2_SELECT><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.SELECT" target=_parent class=ISymbol>SELECT</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_selectEnabled><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.selectEnabled" target=_parent class=ISymbol>selectEnabled</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_SELECTION_undDASHED><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SELECTION_DASHED" target=_parent class=ISymbol>SELECTION_DASHED</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_selectionModel><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.selectionModel" target=_parent class=ISymbol>selectionModel</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_selectOnPopup><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.selectOnPopup" target=_parent class=ISymbol>selectOnPopup</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_selectText><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.selectText" target=_parent class=ISymbol>selectText</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_SHADOW_undOFFSET_undX><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHADOW_OFFSET_X" target=_parent class=ISymbol>SHADOW_OFFSET_X</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHADOW_undOFFSET_undY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHADOW_OFFSET_Y" target=_parent class=ISymbol>SHADOW_OFFSET_Y</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHADOW_undOPACITY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHADOW_OPACITY" target=_parent class=ISymbol>SHADOW_OPACITY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHADOWCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHADOWCOLOR" target=_parent class=ISymbol>SHADOWCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_shape><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shape')" class=ISymbol>shape</a><div class=ISubIndex><a href="../files/view/mxCellState-js.html#mxCellState.shape" target=_parent class=IParent>mxCellState</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.shape" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.shape" target=_parent class=IParent>mxGraphHandler</a></div></div></div><div class=SRResult id=SR_SHAPE_undACTOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_ACTOR" target=_parent class=ISymbol>SHAPE_ACTOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undARROW><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_ARROW" target=_parent class=ISymbol>SHAPE_ARROW</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undARROW_undCONNECTOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_ARROW_CONNECTOR" target=_parent class=ISymbol>SHAPE_ARROW_CONNECTOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undCLOUD><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_CLOUD" target=_parent class=ISymbol>SHAPE_CLOUD</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undCONNECTOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_CONNECTOR" target=_parent class=ISymbol>SHAPE_CONNECTOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undCYLINDER><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_CYLINDER" target=_parent class=ISymbol>SHAPE_CYLINDER</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undDOUBLE_undELLIPSE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_DOUBLE_ELLIPSE" target=_parent class=ISymbol>SHAPE_DOUBLE_ELLIPSE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undELLIPSE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_ELLIPSE" target=_parent class=ISymbol>SHAPE_ELLIPSE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undHEXAGON><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_HEXAGON" target=_parent class=ISymbol>SHAPE_HEXAGON</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undIMAGE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_IMAGE" target=_parent class=ISymbol>SHAPE_IMAGE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undLABEL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_LABEL" target=_parent class=ISymbol>SHAPE_LABEL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undLINE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_LINE" target=_parent class=ISymbol>SHAPE_LINE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undRECTANGLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_RECTANGLE" target=_parent class=ISymbol>SHAPE_RECTANGLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undRHOMBUS><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_RHOMBUS" target=_parent class=ISymbol>SHAPE_RHOMBUS</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undSWIMLANE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_SWIMLANE" target=_parent class=ISymbol>SHAPE_SWIMLANE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_SHAPE_undTRIANGLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.SHAPE_TRIANGLE" target=_parent class=ISymbol>SHAPE_TRIANGLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_shapePointerEvents><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.shapePointerEvents" target=_parent class=ISymbol>shapePointerEvents</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_sharedDiv><div class=IEntry><a href="../files/handler/mxRubberband-js.html#mxRubberband.sharedDiv" target=_parent class=ISymbol>sharedDiv</a>, <span class=IParent>mxRubberband</span></div></div><div class=SRResult id=SR_shiftKeys><div class=IEntry><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.shiftKeys" target=_parent class=ISymbol>shiftKeys</a>, <span class=IParent>mxKeyHandler</span></div></div><div class=SRResult id=SR_SHOW><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.SHOW" target=_parent class=ISymbol>SHOW</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_showViewport><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.showViewport" target=_parent class=ISymbol>showViewport</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_significant><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.significant" target=_parent class=ISymbol>significant</a>, <span class=IParent>mxUndoableEdit</span></div></div><div class=SRResult id=SR_singleSelection><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.singleSelection" target=_parent class=ISymbol>singleSelection</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_singleSizer><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.singleSizer" target=_parent class=ISymbol>singleSizer</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_size><div class=IEntry><a href="../files/util/mxUndoManager-js.html#mxUndoManager.size" target=_parent class=ISymbol>size</a>, <span class=IParent>mxUndoManager</span></div></div><div class=SRResult id=SR2_SIZE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.SIZE" target=_parent class=ISymbol>SIZE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_sizerImage><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.sizerImage" target=_parent class=ISymbol>sizerImage</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_smartSeparators><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.smartSeparators" target=_parent class=ISymbol>smartSeparators</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_snapToTerminals><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.snapToTerminals" target=_parent class=ISymbol>snapToTerminals</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_sortEdges><div class=IEntry><a href="javascript:searchResults.Toggle('SR_sortEdges')" class=ISymbol>sortEdges</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.sortEdges" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxRadialTreeLayout-js.html#mxRadialTreeLayout.sortEdges" target=_parent class=IParent>mxRadialTreeLayout</a></div></div></div><div class=SRResult id=SR_source><div class=IEntry><a href="javascript:searchResults.Toggle('SR_source')" class=ISymbol>source</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.source" target=_parent class=IParent>mxCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.source" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.source" target=_parent class=IParent>mxMultiplicity</a><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.source" target=_parent class=IParent>mxUndoableEdit</a></div></div></div><div class=SRResult id=SR_sourcePoint><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.sourcePoint" target=_parent class=ISymbol>sourcePoint</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_SOURCESCANSTARTRANK><div class=IEntry><a href="javascript:searchResults.Toggle('SR_SOURCESCANSTARTRANK')" class=ISymbol>SOURCESCANSTARTRANK</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.SOURCESCANSTARTRANK" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.SOURCESCANSTARTRANK" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_sourceState><div class=IEntry><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.sourceState" target=_parent class=ISymbol>sourceState</a>, <span class=IParent>mxMouseEvent</span></div></div><div class=SRResult id=SR_spacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_spacing')" class=ISymbol>spacing</a><div class=ISubIndex><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.spacing" target=_parent class=IParent>mxCellHighlight</a><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.spacing" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/shape/mxLabel-js.html#mxLabel.spacing" target=_parent class=IParent>mxLabel</a><a href="../files/layout/mxParallelEdgeLayout-js.html#mxParallelEdgeLayout.spacing" target=_parent class=IParent>mxParallelEdgeLayout</a><a href="../files/layout/mxPartitionLayout-js.html#mxPartitionLayout.spacing" target=_parent class=IParent>mxPartitionLayout</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.spacing" target=_parent class=IParent>mxStackLayout</a></div></div></div><div class=SRResult id=SR_SPLIT_undEDGE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.SPLIT_EDGE" target=_parent class=ISymbol>SPLIT_EDGE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_splitEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.splitEnabled" target=_parent class=ISymbol>splitEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_src><div class=IEntry><a href="../files/util/mxImage-js.html#mxImage.src" target=_parent class=ISymbol>src</a>, <span class=IParent>mxImage</span></div></div><div class=SRResult id=SR_START><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.START" target=_parent class=ISymbol>START</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_START_undEDIT><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.START_EDIT" target=_parent class=ISymbol>START_EDIT</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_START_undEDITING><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.START_EDITING" target=_parent class=ISymbol>START_EDITING</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_startX><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.startX" target=_parent class=ISymbol>startX</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_startY><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.startY" target=_parent class=ISymbol>startY</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_state><div class=IEntry><a href="javascript:searchResults.Toggle('SR_state')" class=ISymbol>state</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.state" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/handler/mxCellHighlight-js.html#mxCellHighlight.state" target=_parent class=IParent>mxCellHighlight</a><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.state" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/util/mxMouseEvent-js.html#mxMouseEvent.state" target=_parent class=IParent>mxMouseEvent</a><a href="../files/shape/mxShape-js.html#mxShape.state" target=_parent class=IParent>mxShape</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.state" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_states><div class=IEntry><a href="javascript:searchResults.Toggle('SR_states')" class=ISymbol>states</a><div class=ISubIndex><a href="../files/util/mxAbstractCanvas2D-js.html#mxAbstractCanvas2D.states" target=_parent class=IParent>mxAbstractCanvas2D</a><a href="../files/view/mxGraphView-js.html#mxGraphView.states" target=_parent class=IParent>mxGraphView</a><a href="../files/util/mxGuide-js.html#mxGuide.states" target=_parent class=IParent>mxGuide</a></div></div></div><div class=SRResult id=SR_status><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.status" target=_parent class=ISymbol>status</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_stencil><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.stencil" target=_parent class=ISymbol>stencil</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_stencilPointerEvents><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.stencilPointerEvents" target=_parent class=ISymbol>stencilPointerEvents</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_step><div class=IEntry><a href="../files/util/mxMorphing-js.html#mxMorphing.step" target=_parent class=ISymbol>step</a>, <span class=IParent>mxMorphing</span></div></div><div class=SRResult id=SR_steps><div class=IEntry><a href="../files/util/mxMorphing-js.html#mxMorphing.steps" target=_parent class=ISymbol>steps</a>, <span class=IParent>mxMorphing</span></div></div><div class=SRResult id=SR_STEPSIZE><div class=IEntry><a href="../files/util/mxClipboard-js.html#mxClipboard.STEPSIZE" target=_parent class=ISymbol>STEPSIZE</a>, <span class=IParent>mxClipboard</span></div></div><div class=SRResult id=SR_straightRemoveEnabled><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.straightRemoveEnabled" target=_parent class=ISymbol>straightRemoveEnabled</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_strokeTolerance><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.strokeTolerance" target=_parent class=ISymbol>strokeTolerance</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_strokewidth><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.strokewidth" target=_parent class=ISymbol>strokewidth</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_style><div class=IEntry><a href="javascript:searchResults.Toggle('SR_style')" class=ISymbol>style</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.style" target=_parent class=IParent>mxCell</a><a href="../files/view/mxCellState-js.html#mxCellState.style" target=_parent class=IParent>mxCellState</a><a href="../files/shape/mxShape-js.html#mxShape.style" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_STYLE_undABSOLUTE_undARCSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ABSOLUTE_ARCSIZE" target=_parent class=ISymbol>STYLE_ABSOLUTE_ARCSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undALIGN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ALIGN" target=_parent class=ISymbol>STYLE_ALIGN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undANCHOR_undPOINT_undDIRECTION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ANCHOR_POINT_DIRECTION" target=_parent class=ISymbol>STYLE_ANCHOR_POINT_DIRECTION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undARCSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ARCSIZE" target=_parent class=ISymbol>STYLE_ARCSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undASPECT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ASPECT" target=_parent class=ISymbol>STYLE_ASPECT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undAUTOSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_AUTOSIZE" target=_parent class=ISymbol>STYLE_AUTOSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undBACKGROUND_undOUTLINE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_BACKGROUND_OUTLINE" target=_parent class=ISymbol>STYLE_BACKGROUND_OUTLINE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undBENDABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_BENDABLE" target=_parent class=ISymbol>STYLE_BENDABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undCLONEABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_CLONEABLE" target=_parent class=ISymbol>STYLE_CLONEABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undCURVED><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_CURVED" target=_parent class=ISymbol>STYLE_CURVED</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undDASH_undPATTERN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_DASH_PATTERN" target=_parent class=ISymbol>STYLE_DASH_PATTERN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undDASHED><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_DASHED" target=_parent class=ISymbol>STYLE_DASHED</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undDELETABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_DELETABLE" target=_parent class=ISymbol>STYLE_DELETABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undDIRECTION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_DIRECTION" target=_parent class=ISymbol>STYLE_DIRECTION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undEDGE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_EDGE" target=_parent class=ISymbol>STYLE_EDGE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undEDITABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_EDITABLE" target=_parent class=ISymbol>STYLE_EDITABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undELBOW><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ELBOW" target=_parent class=ISymbol>STYLE_ELBOW</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENDARROW><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENDARROW" target=_parent class=ISymbol>STYLE_ENDARROW</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENDFILL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENDFILL" target=_parent class=ISymbol>STYLE_ENDFILL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENDSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENDSIZE" target=_parent class=ISymbol>STYLE_ENDSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENTRY_undDX><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENTRY_DX" target=_parent class=ISymbol>STYLE_ENTRY_DX</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENTRY_undDY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENTRY_DY" target=_parent class=ISymbol>STYLE_ENTRY_DY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENTRY_undPERIMETER><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENTRY_PERIMETER" target=_parent class=ISymbol>STYLE_ENTRY_PERIMETER</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENTRY_undX><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENTRY_X" target=_parent class=ISymbol>STYLE_ENTRY_X</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undENTRY_undY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ENTRY_Y" target=_parent class=ISymbol>STYLE_ENTRY_Y</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undEXIT_undDX><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_EXIT_DX" target=_parent class=ISymbol>STYLE_EXIT_DX</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undEXIT_undDY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_EXIT_DY" target=_parent class=ISymbol>STYLE_EXIT_DY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undEXIT_undPERIMETER><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_EXIT_PERIMETER" target=_parent class=ISymbol>STYLE_EXIT_PERIMETER</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undEXIT_undX><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_EXIT_X" target=_parent class=ISymbol>STYLE_EXIT_X</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undEXIT_undY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_EXIT_Y" target=_parent class=ISymbol>STYLE_EXIT_Y</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFILL_undOPACITY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FILL_OPACITY" target=_parent class=ISymbol>STYLE_FILL_OPACITY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFILLCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FILLCOLOR" target=_parent class=ISymbol>STYLE_FILLCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFIX_undDASH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FIX_DASH" target=_parent class=ISymbol>STYLE_FIX_DASH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFLIPH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FLIPH" target=_parent class=ISymbol>STYLE_FLIPH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFLIPV><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FLIPV" target=_parent class=ISymbol>STYLE_FLIPV</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFOLDABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FOLDABLE" target=_parent class=ISymbol>STYLE_FOLDABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFONTCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FONTCOLOR" target=_parent class=ISymbol>STYLE_FONTCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFONTFAMILY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FONTFAMILY" target=_parent class=ISymbol>STYLE_FONTFAMILY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFONTSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FONTSIZE" target=_parent class=ISymbol>STYLE_FONTSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undFONTSTYLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_FONTSTYLE" target=_parent class=ISymbol>STYLE_FONTSTYLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undGLASS><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_GLASS" target=_parent class=ISymbol>STYLE_GLASS</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undGRADIENT_undDIRECTION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_GRADIENT_DIRECTION" target=_parent class=ISymbol>STYLE_GRADIENT_DIRECTION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undGRADIENTCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_GRADIENTCOLOR" target=_parent class=ISymbol>STYLE_GRADIENTCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undHORIZONTAL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_HORIZONTAL" target=_parent class=ISymbol>STYLE_HORIZONTAL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE" target=_parent class=ISymbol>STYLE_IMAGE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE_undALIGN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE_ALIGN" target=_parent class=ISymbol>STYLE_IMAGE_ALIGN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE_undASPECT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE_ASPECT" target=_parent class=ISymbol>STYLE_IMAGE_ASPECT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE_undBACKGROUND><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE_BACKGROUND" target=_parent class=ISymbol>STYLE_IMAGE_BACKGROUND</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE_undBORDER><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE_BORDER" target=_parent class=ISymbol>STYLE_IMAGE_BORDER</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE_undHEIGHT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE_HEIGHT" target=_parent class=ISymbol>STYLE_IMAGE_HEIGHT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE_undVERTICAL_undALIGN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE_VERTICAL_ALIGN" target=_parent class=ISymbol>STYLE_IMAGE_VERTICAL_ALIGN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undIMAGE_undWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_IMAGE_WIDTH" target=_parent class=ISymbol>STYLE_IMAGE_WIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_COLOR" target=_parent class=ISymbol>STYLE_INDICATOR_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undDIRECTION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_DIRECTION" target=_parent class=ISymbol>STYLE_INDICATOR_DIRECTION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undGRADIENTCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_GRADIENTCOLOR" target=_parent class=ISymbol>STYLE_INDICATOR_GRADIENTCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undHEIGHT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_HEIGHT" target=_parent class=ISymbol>STYLE_INDICATOR_HEIGHT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undIMAGE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_IMAGE" target=_parent class=ISymbol>STYLE_INDICATOR_IMAGE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undSHAPE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_SHAPE" target=_parent class=ISymbol>STYLE_INDICATOR_SHAPE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undSPACING><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_SPACING" target=_parent class=ISymbol>STYLE_INDICATOR_SPACING</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undSTROKECOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_STROKECOLOR" target=_parent class=ISymbol>STYLE_INDICATOR_STROKECOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undINDICATOR_undWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_INDICATOR_WIDTH" target=_parent class=ISymbol>STYLE_INDICATOR_WIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undJETTY_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_JETTY_SIZE" target=_parent class=ISymbol>STYLE_JETTY_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undLABEL_undBACKGROUNDCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_LABEL_BACKGROUNDCOLOR" target=_parent class=ISymbol>STYLE_LABEL_BACKGROUNDCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undLABEL_undBORDERCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_LABEL_BORDERCOLOR" target=_parent class=ISymbol>STYLE_LABEL_BORDERCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undLABEL_undPADDING><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_LABEL_PADDING" target=_parent class=ISymbol>STYLE_LABEL_PADDING</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undLABEL_undPOSITION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_LABEL_POSITION" target=_parent class=ISymbol>STYLE_LABEL_POSITION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undLABEL_undWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_LABEL_WIDTH" target=_parent class=ISymbol>STYLE_LABEL_WIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undLOOP><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_LOOP" target=_parent class=ISymbol>STYLE_LOOP</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undMARGIN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_MARGIN" target=_parent class=ISymbol>STYLE_MARGIN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undMOVABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_MOVABLE" target=_parent class=ISymbol>STYLE_MOVABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undNOEDGESTYLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_NOEDGESTYLE" target=_parent class=ISymbol>STYLE_NOEDGESTYLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undNOLABEL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_NOLABEL" target=_parent class=ISymbol>STYLE_NOLABEL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undOPACITY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_OPACITY" target=_parent class=ISymbol>STYLE_OPACITY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undORTHOGONAL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ORTHOGONAL" target=_parent class=ISymbol>STYLE_ORTHOGONAL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undORTHOGONAL_undLOOP><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ORTHOGONAL_LOOP" target=_parent class=ISymbol>STYLE_ORTHOGONAL_LOOP</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undOVERFLOW><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_OVERFLOW" target=_parent class=ISymbol>STYLE_OVERFLOW</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undPERIMETER><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_PERIMETER" target=_parent class=ISymbol>STYLE_PERIMETER</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undPERIMETER_undSPACING><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_PERIMETER_SPACING" target=_parent class=ISymbol>STYLE_PERIMETER_SPACING</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undPOINTER_undEVENTS><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_POINTER_EVENTS" target=_parent class=ISymbol>STYLE_POINTER_EVENTS</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undPORT_undCONSTRAINT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_PORT_CONSTRAINT" target=_parent class=ISymbol>STYLE_PORT_CONSTRAINT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undPORT_undCONSTRAINT_undROTATION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_PORT_CONSTRAINT_ROTATION" target=_parent class=ISymbol>STYLE_PORT_CONSTRAINT_ROTATION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undRESIZABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_RESIZABLE" target=_parent class=ISymbol>STYLE_RESIZABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undRESIZE_undWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_RESIZE_WIDTH" target=_parent class=ISymbol>STYLE_RESIZE_WIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undROTATABLE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ROTATABLE" target=_parent class=ISymbol>STYLE_ROTATABLE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undROTATION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ROTATION" target=_parent class=ISymbol>STYLE_ROTATION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undROUNDED><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ROUNDED" target=_parent class=ISymbol>STYLE_ROUNDED</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undROUTING_undCENTER_undX><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ROUTING_CENTER_X" target=_parent class=ISymbol>STYLE_ROUTING_CENTER_X</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undROUTING_undCENTER_undY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_ROUTING_CENTER_Y" target=_parent class=ISymbol>STYLE_ROUTING_CENTER_Y</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSEGMENT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SEGMENT" target=_parent class=ISymbol>STYLE_SEGMENT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSEPARATORCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SEPARATORCOLOR" target=_parent class=ISymbol>STYLE_SEPARATORCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSHADOW><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SHADOW" target=_parent class=ISymbol>STYLE_SHADOW</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSHAPE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SHAPE" target=_parent class=ISymbol>STYLE_SHAPE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSOURCE_undJETTY_undSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SOURCE_JETTY_SIZE" target=_parent class=ISymbol>STYLE_SOURCE_JETTY_SIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSOURCE_undPERIMETER_undSPACING><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SOURCE_PERIMETER_SPACING" target=_parent class=ISymbol>STYLE_SOURCE_PERIMETER_SPACING</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSOURCE_undPORT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SOURCE_PORT" target=_parent class=ISymbol>STYLE_SOURCE_PORT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSOURCE_undPORT_undCONSTRAINT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SOURCE_PORT_CONSTRAINT" target=_parent class=ISymbol>STYLE_SOURCE_PORT_CONSTRAINT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSPACING><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SPACING" target=_parent class=ISymbol>STYLE_SPACING</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSPACING_undBOTTOM><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SPACING_BOTTOM" target=_parent class=ISymbol>STYLE_SPACING_BOTTOM</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSPACING_undLEFT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SPACING_LEFT" target=_parent class=ISymbol>STYLE_SPACING_LEFT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSPACING_undRIGHT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SPACING_RIGHT" target=_parent class=ISymbol>STYLE_SPACING_RIGHT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSPACING_undTOP><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SPACING_TOP" target=_parent class=ISymbol>STYLE_SPACING_TOP</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSTARTARROW><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_STARTARROW" target=_parent class=ISymbol>STYLE_STARTARROW</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSTARTFILL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_STARTFILL" target=_parent class=ISymbol>STYLE_STARTFILL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSTARTSIZE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_STARTSIZE" target=_parent class=ISymbol>STYLE_STARTSIZE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSTROKE_undOPACITY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_STROKE_OPACITY" target=_parent class=ISymbol>STYLE_STROKE_OPACITY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSTROKECOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_STROKECOLOR" target=_parent class=ISymbol>STYLE_STROKECOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSTROKEWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_STROKEWIDTH" target=_parent class=ISymbol>STYLE_STROKEWIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSWIMLANE_undFILLCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SWIMLANE_FILLCOLOR" target=_parent class=ISymbol>STYLE_SWIMLANE_FILLCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undSWIMLANE_undLINE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_SWIMLANE_LINE" target=_parent class=ISymbol>STYLE_SWIMLANE_LINE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undTARGET_undPERIMETER_undSPACING><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_TARGET_PERIMETER_SPACING" target=_parent class=ISymbol>STYLE_TARGET_PERIMETER_SPACING</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undTARGET_undPORT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_TARGET_PORT" target=_parent class=ISymbol>STYLE_TARGET_PORT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undTARGET_undPORT_undCONSTRAINT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_TARGET_PORT_CONSTRAINT" target=_parent class=ISymbol>STYLE_TARGET_PORT_CONSTRAINT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undTEXT_undDIRECTION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_TEXT_DIRECTION" target=_parent class=ISymbol>STYLE_TEXT_DIRECTION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undTEXT_undOPACITY><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_TEXT_OPACITY" target=_parent class=ISymbol>STYLE_TEXT_OPACITY</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undVERTICAL_undALIGN><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_VERTICAL_ALIGN" target=_parent class=ISymbol>STYLE_VERTICAL_ALIGN</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undVERTICAL_undLABEL_undPOSITION><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_VERTICAL_LABEL_POSITION" target=_parent class=ISymbol>STYLE_VERTICAL_LABEL_POSITION</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_STYLE_undWHITE_undSPACE><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.STYLE_WHITE_SPACE" target=_parent class=ISymbol>STYLE_WHITE_SPACE</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_styleEnabled><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.styleEnabled" target=_parent class=ISymbol>styleEnabled</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_stylesheet><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.stylesheet" target=_parent class=ISymbol>stylesheet</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_submenuImage><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.submenuImage" target=_parent class=ISymbol>submenuImage</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_SUSPEND><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.SUSPEND" target=_parent class=ISymbol>SUSPEND</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_suspended><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.suspended" target=_parent class=ISymbol>suspended</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_svgPointerEvents><div class=IEntry><a href="../files/shape/mxShape-js.html#mxShape.svgPointerEvents" target=_parent class=ISymbol>svgPointerEvents</a>, <span class=IParent>mxShape</span></div></div><div class=SRResult id=SR_svgStrokeTolerance><div class=IEntry><a href="javascript:searchResults.Toggle('SR_svgStrokeTolerance')" class=ISymbol>svgStrokeTolerance</a><div class=ISubIndex><a href="../files/shape/mxCylinder-js.html#mxCylinder.svgStrokeTolerance" target=_parent class=IParent>mxCylinder</a><a href="../files/shape/mxShape-js.html#mxShape.svgStrokeTolerance" target=_parent class=IParent>mxShape</a></div></div></div><div class=SRResult id=SR_swimlaneIndicatorColorAttribute><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.swimlaneIndicatorColorAttribute" target=_parent class=ISymbol>swimlaneIndicatorColorAttribute</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_swimlaneNesting><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.swimlaneNesting" target=_parent class=ISymbol>swimlaneNesting</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_swimlaneRequired><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.swimlaneRequired" target=_parent class=ISymbol>swimlaneRequired</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_swimlanes><div class=IEntry><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.swimlanes" target=_parent class=ISymbol>swimlanes</a>, <span class=IParent>mxSwimlaneLayout</span></div></div><div class=SRResult id=SR_swimlaneSelectionEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.swimlaneSelectionEnabled" target=_parent class=ISymbol>swimlaneSelectionEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_swimlaneSpacing><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.swimlaneSpacing" target=_parent class=ISymbol>swimlaneSpacing</a>, <span class=IParent>mxEditor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesT.html b/docs/js-api/search/VariablesT.html
index 01f635bb6..a98527f8f 100644
--- a/docs/js-api/search/VariablesT.html
+++ b/docs/js-api/search/VariablesT.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_table><div class=IEntry><a href="../files/util/mxForm-js.html#mxForm.table" target=_parent class=ISymbol>table</a>, <span class=IParent>mxForm</span></div></div><div class=SRResult id=SR_TAP_undAND_undHOLD><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.TAP_AND_HOLD" target=_parent class=ISymbol>TAP_AND_HOLD</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_tapAndHoldDelay><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.tapAndHoldDelay" target=_parent class=ISymbol>tapAndHoldDelay</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_tapAndHoldEnabled><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.tapAndHoldEnabled" target=_parent class=ISymbol>tapAndHoldEnabled</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_tapAndHoldInProgress><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.tapAndHoldInProgress" target=_parent class=ISymbol>tapAndHoldInProgress</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_tapAndHoldValid><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.tapAndHoldValid" target=_parent class=ISymbol>tapAndHoldValid</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_target><div class=IEntry><a href="javascript:searchResults.Toggle('SR_target')" class=ISymbol>target</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.target" target=_parent class=IParent>mxCell</a><a href="../files/layout/hierarchical/model/mxGraphHierarchyEdge-js.html#mxGraphHierarchyEdge.target" target=_parent class=IParent>mxGraphHierarchyEdge</a><a href="../files/handler/mxKeyHandler-js.html#mxKeyHandler.target" target=_parent class=IParent>mxKeyHandler</a></div></div></div><div class=SRResult id=SR_TARGET_undHIGHLIGHT_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.TARGET_HIGHLIGHT_COLOR" target=_parent class=ISymbol>TARGET_HIGHLIGHT_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_targetConnectImage><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.targetConnectImage" target=_parent class=ISymbol>targetConnectImage</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_targetJettySize><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.targetJettySize" target=_parent class=ISymbol>targetJettySize</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_targetPoint><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.targetPoint" target=_parent class=ISymbol>targetPoint</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_targetWindow><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.targetWindow" target=_parent class=ISymbol>targetWindow</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_tasks><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.tasks" target=_parent class=ISymbol>tasks</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_tasksResource><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.tasksResource" target=_parent class=ISymbol>tasksResource</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_tasksTop><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.tasksTop" target=_parent class=ISymbol>tasksTop</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_tasksWindowImage><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.tasksWindowImage" target=_parent class=ISymbol>tasksWindowImage</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_temp><div class=IEntry><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.temp" target=_parent class=ISymbol>temp</a>, <span class=IParent>mxGraphAbstractHierarchyCell</span></div></div><div class=SRResult id=SR_temperature><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.temperature" target=_parent class=ISymbol>temperature</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_template><div class=IEntry><a href="../files/io/mxObjectCodec-js.html#mxObjectCodec.template" target=_parent class=ISymbol>template</a>, <span class=IParent>mxObjectCodec</span></div></div><div class=SRResult id=SR_templates><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.templates" target=_parent class=ISymbol>templates</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_terminalDistance><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.terminalDistance" target=_parent class=ISymbol>terminalDistance</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_text><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.text" target=_parent class=ISymbol>text</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_TEXT_undDIRECTION_undAUTO><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.TEXT_DIRECTION_AUTO" target=_parent class=ISymbol>TEXT_DIRECTION_AUTO</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_TEXT_undDIRECTION_undDEFAULT><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.TEXT_DIRECTION_DEFAULT" target=_parent class=ISymbol>TEXT_DIRECTION_DEFAULT</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_TEXT_undDIRECTION_undLTR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.TEXT_DIRECTION_LTR" target=_parent class=ISymbol>TEXT_DIRECTION_LTR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_TEXT_undDIRECTION_undRTL><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.TEXT_DIRECTION_RTL" target=_parent class=ISymbol>TEXT_DIRECTION_RTL</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_textarea><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.textarea" target=_parent class=ISymbol>textarea</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_textEnabled><div class=IEntry><a href="javascript:searchResults.Toggle('SR_textEnabled')" class=ISymbol>textEnabled</a><div class=ISubIndex><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.textEnabled" target=_parent class=IParent>mxSvgCanvas2D</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.textEnabled" target=_parent class=IParent>mxVmlCanvas2D</a><a href="../files/util/mxXmlCanvas2D-js.html#mxXmlCanvas2D.textEnabled" target=_parent class=IParent>mxXmlCanvas2D</a></div></div></div><div class=SRResult id=SR_textNode><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.textNode" target=_parent class=ISymbol>textNode</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_textOffset><div class=IEntry><a href="../files/util/mxSvgCanvas2D-js.html#mxSvgCanvas2D.textOffset" target=_parent class=ISymbol>textOffset</a>, <span class=IParent>mxSvgCanvas2D</span></div></div><div class=SRResult id=SR_textWidthPadding><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.textWidthPadding" target=_parent class=ISymbol>textWidthPadding</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_thread><div class=IEntry><a href="../files/util/mxAnimation-js.html#mxAnimation.thread" target=_parent class=ISymbol>thread</a>, <span class=IParent>mxAnimation</span></div></div><div class=SRResult id=SR_tightenToSource><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tightenToSource')" class=ISymbol>tightenToSource</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.tightenToSource" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.tightenToSource" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.tightenToSource" target=_parent class=IParent>mxSwimlaneLayout</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.tightenToSource" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_timerAutoScroll><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.timerAutoScroll" target=_parent class=ISymbol>timerAutoScroll</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_title><div class=IEntry><a href="javascript:searchResults.Toggle('SR_title')" class=ISymbol>title</a><div class=ISubIndex><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.title" target=_parent class=IParent>mxPrintPreview</a><a href="../files/util/mxWindow-js.html#mxWindow.title" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_TOGGLE_undCELLS><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.TOGGLE_CELLS" target=_parent class=ISymbol>TOGGLE_CELLS</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_tolerance><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tolerance')" class=ISymbol>tolerance</a><div class=ISubIndex><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.tolerance" target=_parent class=IParent>mxEdgeHandler</a><a href="../files/view/mxGraph-js.html#mxGraph.tolerance" target=_parent class=IParent>mxGraph</a><a href="../files/util/mxGuide-js.html#mxGuide.tolerance" target=_parent class=IParent>mxGuide</a><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.tolerance" target=_parent class=IParent>mxVertexHandler</a></div></div></div><div class=SRResult id=SR_toolbar><div class=IEntry><a href="javascript:searchResults.Toggle('SR_toolbar')" class=ISymbol>toolbar</a><div class=ISubIndex><a href="../files/editor/mxDefaultToolbar-js.html#mxDefaultToolbar.toolbar" target=_parent class=IParent>mxDefaultToolbar</a><a href="../files/editor/mxEditor-js.html#mxEditor.toolbar" target=_parent class=IParent>mxEditor</a></div></div></div><div class=SRResult id=SR_tooltip><div class=IEntry><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.tooltip" target=_parent class=ISymbol>tooltip</a>, <span class=IParent>mxCellOverlay</span></div></div><div class=SRResult id=SR_TOOLTIP_undVERTICAL_undOFFSET><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.TOOLTIP_VERTICAL_OFFSET" target=_parent class=ISymbol>TOOLTIP_VERTICAL_OFFSET</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_TRACE><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.TRACE" target=_parent class=ISymbol>TRACE</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_translate><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.translate" target=_parent class=ISymbol>translate</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR2_TRANSLATE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.TRANSLATE" target=_parent class=ISymbol>TRANSLATE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_TRANSLATE_undCONTROL_undPOINTS><div class=IEntry><a href="../files/model/mxGeometry-js.html#mxGeometry.TRANSLATE_CONTROL_POINTS" target=_parent class=ISymbol>TRANSLATE_CONTROL_POINTS</a>, <span class=IParent>mxGeometry</span></div></div><div class=SRResult id=SR_translateToScrollPosition><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.translateToScrollPosition" target=_parent class=ISymbol>translateToScrollPosition</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_traverseAncestors><div class=IEntry><a href="javascript:searchResults.Toggle('SR_traverseAncestors')" class=ISymbol>traverseAncestors</a><div class=ISubIndex><a href="../files/layout/hierarchical/mxHierarchicalLayout-js.html#mxHierarchicalLayout.traverseAncestors" target=_parent class=IParent>mxHierarchicalLayout</a><a href="../files/layout/hierarchical/mxSwimlaneLayout-js.html#mxSwimlaneLayout.traverseAncestors" target=_parent class=IParent>mxSwimlaneLayout</a></div></div></div><div class=SRResult id=SR_trigger><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.trigger" target=_parent class=ISymbol>trigger</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_triggerX><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.triggerX" target=_parent class=ISymbol>triggerX</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_triggerY><div class=IEntry><a href="../files/handler/mxPopupMenuHandler-js.html#mxPopupMenuHandler.triggerY" target=_parent class=ISymbol>triggerY</a>, <span class=IParent>mxPopupMenuHandler</span></div></div><div class=SRResult id=SR_type><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.type" target=_parent class=ISymbol>type</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_typeError><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.typeError" target=_parent class=ISymbol>typeError</a>, <span class=IParent>mxMultiplicity</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesU.html b/docs/js-api/search/VariablesU.html
index 391fe27d9..b0ef4b6aa 100644
--- a/docs/js-api/search/VariablesU.html
+++ b/docs/js-api/search/VariablesU.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_UNDO><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.UNDO" target=_parent class=ISymbol>UNDO</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_undoHandler><div class=IEntry><a href="../files/view/mxLayoutManager-js.html#mxLayoutManager.undoHandler" target=_parent class=ISymbol>undoHandler</a>, <span class=IParent>mxLayoutManager</span></div></div><div class=SRResult id=SR_undoManager><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.undoManager" target=_parent class=ISymbol>undoManager</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_undone><div class=IEntry><a href="../files/util/mxUndoableEdit-js.html#mxUndoableEdit.undone" target=_parent class=ISymbol>undone</a>, <span class=IParent>mxUndoableEdit</span></div></div><div class=SRResult id=SR_UNGROUP_undCELLS><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.UNGROUP_CELLS" target=_parent class=ISymbol>UNGROUP_CELLS</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_unscaledHeight><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.unscaledHeight" target=_parent class=ISymbol>unscaledHeight</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_unscaledWidth><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.unscaledWidth" target=_parent class=ISymbol>unscaledWidth</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_UP><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.UP" target=_parent class=ISymbol>UP</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_UPDATE_undCELL_undSIZE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.UPDATE_CELL_SIZE" target=_parent class=ISymbol>UPDATE_CELL_SIZE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_updateCursor><div class=IEntry><a href="../files/handler/mxGraphHandler-js.html#mxGraphHandler.updateCursor" target=_parent class=ISymbol>updateCursor</a>, <span class=IParent>mxGraphHandler</span></div></div><div class=SRResult id=SR_updateDefaultMode><div class=IEntry><a href="../files/util/mxToolbar-js.html#mxToolbar.updateDefaultMode" target=_parent class=ISymbol>updateDefaultMode</a>, <span class=IParent>mxToolbar</span></div></div><div class=SRResult id=SR_updateLevel><div class=IEntry><a href="../files/model/mxGraphModel-js.html#mxGraphModel.updateLevel" target=_parent class=ISymbol>updateLevel</a>, <span class=IParent>mxGraphModel</span></div></div><div class=SRResult id=SR_updateOnPan><div class=IEntry><a href="../files/view/mxOutline-js.html#mxOutline.updateOnPan" target=_parent class=ISymbol>updateOnPan</a>, <span class=IParent>mxOutline</span></div></div><div class=SRResult id=SR_updateStyle><div class=IEntry><a href="../files/view/mxGraphView-js.html#mxGraphView.updateStyle" target=_parent class=ISymbol>updateStyle</a>, <span class=IParent>mxGraphView</span></div></div><div class=SRResult id=SR_updatingSelectionResource><div class=IEntry><a href="../files/view/mxGraphSelectionModel-js.html#mxGraphSelectionModel.updatingSelectionResource" target=_parent class=ISymbol>updatingSelectionResource</a>, <span class=IParent>mxGraphSelectionModel</span></div></div><div class=SRResult id=SR_url><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.url" target=_parent class=ISymbol>url</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_urlHelp><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.urlHelp" target=_parent class=ISymbol>urlHelp</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_urlImage><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.urlImage" target=_parent class=ISymbol>urlImage</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_urlPost><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.urlPost" target=_parent class=ISymbol>urlPost</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_useBoundingBox><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#mxGraphLayout.useBoundingBox" target=_parent class=ISymbol>useBoundingBox</a>, <span class=IParent>mxGraphLayout</span></div></div><div class=SRResult id=SR_useGrid><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.useGrid" target=_parent class=ISymbol>useGrid</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_useInputOrigin><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.useInputOrigin" target=_parent class=ISymbol>useInputOrigin</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_useLeftButtonForPanning><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.useLeftButtonForPanning" target=_parent class=ISymbol>useLeftButtonForPanning</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_useLeftButtonForPopup><div class=IEntry><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.useLeftButtonForPopup" target=_parent class=ISymbol>useLeftButtonForPopup</a>, <span class=IParent>mxPopupMenu</span></div></div><div class=SRResult id=SR_usePopupTrigger><div class=IEntry><a href="../files/handler/mxPanningHandler-js.html#mxPanningHandler.usePopupTrigger" target=_parent class=ISymbol>usePopupTrigger</a>, <span class=IParent>mxPanningHandler</span></div></div><div class=SRResult id=SR_username><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.username" target=_parent class=ISymbol>username</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_useScrollbarsForPanning><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.useScrollbarsForPanning" target=_parent class=ISymbol>useScrollbarsForPanning</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_useSvgBoundingBox><div class=IEntry><a href="javascript:searchResults.Toggle('SR_useSvgBoundingBox')" class=ISymbol>useSvgBoundingBox</a><div class=ISubIndex><a href="../files/shape/mxArrowConnector-js.html#mxArrowConnector.useSvgBoundingBox" target=_parent class=IParent>mxArrowConnector</a><a href="../files/shape/mxShape-js.html#mxShape.useSvgBoundingBox" target=_parent class=IParent>mxShape</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesV.html b/docs/js-api/search/VariablesV.html
index bd3514de2..be15b2978 100644
--- a/docs/js-api/search/VariablesV.html
+++ b/docs/js-api/search/VariablesV.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_VALID_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.VALID_COLOR" target=_parent class=ISymbol>VALID_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_validating><div class=IEntry><a href="../files/editor/mxEditor-js.html#mxEditor.validating" target=_parent class=ISymbol>validating</a>, <span class=IParent>mxEditor</span></div></div><div class=SRResult id=SR_validColor><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.validColor" target=_parent class=ISymbol>validColor</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_validNeighbors><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.validNeighbors" target=_parent class=ISymbol>validNeighbors</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_validNeighborsAllowed><div class=IEntry><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.validNeighborsAllowed" target=_parent class=ISymbol>validNeighborsAllowed</a>, <span class=IParent>mxMultiplicity</span></div></div><div class=SRResult id=SR_validState><div class=IEntry><a href="../files/handler/mxCellMarker-js.html#mxCellMarker.validState" target=_parent class=ISymbol>validState</a>, <span class=IParent>mxCellMarker</span></div></div><div class=SRResult id=SR_value><div class=IEntry><a href="javascript:searchResults.Toggle('SR_value')" class=ISymbol>value</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.value" target=_parent class=IParent>mxCell</a><a href="../files/view/mxMultiplicity-js.html#mxMultiplicity.value" target=_parent class=IParent>mxMultiplicity</a></div></div></div><div class=SRResult id=SR_values><div class=IEntry><a href="../files/view/mxStyleRegistry-js.html#mxStyleRegistry.values" target=_parent class=ISymbol>values</a>, <span class=IParent>mxStyleRegistry</span></div></div><div class=SRResult id=SR_VERSION><div class=IEntry><a href="../files/mxClient-js.html#mxClient.VERSION" target=_parent class=ISymbol>VERSION</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_vertex><div class=IEntry><a href="../files/model/mxCell-js.html#mxCell.vertex" target=_parent class=ISymbol>vertex</a>, <span class=IParent>mxCell</span></div></div><div class=SRResult id=SR_VERTEX_undSELECTION_undCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.VERTEX_SELECTION_COLOR" target=_parent class=ISymbol>VERTEX_SELECTION_COLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_VERTEX_undSELECTION_undSTROKEWIDTH><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.VERTEX_SELECTION_STROKEWIDTH" target=_parent class=ISymbol>VERTEX_SELECTION_STROKEWIDTH</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_vertexArray><div class=IEntry><a href="../files/layout/mxFastOrganicLayout-js.html#mxFastOrganicLayout.vertexArray" target=_parent class=ISymbol>vertexArray</a>, <span class=IParent>mxFastOrganicLayout</span></div></div><div class=SRResult id=SR_vertexLabelsMovable><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.vertexLabelsMovable" target=_parent class=ISymbol>vertexLabelsMovable</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_vertexMapper><div class=IEntry><a href="javascript:searchResults.Toggle('SR_vertexMapper')" class=ISymbol>vertexMapper</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphHierarchyModel-js.html#mxGraphHierarchyModel.vertexMapper" target=_parent class=IParent>mxGraphHierarchyModel</a><a href="../files/layout/hierarchical/model/mxSwimlaneModel-js.html#mxSwimlaneModel.vertexMapper" target=_parent class=IParent>mxSwimlaneModel</a></div></div></div><div class=SRResult id=SR_vertical><div class=IEntry><a href="../files/util/mxGuide-js.html#mxGuide.vertical" target=_parent class=ISymbol>vertical</a>, <span class=IParent>mxGuide</span></div></div><div class=SRResult id=SR_verticalAlign><div class=IEntry><a href="../files/view/mxCellOverlay-js.html#mxCellOverlay.verticalAlign" target=_parent class=ISymbol>verticalAlign</a>, <span class=IParent>mxCellOverlay</span></div></div><div class=SRResult id=SR_verticalOffset><div class=IEntry><a href="../files/handler/mxVertexHandler-js.html#mxVertexHandler.verticalOffset" target=_parent class=ISymbol>verticalOffset</a>, <span class=IParent>mxVertexHandler</span></div></div><div class=SRResult id=SR_verticalTextRotation><div class=IEntry><a href="../files/shape/mxText-js.html#mxText.verticalTextRotation" target=_parent class=ISymbol>verticalTextRotation</a>, <span class=IParent>mxText</span></div></div><div class=SRResult id=SR_view><div class=IEntry><a href="javascript:searchResults.Toggle('SR_view')" class=ISymbol>view</a><div class=ISubIndex><a href="../files/view/mxCellState-js.html#mxCellState.view" target=_parent class=IParent>mxCellState</a><a href="../files/view/mxGraph-js.html#mxGraph.view" target=_parent class=IParent>mxGraph</a><a href="../files/view/mxTemporaryCellStates-js.html#mxTemporaryCellStates.view" target=_parent class=IParent>mxTemporaryCellStates</a></div></div></div><div class=SRResult id=SR_VIRTUAL_undHANDLE><div class=IEntry><a href="../files/util/mxEvent-js.html#mxEvent.VIRTUAL_HANDLE" target=_parent class=ISymbol>VIRTUAL_HANDLE</a>, <span class=IParent>mxEvent</span></div></div><div class=SRResult id=SR_virtualBendOpacity><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.virtualBendOpacity" target=_parent class=ISymbol>virtualBendOpacity</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_virtualBendsEnabled><div class=IEntry><a href="../files/handler/mxEdgeHandler-js.html#mxEdgeHandler.virtualBendsEnabled" target=_parent class=ISymbol>virtualBendsEnabled</a>, <span class=IParent>mxEdgeHandler</span></div></div><div class=SRResult id=SR_visible><div class=IEntry><a href="javascript:searchResults.Toggle('SR_visible')" class=ISymbol>visible</a><div class=ISubIndex><a href="../files/model/mxCell-js.html#mxCell.visible" target=_parent class=IParent>mxCell</a><a href="../files/shape/mxShape-js.html#mxShape.visible" target=_parent class=IParent>mxShape</a><a href="../files/util/mxWindow-js.html#mxWindow.visible" target=_parent class=IParent>mxWindow</a></div></div></div><div class=SRResult id=SR_visibleSourceState><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.visibleSourceState" target=_parent class=ISymbol>visibleSourceState</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_visibleTargetState><div class=IEntry><a href="../files/view/mxCellState-js.html#mxCellState.visibleTargetState" target=_parent class=ISymbol>visibleTargetState</a>, <span class=IParent>mxCellState</span></div></div><div class=SRResult id=SR_visited><div class=IEntry><a href="javascript:searchResults.Toggle('SR_visited')" class=ISymbol>visited</a><div class=ISubIndex><a href="../files/layout/mxCompactTreeLayout-js.html#mxCompactTreeLayout.visited" target=_parent class=IParent>mxCompactTreeLayout</a><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.visited" target=_parent class=IParent>WeightedCellSorter</a></div></div></div><div class=SRResult id=SR_VML_undPREFIX><div class=IEntry><a href="../files/mxClient-js.html#mxClient.VML_PREFIX" target=_parent class=ISymbol>VML_PREFIX</a>, <span class=IParent>mxClient</span></div></div><div class=SRResult id=SR_VML_undSHADOWCOLOR><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.VML_SHADOWCOLOR" target=_parent class=ISymbol>VML_SHADOWCOLOR</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_vmlScale><div class=IEntry><a href="javascript:searchResults.Toggle('SR_vmlScale')" class=ISymbol>vmlScale</a><div class=ISubIndex><a href="../files/shape/mxDoubleEllipse-js.html#mxDoubleEllipse.vmlScale" target=_parent class=IParent>mxDoubleEllipse</a><a href="../files/shape/mxShape-js.html#mxShape.vmlScale" target=_parent class=IParent>mxShape</a><a href="../files/util/mxVmlCanvas2D-js.html#mxVmlCanvas2D.vmlScale" target=_parent class=IParent>mxVmlCanvas2D</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesW.html b/docs/js-api/search/VariablesW.html
index 5953220bf..645445232 100644
--- a/docs/js-api/search/VariablesW.html
+++ b/docs/js-api/search/VariablesW.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_w0><div class=IEntry><a href="../files/shape/mxStencil-js.html#mxStencil.w0" target=_parent class=ISymbol>w0</a>, <span class=IParent>mxStencil</span></div></div><div class=SRResult id=SR_WARN><div class=IEntry><a href="../files/util/mxLog-js.html#mxLog.WARN" target=_parent class=ISymbol>WARN</a>, <span class=IParent>mxLog</span></div></div><div class=SRResult id=SR_warningImage><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.warningImage" target=_parent class=ISymbol>warningImage</a>, <span class=IParent>mxGraph</span></div></div><div class=SRResult id=SR_waypointsEnabled><div class=IEntry><a href="../files/handler/mxConnectionHandler-js.html#mxConnectionHandler.waypointsEnabled" target=_parent class=ISymbol>waypointsEnabled</a>, <span class=IParent>mxConnectionHandler</span></div></div><div class=SRResult id=SR_weightedValue><div class=IEntry><a href="../files/layout/mxGraphLayout-js.html#WeightedCellSorter.weightedValue" target=_parent class=ISymbol>weightedValue</a>, <span class=IParent>WeightedCellSorter</span></div></div><div class=SRResult id=SR_widestRank><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.widestRank" target=_parent class=ISymbol>widestRank</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_widestRankValue><div class=IEntry><a href="../files/layout/hierarchical/stage/mxCoordinateAssignment-js.html#mxCoordinateAssignment.widestRankValue" target=_parent class=ISymbol>widestRankValue</a>, <span class=IParent>mxCoordinateAssignment</span></div></div><div class=SRResult id=SR_width><div class=IEntry><a href="javascript:searchResults.Toggle('SR_width')" class=ISymbol>width</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.width" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/util/mxImage-js.html#mxImage.width" target=_parent class=IParent>mxImage</a><a href="../files/util/mxRectangle-js.html#mxRectangle.width" target=_parent class=IParent>mxRectangle</a></div></div></div><div class=SRResult id=SR_withCredentials><div class=IEntry><a href="../files/util/mxXmlRequest-js.html#mxXmlRequest.withCredentials" target=_parent class=ISymbol>withCredentials</a>, <span class=IParent>mxXmlRequest</span></div></div><div class=SRResult id=SR_wnd><div class=IEntry><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.wnd" target=_parent class=ISymbol>wnd</a>, <span class=IParent>mxPrintPreview</span></div></div><div class=SRResult id=SR_WORD_undWRAP><div class=IEntry><a href="../files/util/mxConstants-js.html#mxConstants.WORD_WRAP" target=_parent class=ISymbol>WORD_WRAP</a>, <span class=IParent>mxConstants</span></div></div><div class=SRResult id=SR_wordWrapPadding><div class=IEntry><a href="../files/view/mxCellEditor-js.html#mxCellEditor.wordWrapPadding" target=_parent class=ISymbol>wordWrapPadding</a>, <span class=IParent>mxCellEditor</span></div></div><div class=SRResult id=SR_wrap><div class=IEntry><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.wrap" target=_parent class=ISymbol>wrap</a>, <span class=IParent>mxStackLayout</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesX.html b/docs/js-api/search/VariablesX.html
index 2fe36ecb4..b177fe9be 100644
--- a/docs/js-api/search/VariablesX.html
+++ b/docs/js-api/search/VariablesX.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_x><div class=IEntry><a href="javascript:searchResults.Toggle('SR_x')" class=ISymbol>x</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.x" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/util/mxPoint-js.html#mxPoint.x" target=_parent class=IParent>mxPoint</a></div></div></div><div class=SRResult id=SR_x0><div class=IEntry><a href="javascript:searchResults.Toggle('SR_x0')" class=ISymbol>x0</a><div class=ISubIndex><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.x0" target=_parent class=IParent>mxCircleLayout</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.x0" target=_parent class=IParent>mxPrintPreview</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.x0" target=_parent class=IParent>mxStackLayout</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesY.html b/docs/js-api/search/VariablesY.html
index d807c16c0..fecd55fae 100644
--- a/docs/js-api/search/VariablesY.html
+++ b/docs/js-api/search/VariablesY.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_y><div class=IEntry><a href="javascript:searchResults.Toggle('SR_y')" class=ISymbol>y</a><div class=ISubIndex><a href="../files/layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html#mxGraphAbstractHierarchyCell.y" target=_parent class=IParent>mxGraphAbstractHierarchyCell</a><a href="../files/util/mxPoint-js.html#mxPoint.y" target=_parent class=IParent>mxPoint</a></div></div></div><div class=SRResult id=SR_y0><div class=IEntry><a href="javascript:searchResults.Toggle('SR_y0')" class=ISymbol>y0</a><div class=ISubIndex><a href="../files/layout/mxCircleLayout-js.html#mxCircleLayout.y0" target=_parent class=IParent>mxCircleLayout</a><a href="../files/view/mxPrintPreview-js.html#mxPrintPreview.y0" target=_parent class=IParent>mxPrintPreview</a><a href="../files/layout/mxStackLayout-js.html#mxStackLayout.y0" target=_parent class=IParent>mxStackLayout</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js-api/search/VariablesZ.html b/docs/js-api/search/VariablesZ.html
index e63979a4c..6d11118ef 100644
--- a/docs/js-api/search/VariablesZ.html
+++ b/docs/js-api/search/VariablesZ.html
@@ -14,7 +14,7 @@ if (browserType) {document.write("<div class=" + browserType + ">");if (browserV
 <div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zIndex><div class=IEntry><a href="javascript:searchResults.Toggle('SR_zIndex')" class=ISymbol>zIndex</a><div class=ISubIndex><a href="../files/view/mxCellEditor-js.html#mxCellEditor.zIndex" target=_parent class=IParent>mxCellEditor</a><a href="../files/util/mxPopupMenu-js.html#mxPopupMenu.zIndex" target=_parent class=IParent>mxPopupMenu</a><a href="../files/handler/mxTooltipHandler-js.html#mxTooltipHandler.zIndex" target=_parent class=IParent>mxTooltipHandler</a></div></div></div><div class=SRResult id=SR_zoomFactor><div class=IEntry><a href="../files/view/mxGraph-js.html#mxGraph.zoomFactor" target=_parent class=ISymbol>zoomFactor</a>, <span class=IParent>mxGraph</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
 document.getElementById("Loading").style.display="none";
 document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
+let searchResults = new SearchResults("searchResults", "HTML");
 searchResults.Search();
 --></script></div><script language=JavaScript><!--
 if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/docs/js/toc.js b/docs/js/toc.js
index 09f429440..1ec025366 100644
--- a/docs/js/toc.js
+++ b/docs/js/toc.js
@@ -4,7 +4,7 @@
 function maketoc(element, enableSections)
 {
 	enableSections = (enableSections != null) ? enableSections : true;
-	var tmp = crawlDom(document.body, 2, 4, [], 30, enableSections);
+	let tmp = crawlDom(document.body, 2, 4, [], 30, enableSections);
 	
 	if (tmp.childNodes.length > 0)
 	{
@@ -14,20 +14,20 @@ function maketoc(element, enableSections)
 
 function crawlDom(parent, ignore, depth, chapters, indent, enableSections)
 {
-	var doc = parent.ownerDocument;
-	var toc = doc.createElement('ul');
+	let doc = parent.ownerDocument;
+	let toc = doc.createElement('ul');
 	toc.style.listStyleType = 'none';
-	var child = parent.firstChild;
-	var lastLevel = 0;
+	let child = parent.firstChild;
+	let lastLevel = 0;
 	
 	while (child != null)
 	{
-		var name = child.nodeName.toLowerCase();
+		let name = child.nodeName.toLowerCase();
 
 		if (name.substring(0, 1) == 'h')
 		{
-			var tmp = name.substring(1, name.length);
-			var currentLevel = parseInt(tmp);
+			let tmp = name.substring(1, name.length);
+			let currentLevel = parseInt(tmp);
 			
 			// Checks if rest of string is numeric and
 			// header level is not beyond depth
@@ -49,9 +49,9 @@ function crawlDom(parent, ignore, depth, chapters, indent, enableSections)
 					}
 
 					chapters[currentLevel]++;
-					var sect = '';
+					let sect = '';
 					
-					for (var i = 0; i < chapters.length; i++)
+					for (let i = 0; i < chapters.length; i++)
 					{
 						if (chapters[i] != null)
 						{
@@ -59,7 +59,7 @@ function crawlDom(parent, ignore, depth, chapters, indent, enableSections)
 						}
 					}
 
-					var tmp = child.firstChild;
+					let tmp = child.firstChild;
 					
 					while (tmp != null &&
 						tmp.nodeType != 3)
@@ -70,8 +70,8 @@ function crawlDom(parent, ignore, depth, chapters, indent, enableSections)
 					if (tmp != null)
 					{
 						sect = sect.substring(0, sect.length - 1);
-						var title = tmp.nodeValue;
-						var anchor = null; 
+						let title = tmp.nodeValue;
+						let anchor = null;
 						
 						if (navigator.userAgent.indexOf('MSIE') >= 0)
 						{
@@ -93,7 +93,7 @@ function crawlDom(parent, ignore, depth, chapters, indent, enableSections)
 						child.insertBefore(anchor, tmp);
 						
 						// Adds entry in the table of contents
-						var listItem = doc.createElement('li');
+						let listItem = doc.createElement('li');
 						listItem.style.paddingLeft = ((currentLevel - 1) * indent) + 'px';
 						var anchor2 = doc.createElement('a');
 						anchor2.setAttribute('href', '#'+sect);
@@ -118,7 +118,7 @@ function crawlDom(parent, ignore, depth, chapters, indent, enableSections)
 			}
 		}
 
-		var tmp = crawlDom(child, 0, depth, chapters, indent);
+		let tmp = crawlDom(child, 0, depth, chapters, indent);
 		
 		if (tmp.childNodes.length > 0)
 		{
diff --git a/docs/manual.html b/docs/manual.html
index b70b6fc41..f9c029fe8 100644
--- a/docs/manual.html
+++ b/docs/manual.html
@@ -355,7 +355,7 @@ directories in the installation root.</p>
 	<code>mxBasePath</code> must be provided to the factory function, rather
 	than specified as global variables.</p>
 
-<pre>var mxgraph = require("mxgraph")({
+<pre>let mxgraph = require("mxgraph")({
   mxImageBasePath: "./src/images",
   mxBasePath: "./src"
 })</pre>
@@ -364,7 +364,7 @@ directories in the installation root.</p>
 	all objects of the mxGraph package. For example, the <code>mxEvent</code>
 	object is available at <code>mxgraph.mxEvent</code>.</p>
 
-<pre>var mxEvent = mxgraph.mxEvent;
+<pre>let mxEvent = mxgraph.mxEvent;
 mxEvent.disableContextMenu(container);</pre>
 
 <h2><a id="web_applications"></a>JavaScript and Web Applications</h2>
@@ -512,7 +512,7 @@ at class loading time and makes sure the same codec is used to encode
 instances of mxGraph and MyGraph.</p>
 
 <pre>
-var codec = mxCodecRegistry.getCodec(mxGraph);
+let codec = mxCodecRegistry.getCodec(mxGraph);
 codec.template = new MyGraph();
 mxCodecRegistry.register(codec);
 </pre>
@@ -524,8 +524,8 @@ extended as follows.</p>
 <pre>
 MyGraph.prototype.isSelectable = function(cell)
 {
-   var selectable = mxGraph.prototype.isSelectable.apply(this, arguments);
-   var geo = this.model.getGeometry(cell);
+   let selectable = mxGraph.prototype.isSelectable.apply(this, arguments);
+   let geo = this.model.getGeometry(cell);
    return selectable &amp;&amp;(geo == null || !geo.relative);
 }
 </pre>
@@ -540,7 +540,7 @@ which is another way of &ldquo;subclassing&rdquo; in JavaScript.</p>
 <pre>
 mxGraph.prototype.isSelectable = function(cell)
 {
-   var geo = this.model.getGeometry(cell);
+   let geo = this.model.getGeometry(cell);
    return selectable &amp;&amp; (geo == null || !geo.relative);
 }
 </pre>
@@ -553,7 +553,7 @@ the XML representation of the graph model:</p>
 <pre>
 MyGraph.prototype.getXml = function()
 {
-   var enc = new mxCodec();
+   let enc = new mxCodec();
    return enc.encode(this.getModel());
 }
 </pre>
@@ -578,7 +578,7 @@ function MyGraph(container)
 code, where container is a DOM node that acts as a container for the
 graph view:</p>
 <pre>
-var graph = new MyGraph(container);
+let graph = new MyGraph(container);
 </pre>
 <br/>
 
@@ -697,14 +697,14 @@ can consider a template for building a basic mxGraph application:</p>
          else
          {
             // Creates the graph inside the given container
-            var graph = new mxGraph(container);
+            let graph = new mxGraph(container);
 
             // Enables rubberband selection
             new mxRubberband(graph);
 
             // Gets the default parent for inserting new cells. This
             // is normally the first child of the root (ie. layer 0).
-            var parent = graph.getDefaultParent();
+            let parent = graph.getDefaultParent();
 
             // Adds cells to the model in a single step
             graph.getModel().beginUpdate();
@@ -1141,7 +1141,7 @@ follow this template to create a style and register it with
 mxStyleSheet:</p>
 
 <pre>
-var style = {};
+let style = {};
 style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE;
 style[mxConstants.STYLE_OPACITY] = 50;
 style[mxConstants.STYLE_FONTCOLOR]= '#774400';
diff --git a/docs/tutorial.html b/docs/tutorial.html
index 8bffc1946..97fccce65 100644
--- a/docs/tutorial.html
+++ b/docs/tutorial.html
@@ -126,8 +126,8 @@ function main(container)
   all default event handling is disabled in the last line.
 </p>
 <pre>
-var model = new mxGraphModel();
-var graph = new mxGraph(container, model);
+let model = new mxGraphModel();
+let graph = new mxGraph(container, model);
 </pre>
 <p>
 	If you want the graph to be read-only you can use <code>graph.setEnabled(false)</code>.
@@ -152,7 +152,7 @@ var graph = new mxGraph(container, model);
 <pre>
 // Gets the default parent for inserting new cells. This
 // is normally the first child of the root (ie. layer 0).
-var parent = graph.getDefaultParent();
+let parent = graph.getDefaultParent();
 
 // Adds cells to the model in a single step
 model.beginUpdate();
@@ -185,8 +185,8 @@ finally
   required:
 </p>
 <pre>
-var node = document.getElementById('id-of-graph-container');
-var graph = new mxGraph(node);
+let node = document.getElementById('id-of-graph-container');
+let graph = new mxGraph(node);
 </pre>
 <h2><a id="Model"></a>Model</h2>
 <p>
@@ -221,9 +221,9 @@ var graph = new mxGraph(node);
   To create a new graph model with a root cell and a default layer (first child):
 </p>
 <pre>
-var root = new mxCell();
+let root = new mxCell();
 root.insert(new mxCell());
-var model = new mxGraphModel(root);
+let model = new mxGraphModel(root);
 </pre>
 <h2><a id="Stylesheet"></a>Stylesheet</h2>
 <p>
@@ -242,10 +242,10 @@ var model = new mxGraphModel(root);
   To modify the default styles for vertices and edges in an existing graph:
 </p>
 <pre>
-var vertexStyle = graph.getStylesheet().getDefaultVertexStyle();
+let vertexStyle = graph.getStylesheet().getDefaultVertexStyle();
 vertexStyle[mxConstants.STYLE_ROUNDED] = true;
 
-var edgeStyle = graph.getStylesheet().getDefaultEdgeStyle();
+let edgeStyle = graph.getStylesheet().getDefaultEdgeStyle();
 edgeStyle[mxConstants.STYLE_EDGE] = mxEdgeStyle.TopToBottom;
 </pre>
 <h2><a id="Styles"></a>Styles</h2>
@@ -324,8 +324,8 @@ mxGraph.prototype.getImage = function(state)
   To create a new editor instance and configure it, the following code is used:
 </p>
 <pre>
-var config = mxUtils.load('editors/config/keyhandler-commons.xml').getDocumentElement();
-var editor = new mxEditor(config);
+let config = mxUtils.load('editors/config/keyhandler-commons.xml').getDocumentElement();
+let editor = new mxEditor(config);
 </pre>
 <p>
   The configuration file is an XML file that is passed to
@@ -424,7 +424,7 @@ var editor = new mxEditor(config);
   For example, consider the following JavaScript object definition:
 </p>
 <pre>
-var object = {};
+let object = {};
 object.myBool = true;
 object.myObject = {};
 object.myObject.name = 'Test';
@@ -435,8 +435,8 @@ object.myArray = ['a', ['b', 'c'], 'd'];
   the following code is used:
 </p>
 <pre>
-var encoder = new mxCodec();
-var node = encoder.encode(object);
+let encoder = new mxCodec();
+let node = encoder.encode(object);
 mxUtils.popup(mxUtils.getXml(node));
 </pre>
 <p>
@@ -511,7 +511,7 @@ if ($xml != null) {
   following methods:
 </p>
 <pre>
-var data = editor.writeGraphModel();
+let data = editor.writeGraphModel();
 editor.readGraphModel(mxUtils.parseXml(data));
 </pre>
 <h2><a id="Codecs"></a>Codecs</h2>
diff --git a/src/examples/HelloWorld.js b/src/examples/HelloWorld.js
index 7f8e1738b..2b8d65391 100644
--- a/src/examples/HelloWorld.js
+++ b/src/examples/HelloWorld.js
@@ -1,11 +1,13 @@
 /*
  *  Copyright (c) 2006-2018, JGraph Ltd
+ *  Converted to ES9 syntax/React by David Morrissey 2021
  *
  *  Hello, World! example for mxGraph. This example demonstrates using
  *  a DOM node to create a graph and adding vertices and edges.
 */
 
 import React from "react";
+import mxEvent from "../js/util/mxEvent";
 import mxGraph from "../js/view/mxGraph";
 import mxRubberband from "../js/handler/mxRubberband";
 
diff --git a/src/examples/anchors.html b/src/examples/anchors.html
index 1e31ba14f..722ac5ee3 100644
--- a/src/examples/anchors.html
+++ b/src/examples/anchors.html
@@ -74,13 +74,13 @@
 				mxEvent.disableContextMenu(container);
 
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setConnectable(true);
 				
 				// Enables connect preview for the default edge style
 				graph.connectionHandler.createEdgeState = function(me)
 				{
-					var edge = graph.createEdge(null, null, null, null, null);
+					let edge = graph.createEdge(null, null, null, null, null);
 					
 					return new mxCellState(this.graph.view, edge, this.graph.getCellStyle(edge));
 				};
@@ -93,7 +93,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/animation.html b/src/examples/animation.html
index 3cd7e77d6..355697f75 100644
--- a/src/examples/animation.html
+++ b/src/examples/animation.html
@@ -33,11 +33,11 @@
 	<script type="text/javascript">
 		function main(container)
 		{
-			var graph = new mxGraph(container);
+			let graph = new mxGraph(container);
 			graph.setEnabled(false);
-			var parent = graph.getDefaultParent();
+			let parent = graph.getDefaultParent();
 
-			var vertexStyle = 'shape=cylinder;strokeWidth=2;fillColor=#ffffff;strokeColor=black;' +
+			let vertexStyle = 'shape=cylinder;strokeWidth=2;fillColor=#ffffff;strokeColor=black;' +
 				'gradientColor=#a0a0a0;fontColor=black;fontStyle=1;spacingTop=14;';
 			
 			graph.getModel().beginUpdate();
@@ -57,7 +57,7 @@
 			}
 
 			// Adds animation to edge shape and makes "pipe" visible
-			var state = graph.view.getState(e1);
+			let state = graph.view.getState(e1);
 			state.shape.node.getElementsByTagName('path')[0].removeAttribute('visibility');
 			state.shape.node.getElementsByTagName('path')[0].setAttribute('stroke-width', '6');
 			state.shape.node.getElementsByTagName('path')[0].setAttribute('stroke', 'lightGray');
diff --git a/src/examples/autolayout.html b/src/examples/autolayout.html
index bd64a5ee0..7e6802fa3 100644
--- a/src/examples/autolayout.html
+++ b/src/examples/autolayout.html
@@ -33,7 +33,7 @@
 			{
 				mxEvent.disableContextMenu(container);
 				
-				var mxCellRendererInstallCellOverlayListeners = mxCellRenderer.prototype.installCellOverlayListeners;
+				let mxCellRendererInstallCellOverlayListeners = mxCellRenderer.prototype.installCellOverlayListeners;
 				mxCellRenderer.prototype.installCellOverlayListeners = function(state, overlay, shape)
 				{
 					mxCellRendererInstallCellOverlayListeners.apply(this, arguments);
@@ -53,7 +53,7 @@
 				};
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setPanning(true);
 				graph.panningHandler.useLeftButtonForPanning = true;
 				graph.setAllowDanglingEdges(false);
@@ -65,19 +65,19 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 				
-				var addOverlay = function(cell)
+				let addOverlay = function(cell)
 				{
 					// Creates a new overlay with an image and a tooltip
-					var overlay = new mxCellOverlay(new mxImage('images/add.png', 24, 24), 'Add outgoing');
+					let overlay = new mxCellOverlay(new mxImage('images/add.png', 24, 24), 'Add outgoing');
 					overlay.cursor = 'hand';
 
 					// Installs a handler for clicks on the overlay							
 					overlay.addListener(mxEvent.CLICK, function(sender, evt2)
 					{
 						graph.clearSelection();
-						var geo = graph.getCellGeometry(cell);
+						let geo = graph.getCellGeometry(cell);
 						
 						var v2;
 						
@@ -97,12 +97,12 @@
 					overlay.addListener('pointerdown', function(sender, eo)
 					{
 						var evt2 = eo.getProperty('event');
-						var state = eo.getProperty('state');
+						let state = eo.getProperty('state');
 						
 						graph.popupMenuHandler.hideMenu();
 						graph.stopEditing(false);
 						
-						var pt = mxUtils.convertPoint(graph.container,
+						let pt = mxUtils.convertPoint(graph.container,
 								mxEvent.getClientX(evt2), mxEvent.getClientY(evt2));
 						graph.connectionHandler.start(state, pt.x, pt.y);
 						graph.isMouseDown = true;
@@ -128,9 +128,9 @@
 					graph.getModel().endUpdate();
 				}
 
-				var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_WEST);
+				let layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_WEST);
 				
-				var executeLayout = function(change, post)
+				let executeLayout = function(change, post)
 				{
 					graph.getModel().beginUpdate();
 					try
@@ -149,7 +149,7 @@
 					finally
 					{
 						// New API for animating graph layout results asynchronously
-						var morph = new mxMorphing(graph);
+						let morph = new mxMorphing(graph);
 						morph.addListener(mxEvent.DONE, mxUtils.bind(this, function()
 						{
 							graph.getModel().endUpdate();
@@ -164,7 +164,7 @@
 					}
 				};
 				
-				var edgeHandleConnect = mxEdgeHandler.prototype.connect;
+				let edgeHandleConnect = mxEdgeHandler.prototype.connect;
 				mxEdgeHandler.prototype.connect = function(edge, terminal, isSource, isClone, me)
 				{
 					edgeHandleConnect.apply(this, arguments);
diff --git a/src/examples/boundary.html b/src/examples/boundary.html
index 4857b1855..0d7310496 100644
--- a/src/examples/boundary.html
+++ b/src/examples/boundary.html
@@ -35,10 +35,10 @@
 				mxEvent.disableContextMenu(container);
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Sets the base style for all vertices
-				var style = graph.getStylesheet().getDefaultVertexStyle();
+				let style = graph.getStylesheet().getDefaultVertexStyle();
 				style[mxConstants.STYLE_ROUNDED] = true;
 				style[mxConstants.STYLE_FILLCOLOR] = '#ffffff';
 				style[mxConstants.STYLE_STROKECOLOR] = '#000000';
@@ -51,12 +51,12 @@
 				// Removes folding icon for relative children
 				graph.isCellFoldable = function(cell, collapse)
 				{
-					var childCount = this.model.getChildCount(cell);
+					let childCount = this.model.getChildCount(cell);
 					
-					for (var i = 0; i < childCount; i++)
+					for (let i = 0; i < childCount; i++)
 					{
-						var child = this.model.getChildAt(cell, i);
-						var geo = this.getCellGeometry(child);
+						let child = this.model.getChildAt(cell, i);
+						let geo = this.getCellGeometry(child);
 						
 						if (geo != null && geo.relative)
 						{
@@ -72,22 +72,22 @@
 				{
 					if (state != null)
 					{
-						var model = graph.getModel();
-						var geo = model.getGeometry(state.cell);
+						let model = graph.getModel();
+						let geo = model.getGeometry(state.cell);
 						
 						if (geo != null && geo.relative && !model.isEdge(state.cell))
 						{
-							var parent = model.getParent(state.cell);
+							let parent = model.getParent(state.cell);
 							
 							if (model.isVertex(parent))
 							{
-								var pstate = graph.view.getState(parent);
+								let pstate = graph.view.getState(parent);
 								
 								if (pstate != null)
 								{
-									var scale = graph.view.scale;
-									var x = state.x + dx;
-									var y = state.y + dy;
+									let scale = graph.view.scale;
+									let x = state.x + dx;
+									let y = state.y + dy;
 									
 									if (geo.offset != null)
 									{
@@ -121,11 +121,11 @@
 				// Replaces translation for relative children
 				graph.translateCell = function(cell, dx, dy)
 				{
-					var rel = getRelativePosition(this.view.getState(cell), dx * graph.view.scale, dy * graph.view.scale);
+					let rel = getRelativePosition(this.view.getState(cell), dx * graph.view.scale, dy * graph.view.scale);
 					
 					if (rel != null)
 					{
-						var geo = this.model.getGeometry(cell);
+						let geo = this.model.getGeometry(cell);
 						
 						if (geo != null && geo.relative)
 						{
@@ -145,17 +145,17 @@
 				// Replaces move preview for relative children
 				graph.graphHandler.getDelta = function(me)
 				{
-					var point = mxUtils.convertPoint(this.graph.container, me.getX(), me.getY());
-					var delta = new mxPoint(point.x - this.first.x, point.y - this.first.y);
+					let point = mxUtils.convertPoint(this.graph.container, me.getX(), me.getY());
+					let delta = new mxPoint(point.x - this.first.x, point.y - this.first.y);
 					
 					if (this.cells != null && this.cells.length > 0 && this.cells[0] != null)
 					{
-						var state = this.graph.view.getState(this.cells[0]);
-						var rel = getRelativePosition(state, delta.x, delta.y);
+						let state = this.graph.view.getState(this.cells[0]);
+						let rel = getRelativePosition(state, delta.x, delta.y);
 						
 						if (rel != null)
 						{
-							var pstate = this.graph.view.getState(this.graph.model.getParent(state.cell));
+							let pstate = this.graph.view.getState(this.graph.model.getParent(state.cell));
 							
 							if (pstate != null)
 							{
@@ -185,7 +185,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/clipboard.html b/src/examples/clipboard.html
index b37425207..52f83f14e 100644
--- a/src/examples/clipboard.html
+++ b/src/examples/clipboard.html
@@ -35,16 +35,16 @@
 				mxEvent.disableContextMenu(container);
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Public helper method for shared clipboard.
 				mxClipboard.cellsToString = function(cells)
 				{
-					var codec = new mxCodec();
-					var model = new mxGraphModel();
-					var parent = model.getChildAt(model.getRoot(), 0);
+					let codec = new mxCodec();
+					let model = new mxGraphModel();
+					let parent = model.getChildAt(model.getRoot(), 0);
 					
-					for (var i = 0; i < cells.length; i++)
+					for (let i = 0; i < cells.length; i++)
 					{
 						model.add(parent, cells[i]);
 					}
@@ -53,15 +53,15 @@
 				};
 
 				// Focused but invisible textarea during control or meta key events
-				var textInput = document.createElement('textarea');
+				let textInput = document.createElement('textarea');
 				mxUtils.setOpacity(textInput, 0);
 				textInput.style.width = '1px';
 				textInput.style.height = '1px';
-				var restoreFocus = false;
-				var gs = graph.gridSize;
-				var lastPaste = null;
-				var dx = 0;
-				var dy = 0;
+				let restoreFocus = false;
+				let gs = graph.gridSize;
+				let lastPaste = null;
+				let dx = 0;
+				let dy = 0;
 
 				// Workaround for no copy event in IE/FF if empty
 				textInput.value = ' ';
@@ -70,7 +70,7 @@
 				mxEvent.addListener(document, 'keydown', function(evt)
 				{
 					// No dialog visible
-					var source = mxEvent.getSource(evt);
+					let source = mxEvent.getSource(evt);
 					
 					if (graph.isEnabled() && !graph.isMouseDown && !graph.isEditing() && source.nodeName != 'INPUT')
 					{
@@ -112,20 +112,20 @@
 				});
 				
 				// Inserts the XML for the given cells into the text input for copy
-				var copyCells = function(graph, cells)
+				let copyCells = function(graph, cells)
 				{
 					if (cells.length > 0)
 					{
-						var clones = graph.cloneCells(cells);
+						let clones = graph.cloneCells(cells);
 						
 						// Checks for orphaned relative children and makes absolute
-						for (var i = 0; i < clones.length; i++)
+						for (let i = 0; i < clones.length; i++)
 						{
-							var state = graph.view.getState(cells[i]);
+							let state = graph.view.getState(cells[i]);
 							
 							if (state != null)
 							{
-								var geo = graph.getCellGeometry(clones[i]);
+								let geo = graph.getCellGeometry(clones[i]);
 								
 								if (geo != null && geo.relative)
 								{
@@ -166,43 +166,43 @@
 				}));
 				
 				// Merges XML into existing graph and layers
-				var importXml = function(xml, dx, dy)
+				let importXml = function(xml, dx, dy)
 				{
 					dx = (dx != null) ? dx : 0;
 					dy = (dy != null) ? dy : 0;
-					var cells = []
+					let cells = []
 
 					try
 					{
-						var doc = mxUtils.parseXml(xml);
-						var node = doc.documentElement;
+						let doc = mxUtils.parseXml(xml);
+						let node = doc.documentElement;
 						
 						if (node != null)
 						{
-							var model = new mxGraphModel();
-							var codec = new mxCodec(node.ownerDocument);
+							let model = new mxGraphModel();
+							let codec = new mxCodec(node.ownerDocument);
 							codec.decode(node, model);
 							
-							var childCount = model.getChildCount(model.getRoot());
-							var targetChildCount = graph.model.getChildCount(graph.model.getRoot());
+							let childCount = model.getChildCount(model.getRoot());
+							let targetChildCount = graph.model.getChildCount(graph.model.getRoot());
 							
 							// Merges existing layers and adds new layers
 							graph.model.beginUpdate();
 							try
 							{
-								for (var i = 0; i < childCount; i++)
+								for (let i = 0; i < childCount; i++)
 								{
-									var parent = model.getChildAt(model.getRoot(), i);
+									let parent = model.getChildAt(model.getRoot(), i);
 									
 									// Adds cells to existing layers if not locked
 									if (targetChildCount > i)
 									{
 										// Inserts into active layer if only one layer is being pasted
-										var target = (childCount == 1) ? graph.getDefaultParent() : graph.model.getChildAt(graph.model.getRoot(), i);
+										let target = (childCount == 1) ? graph.getDefaultParent() : graph.model.getChildAt(graph.model.getRoot(), i);
 										
 										if (!graph.isCellLocked(target))
 										{								
-											var children = model.getChildren(parent);
+											let children = model.getChildren(parent);
 											cells = cells.concat(graph.importCells(children, dx, dy, target));
 										}
 									}
@@ -210,7 +210,7 @@
 									{
 										// Delta is non cascading, needs separate move for layers
 										parent = graph.importCells([parent], 0, 0, graph.model.getRoot())[0];
-										var children = graph.model.getChildren(parent);
+										let children = graph.model.getChildren(parent);
 										graph.moveCells(children, dx, dy);
 										cells = cells.concat(children);
 									}
@@ -232,11 +232,11 @@
 				};
 				
 				// Parses and inserts XML into graph
-				var pasteText = function(text)
+				let pasteText = function(text)
 				{
-					var xml = mxUtils.trim(text);
-					var x = graph.container.scrollLeft / graph.view.scale - graph.view.translate.x;
-					var y = graph.container.scrollTop / graph.view.scale - graph.view.translate.y;
+					let xml = mxUtils.trim(text);
+					let x = graph.container.scrollLeft / graph.view.scale - graph.view.translate.x;
+					let y = graph.container.scrollTop / graph.view.scale - graph.view.translate.y;
 					
 					if (xml.length > 0)
 					{
@@ -262,13 +262,13 @@
 				};
 				
 				// Cross-browser function to fetch text from paste events
-				var extractGraphModelFromEvent = function(evt)
+				let extractGraphModelFromEvent = function(evt)
 				{
-					var data = null;
+					let data = null;
 					
 					if (evt != null)
 					{
-						var provider = (evt.dataTransfer != null) ? evt.dataTransfer : evt.clipboardData;
+						let provider = (evt.dataTransfer != null) ? evt.dataTransfer : evt.clipboardData;
 						
 						if (provider != null)
 						{
@@ -301,7 +301,7 @@
 
 					if (graph.isEnabled())
 					{
-						var xml = extractGraphModelFromEvent(evt);
+						let xml = extractGraphModelFromEvent(evt);
 
 						if (xml != null && xml.length > 0)
 						{
@@ -325,7 +325,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/codec.html b/src/examples/codec.html
index a3a00f03e..e6af98d7b 100644
--- a/src/examples/codec.html
+++ b/src/examples/codec.html
@@ -26,31 +26,31 @@
 		{
 			if (mxClient.isBrowserSupported())
 			{
-				var divs = document.getElementsByTagName('*');
+				let divs = document.getElementsByTagName('*');
 				
-				for (var i = 0; i < divs.length; i++)
+				for (let i = 0; i < divs.length; i++)
 				{
 					if (divs[i].className.toString().indexOf('mxgraph') >= 0)
 					{
 						(function(container)
 						{
-							var xml = mxUtils.getTextContent(container);
-							var xmlDocument = mxUtils.parseXml(xml);
+							let xml = mxUtils.getTextContent(container);
+							let xmlDocument = mxUtils.parseXml(xml);
 							
 							if (xmlDocument.documentElement != null && xmlDocument.documentElement.nodeName == 'mxGraphModel')
 							{
-								var decoder = new mxCodec(xmlDocument);
-								var node = xmlDocument.documentElement;
+								let decoder = new mxCodec(xmlDocument);
+								let node = xmlDocument.documentElement;
 		
 								container.innerHTML = '';
 		
-								var graph = new mxGraph(container);
+								let graph = new mxGraph(container);
 								graph.centerZoom = false;
 								graph.setTooltips(false);
 								graph.setEnabled(false);
 								
 								// Changes the default style for edges "in-place"
-								var style = graph.getStylesheet().getDefaultEdgeStyle();
+								let style = graph.getStylesheet().getDefaultEdgeStyle();
 								style[mxConstants.STYLE_EDGE] = mxEdgeStyle.ElbowConnector;
 								
 								// Enables panning with left mouse button
@@ -73,21 +73,21 @@
 								graph.resizeContainer = false;
 								
 								// Adds zoom buttons in top, left corner
-								var buttons = document.createElement('div');
+								let buttons = document.createElement('div');
 								buttons.style.position = 'absolute';
 								buttons.style.overflow = 'visible';
 
-								var bs = graph.getBorderSizes();
+								let bs = graph.getBorderSizes();
 								buttons.style.top = (container.offsetTop + bs.y) + 'px';
 								buttons.style.left = (container.offsetLeft + bs.x) + 'px';
 								
-								var left = 0;
-								var bw = 16;
-								var bh = 16;
+								let left = 0;
+								let bw = 16;
+								let bh = 16;
 
 								function addButton(label, funct)
 								{
-									var btn = document.createElement('div');
+									let btn = document.createElement('div');
 									mxUtils.write(btn, label);
 									btn.style.position = 'absolute';
 									btn.style.backgroundColor = 'transparent';
diff --git a/src/examples/collapse.html b/src/examples/collapse.html
index 7652a6e49..9a7bd1f19 100644
--- a/src/examples/collapse.html
+++ b/src/examples/collapse.html
@@ -23,16 +23,16 @@
 		// from the onLoad event handler of the document (see below).
 		function main(container)
 		{
-			var graph = new mxGraph(container);
-			var parent = graph.getDefaultParent();
+			let graph = new mxGraph(container);
+			let parent = graph.getDefaultParent();
 			
 			// Extends mxGraphModel.getStyle to show an image when collapsed
-			var modelGetStyle = graph.model.getStyle;
+			let modelGetStyle = graph.model.getStyle;
 			graph.model.getStyle = function(cell)
 			{
 				if (cell != null)
 				{
-					var style = modelGetStyle.apply(this, arguments);
+					let style = modelGetStyle.apply(this, arguments);
 					
 					if (this.isCollapsed(cell))
 					{
diff --git a/src/examples/constituent.html b/src/examples/constituent.html
index 889e01d63..546d0d480 100644
--- a/src/examples/constituent.html
+++ b/src/examples/constituent.html
@@ -22,10 +22,10 @@
 		/**
 		 * Redirects start drag to parent.
 		 */
-		var graphHandlerGetInitialCellForEvent = mxGraphHandler.prototype.getInitialCellForEvent;
+		let graphHandlerGetInitialCellForEvent = mxGraphHandler.prototype.getInitialCellForEvent;
 		mxGraphHandler.prototype.getInitialCellForEvent = function(me)
 		{
-			var cell = graphHandlerGetInitialCellForEvent.apply(this, arguments);
+			let cell = graphHandlerGetInitialCellForEvent.apply(this, arguments);
 			
 			if (this.graph.isPart(cell))
 			{
@@ -52,7 +52,7 @@
 				mxEvent.disableContextMenu(container);
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.foldingEnabled = false;
 				graph.recursiveResize = true;
 				
@@ -78,7 +78,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/contexticons.html b/src/examples/contexticons.html
index ab871d3ee..5caee4ccd 100644
--- a/src/examples/contexticons.html
+++ b/src/examples/contexticons.html
@@ -49,7 +49,7 @@
 			};
 
 			// Delete
-			var img = createImage('images/delete2.png');
+			let img = createImage('images/delete2.png');
 			img.setAttribute('title', 'Delete');
 			img.style.cursor = 'pointer';
 			img.style.width = '16px';
@@ -71,7 +71,7 @@
 			this.domNode.appendChild(img);
 
 			// Size
-			var img = createImage('images/fit_to_size.png');
+			let img = createImage('images/fit_to_size.png');
 			img.setAttribute('title', 'Resize');
 			img.style.cursor = 'se-resize';
 			img.style.width = '16px';
@@ -88,7 +88,7 @@
 			this.domNode.appendChild(img);
 
 			// Move
-			var img = createImage('images/plus.png');
+			let img = createImage('images/plus.png');
 			img.setAttribute('title', 'Move');
 			img.style.cursor = 'move';
 			img.style.width = '16px';
@@ -107,7 +107,7 @@
 			this.domNode.appendChild(img);
 
 			// Connect
-			var img = createImage('images/check.png');
+			let img = createImage('images/check.png');
 			img.setAttribute('title', 'Connect');
 			img.style.cursor = 'pointer';
 			img.style.width = '16px';
@@ -115,7 +115,7 @@
 			mxEvent.addGestureListeners(img,
 				mxUtils.bind(this, function(evt)
 				{
-					var pt = mxUtils.convertPoint(this.graph.container,
+					let pt = mxUtils.convertPoint(this.graph.container,
 							mxEvent.getClientX(evt), mxEvent.getClientY(evt));
 					this.graph.connectionHandler.start(this.state, pt.x, pt.y);
 					this.graph.isMouseDown = true;
@@ -139,7 +139,7 @@
 		{
 			if (this.state != null && this.domNode != null)
 			{
-				var dy = 4;
+				let dy = 4;
 				this.domNode.style.left = (this.state.x + this.state.width - 56) + 'px';
 				this.domNode.style.top = (this.state.y + this.state.height + dy) + 'px';
 			}
@@ -170,7 +170,7 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setConnectable(true);
 				graph.connectionHandler.createTarget = true;
 
@@ -194,7 +194,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/control.html b/src/examples/control.html
index de0f89a5a..5b6cfeff4 100644
--- a/src/examples/control.html
+++ b/src/examples/control.html
@@ -32,11 +32,11 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setPanning(true);
 				
 				// Specifies the URL and size of the new control
-				var deleteImage = new mxImage('editors/images/overlays/forbidden.png', 16, 16);
+				let deleteImage = new mxImage('editors/images/overlays/forbidden.png', 16, 16);
 
 				// Overridden to add an additional control to the state at creation time
 				mxCellRendererCreateControl = mxCellRenderer.prototype.createControl;
@@ -44,13 +44,13 @@
 				{
 					mxCellRendererCreateControl.apply(this, arguments);
 					
-					var graph = state.view.graph;
+					let graph = state.view.graph;
 					
 					if (graph.getModel().isVertex(state.cell))
 					{
 						if (state.deleteControl == null)
 						{
-							var b = new mxRectangle(0, 0, deleteImage.width, deleteImage.height);
+							let b = new mxRectangle(0, 0, deleteImage.width, deleteImage.height);
 							state.deleteControl = new mxImageShape(b, deleteImage.src);
 							state.deleteControl.dialect = graph.dialect;
 							state.deleteControl.preserveImageAspect = false;
@@ -73,14 +73,14 @@
 				};
 				
 				// Helper function to compute the bounds of the control
-				var getDeleteControlBounds = function(state)
+				let getDeleteControlBounds = function(state)
 				{
 					if (state.deleteControl != null)
 					{
-						var oldScale = state.deleteControl.scale;
-						var w = state.deleteControl.bounds.width / oldScale;
-						var h = state.deleteControl.bounds.height / oldScale;
-						var s = state.view.scale;			
+						let oldScale = state.deleteControl.scale;
+						let w = state.deleteControl.bounds.width / oldScale;
+						let h = state.deleteControl.bounds.height / oldScale;
+						let s = state.view.scale;
 
 						return (state.view.graph.getModel().isEdge(state.cell)) ? 
 							new mxRectangle(state.x + state.width / 2 - w / 2 * s,
@@ -100,8 +100,8 @@
 					
 					if (state.deleteControl != null)
 					{
-						var bounds = getDeleteControlBounds(state);
-						var s = state.view.scale;
+						let bounds = getDeleteControlBounds(state);
+						let s = state.view.scale;
 						
 						if (state.deleteControl.scale != s || !state.deleteControl.bounds.equals(bounds))
 						{
@@ -134,7 +134,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/dragsource.html b/src/examples/dragsource.html
index 73b047de5..079076e15 100644
--- a/src/examples/dragsource.html
+++ b/src/examples/dragsource.html
@@ -43,12 +43,12 @@
 				// Enables snapping waypoints to terminals
 				mxEdgeHandler.prototype.snapToTerminals = true;
 				
-				var graphs = [];
+				let graphs = [];
 				
 				// Creates the graph inside the given container
-				for (var i = 0; i < 2; i++)
+				for (let i = 0; i < 2; i++)
 				{
-					var container = document.createElement('div');
+					let container = document.createElement('div');
 					container.style.overflow = 'hidden';
 					container.style.position = 'relative';
 					container.style.width = '321px';
@@ -58,7 +58,7 @@
 
 					document.body.appendChild(container);
 					
-					var graph = new mxGraph(container);
+					let graph = new mxGraph(container);
 					graph.gridSize = 30;
 					
 					// Uncomment the following if you want the container
@@ -70,7 +70,7 @@
 					
 					// Gets the default parent for inserting new cells. This
 					// is normally the first child of the root (ie. layer 0).
-					var parent = graph.getDefaultParent();
+					let parent = graph.getDefaultParent();
 									
 					// Adds cells to the model in a single step
 					graph.getModel().beginUpdate();
@@ -90,13 +90,13 @@
 				}
 				
 				// Returns the graph under the mouse
-				var graphF = function(evt)
+				let graphF = function(evt)
 				{
-					var x = mxEvent.getClientX(evt);
-					var y = mxEvent.getClientY(evt);
-					var elt = document.elementFromPoint(x, y);
+					let x = mxEvent.getClientX(evt);
+					let y = mxEvent.getClientY(evt);
+					let elt = document.elementFromPoint(x, y);
 					
-					for (var i = 0; i < graphs.length; i++)
+					for (let i = 0; i < graphs.length; i++)
 					{
 						if (mxUtils.isAncestorNode(graphs[i].container, elt))
 						{
@@ -108,11 +108,11 @@
 				};
 				
 				// Inserts a cell at the given location
-				var funct = function(graph, evt, target, x, y)
+				let funct = function(graph, evt, target, x, y)
 				{
-					var cell = new mxCell('Test', new mxGeometry(0, 0, 120, 40));
+					let cell = new mxCell('Test', new mxGeometry(0, 0, 120, 40));
 					cell.vertex = true;
-					var cells = graph.importCells([cell], x, y, target);
+					let cells = graph.importCells([cell], x, y, target);
 
 					if (cells != null && cells.length > 0)
 					{
@@ -122,13 +122,13 @@
 				};
 				
 				// Creates a DOM node that acts as the drag source
-				var img = mxUtils.createImage('images/icons48/gear.png');
+				let img = mxUtils.createImage('images/icons48/gear.png');
 				img.style.width = '48px';
 				img.style.height = '48px';
 				document.body.appendChild(img);
 				
 				// Creates the element that is being for the actual preview.
-				var dragElt = document.createElement('div');
+				let dragElt = document.createElement('div');
 				dragElt.style.border = 'dashed black 1px';
 				dragElt.style.width = '120px';
 				dragElt.style.height = '40px';
@@ -137,7 +137,7 @@
 				// if scalePreview (last) argument is true. Dx and dy are null to force
 				// the use of the defaults. Note that dx and dy are only used for the
 				// drag icon but not for the preview.
-				var ds = mxUtils.makeDraggable(img, graphF, funct, dragElt, null, null, graph.autoscroll, true);
+				let ds = mxUtils.makeDraggable(img, graphF, funct, dragElt, null, null, graph.autoscroll, true);
 				
 				// Redirects feature to global switch. Note that this feature should only be used
 				// if the the x and y arguments are used in funct to insert the cell.
@@ -156,11 +156,11 @@
 		/*mxDragSourceMouseUp = mxDragSource.prototype.mouseUp;
 		mxDragSource.prototype.mouseUp = function(evt)
 		{
-			var doc = this.element.ownerDocument;
+			let doc = this.element.ownerDocument;
 			
 			if (doc != document)
 			{
-				var mu = (mxClient.IS_TOUCH) ? 'touchend' : 'mouseup';
+				let mu = (mxClient.IS_TOUCH) ? 'touchend' : 'mouseup';
 				
 				if (this.mouseUpHandler != null)
 				{
@@ -177,11 +177,11 @@
 			if (this.enabled && !mxEvent.isConsumed(evt))
 			{
 				mxDragSourceMouseDown.apply(this, arguments);
-				var doc = this.element.ownerDocument;
+				let doc = this.element.ownerDocument;
 				
 				if (doc != document)
 				{
-					var mu = (mxClient.IS_TOUCH) ? 'touchend' : 'mouseup';
+					let mu = (mxClient.IS_TOUCH) ? 'touchend' : 'mouseup';
 					mxEvent.addListener(doc, mu, this.mouseUpHandler);
 				}
 			}
diff --git a/src/examples/drop.html b/src/examples/drop.html
index 300c3da51..db679321a 100644
--- a/src/examples/drop.html
+++ b/src/examples/drop.html
@@ -24,7 +24,7 @@
 		function main(container)
 		{
 			// Checks if the browser is supported
-			var fileSupport = window.File != null && window.FileReader != null && window.FileList != null;
+			let fileSupport = window.File != null && window.FileReader != null && window.FileList != null;
 			
 			if (!fileSupport || !mxClient.isBrowserSupported())
 			{
@@ -37,7 +37,7 @@
 				mxEvent.disableContextMenu(container);
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Enables rubberband selection
 				new mxRubberband(graph);
@@ -59,16 +59,16 @@
 						evt.preventDefault();
 
 						// Gets drop location point for vertex
-						var pt = mxUtils.convertPoint(graph.container, mxEvent.getClientX(evt), mxEvent.getClientY(evt));
-						var tr = graph.view.translate;
-						var scale = graph.view.scale;
-						var x = pt.x / scale - tr.x;
-						var y = pt.y / scale - tr.y;
+						let pt = mxUtils.convertPoint(graph.container, mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+						let tr = graph.view.translate;
+						let scale = graph.view.scale;
+						let x = pt.x / scale - tr.x;
+						let y = pt.y / scale - tr.y;
 						
 						// Converts local images to data urls
-						var filesArray = event.dataTransfer.files;
+						let filesArray = event.dataTransfer.files;
 						
-		                for (var i = 0; i < filesArray.length; i++)
+		                for (let i = 0; i < filesArray.length; i++)
 		                {
 			    			handleDrop(graph, filesArray[i], x + i * 10, y + i * 10);
 		                }
@@ -83,34 +83,34 @@
 		{
 			if (file.type.substring(0, 5) == 'image')
 			{
-                var reader = new FileReader();
+                let reader = new FileReader();
 
                 reader.onload = function(e)
                 {
                 	// Gets size of image for vertex
-					var data = e.target.result;
+					let data = e.target.result;
 
     				// SVG needs special handling to add viewbox if missing and
     				// find initial size from SVG attributes (only for IE11)
 					if (file.type.substring(0, 9) == 'image/svg')
 	    			{
-    					var comma = data.indexOf(',');
-    					var svgText = atob(data.substring(comma + 1));
-    					var root = mxUtils.parseXml(svgText);
+    					let comma = data.indexOf(',');
+    					let svgText = atob(data.substring(comma + 1));
+    					let root = mxUtils.parseXml(svgText);
     					
     					// Parses SVG to find width and height
     					if (root != null)
     					{
-    						var svgs = root.getElementsByTagName('svg');
+    						let svgs = root.getElementsByTagName('svg');
     						
     						if (svgs.length > 0)
 	    					{
-    							var svgRoot = svgs[0];
-	    						var w = parseFloat(svgRoot.getAttribute('width'));
-	    						var h = parseFloat(svgRoot.getAttribute('height'));
+    							let svgRoot = svgs[0];
+	    						let w = parseFloat(svgRoot.getAttribute('width'));
+	    						let h = parseFloat(svgRoot.getAttribute('height'));
 	    						
 	    						// Check if viewBox attribute already exists
-	    						var vb = svgRoot.getAttribute('viewBox');
+	    						let vb = svgRoot.getAttribute('viewBox');
 	    						
 	    						if (vb == null || vb.length == 0)
 	    						{
@@ -120,7 +120,7 @@
 	    						// missing width and height attributes
 	    						else if (isNaN(w) || isNaN(h))
 	    						{
-	    							var tokens = vb.split(' ');
+	    							let tokens = vb.split(' ');
 	    							
 	    							if (tokens.length > 3)
 	    							{
@@ -139,15 +139,15 @@
 	    			}
 					else
 					{
-                    	var img = new Image();
+                    	let img = new Image();
                     	
                     	img.onload = function()
                     	{
-	                    	var w = Math.max(1, img.width);
-	                    	var h = Math.max(1, img.height);
+	                    	let w = Math.max(1, img.width);
+	                    	let h = Math.max(1, img.height);
 	                    	
 	                    	// Converts format of data url to cell style value for use in vertex
-	        				var semi = data.indexOf(';');
+	        				let semi = data.indexOf(';');
 	        				
 	        				if (semi > 0)
 	        				{
diff --git a/src/examples/dynamicloading.html b/src/examples/dynamicloading.html
index a9779585e..368b6ec4e 100644
--- a/src/examples/dynamicloading.html
+++ b/src/examples/dynamicloading.html
@@ -27,7 +27,7 @@
 		// in a real-life setup each cell should have an external
 		// ID on the business object or else the cell ID should be
 		// globally unique for the lifetime of the graph model.
-		var requestId = 0;
+		let requestId = 0;
 		
 		function main(container)
 		{
@@ -44,7 +44,7 @@
 				mxText.prototype.enableBoundingBox = false;
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Disables all built-in interactions
 				graph.setEnabled(false);
@@ -52,7 +52,7 @@
 				// Handles clicks on cells
 				graph.addListener(mxEvent.CLICK, function(sender, evt)
 				{
-					var cell = evt.getProperty('cell');
+					let cell = evt.getProperty('cell');
 
 					if (cell != null)
 					{
@@ -61,24 +61,24 @@
 				});
 
 				// Changes the default vertex style in-place
-				var style = graph.getStylesheet().getDefaultVertexStyle();
+				let style = graph.getStylesheet().getDefaultVertexStyle();
 				style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_ELLIPSE;
 				style[mxConstants.STYLE_PERIMETER] = mxPerimeter.EllipsePerimeter;
 				style[mxConstants.STYLE_GRADIENTCOLOR] = 'white';
 								
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 
-				var cx = graph.container.clientWidth / 2;
-				var cy = graph.container.clientHeight / 2;
+				let cx = graph.container.clientWidth / 2;
+				let cy = graph.container.clientHeight / 2;
 				
-				var cell = graph.insertVertex(parent, '0-0', '0-0', cx - 20, cy - 15, 60, 40);
+				let cell = graph.insertVertex(parent, '0-0', '0-0', cx - 20, cy - 15, 60, 40);
 
 				// Animates the changes in the graph model
 				graph.getModel().addListener(mxEvent.CHANGE, function(sender, evt)
 				{
-					var changes = evt.getProperty('edit').changes;
+					let changes = evt.getProperty('edit').changes;
 					mxEffects.animateChanges(graph, changes);
 				});
 
@@ -93,26 +93,26 @@
 		{
 			if (graph.getModel().isVertex(cell))
 			{
-				var cx = graph.container.clientWidth / 2;
-				var cy = graph.container.clientHeight / 2;
+				let cx = graph.container.clientWidth / 2;
+				let cy = graph.container.clientHeight / 2;
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
 				try
 				{
-					var xml = server(cell.id);
-					var doc = mxUtils.parseXml(xml);
-					var dec = new mxCodec(doc);
-					var model = dec.decode(doc.documentElement);
+					let xml = server(cell.id);
+					let doc = mxUtils.parseXml(xml);
+					let dec = new mxCodec(doc);
+					let model = dec.decode(doc.documentElement);
 
 					// Removes all cells which are not in the response
 					for (var key in graph.getModel().cells)
 					{
-						var tmp = graph.getModel().getCell(key);
+						let tmp = graph.getModel().getCell(key);
 						
 						if (tmp != cell &&
 							graph.getModel().isVertex(tmp))
@@ -125,7 +125,7 @@
 					graph.getModel().mergeChildren(model.getRoot().getChildAt(0), parent);
 
 					// Moves the given cell to the center
-					var geo = graph.getModel().getGeometry(cell);
+					let geo = graph.getModel().getGeometry(cell);
 
 					if (geo != null)
 					{
@@ -140,11 +140,11 @@
 					// than the center vertex which might have existed
 					// previously, then this needs to be changed to analyze
 					// the target model before calling mergeChildren above
-					var vertices = [];
+					let vertices = [];
 					
 					for (var key in graph.getModel().cells)
 					{
-						var tmp = graph.getModel().getCell(key);
+						let tmp = graph.getModel().getCell(key);
 						
 						if (tmp != cell && model.isVertex(tmp))
 						{
@@ -153,7 +153,7 @@
 							// Changes the initial location "in-place"
 							// to get a nice animation effect from the
 							// center to the radius of the circle
-							var geo = model.getGeometry(tmp);
+							let geo = model.getGeometry(tmp);
 
 							if (geo != null)
 							{
@@ -164,14 +164,14 @@
 					}
 					
 					// Arranges the response in a circle
-					var cellCount = vertices.length;
-					var phi = 2 * Math.PI / cellCount;
-					var r = Math.min(graph.container.clientWidth / 4,
+					let cellCount = vertices.length;
+					let phi = 2 * Math.PI / cellCount;
+					let r = Math.min(graph.container.clientWidth / 4,
 							graph.container.clientHeight / 4);
 					
-					for (var i = 0; i < cellCount; i++)
+					for (let i = 0; i < cellCount; i++)
 					{
-						var geo = graph.getModel().getGeometry(vertices[i]);
+						let geo = graph.getModel().getGeometry(vertices[i]);
 						
 						if (geo != null)
 						{
@@ -200,25 +200,25 @@
 			requestId++;
 
 			// Creates a local graph with no display
-			var graph = new mxGraph();
+			let graph = new mxGraph();
 			
 			// Gets the default parent for inserting new cells. This
 			// is normally the first child of the root (ie. layer 0).
-			var parent = graph.getDefaultParent();
+			let parent = graph.getDefaultParent();
 
 			// Adds cells to the model in a single step
 			graph.getModel().beginUpdate();
 			try
 			{
 				var v0 = graph.insertVertex(parent, cellId, 'Dummy', 0, 0, 60, 40);
-				var cellCount = parseInt(Math.random() * 16) + 4;
+				let cellCount = parseInt(Math.random() * 16) + 4;
 
 				// Creates the random links and cells for the response
-				for (var i = 0; i < cellCount; i++)
+				for (let i = 0; i < cellCount; i++)
 				{
-					var id = requestId + '-' + i;
-					var v = graph.insertVertex(parent, id, id, 0, 0, 60, 40);
-					var e = graph.insertEdge(parent, null, 'Link ' + i, v0, v);
+					let id = requestId + '-' + i;
+					let v = graph.insertVertex(parent, id, id, 0, 0, 60, 40);
+					let e = graph.insertEdge(parent, null, 'Link ' + i, v0, v);
 				}
 			}
 			finally
@@ -227,8 +227,8 @@
 				graph.getModel().endUpdate();
 			}
 
-			var enc = new mxCodec();
-			var node = enc.encode(graph.getModel());
+			let enc = new mxCodec();
+			let node = enc.encode(graph.getModel());
 			
 			return mxUtils.getXml(node);
 		};
diff --git a/src/examples/dynamicstyle.html b/src/examples/dynamicstyle.html
index af82c501e..b6712626b 100644
--- a/src/examples/dynamicstyle.html
+++ b/src/examples/dynamicstyle.html
@@ -32,7 +32,7 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Disables moving of edge labels in this examples
 				graph.edgeLabelsMovable = false;
@@ -48,22 +48,22 @@
 				// Overrides mxGraphModel.getStyle to return a specific style
 				// for edges that reflects their target terminal (in this case
 				// the strokeColor will be equal to the target's fillColor).
-				var previous = graph.model.getStyle;
+				let previous = graph.model.getStyle;
 				
 				graph.model.getStyle = function(cell)
 				{
 					if (cell != null)
 					{
-						var style = previous.apply(this, arguments);
+						let style = previous.apply(this, arguments);
 						
 						if (this.isEdge(cell))
 						{
-							var target = this.getTerminal(cell, false);
+							let target = this.getTerminal(cell, false);
 
 							if (target != null)
 							{
-								var targetStyle = graph.getCurrentCellStyle(target);
-								var fill = mxUtils.getValue(targetStyle, mxConstants.STYLE_FILLCOLOR);
+								let targetStyle = graph.getCurrentCellStyle(target);
+								let fill = mxUtils.getValue(targetStyle, mxConstants.STYLE_FILLCOLOR);
 								
 								if (fill != null)
 								{
@@ -73,7 +73,7 @@
 						}
 						else if (this.isVertex(cell))
 						{
-							var geometry = this.getGeometry(cell);
+							let geometry = this.getGeometry(cell);
 							
 							if (geometry != null &&
 								geometry.width > 80)
@@ -90,7 +90,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/dynamictoolbar.html b/src/examples/dynamictoolbar.html
index cd7531d1e..f7b5d2983 100644
--- a/src/examples/dynamictoolbar.html
+++ b/src/examples/dynamictoolbar.html
@@ -37,7 +37,7 @@
 				mxConnectionHandler.prototype.connectImage = new mxImage('images/connector.gif', 16, 16);
 
 				// Creates the div for the toolbar
-				var tbContainer = document.createElement('div');
+				let tbContainer = document.createElement('div');
 				tbContainer.style.position = 'absolute';
 				tbContainer.style.overflow = 'hidden';
 				tbContainer.style.padding = '2px';
@@ -49,11 +49,11 @@
 				document.body.appendChild(tbContainer);
 			
 				// Creates new toolbar without event processing
-				var toolbar = new mxToolbar(tbContainer);
+				let toolbar = new mxToolbar(tbContainer);
 				toolbar.enabled = false
 				
 				// Creates the div for the graph
-				var container = document.createElement('div');
+				let container = document.createElement('div');
 				container.style.position = 'absolute';
 				container.style.overflow = 'hidden';
 				container.style.left = '24px';
@@ -66,28 +66,28 @@
 
 				// Creates the model and the graph inside the container
 				// using the fastest rendering available on the browser
-				var model = new mxGraphModel();
-				var graph = new mxGraph(container, model);
+				let model = new mxGraphModel();
+				let graph = new mxGraph(container, model);
 
 				// Enables new connections in the graph
 				graph.setConnectable(true);
 				graph.setMultigraph(false);
 
 				// Stops editing on enter or escape keypress
-				var keyHandler = new mxKeyHandler(graph);
-				var rubberband = new mxRubberband(graph);
+				let keyHandler = new mxKeyHandler(graph);
+				let rubberband = new mxRubberband(graph);
 				
-				var addVertex = function(icon, w, h, style)
+				let addVertex = function(icon, w, h, style)
 				{
-					var vertex = new mxCell(null, new mxGeometry(0, 0, w, h), style);
+					let vertex = new mxCell(null, new mxGeometry(0, 0, w, h), style);
 					vertex.setVertex(true);
 				
-					var img = addToolbarItem(graph, toolbar, vertex, icon);
+					let img = addToolbarItem(graph, toolbar, vertex, icon);
 					img.enabled = true;
 					
 					graph.getSelectionModel().addListener(mxEvent.CHANGE, function()
 					{
-						var tmp = graph.isSelectionEmpty();
+						let tmp = graph.isSelectionEmpty();
 						mxUtils.setOpacity(img, (tmp) ? 100 : 20);
 						img.enabled = tmp;
 					});
@@ -108,11 +108,11 @@
 			// Function that is executed when the image is dropped on
 			// the graph. The cell argument points to the cell under
 			// the mousepointer if there is one.
-			var funct = function(graph, evt, cell, x, y)
+			let funct = function(graph, evt, cell, x, y)
 			{
 				graph.stopEditing(false);
 
-				var vertex = graph.getModel().cloneCell(prototype);
+				let vertex = graph.getModel().cloneCell(prototype);
 				vertex.geometry.x = x;
 				vertex.geometry.y = y;
 					
@@ -121,9 +121,9 @@
 			}
 			
 			// Creates the image which is used as the drag icon (preview)
-			var img = toolbar.addMode(null, image, function(evt, cell)
+			let img = toolbar.addMode(null, image, function(evt, cell)
 			{
-				var pt = this.graph.getPointForEvent(evt);
+				let pt = this.graph.getPointForEvent(evt);
 				funct(graph, evt, cell, pt.x, pt.y);
 			});
 			
diff --git a/src/examples/edgetolerance.html b/src/examples/edgetolerance.html
index a605b73f6..19d24e230 100644
--- a/src/examples/edgetolerance.html
+++ b/src/examples/edgetolerance.html
@@ -34,7 +34,7 @@
 				// Overrides the mouse event dispatching mechanism to update the
 				// cell which is associated with the event in case the native hit
 				// detection did not return anything.
-				var mxGraphFireMouseEvent = mxGraph.prototype.fireMouseEvent;
+				let mxGraphFireMouseEvent = mxGraph.prototype.fireMouseEvent;
 				mxGraph.prototype.fireMouseEvent = function(evtName, me, sender)
 				{
 					// Checks if native hit detection did not return anything
@@ -45,13 +45,13 @@
 						// method doesn't have to do this again.
 						if (me.graphX == null || me.graphY == null)
 						{
-							var pt = mxUtils.convertPoint(this.container, me.getX(), me.getY());
+							let pt = mxUtils.convertPoint(this.container, me.getX(), me.getY());
 							
 							me.graphX = pt.x;
 							me.graphY = pt.y;
 						}
 						
-						var cell = this.getCellAt(me.graphX, me.graphY);
+						let cell = this.getCellAt(me.graphX, me.graphY);
 						
 						if (this.getModel().isEdge(cell))
 						{
@@ -73,12 +73,12 @@
 				};
 				
 				// Overrides double click handling to use the tolerance
-				var mxGraphDblClick = mxGraph.prototype.dblClick;
+				let mxGraphDblClick = mxGraph.prototype.dblClick;
 				mxGraph.prototype.dblClick = function(evt, cell)
 				{
 					if (cell == null)
 					{
-						var pt = mxUtils.convertPoint(this.container,
+						let pt = mxUtils.convertPoint(this.container,
 							mxEvent.getClientX(evt), mxEvent.getClientY(evt));
 						cell = this.getCellAt(pt.x, pt.y);
 					}
@@ -87,12 +87,12 @@
 				};
 
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setTolerance(20);
 
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/editing.html b/src/examples/editing.html
index e4fc53b7c..ef71bd6f3 100644
--- a/src/examples/editing.html
+++ b/src/examples/editing.html
@@ -35,22 +35,22 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setHtmlLabels(true);
 				
 				// Adds handling of return and escape keystrokes for editing
-				var keyHandler = new mxKeyHandler(graph);
+				let keyHandler = new mxKeyHandler(graph);
 				
 				// Helper method that returns the fieldname to be used for
 				// a mouse event
-				var getFieldnameForEvent = function(cell, evt)
+				let getFieldnameForEvent = function(cell, evt)
 				{
 					if (evt != null)
 					{
 						// Finds the relative coordinates inside the cell
-						var point = mxUtils.convertPoint(graph.container,
+						let point = mxUtils.convertPoint(graph.container,
 							mxEvent.getClientX(evt), mxEvent.getClientY(evt));
-						var state = graph.getView().getState(cell);
+						let state = graph.getView().getState(cell);
 						
 						if (state != null)
 						{
@@ -73,11 +73,11 @@
 				// value
 				graph.getLabel = function(cell)
 				{
-					var table = document.createElement('table');
+					let table = document.createElement('table');
 					table.style.height = '100%';
 					table.style.width = '100%';
 					
-					var body = document.createElement('tbody');
+					let body = document.createElement('tbody');
 					var tr1 = document.createElement('tr');
 					var td1 = document.createElement('td');
 					td1.style.textAlign = 'center';
@@ -112,13 +112,13 @@
 				// Sets the new value for the given cell and trigger
 				graph.labelChanged = function(cell, newValue, trigger)
 				{
-					var name = (trigger != null) ? trigger.fieldname : null;
+					let name = (trigger != null) ? trigger.fieldname : null;
 					
 					if (name != null)
 					{
 						// Clones the user object for correct undo and puts
 						// the new value in the correct field.
-						var value = mxUtils.clone(cell.value);
+						let value = mxUtils.clone(cell.value);
 						value[name] = newValue;
 						newValue = value;
 						
@@ -127,13 +127,13 @@
 				};
 				
 				// Sample user objects with 2 fields
-				var value = {};
+				let value = {};
 				value.first = 'First value';
 				value.second = 'Second value';
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/editors/config/diagrameditor.xml b/src/examples/editors/config/diagrameditor.xml
index 8d5a2fbe9..f9576bfcb 100644
--- a/src/examples/editors/config/diagrameditor.xml
+++ b/src/examples/editors/config/diagrameditor.xml
@@ -104,8 +104,8 @@
 		<add as="getTooltipForCell"><![CDATA[
 			function(cell)
 			{
-				var label = cell.getAttribute('label');
-				var style = cell.getStyle();
+				let label = cell.getAttribute('label');
+				let style = cell.getStyle();
 			
 				return ((label != null) ? ('<b>' + label +
 						'</b> (' + cell.getId() + ')<br>') : '') +
@@ -252,7 +252,7 @@
 			<add as="valueForCellChanged"><![CDATA[
 				function(cell, value)
 				{
-					var previous = null;
+					let previous = null;
 					
 					if (value == null || isNaN(value.nodeType))
 					{
diff --git a/src/examples/editors/config/editor-commons.xml b/src/examples/editors/config/editor-commons.xml
index 420e2cd42..5d7069847 100644
--- a/src/examples/editors/config/editor-commons.xml
+++ b/src/examples/editors/config/editor-commons.xml
@@ -72,7 +72,7 @@
 
 				if (cell != null)
 				{
-					var href = cell.getAttribute('href');
+					let href = cell.getAttribute('href');
 					
 					if (href != null && href.length > 0)
 					{
@@ -89,12 +89,12 @@
 		<add as="editStyle"><![CDATA[
 			function (editor)
 			{
-				var cell = editor.graph.getSelectionCell();
+				let cell = editor.graph.getSelectionCell();
 				
 				if (cell != null)
 				{
-					var model = editor.graph.getModel();
-					var style = mxUtils.prompt(mxResources.get('enterStyle'), model.getStyle(cell) || '');
+					let model = editor.graph.getModel();
+					let style = mxUtils.prompt(mxResources.get('enterStyle'), model.getStyle(cell) || '');
 
 					if (style != null)
 					{
@@ -106,7 +106,7 @@
 		<add as="fillColor"><![CDATA[
 			function (editor)
 			{
-				var color = mxUtils.prompt(mxResources.get('enterColorname'), 'red');
+				let color = mxUtils.prompt(mxResources.get('enterColorname'), 'red');
 				
 				if (color != null)
 				{
@@ -126,7 +126,7 @@
 		<add as="gradientColor"><![CDATA[
 			function (editor)
 			{
-				var color = mxUtils.prompt(mxResources.get('enterColorname'), 'white');
+				let color = mxUtils.prompt(mxResources.get('enterColorname'), 'white');
 				
 				if (color != null)
 				{
@@ -137,7 +137,7 @@
 		<add as="strokeColor"><![CDATA[
 			function (editor)
 			{
-				var color = mxUtils.prompt(mxResources.get('enterColorname'), 'red');
+				let color = mxUtils.prompt(mxResources.get('enterColorname'), 'red');
 				
 				if (color != null)
 				{
@@ -148,7 +148,7 @@
 		<add as="fontColor"><![CDATA[
 			function (editor)
 			{
-				var color = mxUtils.prompt(mxResources.get('enterColorname'), 'red');
+				let color = mxUtils.prompt(mxResources.get('enterColorname'), 'red');
 				
 				if (color != null)
 				{
@@ -159,7 +159,7 @@
 		<add as="fontFamily"><![CDATA[
 			function (editor)
 			{
-				var family = mxUtils.prompt(mxResources.get('enterFontfamily'), 'Arial');
+				let family = mxUtils.prompt(mxResources.get('enterFontfamily'), 'Arial');
 				
 				if (family != null && family.length > 0)
 				{
@@ -170,7 +170,7 @@
 		<add as="fontSize"><![CDATA[
 			function (editor)
 			{
-				var size = mxUtils.prompt(mxResources.get('enterFontsize'), '10');
+				let size = mxUtils.prompt(mxResources.get('enterFontsize'), '10');
 				
 				if (size != null && size > 0 && size < 999)
 				{
@@ -181,7 +181,7 @@
 		<add as="image"><![CDATA[
 			function (editor)
 			{
-				var image = mxUtils.prompt(mxResources.get('enterImageUrl'),
+				let image = mxUtils.prompt(mxResources.get('enterImageUrl'),
 					'examples/images/image.gif');
 				
 				if (image != null)
@@ -193,7 +193,7 @@
 		<add as="opacity"><![CDATA[
 			function (editor)
 			{
-				var opacity = mxUtils.prompt(mxResources.get('enterOpacity'), '100');
+				let opacity = mxUtils.prompt(mxResources.get('enterOpacity'), '100');
 				
 				if (opacity != null && opacity >= 0 && opacity <= 100)
 				{
diff --git a/src/examples/editors/config/processeditor.xml b/src/examples/editors/config/processeditor.xml
index 7beeb6709..3e057d7b1 100644
--- a/src/examples/editors/config/processeditor.xml
+++ b/src/examples/editors/config/processeditor.xml
@@ -78,11 +78,11 @@
 	<add as="createTasks"><![CDATA[
 		function (div)
 		{
-			var off = 30;
+			let off = 30;
 			
 			if (this.graph != null)
 			{
-				var layer = this.graph.getModel().getRoot().getChildAt(0);
+				let layer = this.graph.getModel().getRoot().getChildAt(0);
 				
 				if (layer == null || layer.getChildCount() == 0)
 				{
@@ -270,7 +270,7 @@
 			<add as="valueForCellChanged"><![CDATA[
 				function(cell, value)
 				{
-					var previous = null;
+					let previous = null;
 					
 					if (isNaN(value.nodeType))
 					{
diff --git a/src/examples/editors/config/wfeditor-commons.xml b/src/examples/editors/config/wfeditor-commons.xml
index e25cc102d..7cfb41b0d 100644
--- a/src/examples/editors/config/wfeditor-commons.xml
+++ b/src/examples/editors/config/wfeditor-commons.xml
@@ -69,11 +69,11 @@
 	<add as="createTasks"><![CDATA[
 		function (div)
 		{
-			var off = 30;
+			let off = 30;
 			
 			if (this.graph != null)
 			{
-				var layer = this.graph.model.root.getChildAt(0);
+				let layer = this.graph.model.root.getChildAt(0);
 				mxUtils.para(div,  mxResources.get('examples'));
 				mxUtils.linkInvoke(div, mxResources.get('newDiagram'), this,
 					'open', 'diagrams/empty.xml', off);
@@ -87,7 +87,7 @@
 				
 				if (!this.graph.isSelectionEmpty())
 				{
-					var cell = this.graph.getSelectionCell();
+					let cell = this.graph.getSelectionCell();
 					if (this.graph.getSelectionCount() == 1 &&
 						(this.graph.model.isVertex(cell) &&
 						cell.getEdgeCount() > 0) || this.graph.isSwimlane(cell))
diff --git a/src/examples/editors/config/wfgraph-commons.xml b/src/examples/editors/config/wfgraph-commons.xml
index b18dc48a1..218068029 100644
--- a/src/examples/editors/config/wfgraph-commons.xml
+++ b/src/examples/editors/config/wfgraph-commons.xml
@@ -20,11 +20,11 @@
 	<add as="getTooltipForCell"><![CDATA[
 		function(cell)
 		{
-			var href = cell.getAttribute('href');
+			let href = cell.getAttribute('href');
 			href = (href != null && href.length > 0) ?
 				'<br>'+href : '';
-			var maxlen = 30;
-			var desc = cell.getAttribute('description');
+			let maxlen = 30;
+			let desc = cell.getAttribute('description');
 			if (desc == null || desc.length == 0)
 			{
 				desc = '';
@@ -53,7 +53,7 @@
 		<add as="valueForCellChanged"><![CDATA[
 			function(cell, value)
 			{
-				var previous = null;
+				let previous = null;
 				
 				if (isNaN(value.nodeType))
 				{
diff --git a/src/examples/editors/diagrameditor.html b/src/examples/editors/diagrameditor.html
index fd991e282..9f55627e5 100644
--- a/src/examples/editors/diagrameditor.html
+++ b/src/examples/editors/diagrameditor.html
@@ -7,14 +7,14 @@
 		#page { background: url("images/draw/drawbg.jpg") repeat-y top; border: none; }
 	</style>
 	<script type="text/javascript">
-		var mxBasePath = '../../src';
+		let mxBasePath = '../../src';
 		
-		var urlParams = (function(url)
+		let urlParams = (function(url)
 		{
-			var result = {};
-			var params = window.location.search.slice(1).split('&');
+			let result = {};
+			let params = window.location.search.slice(1).split('&');
 			
-			for (var i = 0; i < params.length; i++)
+			for (let i = 0; i < params.length; i++)
 			{
 				idx = params[i].indexOf('=');
 				
@@ -27,7 +27,7 @@
 			return result;
 		})(window.location.href);
 		
-		var mxLanguage = urlParams['lang'];
+		let mxLanguage = urlParams['lang'];
 	</script>
 	<script type="text/javascript" src="../../src/js/mxClient.js"></script>
 	<script type="text/javascript" src="js/app.js"></script>
@@ -67,11 +67,11 @@
 			editor.graph.connectionHandler.setCreateTarget(true);
 
 			// Updates the title if the root changes
-			var title = document.getElementById('title');
+			let title = document.getElementById('title');
 			
 			if (title != null)
 			{
-				var f = function(sender)
+				let f = function(sender)
 				{
 					title.innerHTML = 'mxDraw - ' + sender.getTitle();
 				};
@@ -100,20 +100,20 @@
 
 			// Defines a new action to switch between
 			// XML and graphical display
-			var textNode = document.getElementById('xml');
-			var graphNode = editor.graph.container;
-			var sourceInput = document.getElementById('source');
+			let textNode = document.getElementById('xml');
+			let graphNode = editor.graph.container;
+			let sourceInput = document.getElementById('source');
 			sourceInput.checked = false;
 
-			var funct = function(editor)
+			let funct = function(editor)
 			{
 				if (sourceInput.checked)
 				{
 					graphNode.style.display = 'none';
 					textNode.style.display = 'inline';
 					
-					var enc = new mxCodec();
-					var node = enc.encode(editor.graph.getModel());
+					let enc = new mxCodec();
+					let node = enc.encode(editor.graph.getModel());
 					
 					textNode.value = mxUtils.getPrettyXml(node);
 					textNode.originalValue = textNode.value;
@@ -125,8 +125,8 @@
 					
 					if (textNode.value != textNode.originalValue)
 					{
-						var doc = mxUtils.parseXml(textNode.value);
-						var dec = new mxCodec(doc);
+						let doc = mxUtils.parseXml(textNode.value);
+						let dec = new mxCodec(doc);
 						dec.decode(doc.documentElement, editor.graph.getModel());
 					}
 
@@ -148,44 +148,44 @@
 			});
 
 			// Create select actions in page
-			var node = document.getElementById('mainActions');
-			var buttons = ['group', 'ungroup', 'cut', 'copy', 'paste', 'delete', 'undo', 'redo', 'print', 'show'];
+			let node = document.getElementById('mainActions');
+			let buttons = ['group', 'ungroup', 'cut', 'copy', 'paste', 'delete', 'undo', 'redo', 'print', 'show'];
 			
 			// Only adds image and SVG export if backend is available
 			// NOTE: The old image export in mxEditor is not used, the urlImage is used for the new export.
 			if (editor.urlImage != null)
 			{
 				// Client-side code for image export
-				var exportImage = function(editor)
+				let exportImage = function(editor)
 				{
-					var graph = editor.graph;
-					var scale = graph.view.scale;
-					var bounds = graph.getGraphBounds();
+					let graph = editor.graph;
+					let scale = graph.view.scale;
+					let bounds = graph.getGraphBounds();
 					
 		        	// New image export
-					var xmlDoc = mxUtils.createXmlDocument();
-					var root = xmlDoc.createElement('output');
+					let xmlDoc = mxUtils.createXmlDocument();
+					let root = xmlDoc.createElement('output');
 					xmlDoc.appendChild(root);
 					
 				    // Renders graph. Offset will be multiplied with state's scale when painting state.
-					var xmlCanvas = new mxXmlCanvas2D(root);
+					let xmlCanvas = new mxXmlCanvas2D(root);
 					xmlCanvas.translate(Math.floor(1 / scale - bounds.x), Math.floor(1 / scale - bounds.y));
 					xmlCanvas.scale(scale);
 					
-					var imgExport = new mxImageExport();
+					let imgExport = new mxImageExport();
 				    imgExport.drawState(graph.getView().getState(graph.model.root), xmlCanvas);
 				    
 					// Puts request data together
-					var w = Math.ceil(bounds.width * scale + 2);
-					var h = Math.ceil(bounds.height * scale + 2);
-					var xml = mxUtils.getXml(root);
+					let w = Math.ceil(bounds.width * scale + 2);
+					let h = Math.ceil(bounds.height * scale + 2);
+					let xml = mxUtils.getXml(root);
 					
 					// Requests image if request is valid
 					if (w > 0 && h > 0)
 					{
-						var name = 'export.png';
-						var format = 'png';
-						var bg = '&bg=#FFFFFF';
+						let name = 'export.png';
+						let format = 'png';
+						let bg = '&bg=#FFFFFF';
 						
 						new mxXmlRequest(editor.urlImage, 'filename=' + name + '&format=' + format +
 		        			bg + '&w=' + w + '&h=' + h + '&xml=' + encodeURIComponent(xml)).
@@ -196,15 +196,15 @@
 				editor.addAction('exportImage', exportImage);
 				
 				// Client-side code for SVG export
-				var exportSvg = function(editor)
+				let exportSvg = function(editor)
 				{
-					var graph = editor.graph;
-					var scale = graph.view.scale;
-					var bounds = graph.getGraphBounds();
+					let graph = editor.graph;
+					let scale = graph.view.scale;
+					let bounds = graph.getGraphBounds();
 
 				    // Prepares SVG document that holds the output
-				    var svgDoc = mxUtils.createXmlDocument();
-				    var root = (svgDoc.createElementNS != null) ?
+				    let svgDoc = mxUtils.createXmlDocument();
+				    let root = (svgDoc.createElementNS != null) ?
 				    	svgDoc.createElementNS(mxConstants.NS_SVG, 'svg') : svgDoc.createElement('svg');
 				    
 					if (root.style != null)
@@ -227,22 +227,22 @@
 				    root.setAttribute('version', '1.1');
 				    
 				    // Adds group for anti-aliasing via transform
-				    var group = (svgDoc.createElementNS != null) ?
+				    let group = (svgDoc.createElementNS != null) ?
 					    	svgDoc.createElementNS(mxConstants.NS_SVG, 'g') : svgDoc.createElement('g');
 					group.setAttribute('transform', 'translate(0.5,0.5)');
 					root.appendChild(group);
 				    svgDoc.appendChild(root);
 
 				    // Renders graph. Offset will be multiplied with state's scale when painting state.
-				    var svgCanvas = new mxSvgCanvas2D(group);
+				    let svgCanvas = new mxSvgCanvas2D(group);
 				    svgCanvas.translate(Math.floor(1 / scale - bounds.x), Math.floor(1 / scale - bounds.y));
 				    svgCanvas.scale(scale);
 				    
-				    var imgExport = new mxImageExport();
+				    let imgExport = new mxImageExport();
 				    imgExport.drawState(graph.getView().getState(graph.model.root), svgCanvas);
 
-					var name = 'export.svg';
-				    var xml = encodeURIComponent(mxUtils.getXml(root));
+					let name = 'export.svg';
+				    let xml = encodeURIComponent(mxUtils.getXml(root));
 					
 					new mxXmlRequest(editor.urlEcho, 'filename=' + name + '&format=svg' + '&xml=' + xml).simulate(document, "_blank");
 				};
@@ -253,12 +253,12 @@
 				buttons.push('exportSvg');
 			};
 			
-			for (var i = 0; i < buttons.length; i++)
+			for (let i = 0; i < buttons.length; i++)
 			{
-				var button = document.createElement('button');
+				let button = document.createElement('button');
 				mxUtils.write(button, mxResources.get(buttons[i]));
 			
-				var factory = function(name)
+				let factory = function(name)
 				{
 					return function()
 					{
@@ -271,7 +271,7 @@
 			}
 
 			// Create select actions in page
-			var node = document.getElementById('selectActions');
+			let node = document.getElementById('selectActions');
 			mxUtils.write(node, 'Select: ');
 			mxUtils.linkAction(node, 'All', editor, 'selectAll');
 			mxUtils.write(node, ', ');
@@ -282,7 +282,7 @@
 			mxUtils.linkAction(node, 'Edges', editor, 'selectEdges');
 
 			// Create select actions in page
-			var node = document.getElementById('zoomActions');
+			let node = document.getElementById('zoomActions');
 			mxUtils.write(node, 'Zoom: ');
 			mxUtils.linkAction(node, 'In', editor, 'zoomIn');
 			mxUtils.write(node, ', ');
diff --git a/src/examples/editors/js/app.js b/src/examples/editors/js/app.js
index fdbd0fca1..02ec6e307 100644
--- a/src/examples/editors/js/app.js
+++ b/src/examples/editors/js/app.js
@@ -10,12 +10,12 @@
 	 */
 	function createEditor(config)
 	{
-		var editor = null;
+		let editor = null;
 		
-		var hideSplash = function()
+		let hideSplash = function()
 		{
 			// Fades-out the splash screen
-			var splash = document.getElementById('splash');
+			let splash = document.getElementById('splash');
 			
 			if (splash != null)
 			{
@@ -40,14 +40,14 @@
 			else
 			{
 				mxObjectCodec.allowEval = true;
-				var node = mxUtils.load(config).getDocumentElement();
+				let node = mxUtils.load(config).getDocumentElement();
 				editor = new mxEditor(node);
 				mxObjectCodec.allowEval = false;
 				
 				// Adds active border for panning inside the container
 				editor.graph.createPanningManager = function()
 				{
-					var pm = new mxPanningManager(this);
+					let pm = new mxPanningManager(this);
 					pm.border = 30;
 					
 					return pm;
@@ -57,8 +57,8 @@
 				editor.graph.timerAutoScroll = true;
 				
 				// Updates the window title after opening new files
-				var title = document.title;
-				var funct = function(sender)
+				let title = document.title;
+				let funct = function(sender)
 				{
 					document.title = title + ' - ' + sender.getTitle();
 				};
diff --git a/src/examples/events.html b/src/examples/events.html
index b2646087d..1ee1f30b7 100644
--- a/src/examples/events.html
+++ b/src/examples/events.html
@@ -39,7 +39,7 @@
 			}
 			else
 			{
-				var container = document.createElement('div');
+				let container = document.createElement('div');
 				container.style.position = 'absolute';
 				container.style.overflow = 'hidden';
 				container.style.left = '0px';
@@ -58,7 +58,7 @@
 				// using graph.setPanning(), setTooltips() & setConnectable().
 				// To enable rubberband selection and basic keyboard events,
 				// use new mxRubberband(graph) and new mxKeyHandler(graph).
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Enables tooltips, new connections and panning
 				graph.setPanning(true);
@@ -66,8 +66,8 @@
 				graph.setConnectable(true);
 				
 				// Automatically handle parallel edges
- 				var layout = new mxParallelEdgeLayout(graph);
- 				var layoutMgr = new mxLayoutManager(graph);
+ 				let layout = new mxParallelEdgeLayout(graph);
+ 				let layoutMgr = new mxLayoutManager(graph);
  				
  				layoutMgr.getLayout = function(cell)
 				{
@@ -79,15 +79,15 @@
 				
 				// Enables rubberband (marquee) selection and a handler
 				// for basic keystrokes (eg. return, escape during editing).
-				var rubberband = new mxRubberband(graph);
-				var keyHandler = new mxKeyHandler(graph);
+				let rubberband = new mxRubberband(graph);
+				let keyHandler = new mxKeyHandler(graph);
 
 				// Changes the default style for edges "in-place" and assigns
 				// an alternate edge style which is applied in mxGraph.flip
 				// when the user double clicks on the adjustment control point
 				// of the edge. The ElbowConnector edge style switches to TopToBottom
 				// if the horizontal style is true.
-				var style = graph.getStylesheet().getDefaultEdgeStyle();
+				let style = graph.getStylesheet().getDefaultEdgeStyle();
 				style[mxConstants.STYLE_ROUNDED] = true;
 				style[mxConstants.STYLE_EDGE] = mxEdgeStyle.ElbowConnector;
 		
@@ -107,7 +107,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/extendcanvas.html b/src/examples/extendcanvas.html
index 407f8ce61..91609911c 100644
--- a/src/examples/extendcanvas.html
+++ b/src/examples/extendcanvas.html
@@ -35,7 +35,7 @@
 				mxEvent.disableContextMenu(container);
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.panningHandler.ignoreCell = true;
 				graph.setPanning(true);
 				
@@ -74,8 +74,8 @@
 				 */
 				graph.getPageLayout = function()
 				{
-					var size = (this.pageVisible) ? this.getPageSize() : this.scrollTileSize;
-					var bounds = this.getGraphBounds();
+					let size = (this.pageVisible) ? this.getPageSize() : this.scrollTileSize;
+					let bounds = this.getGraphBounds();
 
 					if (bounds.width == 0 || bounds.height == 0)
 					{
@@ -84,10 +84,10 @@
 					else
 					{
 						// Computes untransformed graph bounds
-						var x = Math.ceil(bounds.x / this.view.scale - this.view.translate.x);
-						var y = Math.ceil(bounds.y / this.view.scale - this.view.translate.y);
-						var w = Math.floor(bounds.width / this.view.scale);
-						var h = Math.floor(bounds.height / this.view.scale);
+						let x = Math.ceil(bounds.x / this.view.scale - this.view.translate.x);
+						let y = Math.ceil(bounds.y / this.view.scale - this.view.translate.y);
+						let w = Math.floor(bounds.width / this.view.scale);
+						let h = Math.floor(bounds.height / this.view.scale);
 						
 						var x0 = Math.floor(x / size.width);
 						var y0 = Math.floor(y / size.height);
@@ -101,8 +101,8 @@
 				// Fits the number of background pages to the graph
 				graph.view.getBackgroundPageBounds = function()
 				{
-					var layout = this.graph.getPageLayout();
-					var page = this.graph.getPageSize();
+					let layout = this.graph.getPageLayout();
+					let page = this.graph.getPageSize();
 					
 					return new mxRectangle(this.scale * (this.translate.x + layout.x * page.width),
 							this.scale * (this.translate.y + layout.y * page.height),
@@ -112,8 +112,8 @@
 				
 				graph.getPreferredPageSize = function(bounds, width, height)
 				{
-					var pages = this.getPageLayout();
-					var size = this.getPageSize();
+					let pages = this.getPageLayout();
+					let size = this.getPageSize();
 					
 					return new mxRectangle(0, 0, pages.width * size.width, pages.height * size.height);
 				};
@@ -123,18 +123,18 @@
 				 * Works if only the scale of the graph changes or if pages
 				 * are visible and the visible pages do not change.
 				 */
-				var graphViewValidate = graph.view.validate;
+				let graphViewValidate = graph.view.validate;
 				graph.view.validate = function()
 				{
 					if (this.graph.container != null && mxUtils.hasScrollbars(this.graph.container))
 					{
-						var pad = this.graph.getPagePadding();
-						var size = this.graph.getPageSize();
+						let pad = this.graph.getPagePadding();
+						let size = this.graph.getPageSize();
 						
 						// Updating scrollbars here causes flickering in quirks and is not needed
 						// if zoom method is always used to set the current scale on the graph.
-						var tx = this.translate.x;
-						var ty = this.translate.y;
+						let tx = this.translate.x;
+						let ty = this.translate.y;
 						this.translate.x = pad.x / this.scale - (this.x0 || 0) * size.width;
 						this.translate.y = pad.y / this.scale - (this.y0 || 0) * size.height;
 					}
@@ -142,20 +142,20 @@
 					graphViewValidate.apply(this, arguments);
 				};
 				
-				var graphSizeDidChange = graph.sizeDidChange;
+				let graphSizeDidChange = graph.sizeDidChange;
 				graph.sizeDidChange = function()
 				{
 					if (this.container != null && mxUtils.hasScrollbars(this.container))
 					{
-						var pages = this.getPageLayout();
-						var pad = this.getPagePadding();
-						var size = this.getPageSize();
+						let pages = this.getPageLayout();
+						let pad = this.getPagePadding();
+						let size = this.getPageSize();
 						
 						// Updates the minimum graph size
-						var minw = Math.ceil(2 * pad.x / this.view.scale + pages.width * size.width);
-						var minh = Math.ceil(2 * pad.y / this.view.scale + pages.height * size.height);
+						let minw = Math.ceil(2 * pad.x / this.view.scale + pages.width * size.width);
+						let minh = Math.ceil(2 * pad.y / this.view.scale + pages.height * size.height);
 						
-						var min = graph.minimumGraphSize;
+						let min = graph.minimumGraphSize;
 						
 						// LATER: Fix flicker of scrollbar size in IE quirks mode
 						// after delayed call in window.resize event handler
@@ -165,8 +165,8 @@
 						}
 						
 						// Updates auto-translate to include padding and graph size
-						var dx = pad.x / this.view.scale - pages.x * size.width;
-						var dy = pad.y / this.view.scale - pages.y * size.height;
+						let dx = pad.x / this.view.scale - pages.x * size.width;
+						let dy = pad.y / this.view.scale - pages.y * size.height;
 						
 						if (!this.autoTranslate && (this.view.translate.x != dx || this.view.translate.y != dy))
 						{
@@ -177,8 +177,8 @@
 							// NOTE: THIS INVOKES THIS METHOD AGAIN. UNFORTUNATELY THERE IS NO WAY AROUND THIS SINCE THE
 							// BOUNDS ARE KNOWN AFTER THE VALIDATION AND SETTING THE TRANSLATE TRIGGERS A REVALIDATION.
 							// SHOULD MOVE TRANSLATE/SCALE TO VIEW.
-							var tx = graph.view.translate.x;
-							var ty = graph.view.translate.y;
+							let tx = graph.view.translate.x;
+							let ty = graph.view.translate.y;
 
 							graph.view.setTranslate(dx, dy);
 							graph.container.scrollLeft += (dx - tx) * graph.view.scale;
@@ -197,7 +197,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -216,9 +216,9 @@
 				// Sets initial scrollbar positions
 				window.setTimeout(function()
 				{
-					var bounds = graph.getGraphBounds();
-					var width = Math.max(bounds.width, graph.scrollTileSize.width * graph.view.scale);
-					var height = Math.max(bounds.height, graph.scrollTileSize.height * graph.view.scale);
+					let bounds = graph.getGraphBounds();
+					let width = Math.max(bounds.width, graph.scrollTileSize.width * graph.view.scale);
+					let height = Math.max(bounds.height, graph.scrollTileSize.height * graph.view.scale);
 					graph.container.scrollTop = Math.floor(Math.max(0, bounds.y - Math.max(20, (graph.container.clientHeight - height) / 4)));
 					graph.container.scrollLeft = Math.floor(Math.max(0, bounds.x - Math.max(0, (graph.container.clientWidth - width) / 2)));
 				}, 0);
diff --git a/src/examples/fileio.html b/src/examples/fileio.html
index 17b0ecc1c..ef7995f8e 100644
--- a/src/examples/fileio.html
+++ b/src/examples/fileio.html
@@ -35,7 +35,7 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				graph.setEnabled(false);
 				graph.setPanning(true);
@@ -46,7 +46,7 @@
 				new mxCellTracker(graph);
 				
 				// Changes the default vertex style in-place
-				var style = graph.getStylesheet().getDefaultVertexStyle();
+				let style = graph.getStylesheet().getDefaultVertexStyle();
 				style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_ROUNDED;
 				style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
 				style[mxConstants.STYLE_GRADIENTCOLOR] = 'white';
@@ -70,7 +70,7 @@
 			
 				// Creates a layout algorithm to be used
 				// with the graph
-				var layout = new mxFastOrganicLayout(graph);
+				let layout = new mxFastOrganicLayout(graph);
 
 				// Moves stuff wider apart than usual
 				layout.forceConstant = 140;
@@ -78,7 +78,7 @@
 				// Adds a button to execute the layout
 				document.body.appendChild(mxUtils.button('Arrange',function(evt)
 				{
-					var parent = graph.getDefaultParent();
+					let parent = graph.getDefaultParent();
 					layout.execute(parent);
 				}));
 				
@@ -94,7 +94,7 @@
 										
 					// Gets the default parent for inserting new cells. This
 					// is normally the first child of the root (ie. layer 0).
-					var parent = graph.getDefaultParent();
+					let parent = graph.getDefaultParent();
 
 					// Executes the layout
 					layout.execute(parent);
@@ -107,7 +107,7 @@
 
 				graph.dblClick = function(evt, cell)
 				{
-					var mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell', cell);
+					let mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell', cell);
 					this.fireEvent(mxe);
 					
 					if (this.isEnabled() &&
@@ -124,19 +124,19 @@
 		// Custom parser for simple file format
 		function parse(graph, filename)
 		{
-			var model = graph.getModel();
+			let model = graph.getModel();
 								
 			// Gets the default parent for inserting new cells. This
 			// is normally the first child of the root (ie. layer 0).
-			var parent = graph.getDefaultParent();
+			let parent = graph.getDefaultParent();
 
-			var req = mxUtils.load(filename);
-			var text = req.getText();
+			let req = mxUtils.load(filename);
+			let text = req.getText();
 
-			var lines = text.split('\n');
+			let lines = text.split('\n');
 			
 			// Creates the lookup table for the vertices
-			var vertices = [];
+			let vertices = [];
 
 			// Parses all lines (vertices must be first in the file)
 			graph.getModel().beginUpdate();
@@ -145,17 +145,17 @@
 				for (var i=0; i<lines.length; i++)
 				{
 					// Ignores comments (starting with #)
-					var colon = lines[i].indexOf(':');
+					let colon = lines[i].indexOf(':');
 	
 					if (lines[i].substring(0, 1) != "#" ||
 						colon == -1)
 					{
-						var comma = lines[i].indexOf(',');
-						var value = lines[i].substring(colon+2, lines[i].length);
+						let comma = lines[i].indexOf(',');
+						let value = lines[i].substring(colon+2, lines[i].length);
 						
 						if (comma == -1 || comma > colon)
 						{
-							var key = lines[i].substring(0, colon);
+							let key = lines[i].substring(0, colon);
 							
 							if (key.length > 0)
 							{
@@ -165,12 +165,12 @@
 						else if (comma < colon)
 						{
 							// Looks up the vertices in the lookup table
-							var source = vertices[lines[i].substring(0, comma)];
-							var target = vertices[lines[i].substring(comma+1, colon)];
+							let source = vertices[lines[i].substring(0, comma)];
+							let target = vertices[lines[i].substring(comma+1, colon)];
 							
 							if (source != null && target != null)
 							{
-								var e = graph.insertEdge(parent, null, value, source, target);
+								let e = graph.insertEdge(parent, null, value, source, target);
 	
 								// Uses the special 2-way style for 2-way labels
 								if (value.indexOf('2-Way') >= 0)
@@ -191,9 +191,9 @@
 		// Parses the mxGraph XML file format
 		function read(graph, filename)
 		{
-			var req = mxUtils.load(filename);
-			var root = req.getDocumentElement();
-			var dec = new mxCodec(root.ownerDocument);
+			let req = mxUtils.load(filename);
+			let root = req.getDocumentElement();
+			let dec = new mxCodec(root.ownerDocument);
 			
 			dec.decode(root, graph.getModel());
 		};
diff --git a/src/examples/fixedicon.html b/src/examples/fixedicon.html
index ecb84c1cc..096fded50 100644
--- a/src/examples/fixedicon.html
+++ b/src/examples/fixedicon.html
@@ -21,12 +21,12 @@
 		// Overrides the image bounds code to change the position
 		mxLabel.prototype.getImageBounds = function(x, y, w, h)
 		{
-			var iw = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_WIDTH, mxConstants.DEFAULT_IMAGESIZE);
-			var ih = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_HEIGHT, mxConstants.DEFAULT_IMAGESIZE);
+			let iw = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_WIDTH, mxConstants.DEFAULT_IMAGESIZE);
+			let ih = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_HEIGHT, mxConstants.DEFAULT_IMAGESIZE);
 			
 			// Places the icon
-			var ix = (w - iw) / 2;
-			var iy = h - ih;
+			let ix = (w - iw) / 2;
+			let iy = h - ih;
 			
 			return new mxRectangle(x + ix, y + iy, iw, ih);
 		};
@@ -48,7 +48,7 @@
 				mxConstants.SHADOWCOLOR = '#C0C0C0';
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Uncomment the following if you want the container
 				// to fit the size of the graph
@@ -59,7 +59,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/fixedpoints.html b/src/examples/fixedpoints.html
index 2229190f7..dbdf41e46 100644
--- a/src/examples/fixedpoints.html
+++ b/src/examples/fixedpoints.html
@@ -42,22 +42,22 @@
 				// and getSourcePerimeterPoint should be overriden by setting sourceConstraint
 				// sourceConstraint to null in mouseMove and updating it and returning the
 				// nearest point (cp) in getSourcePerimeterPoint (see below)
-				var mxConnectionHandlerUpdateEdgeState = mxConnectionHandler.prototype.updateEdgeState;
+				let mxConnectionHandlerUpdateEdgeState = mxConnectionHandler.prototype.updateEdgeState;
 				mxConnectionHandler.prototype.updateEdgeState = function(pt, constraint)
 				{
 					if (pt != null && this.previous != null)
 					{
-				        var constraints = this.graph.getAllConnectionConstraints(this.previous);
-				        var nearestConstraint = null;
-				        var dist = null;
+				        let constraints = this.graph.getAllConnectionConstraints(this.previous);
+				        let nearestConstraint = null;
+				        let dist = null;
 				   
-				        for (var i = 0; i < constraints.length; i++)
+				        for (let i = 0; i < constraints.length; i++)
 				        {
-				            var cp = this.graph.getConnectionPoint(this.previous, constraints[i]);
+				            let cp = this.graph.getConnectionPoint(this.previous, constraints[i]);
 				           
 				            if (cp != null)
 				            {
-				                var tmp = (cp.x - pt.x) * (cp.x - pt.x) + (cp.y - pt.y) * (cp.y - pt.y);
+				                let tmp = (cp.x - pt.x) * (cp.x - pt.x) + (cp.y - pt.y) * (cp.y - pt.y);
 				           
 				                if (dist == null || tmp < dist)
 				                {
@@ -83,7 +83,7 @@
 				};
 
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setConnectable(true);
 
 				//graph.connectionHandler.connectImage = new mxImage('images/connector.gif', 16, 16);
@@ -121,7 +121,7 @@
 				// Connect preview
 				graph.connectionHandler.createEdgeState = function(me)
 				{
-					var edge = graph.createEdge(null, null, null, null, null, 'edgeStyle=orthogonalEdgeStyle');
+					let edge = graph.createEdge(null, null, null, null, null, 'edgeStyle=orthogonalEdgeStyle');
 					
 					return new mxCellState(this.graph.view, edge, this.graph.getCellStyle(edge));
 				};
@@ -131,7 +131,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -159,7 +159,7 @@
 			// Use this code to snap the source point for new connections without a connect preview,
 			// ie. without an overridden graph.connectionHandler.createEdgeState
 			/*
-			var mxConnectionHandlerMouseMove = mxConnectionHandler.prototype.mouseMove;
+			let mxConnectionHandlerMouseMove = mxConnectionHandler.prototype.mouseMove;
 			mxConnectionHandler.prototype.mouseMove = function(sender, me)
 			{
 			    this.sourceConstraint = null;
@@ -167,25 +167,25 @@
 			    mxConnectionHandlerMouseMove.apply(this, arguments);
 			};
 
-			var mxConnectionHandlerGetSourcePerimeterPoint = mxConnectionHandler.prototype.getSourcePerimeterPoint;
+			let mxConnectionHandlerGetSourcePerimeterPoint = mxConnectionHandler.prototype.getSourcePerimeterPoint;
 			mxConnectionHandler.prototype.getSourcePerimeterPoint = function(state, pt, me)
 			{
-			    var result = null;
+			    let result = null;
 			   
 			    if (this.previous != null && pt != null)
 			    {
-			        var constraints = this.graph.getAllConnectionConstraints(this.previous);
-			        var nearestConstraint = null;
-			        var nearest = null;
-			        var dist = null;
+			        let constraints = this.graph.getAllConnectionConstraints(this.previous);
+			        let nearestConstraint = null;
+			        let nearest = null;
+			        let dist = null;
 			  
-			        for (var i = 0; i < constraints.length; i++)
+			        for (let i = 0; i < constraints.length; i++)
 			        {
-			            var cp = this.graph.getConnectionPoint(this.previous, constraints[i]);
+			            let cp = this.graph.getConnectionPoint(this.previous, constraints[i]);
 			          
 			            if (cp != null)
 			            {
-			                var tmp = (cp.x - pt.x) * (cp.x - pt.x) + (cp.y - pt.y) * (cp.y - pt.y);
+			                let tmp = (cp.x - pt.x) * (cp.x - pt.x) + (cp.y - pt.y) * (cp.y - pt.y);
 			          
 			                if (dist == null || tmp < dist)
 			                {
diff --git a/src/examples/folding.html b/src/examples/folding.html
index e448293f4..77a5b8260 100644
--- a/src/examples/folding.html
+++ b/src/examples/folding.html
@@ -35,7 +35,7 @@
 				mxConstants.ENTITY_SEGMENT = 20;
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setDropEnabled(true);
 				
 				// Disables global features
@@ -47,7 +47,7 @@
 				graph.border = 10;
 
 				// Sets global styles
-				var style = graph.getStylesheet().getDefaultEdgeStyle();
+				let style = graph.getStylesheet().getDefaultEdgeStyle();
 				style[mxConstants.STYLE_EDGE] = mxEdgeStyle.EntityRelation;
 				style[mxConstants.STYLE_ROUNDED] = true;
 
@@ -64,9 +64,9 @@
 				graph.getStylesheet().putCellStyle('column', style);
 				
 				// Installs auto layout for all levels
-				var layout = new mxStackLayout(graph, true);
+				let layout = new mxStackLayout(graph, true);
 				layout.border = graph.border;
-				var layoutMgr = new mxLayoutManager(graph);
+				let layoutMgr = new mxLayoutManager(graph);
 				layoutMgr.getLayout = function(cell)
 				{
 					if (!cell.collapsed)
@@ -95,7 +95,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/grapheditor/www/deflate/base64.js b/src/examples/grapheditor/www/deflate/base64.js
index 1e870ac40..c96538e5a 100644
--- a/src/examples/grapheditor/www/deflate/base64.js
+++ b/src/examples/grapheditor/www/deflate/base64.js
@@ -14,9 +14,9 @@ var Base64 = {
 	// public method for encoding
 	encode : function (input, binary) {
 		binary = (binary != null) ? binary : false;
-		var output = "";
+		let output = "";
 		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
-		var i = 0;
+		let i = 0;
 
 		if (!binary)
 		{
@@ -52,10 +52,10 @@ var Base64 = {
 	// public method for decoding
 	decode : function (input, binary) {
 		binary = (binary != null) ? binary : false;
-		var output = "";
+		let output = "";
 		var chr1, chr2, chr3;
 		var enc1, enc2, enc3, enc4;
-		var i = 0;
+		let i = 0;
 
 		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
 
@@ -93,11 +93,11 @@ var Base64 = {
 	// private method for UTF-8 encoding
 	_utf8_encode : function (string) {
 		string = string.replace(/\r\n/g,"\n");
-		var utftext = "";
+		let utftext = "";
 
-		for (var n = 0; n < string.length; n++) {
+		for (let n = 0; n < string.length; n++) {
 
-			var c = string.charCodeAt(n);
+			let c = string.charCodeAt(n);
 
 			if (c < 128) {
 				utftext += String.fromCharCode(c);
@@ -119,9 +119,9 @@ var Base64 = {
 
 	// private method for UTF-8 decoding
 	_utf8_decode : function (utftext) {
-		var string = "";
-		var i = 0;
-		var c = c1 = c2 = 0;
+		let string = "";
+		let i = 0;
+		let c = c1 = c2 = 0;
 
 		while ( i < utftext.length ) {
 
diff --git a/src/examples/grapheditor/www/index.html b/src/examples/grapheditor/www/index.html
index 54fff46fe..54576c484 100644
--- a/src/examples/grapheditor/www/index.html
+++ b/src/examples/grapheditor/www/index.html
@@ -12,16 +12,16 @@
 		// - touch=1: Enables a touch-style user interface.
 		// - storage=local: Enables HTML5 local storage.
 		// - chrome=0: Chromeless mode.
-		var urlParams = (function(url)
+		let urlParams = (function(url)
 		{
-			var result = {};
-			var idx = url.lastIndexOf('?');
+			let result = {};
+			let idx = url.lastIndexOf('?');
 	
 			if (idx > 0)
 			{
-				var params = url.substring(idx + 1).split('&');
+				let params = url.substring(idx + 1).split('&');
 				
-				for (var i = 0; i < params.length; i++)
+				for (let i = 0; i < params.length; i++)
 				{
 					idx = params[i].indexOf('=');
 					
@@ -60,7 +60,7 @@
 		// Extends EditorUi to update I/O action states based on availability of backend
 		(function()
 		{
-			var editorUiInit = EditorUi.prototype.init;
+			let editorUiInit = EditorUi.prototype.init;
 			
 			EditorUi.prototype.init = function()
 			{
@@ -72,7 +72,7 @@
 				{
 					mxUtils.post(OPEN_URL, '', mxUtils.bind(this, function(req)
 					{
-						var enabled = req.getStatus() != 404;
+						let enabled = req.getStatus() != 404;
 						this.actions.get('open').setEnabled(enabled || Graph.fileSupport);
 						this.actions.get('import').setEnabled(enabled || Graph.fileSupport);
 						this.actions.get('save').setEnabled(enabled);
@@ -85,7 +85,7 @@
 			// Adds required resources (disables loading of fallback properties, this can only
 			// be used if we know that all keys are defined in the language specific file)
 			mxResources.loadDefaultBundle = false;
-			var bundle = mxResources.getDefaultBundle(RESOURCE_BASE, mxLanguage) ||
+			let bundle = mxResources.getDefaultBundle(RESOURCE_BASE, mxLanguage) ||
 				mxResources.getSpecialBundle(RESOURCE_BASE, mxLanguage);
 
 			// Fixes possible asynchronous requests
@@ -95,7 +95,7 @@
 				mxResources.parse(xhr[0].getText());
 				
 				// Configures the default graph theme
-				var themes = {};
+				let themes = {};
 				themes[Graph.prototype.defaultThemeName] = xhr[1].getDocumentElement(); 
 				
 				// Main
diff --git a/src/examples/grapheditor/www/js/Actions.js b/src/examples/grapheditor/www/js/Actions.js
index c1c0228a4..61d61d48b 100644
--- a/src/examples/grapheditor/www/js/Actions.js
+++ b/src/examples/grapheditor/www/js/Actions.js
@@ -16,10 +16,10 @@ function Actions(editorUi)
  */
 Actions.prototype.init = function()
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
-	var isGraphEnabled = function()
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
+	let isGraphEnabled = function()
 	{
 		return Action.prototype.isEnabled.apply(this, arguments) && graph.isEnabled();
 	};
@@ -48,7 +48,7 @@ Actions.prototype.init = function()
 		{
 			try
 			{
-				var doc = mxUtils.parseXml(xml);
+				let doc = mxUtils.parseXml(xml);
 				editor.graph.setSelectionCells(editor.graph.importGraphModel(doc.documentElement));
 			}
 			catch (e)
@@ -68,7 +68,7 @@ Actions.prototype.init = function()
 	this.addAction('export...', function() { ui.showDialog(new ExportDialog(ui).container, 300, 296, true, true); });
 	this.addAction('editDiagram...', function()
 	{
-		var dlg = new EditDiagramDialog(ui);
+		let dlg = new EditDiagramDialog(ui);
 		ui.showDialog(dlg.container, 620, 420, true, false);
 		dlg.init();
 	});
@@ -105,26 +105,26 @@ Actions.prototype.init = function()
 			graph.getModel().beginUpdate();
 			try
 			{
-				var cells = mxClipboard.paste(graph);
+				let cells = mxClipboard.paste(graph);
 				
 				if (cells != null)
 				{
-					var includeEdges = true;
+					let includeEdges = true;
 					
-					for (var i = 0; i < cells.length && includeEdges; i++)
+					for (let i = 0; i < cells.length && includeEdges; i++)
 					{
 						includeEdges = includeEdges && graph.model.isEdge(cells[i]);
 					}
 
-					var t = graph.view.translate;
-					var s = graph.view.scale;
-					var dx = t.x;
-					var dy = t.y;
-					var bb = null;
+					let t = graph.view.translate;
+					let s = graph.view.scale;
+					let dx = t.x;
+					let dy = t.y;
+					let bb = null;
 					
 					if (cells.length == 1 && includeEdges)
 					{
-						var geo = graph.getCellGeometry(cells[0]);
+						let geo = graph.getCellGeometry(cells[0]);
 						
 						if (geo != null)
 						{
@@ -136,8 +136,8 @@ Actions.prototype.init = function()
 					
 					if (bb != null)
 					{
-						var x = Math.round(graph.snap(graph.popupMenuHandler.triggerX / s - dx));
-						var y = Math.round(graph.snap(graph.popupMenuHandler.triggerY / s - dy));
+						let x = Math.round(graph.snap(graph.popupMenuHandler.triggerX / s - dx));
+						let y = Math.round(graph.snap(graph.popupMenuHandler.triggerY / s - dy));
 						
 						graph.cellsMoved(cells, x - bb.x, y - bb.y);
 					}
@@ -152,11 +152,11 @@ Actions.prototype.init = function()
 	
 	this.addAction('copySize', function(evt)
 	{
-		var cell = graph.getSelectionCell();
+		let cell = graph.getSelectionCell();
 		
 		if (graph.isEnabled() && cell != null && graph.getModel().isVertex(cell))
 		{
-			var geo = graph.getCellGeometry(cell);
+			let geo = graph.getCellGeometry(cell);
 			
 			if (geo != null)
 			{
@@ -173,13 +173,13 @@ Actions.prototype.init = function()
 			
 			try
 			{
-				var cells = graph.getSelectionCells();
+				let cells = graph.getSelectionCells();
 				
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
 					if (graph.getModel().isVertex(cells[i]))
 					{
-						var geo = graph.getCellGeometry(cells[i]);
+						let geo = graph.getCellGeometry(cells[i]);
 						
 						if (geo != null)
 						{
@@ -203,7 +203,7 @@ Actions.prototype.init = function()
 	{
 		// Cancels interactive operations
 		graph.escape();
-		var select = graph.deleteCells(graph.getDeletableCells(graph.getSelectionCells()), includeEdges);
+		let select = graph.deleteCells(graph.getDeletableCells(graph.getSelectionCells()), includeEdges);
 		
 		if (select != null)
 		{
@@ -222,9 +222,9 @@ Actions.prototype.init = function()
 			graph.getModel().beginUpdate();
 			try
 			{
-				var cells = graph.getSelectionCells();
+				let cells = graph.getSelectionCells();
 				
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
 					graph.cellLabelChanged(cells[i], '');
 				}
@@ -242,9 +242,9 @@ Actions.prototype.init = function()
 			graph.getModel().beginUpdate();
 			try
 			{
-				var cells = graph.getSelectionCells();
+				let cells = graph.getSelectionCells();
 				
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
 					graph.cellLabelChanged(cells[i], '');
 				}
@@ -282,7 +282,7 @@ Actions.prototype.init = function()
 			graph.getModel().beginUpdate();
 			try
 			{
-				var defaultValue = graph.isCellMovable(graph.getSelectionCell()) ? 1 : 0;
+				let defaultValue = graph.isCellMovable(graph.getSelectionCell()) ? 1 : 0;
 				graph.toggleCellStyles(mxConstants.STYLE_MOVABLE, defaultValue);
 				graph.toggleCellStyles(mxConstants.STYLE_RESIZABLE, defaultValue);
 				graph.toggleCellStyles(mxConstants.STYLE_ROTATABLE, defaultValue);
@@ -311,7 +311,7 @@ Actions.prototype.init = function()
 	{
 		if (graph.isEnabled())
 		{
-			var cells = mxUtils.sortCells(graph.getSelectionCells(), true);
+			let cells = mxUtils.sortCells(graph.getSelectionCells(), true);
 
 			if (cells.length == 1 && !graph.isTable(cells[0]) && !graph.isTableRow(cells[0]))
 			{
@@ -332,17 +332,17 @@ Actions.prototype.init = function()
 	{
 		if (graph.isEnabled())
 		{
-			var cells = graph.getSelectionCells();
+			let cells = graph.getSelectionCells();
 			
 	        graph.model.beginUpdate();
 			try
 			{
-				var temp = graph.ungroupCells();
+				let temp = graph.ungroupCells();
 				
 				// Clears container flag for remaining cells
 				if (cells != null)
 				{
-					for (var i = 0; i < cells.length; i++)
+					for (let i = 0; i < cells.length; i++)
 			    	{
 						if (graph.model.contains(cells[i]))
 						{
@@ -369,14 +369,14 @@ Actions.prototype.init = function()
 	{
 		if (graph.isEnabled())
 		{
-			var cells = graph.getSelectionCells();
+			let cells = graph.getSelectionCells();
 			
 			// Removes table rows and cells
 			if (cells != null)
 			{
-				var temp = [];
+				let temp = [];
 				
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 		    	{
 					if (!graph.isTableRow(cells[i]) &&
 						!graph.isTableCell(cells[i]))
@@ -399,19 +399,19 @@ Actions.prototype.init = function()
 	}, null, null, 'F2/Enter');
 	this.addAction('editData...', function()
 	{
-		var cell = graph.getSelectionCell() || graph.getModel().getRoot();
+		let cell = graph.getSelectionCell() || graph.getModel().getRoot();
 		ui.showDataDialog(cell);
 	}, null, null, Editor.ctrlKey + '+M');
 	this.addAction('editTooltip...', function()
 	{
 		if (graph.isEnabled() && !graph.isSelectionEmpty())
 		{
-			var cell = graph.getSelectionCell();
-			var tooltip = '';
+			let cell = graph.getSelectionCell();
+			let tooltip = '';
 			
 			if (mxUtils.isNode(cell.value))
 			{
-				var tmp = null;
+				let tmp = null;
 				
 				if (Graph.translateDiagram && Graph.diagramLanguage != null &&
 					cell.value.hasAttribute('tooltip_' + Graph.diagramLanguage))
@@ -430,7 +430,7 @@ Actions.prototype.init = function()
 				}
 			}
 			
-	    	var dlg = new TextareaDialog(ui, mxResources.get('editTooltip') + ':', tooltip, function(newValue)
+	    	let dlg = new TextareaDialog(ui, mxResources.get('editTooltip') + ':', tooltip, function(newValue)
 			{
 				graph.setTooltipForCell(cell, newValue);
 			});
@@ -440,7 +440,7 @@ Actions.prototype.init = function()
 	}, null, null, 'Alt+Shift+T');
 	this.addAction('openLink', function()
 	{
-		var link = graph.getLinkForCell(graph.getSelectionCell());
+		let link = graph.getLinkForCell(graph.getSelectionCell());
 		
 		if (link != null)
 		{
@@ -451,8 +451,8 @@ Actions.prototype.init = function()
 	{
 		if (graph.isEnabled() && !graph.isSelectionEmpty())
 		{
-			var cell = graph.getSelectionCell();
-			var value = graph.getLinkForCell(cell) || '';
+			let cell = graph.getSelectionCell();
+			let value = graph.getLinkForCell(cell) || '';
 			
 			ui.showLinkDialog(value, mxResources.get('apply'), function(link)
 			{
@@ -479,8 +479,8 @@ Actions.prototype.init = function()
 				
 				if (link.length > 0)
 				{
-					var icon = null;
-					var title = graph.getLinkTitle(link);
+					let icon = null;
+					let title = graph.getLinkTitle(link);
 					
 					if (docs != null && docs.length > 0)
 					{
@@ -494,13 +494,13 @@ Actions.prototype.init = function()
 						}
 					}
 					
-            		var linkCell = new mxCell(title, new mxGeometry(0, 0, 100, 40),
+            		let linkCell = new mxCell(title, new mxGeometry(0, 0, 100, 40),
 	            	    	'fontColor=#0000EE;fontStyle=4;rounded=1;overflow=hidden;' + ((icon != null) ?
 	            	    	'shape=label;imageWidth=16;imageHeight=16;spacingLeft=26;align=left;image=' + icon :
 	            	    	'spacing=10;'));
             	    linkCell.vertex = true;
 
-            	    var pt = graph.getCenterInsertPoint(graph.getBoundingBoxFromGeometry([linkCell], true));
+            	    let pt = graph.getCenterInsertPoint(graph.getBoundingBoxFromGeometry([linkCell], true));
 					linkCell.geometry.x = pt.x;
             	    linkCell.geometry.y = pt.y;
             	    
@@ -530,9 +530,9 @@ Actions.prototype.init = function()
 		{
 			if (graph.cellEditor.isContentEditing())
 			{
-				var elt = graph.getSelectedElement();
-				var link = graph.getParentByName(elt, 'A', graph.cellEditor.textarea);
-				var oldValue = '';
+				let elt = graph.getSelectedElement();
+				let link = graph.getParentByName(elt, 'A', graph.cellEditor.textarea);
+				let oldValue = '';
 				
 				// Workaround for FF returning the outermost selected element after double
 				// click on a DOM hierarchy with a link inside (but not as topmost element)
@@ -540,9 +540,9 @@ Actions.prototype.init = function()
 				{
 					// Finds all links in the selected DOM and uses the link
 					// where the selection text matches its text content
-					var links = elt.getElementsByTagName('a');
+					let links = elt.getElementsByTagName('a');
 					
-					for (var i = 0; i < links.length && link == null; i++)
+					for (let i = 0; i < links.length && link == null; i++)
 					{
 						if (links[i].textContent == elt.textContent)
 						{
@@ -557,7 +557,7 @@ Actions.prototype.init = function()
 					graph.selectNode(link);
 				}
 				
-				var selState = graph.cellEditor.saveSelection();
+				let selState = graph.cellEditor.saveSelection();
 				
 				ui.showLinkDialog(oldValue, mxResources.get('apply'), mxUtils.bind(this, function(value)
 				{
@@ -581,16 +581,16 @@ Actions.prototype.init = function()
 	})).isEnabled = isGraphEnabled;
 	this.addAction('autosize', function()
 	{
-		var cells = graph.getSelectionCells();
+		let cells = graph.getSelectionCells();
 		
 		if (cells != null)
 		{
 			graph.getModel().beginUpdate();
 			try
 			{
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
-					var cell = cells[i];
+					let cell = cells[i];
 					
 					if (graph.getModel().getChildCount(cell))
 					{
@@ -598,8 +598,8 @@ Actions.prototype.init = function()
 					}
 					else
 					{
-						var state = graph.view.getState(cell);
-						var geo = graph.getCellGeometry(cell);
+						let state = graph.view.getState(cell);
+						let geo = graph.getCellGeometry(cell);
 
 						if (graph.getModel().isVertex(cell) && state != null && state.text != null &&
 							geo != null && graph.isWrapping(cell))
@@ -623,29 +623,29 @@ Actions.prototype.init = function()
 	}, null, null, Editor.ctrlKey + '+Shift+Y');
 	this.addAction('formattedText', function()
 	{
-    	var refState = graph.getView().getState(graph.getSelectionCell());
+    	let refState = graph.getView().getState(graph.getSelectionCell());
     	
     	if (refState != null)
     	{
 	    	graph.stopEditing();
-    		var value = (refState.style['html'] == '1') ? null : '1';
+    		let value = (refState.style['html'] == '1') ? null : '1';
 			
 			graph.getModel().beginUpdate();
 			try
 			{
-				var cells = graph.getSelectionCells();
+				let cells = graph.getSelectionCells();
 				
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
 					state = graph.getView().getState(cells[i]);
 					
 					if (state != null)
 					{
-						var html = mxUtils.getValue(state.style, 'html', '0');
+						let html = mxUtils.getValue(state.style, 'html', '0');
 						
 						if (html == '1' && value == null)
 				    	{
-				    		var label = graph.convertValueToString(state.cell);
+				    		let label = graph.convertValueToString(state.cell);
 				    		
 				    		if (mxUtils.getValue(state.style, 'nl2Br', '1') != '0')
 							{
@@ -655,7 +655,7 @@ Actions.prototype.init = function()
 							}
 				    		
 				    		// Removes HTML tags
-			    			var temp = document.createElement('div');
+			    			let temp = document.createElement('div');
 			    			temp.innerHTML = graph.sanitizeHtml(label);
 			    			label = mxUtils.extractTextWithWhitespace(temp.childNodes);
 			    			
@@ -665,7 +665,7 @@ Actions.prototype.init = function()
 						else if (html == '0' && value == '1')
 				    	{
 				    		// Converts HTML tags to text
-				    		var label = mxUtils.htmlEntities(graph.convertValueToString(state.cell), false);
+				    		let label = mxUtils.htmlEntities(graph.convertValueToString(state.cell), false);
 				    		
 				    		if (mxUtils.getValue(state.style, 'nl2Br', '1') != '0')
 							{
@@ -691,8 +691,8 @@ Actions.prototype.init = function()
 	});
 	this.addAction('wordWrap', function()
 	{
-    	var state = graph.getView().getState(graph.getSelectionCell());
-    	var value = 'wrap';
+    	let state = graph.getView().getState(graph.getSelectionCell());
+    	let value = 'wrap';
     	
 		graph.stopEditing();
     	
@@ -705,15 +705,15 @@ Actions.prototype.init = function()
 	});
 	this.addAction('rotation', function()
 	{
-		var value = '0';
-    	var state = graph.getView().getState(graph.getSelectionCell());
+		let value = '0';
+    	let state = graph.getView().getState(graph.getSelectionCell());
     	
     	if (state != null)
     	{
     		value = state.style[mxConstants.STYLE_ROTATION] || value;
     	}
 
-		var dlg = new FilenameDialog(ui, value, mxResources.get('apply'), function(newValue)
+		let dlg = new FilenameDialog(ui, value, mxResources.get('apply'), function(newValue)
 		{
 			if (newValue != null && newValue.length > 0)
 			{
@@ -754,10 +754,10 @@ Actions.prototype.init = function()
 	}, null, null, Editor.ctrlKey + ' - (Numpad) / Alt+Mousewheel');
 	this.addAction('fitWindow', function()
 	{
-		var bounds = (graph.isSelectionEmpty()) ? graph.getGraphBounds() :
+		let bounds = (graph.isSelectionEmpty()) ? graph.getGraphBounds() :
 			graph.getBoundingBox(graph.getSelectionCells())
-		var t = graph.view.translate;
-		var s = graph.view.scale;
+		let t = graph.view.translate;
+		let s = graph.view.scale;
 		
 		bounds.x = bounds.x / s - t.x;
 		bounds.y = bounds.y / s - t.y;
@@ -786,16 +786,16 @@ Actions.prototype.init = function()
 			this.get('pageView').funct();
 		}
 		
-		var fmt = graph.pageFormat;
-		var ps = graph.pageScale;
-		var cw = graph.container.clientWidth - 10;
-		var ch = graph.container.clientHeight - 10;
-		var scale = Math.floor(20 * Math.min(cw / fmt.width / ps, ch / fmt.height / ps)) / 20;
+		let fmt = graph.pageFormat;
+		let ps = graph.pageScale;
+		let cw = graph.container.clientWidth - 10;
+		let ch = graph.container.clientHeight - 10;
+		let scale = Math.floor(20 * Math.min(cw / fmt.width / ps, ch / fmt.height / ps)) / 20;
 		graph.zoomTo(scale);
 		
 		if (mxUtils.hasScrollbars(graph.container))
 		{
-			var pad = graph.getPagePadding();
+			let pad = graph.getPagePadding();
 			graph.container.scrollTop = pad.y * graph.view.scale - 1;
 			graph.container.scrollLeft = Math.min(pad.x * graph.view.scale, (graph.container.scrollWidth - graph.container.clientWidth) / 2) - 1;
 		}
@@ -807,17 +807,17 @@ Actions.prototype.init = function()
 			this.get('pageView').funct();
 		}
 		
-		var fmt = graph.pageFormat;
-		var ps = graph.pageScale;
-		var cw = graph.container.clientWidth - 10;
-		var ch = graph.container.clientHeight - 10;
+		let fmt = graph.pageFormat;
+		let ps = graph.pageScale;
+		let cw = graph.container.clientWidth - 10;
+		let ch = graph.container.clientHeight - 10;
 		
-		var scale = Math.floor(20 * Math.min(cw / (2 * fmt.width) / ps, ch / fmt.height / ps)) / 20;
+		let scale = Math.floor(20 * Math.min(cw / (2 * fmt.width) / ps, ch / fmt.height / ps)) / 20;
 		graph.zoomTo(scale);
 		
 		if (mxUtils.hasScrollbars(graph.container))
 		{
-			var pad = graph.getPagePadding();
+			let pad = graph.getPagePadding();
 			graph.container.scrollTop = Math.min(pad.y, (graph.container.scrollHeight - graph.container.clientHeight) / 2);
 			graph.container.scrollLeft = Math.min(pad.x, (graph.container.scrollWidth - graph.container.clientWidth) / 2);
 		}
@@ -829,25 +829,25 @@ Actions.prototype.init = function()
 			this.get('pageView').funct();
 		}
 		
-		var fmt = graph.pageFormat;
-		var ps = graph.pageScale;
-		var cw = graph.container.clientWidth - 10;
+		let fmt = graph.pageFormat;
+		let ps = graph.pageScale;
+		let cw = graph.container.clientWidth - 10;
 
-		var scale = Math.floor(20 * cw / fmt.width / ps) / 20;
+		let scale = Math.floor(20 * cw / fmt.width / ps) / 20;
 		graph.zoomTo(scale);
 		
 		if (mxUtils.hasScrollbars(graph.container))
 		{
-			var pad = graph.getPagePadding();
+			let pad = graph.getPagePadding();
 			graph.container.scrollLeft = Math.min(pad.x * graph.view.scale,
 				(graph.container.scrollWidth - graph.container.clientWidth) / 2);
 		}
 	}));
 	this.put('customZoom', new Action(mxResources.get('custom') + '...', mxUtils.bind(this, function()
 	{
-		var dlg = new FilenameDialog(this.editorUi, parseInt(graph.getView().getScale() * 100), mxResources.get('apply'), mxUtils.bind(this, function(newValue)
+		let dlg = new FilenameDialog(this.editorUi, parseInt(graph.getView().getScale() * 100), mxResources.get('apply'), mxUtils.bind(this, function(newValue)
 		{
-			var val = parseInt(newValue);
+			let val = parseInt(newValue);
 			
 			if (!isNaN(val) && val > 0)
 			{
@@ -859,13 +859,13 @@ Actions.prototype.init = function()
 	}), null, null, Editor.ctrlKey + '+0'));
 	this.addAction('pageScale...', mxUtils.bind(this, function()
 	{
-		var dlg = new FilenameDialog(this.editorUi, parseInt(graph.pageScale * 100), mxResources.get('apply'), mxUtils.bind(this, function(newValue)
+		let dlg = new FilenameDialog(this.editorUi, parseInt(graph.pageScale * 100), mxResources.get('apply'), mxUtils.bind(this, function(newValue)
 		{
-			var val = parseInt(newValue);
+			let val = parseInt(newValue);
 			
 			if (!isNaN(val) && val > 0)
 			{
-				var change = new ChangePageSetup(ui, null, null, null, val / 100);
+				let change = new ChangePageSetup(ui, null, null, null, val / 100);
 				change.ignoreColor = true;
 				change.ignoreImage = true;
 				
@@ -877,7 +877,7 @@ Actions.prototype.init = function()
 	}));
 
 	// Option actions
-	var action = null;
+	let action = null;
 	action = this.addAction('grid', function()
 	{
 		graph.setGridEnabled(!graph.isGridEnabled());
@@ -906,7 +906,7 @@ Actions.prototype.init = function()
 	
 	action = this.addAction('collapseExpand', function()
 	{
-		var change = new ChangePageSetup(ui);
+		let change = new ChangePageSetup(ui);
 		change.ignoreColor = true;
 		change.ignoreImage = true;
 		change.foldingEnabled = !graph.foldingEnabled;
@@ -962,7 +962,7 @@ Actions.prototype.init = function()
 	// Help actions
 	this.addAction('help', function()
 	{
-		var ext = '';
+		let ext = '';
 		
 		if (mxResources.isLanguageSupported(mxClient.language))
 		{
@@ -972,7 +972,7 @@ Actions.prototype.init = function()
 		graph.openLink(RESOURCES_PATH + '/help' + ext + '.html');
 	});
 	
-	var showingAbout = false;
+	let showingAbout = false;
 	
 	this.put('about', new Action(mxResources.get('about') + ' Graph Editor...', function()
 	{
@@ -988,7 +988,7 @@ Actions.prototype.init = function()
 	}));
 	
 	// Font style actions
-	var toggleFontStyle = mxUtils.bind(this, function(key, style, fn, shortcut)
+	let toggleFontStyle = mxUtils.bind(this, function(key, style, fn, shortcut)
 	{
 		return this.addAction(key, function()
 		{
@@ -1003,7 +1003,7 @@ Actions.prototype.init = function()
 				graph.getModel().beginUpdate();
 				try
 				{
-					var cells = graph.getSelectionCells();
+					let cells = graph.getSelectionCells();
 					graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, style, cells);
 					
 					// Removes bold and italic tags and CSS styles inside labels
@@ -1044,7 +1044,7 @@ Actions.prototype.init = function()
 						});
 					}
 					
-					for (var i = 0; i < cells.length; i++)
+					for (let i = 0; i < cells.length; i++)
 					{
 						if (graph.model.getChildCount(cells[i]) == 0)
 						{
@@ -1157,9 +1157,9 @@ Actions.prototype.init = function()
 			graph.getModel().beginUpdate();
 			try
 			{
-				var cells = graph.getSelectionCells();
-	    		var style = graph.getCurrentCellStyle(cells[0]);
-	    		var value = (mxUtils.getValue(style, mxConstants.STYLE_ROUNDED, '0') == '1') ? '0' : '1';
+				let cells = graph.getSelectionCells();
+	    		let style = graph.getCurrentCellStyle(cells[0]);
+	    		let value = (mxUtils.getValue(style, mxConstants.STYLE_ROUNDED, '0') == '1') ? '0' : '1';
 	    		
 				graph.setCellStyles(mxConstants.STYLE_ROUNDED, value);
 				graph.setCellStyles(mxConstants.STYLE_CURVED, null);
@@ -1189,8 +1189,8 @@ Actions.prototype.init = function()
 	});
 	this.addAction('collapsible', function()
 	{
-		var state = graph.view.getState(graph.getSelectionCell());
-		var value = '1';
+		let state = graph.view.getState(graph.getSelectionCell());
+		let value = '1';
 		
 		if (state != null && graph.getFoldingImage(state) != null)
 		{
@@ -1203,13 +1203,13 @@ Actions.prototype.init = function()
 	});
 	this.addAction('editStyle...', mxUtils.bind(this, function()
 	{
-		var cells = graph.getSelectionCells();
+		let cells = graph.getSelectionCells();
 		
 		if (cells != null && cells.length > 0)
 		{
-			var model = graph.getModel();
+			let model = graph.getModel();
 			
-	    	var dlg = new TextareaDialog(this.editorUi, mxResources.get('editStyle') + ':',
+	    	let dlg = new TextareaDialog(this.editorUi, mxResources.get('editStyle') + ':',
 	    		model.getStyle(cells[0]) || '', function(newValue)
 			{
 	    		if (newValue != null)
@@ -1237,21 +1237,21 @@ Actions.prototype.init = function()
 	}, null, null, Editor.ctrlKey + '+Shift+R');
 	this.addAction('addWaypoint', function()
 	{
-		var cell = graph.getSelectionCell();
+		let cell = graph.getSelectionCell();
 		
 		if (cell != null && graph.getModel().isEdge(cell))
 		{
-			var handler = editor.graph.selectionCellsHandler.getHandler(cell);
+			let handler = editor.graph.selectionCellsHandler.getHandler(cell);
 			
 			if (handler instanceof mxEdgeHandler)
 			{
-				var t = graph.view.translate;
-				var s = graph.view.scale;
-				var dx = t.x;
-				var dy = t.y;
+				let t = graph.view.translate;
+				let s = graph.view.scale;
+				let dx = t.x;
+				let dy = t.y;
 				
-				var parent = graph.getModel().getParent(cell);
-				var pgeo = graph.getCellGeometry(parent);
+				let parent = graph.getModel().getParent(cell);
+				let pgeo = graph.getCellGeometry(parent);
 				
 				while (graph.getModel().isVertex(parent) && pgeo != null)
 				{
@@ -1262,8 +1262,8 @@ Actions.prototype.init = function()
 					pgeo = graph.getCellGeometry(parent);
 				}
 				
-				var x = Math.round(graph.snap(graph.popupMenuHandler.triggerX / s - dx));
-				var y = Math.round(graph.snap(graph.popupMenuHandler.triggerY / s - dy));
+				let x = Math.round(graph.snap(graph.popupMenuHandler.triggerX / s - dx));
+				let y = Math.round(graph.snap(graph.popupMenuHandler.triggerY / s - dy));
 				
 				handler.addPointAt(handler.state, x, y);
 			}
@@ -1272,7 +1272,7 @@ Actions.prototype.init = function()
 	this.addAction('removeWaypoint', function()
 	{
 		// TODO: Action should run with "this" set to action
-		var rmWaypointAction = ui.actions.get('removeWaypoint');
+		let rmWaypointAction = ui.actions.get('removeWaypoint');
 		
 		if (rmWaypointAction.handler != null)
 		{
@@ -1282,7 +1282,7 @@ Actions.prototype.init = function()
 	});
 	this.addAction('clearWaypoints', function()
 	{
-		var cells = graph.getSelectionCells();
+		let cells = graph.getSelectionCells();
 		
 		if (cells != null)
 		{
@@ -1291,13 +1291,13 @@ Actions.prototype.init = function()
 			graph.getModel().beginUpdate();
 			try
 			{
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
-					var cell = cells[i];
+					let cell = cells[i];
 					
 					if (graph.getModel().isEdge(cell))
 					{
-						var geo = graph.getCellGeometry(cell);
+						let geo = graph.getCellGeometry(cell);
 			
 						if (geo != null)
 						{
@@ -1341,16 +1341,16 @@ Actions.prototype.init = function()
 	{
 		if (graph.isEnabled() && !graph.isCellLocked(graph.getDefaultParent()))
 		{
-			var title = mxResources.get('image') + ' (' + mxResources.get('url') + '):';
-	    	var state = graph.getView().getState(graph.getSelectionCell());
-	    	var value = '';
+			let title = mxResources.get('image') + ' (' + mxResources.get('url') + '):';
+	    	let state = graph.getView().getState(graph.getSelectionCell());
+	    	let value = '';
 	    	
 	    	if (state != null)
 	    	{
 	    		value = state.style[mxConstants.STYLE_IMAGE] || value;
 	    	}
 	    	
-	    	var selectionState = graph.cellEditor.saveSelection();
+	    	let selectionState = graph.cellEditor.saveSelection();
 	    	
 	    	ui.showImageDialog(title, value, function(newValue, w, h)
 			{
@@ -1362,11 +1362,11 @@ Actions.prototype.init = function()
 	    		}
 	    		else
 	    		{
-					var cells = graph.getSelectionCells();
+					let cells = graph.getSelectionCells();
 					
 					if (newValue != null && (newValue.length > 0 || cells.length > 0))
 					{
-						var select = null;
+						let select = null;
 						
 						graph.getModel().beginUpdate();
 			        	try
@@ -1376,7 +1376,7 @@ Actions.prototype.init = function()
 			    			{
 			    				cells = [graph.insertVertex(graph.getDefaultParent(), null, '', 0, 0, w, h,
 			    					'shape=image;imageAspect=0;aspect=fixed;verticalLabelPosition=bottom;verticalAlign=top;')];
-			    				var pt = graph.getCenterInsertPoint(graph.getBoundingBoxFromGeometry(cells, true));
+			    				let pt = graph.getCenterInsertPoint(graph.getBoundingBoxFromGeometry(cells, true));
 								cells[0].geometry.x = pt.x;
 			            	    cells[0].geometry.y = pt.y;
 			            	    
@@ -1387,7 +1387,7 @@ Actions.prototype.init = function()
 			        		graph.setCellStyles(mxConstants.STYLE_IMAGE, (newValue.length > 0) ? newValue : null, cells);
 			        		
 			        		// Sets shape only if not already shape with image (label or image)
-			        		var style = graph.getCurrentCellStyle(cells[0]);
+			        		let style = graph.getCurrentCellStyle(cells[0]);
 			        		
 			        		if (style[mxConstants.STYLE_SHAPE] != 'image' && style[mxConstants.STYLE_SHAPE] != 'label')
 			        		{
@@ -1402,8 +1402,8 @@ Actions.prototype.init = function()
 				        	{
 					        	if (w != null && h != null)
 					        	{
-					        		var cell = cells[0];
-					        		var geo = graph.getModel().getGeometry(cell);
+					        		let cell = cells[0];
+					        		let geo = graph.getModel().getGeometry(cell);
 					        		
 					        		if (geo != null)
 					        		{
diff --git a/src/examples/grapheditor/www/js/Dialogs.js b/src/examples/grapheditor/www/js/Dialogs.js
index 094a81153..91c1af81c 100644
--- a/src/examples/grapheditor/www/js/Dialogs.js
+++ b/src/examples/grapheditor/www/js/Dialogs.js
@@ -4,9 +4,9 @@
 /**
  * Constructs a new open dialog.
  */
-var OpenDialog = function()
+let OpenDialog = function()
 {
-	var iframe = document.createElement('iframe');
+	let iframe = document.createElement('iframe');
 	iframe.style.backgroundColor = 'transparent';
 	iframe.allowTransparency = 'true';
 	iframe.style.borderStyle = 'none';
@@ -15,7 +15,7 @@ var OpenDialog = function()
 	iframe.frameBorder = '0';
 	
 	// Adds padding as a workaround for box model in older IE versions
-	var dx = 0;
+	let dx = 0;
 	
 	iframe.setAttribute('width', (((Editor.useLocalStorage) ? 640 : 320) + dx) + 'px');
 	iframe.setAttribute('height', (((Editor.useLocalStorage) ? 480 : 220) + dx) + 'px');
@@ -27,19 +27,19 @@ var OpenDialog = function()
 /**
  * Constructs a new color dialog.
  */
-var ColorDialog = function(editorUi, color, apply, cancelFn)
+let ColorDialog = function(editorUi, color, apply, cancelFn)
 {
 	this.editorUi = editorUi;
 	
-	var input = document.createElement('input');
+	let input = document.createElement('input');
 	input.style.marginBottom = '10px';
 	input.style.width = '216px';
 	
-	var applyFunction = (apply != null) ? apply : this.createApplyFunction();
+	let applyFunction = (apply != null) ? apply : this.createApplyFunction();
 	
 	function doApply()
 	{
-		var color = input.value;
+		let color = input.value;
 		
 		// Blocks any non-alphabetic chars in colors
 		if (/(^#?[a-zA-Z0-9]*$)/.test(color))
@@ -67,22 +67,22 @@ var ColorDialog = function(editorUi, color, apply, cancelFn)
 		}
 	};
 
-	var picker = new mxJSColor.color(input);
+	let picker = new mxJSColor.color(input);
 	picker.pickerOnfocus = false;
 	picker.showPicker();
 
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	mxJSColor.picker.box.style.position = 'relative';
 	mxJSColor.picker.box.style.width = '230px';
 	mxJSColor.picker.box.style.height = '100px';
 	mxJSColor.picker.box.style.paddingBottom = '10px';
 	div.appendChild(mxJSColor.picker.box);
 
-	var center = document.createElement('center');
+	let center = document.createElement('center');
 	
 	function createRecentColorTable()
 	{
-		var table = addPresets((ColorDialog.recentColors.length == 0) ? ['FFFFFF'] :
+		let table = addPresets((ColorDialog.recentColors.length == 0) ? ['FFFFFF'] :
 					ColorDialog.recentColors, 11, 'FFFFFF', true);
 		table.style.marginBottom = '8px';
 		
@@ -92,25 +92,25 @@ var ColorDialog = function(editorUi, color, apply, cancelFn)
 	function addPresets(presets, rowLength, defaultColor, addResetOption)
 	{
 		rowLength = (rowLength != null) ? rowLength : 12;
-		var table = document.createElement('table');
+		let table = document.createElement('table');
 		table.style.borderCollapse = 'collapse';
 		table.setAttribute('cellspacing', '0');
 		table.style.marginBottom = '20px';
 		table.style.cellSpacing = '0px';
-		var tbody = document.createElement('tbody');
+		let tbody = document.createElement('tbody');
 		table.appendChild(tbody);
 
-		var rows = presets.length / rowLength;
+		let rows = presets.length / rowLength;
 		
-		for (var row = 0; row < rows; row++)
+		for (let row = 0; row < rows; row++)
 		{
-			var tr = document.createElement('tr');
+			let tr = document.createElement('tr');
 			
-			for (var i = 0; i < rowLength; i++)
+			for (let i = 0; i < rowLength; i++)
 			{
 				(function(clr)
 				{
-					var td = document.createElement('td');
+					let td = document.createElement('td');
 					td.style.border = '1px solid black';
 					td.style.padding = '0px';
 					td.style.width = '16px';
@@ -159,7 +159,7 @@ var ColorDialog = function(editorUi, color, apply, cancelFn)
 		
 		if (addResetOption)
 		{
-			var td = document.createElement('td');
+			let td = document.createElement('td');
 			td.setAttribute('title', mxResources.get('reset'));
 			td.style.border = '1px solid black';
 			td.style.padding = '0px';
@@ -191,18 +191,18 @@ var ColorDialog = function(editorUi, color, apply, cancelFn)
 	createRecentColorTable();
 		
 	// Adds presets
-	var table = addPresets(this.presetColors);
+	let table = addPresets(this.presetColors);
 	table.style.marginBottom = '8px';
 	table = addPresets(this.defaultColors);
 	table.style.marginBottom = '16px';
 
 	div.appendChild(center);
 
-	var buttons = document.createElement('div');
+	let buttons = document.createElement('div');
 	buttons.style.textAlign = 'right';
 	buttons.style.whiteSpace = 'nowrap';
 	
-	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
+	let cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
 	{
 		editorUi.hideDialog();
 		
@@ -218,7 +218,7 @@ var ColorDialog = function(editorUi, color, apply, cancelFn)
 		buttons.appendChild(cancelBtn);
 	}
 	
-	var applyBtn = mxUtils.button(mxResources.get('apply'), doApply);
+	let applyBtn = mxUtils.button(mxResources.get('apply'), doApply);
 	applyBtn.className = 'geBtn gePrimaryBtn';
 	buttons.appendChild(applyBtn);
 	
@@ -285,7 +285,7 @@ ColorDialog.prototype.createApplyFunction = function()
 {
 	return mxUtils.bind(this, function(color)
 	{
-		var graph = this.editorUi.editor.graph;
+		let graph = this.editorUi.editor.graph;
 		
 		graph.getModel().beginUpdate();
 		try
@@ -334,14 +334,14 @@ ColorDialog.resetRecentColors = function()
 /**
  * Constructs a new about dialog.
  */
-var AboutDialog = function(editorUi)
+let AboutDialog = function(editorUi)
 {
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	div.setAttribute('align', 'center');
 	var h3 = document.createElement('h3');
 	mxUtils.write(h3, mxResources.get('about') + ' GraphEditor');
 	div.appendChild(h3);
-	var img = document.createElement('img');
+	let img = document.createElement('img');
 	img.style.border = '0px';
 	img.setAttribute('width', '176');
 	img.setAttribute('width', '151');
@@ -350,14 +350,14 @@ var AboutDialog = function(editorUi)
 	mxUtils.br(div);
 	mxUtils.write(div, 'Powered by mxGraph ' + mxClient.VERSION);
 	mxUtils.br(div);
-	var link = document.createElement('a');
+	let link = document.createElement('a');
 	link.setAttribute('href', 'http://www.jgraph.com/');
 	link.setAttribute('target', '_blank');
 	mxUtils.write(link, 'www.jgraph.com');
 	div.appendChild(link);
 	mxUtils.br(div);
 	mxUtils.br(div);
-	var closeBtn = mxUtils.button(mxResources.get('close'), function()
+	let closeBtn = mxUtils.button(mxResources.get('close'), function()
 	{
 		editorUi.hideDialog();
 	});
@@ -370,7 +370,7 @@ var AboutDialog = function(editorUi)
 /**
  * Constructs a new textarea dialog.
  */
-var TextareaDialog = function(editorUi, title, url, fn, cancelFn, cancelTitle, w, h,
+let TextareaDialog = function(editorUi, title, url, fn, cancelFn, cancelTitle, w, h,
 	addButtons, noHide, noWrap, applyTitle, helpLink, customButtons)
 {
 	w = (w != null) ? w : 300;
@@ -378,8 +378,8 @@ var TextareaDialog = function(editorUi, title, url, fn, cancelFn, cancelTitle, w
 	noHide = (noHide != null) ? noHide : false;
 	var row, td;
 	
-	var table = document.createElement('table');
-	var tbody = document.createElement('tbody');
+	let table = document.createElement('table');
+	let tbody = document.createElement('tbody');
 	
 	row = document.createElement('tr');
 	
@@ -394,7 +394,7 @@ var TextareaDialog = function(editorUi, title, url, fn, cancelFn, cancelTitle, w
 	row = document.createElement('tr');
 	td = document.createElement('td');
 
-	var nameInput = document.createElement('textarea');
+	let nameInput = document.createElement('textarea');
 	
 	if (noWrap)
 	{
@@ -432,7 +432,7 @@ var TextareaDialog = function(editorUi, title, url, fn, cancelFn, cancelTitle, w
 	
 	if (helpLink != null)
 	{
-		var helpBtn = mxUtils.button(mxResources.get('help'), function()
+		let helpBtn = mxUtils.button(mxResources.get('help'), function()
 		{
 			editorUi.editor.graph.openLink(helpLink);
 		});
@@ -443,11 +443,11 @@ var TextareaDialog = function(editorUi, title, url, fn, cancelFn, cancelTitle, w
 	
 	if (customButtons != null)
 	{
-		for (var i = 0; i < customButtons.length; i++)
+		for (let i = 0; i < customButtons.length; i++)
 		{
 			(function(label, fn)
 			{
-				var customBtn = mxUtils.button(label, function(e)
+				let customBtn = mxUtils.button(label, function(e)
 				{
 					fn(e, nameInput);
 				});
@@ -458,7 +458,7 @@ var TextareaDialog = function(editorUi, title, url, fn, cancelFn, cancelTitle, w
 		}
 	}
 	
-	var cancelBtn = mxUtils.button(cancelTitle || mxResources.get('cancel'), function()
+	let cancelBtn = mxUtils.button(cancelTitle || mxResources.get('cancel'), function()
 	{
 		editorUi.hideDialog();
 		
@@ -481,7 +481,7 @@ var TextareaDialog = function(editorUi, title, url, fn, cancelFn, cancelTitle, w
 	
 	if (fn != null)
 	{
-		var genericBtn = mxUtils.button(applyTitle || mxResources.get('apply'), function()
+		let genericBtn = mxUtils.button(applyTitle || mxResources.get('apply'), function()
 		{
 			if (!noHide)
 			{
@@ -509,11 +509,11 @@ var TextareaDialog = function(editorUi, title, url, fn, cancelFn, cancelTitle, w
 /**
  * Constructs a new edit file dialog.
  */
-var EditDiagramDialog = function(editorUi)
+let EditDiagramDialog = function(editorUi)
 {
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	div.style.textAlign = 'right';
-	var textarea = document.createElement('textarea');
+	let textarea = document.createElement('textarea');
 	textarea.setAttribute('wrap', 'off');
 	textarea.setAttribute('spellcheck', 'false');
 	textarea.setAttribute('autocorrect', 'off');
@@ -543,8 +543,8 @@ var EditDiagramDialog = function(editorUi)
 		    
 		    if (evt.dataTransfer.files.length > 0)
 		    {
-    			var file = evt.dataTransfer.files[0];
-    			var reader = new FileReader();
+    			let file = evt.dataTransfer.files[0];
+    			let reader = new FileReader();
 				
 				reader.onload = function(e)
 				{
@@ -570,7 +570,7 @@ var EditDiagramDialog = function(editorUi)
 		textarea.addEventListener('drop', handleDrop, false);
 	}
 	
-	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
+	let cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
 	{
 		editorUi.hideDialog();
 	});
@@ -581,19 +581,19 @@ var EditDiagramDialog = function(editorUi)
 		div.appendChild(cancelBtn);
 	}
 	
-	var select = document.createElement('select');
+	let select = document.createElement('select');
 	select.style.width = '180px';
 	select.className = 'geBtn';
 
 	if (editorUi.editor.graph.isEnabled())
 	{
-		var replaceOption = document.createElement('option');
+		let replaceOption = document.createElement('option');
 		replaceOption.setAttribute('value', 'replace');
 		mxUtils.write(replaceOption, mxResources.get('replaceExistingDrawing'));
 		select.appendChild(replaceOption);
 	}
 
-	var newOption = document.createElement('option');
+	let newOption = document.createElement('option');
 	newOption.setAttribute('value', 'new');
 	mxUtils.write(newOption, mxResources.get('openInNewWindow'));
 	
@@ -604,7 +604,7 @@ var EditDiagramDialog = function(editorUi)
 
 	if (editorUi.editor.graph.isEnabled())
 	{
-		var importOption = document.createElement('option');
+		let importOption = document.createElement('option');
 		importOption.setAttribute('value', 'import');
 		mxUtils.write(importOption, mxResources.get('addToExistingDrawing'));
 		select.appendChild(importOption);
@@ -612,11 +612,11 @@ var EditDiagramDialog = function(editorUi)
 
 	div.appendChild(select);
 
-	var okBtn = mxUtils.button(mxResources.get('ok'), function()
+	let okBtn = mxUtils.button(mxResources.get('ok'), function()
 	{
 		// Removes all illegal control characters before parsing
-		var data = Graph.zapGremlins(mxUtils.trim(textarea.value));
-		var error = null;
+		let data = Graph.zapGremlins(mxUtils.trim(textarea.value));
+		let error = null;
 		
 		if (select.value == 'new')
 		{
@@ -646,12 +646,12 @@ var EditDiagramDialog = function(editorUi)
 			editorUi.editor.graph.model.beginUpdate();
 			try
 			{
-				var doc = mxUtils.parseXml(data);
-				var model = new mxGraphModel();
-				var codec = new mxCodec(doc);
+				let doc = mxUtils.parseXml(data);
+				let model = new mxGraphModel();
+				let codec = new mxCodec(doc);
 				codec.decode(doc.documentElement, model);
 				
-				var children = model.getChildren(model.getChildAt(model.getRoot(), 0));
+				let children = model.getChildren(model.getChildAt(model.getRoot(), 0));
 				editorUi.editor.graph.setSelectionCells(editorUi.editor.graph.importCells(children));
 				
 				// LATER: Why is hideDialog between begin-/endUpdate faster?
@@ -691,19 +691,19 @@ EditDiagramDialog.showNewWindowOption = true;
 /**
  * Constructs a new export dialog.
  */
-var ExportDialog = function(editorUi)
+let ExportDialog = function(editorUi)
 {
-	var graph = editorUi.editor.graph;
-	var bounds = graph.getGraphBounds();
-	var scale = graph.view.scale;
+	let graph = editorUi.editor.graph;
+	let bounds = graph.getGraphBounds();
+	let scale = graph.view.scale;
 	
-	var width = Math.ceil(bounds.width / scale);
-	var height = Math.ceil(bounds.height / scale);
+	let width = Math.ceil(bounds.width / scale);
+	let height = Math.ceil(bounds.height / scale);
 
 	var row, td;
 	
-	var table = document.createElement('table');
-	var tbody = document.createElement('tbody');
+	let table = document.createElement('table');
+	let tbody = document.createElement('tbody');
 	table.setAttribute('cellpadding', (mxClient.IS_SF) ? '0' : '2');
 	
 	row = document.createElement('tr');
@@ -715,7 +715,7 @@ var ExportDialog = function(editorUi)
 	
 	row.appendChild(td);
 	
-	var nameInput = document.createElement('input');
+	let nameInput = document.createElement('input');
 	nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
 	nameInput.style.width = '180px';
 
@@ -733,15 +733,15 @@ var ExportDialog = function(editorUi)
 	
 	row.appendChild(td);
 	
-	var imageFormatSelect = document.createElement('select');
+	let imageFormatSelect = document.createElement('select');
 	imageFormatSelect.style.width = '180px';
 
-	var pngOption = document.createElement('option');
+	let pngOption = document.createElement('option');
 	pngOption.setAttribute('value', 'png');
 	mxUtils.write(pngOption, mxResources.get('formatPng'));
 	imageFormatSelect.appendChild(pngOption);
 
-	var gifOption = document.createElement('option');
+	let gifOption = document.createElement('option');
 	
 	if (ExportDialog.showGifOption)
 	{
@@ -750,24 +750,24 @@ var ExportDialog = function(editorUi)
 		imageFormatSelect.appendChild(gifOption);
 	}
 	
-	var jpgOption = document.createElement('option');
+	let jpgOption = document.createElement('option');
 	jpgOption.setAttribute('value', 'jpg');
 	mxUtils.write(jpgOption, mxResources.get('formatJpg'));
 	imageFormatSelect.appendChild(jpgOption);
 
-	var pdfOption = document.createElement('option');
+	let pdfOption = document.createElement('option');
 	pdfOption.setAttribute('value', 'pdf');
 	mxUtils.write(pdfOption, mxResources.get('formatPdf'));
 	imageFormatSelect.appendChild(pdfOption);
 	
-	var svgOption = document.createElement('option');
+	let svgOption = document.createElement('option');
 	svgOption.setAttribute('value', 'svg');
 	mxUtils.write(svgOption, mxResources.get('formatSvg'));
 	imageFormatSelect.appendChild(svgOption);
 	
 	if (ExportDialog.showXmlOption)
 	{
-		var xmlOption = document.createElement('option');
+		let xmlOption = document.createElement('option');
 		xmlOption.setAttribute('value', 'xml');
 		mxUtils.write(xmlOption, mxResources.get('formatXml'));
 		imageFormatSelect.appendChild(xmlOption);
@@ -787,7 +787,7 @@ var ExportDialog = function(editorUi)
 	
 	row.appendChild(td);
 	
-	var zoomInput = document.createElement('input');
+	let zoomInput = document.createElement('input');
 	zoomInput.setAttribute('type', 'number');
 	zoomInput.setAttribute('value', '100');
 	zoomInput.style.width = '180px';
@@ -806,7 +806,7 @@ var ExportDialog = function(editorUi)
 	
 	row.appendChild(td);
 	
-	var widthInput = document.createElement('input');
+	let widthInput = document.createElement('input');
 	widthInput.setAttribute('value', width);
 	widthInput.style.width = '180px';
 
@@ -824,7 +824,7 @@ var ExportDialog = function(editorUi)
 	
 	row.appendChild(td);
 	
-	var heightInput = document.createElement('input');
+	let heightInput = document.createElement('input');
 	heightInput.setAttribute('value', height);
 	heightInput.style.width = '180px';
 
@@ -842,7 +842,7 @@ var ExportDialog = function(editorUi)
 	
 	row.appendChild(td);
 	
-	var dpiSelect = document.createElement('select');
+	let dpiSelect = document.createElement('select');
 	dpiSelect.style.width = '180px';
 
 	var dpi100Option = document.createElement('option');
@@ -865,12 +865,12 @@ var ExportDialog = function(editorUi)
 	mxUtils.write(dpi400Option, '400dpi');
 	dpiSelect.appendChild(dpi400Option);
 	
-	var dpiCustOption = document.createElement('option');
+	let dpiCustOption = document.createElement('option');
 	dpiCustOption.setAttribute('value', 'custom');
 	mxUtils.write(dpiCustOption, mxResources.get('custom'));
 	dpiSelect.appendChild(dpiCustOption);
 
-	var customDpi = document.createElement('input');
+	let customDpi = document.createElement('input');
 	customDpi.style.width = '180px';
 	customDpi.style.display = 'none';
 	customDpi.setAttribute('value', '100');
@@ -878,7 +878,7 @@ var ExportDialog = function(editorUi)
 	customDpi.setAttribute('min', '50');
 	customDpi.setAttribute('step', '50');
 	
-	var zoomUserChanged = false;
+	let zoomUserChanged = false;
 	
 	mxEvent.addListener(dpiSelect, 'change', function()
 	{
@@ -901,7 +901,7 @@ var ExportDialog = function(editorUi)
 	
 	mxEvent.addListener(customDpi, 'change', function()
 	{
-		var dpi = parseInt(customDpi.value);
+		let dpi = parseInt(customDpi.value);
 		
 		if (isNaN(dpi) || dpi <= 0)
 		{
@@ -933,7 +933,7 @@ var ExportDialog = function(editorUi)
 	
 	row.appendChild(td);
 	
-	var transparentCheckbox = document.createElement('input');
+	let transparentCheckbox = document.createElement('input');
 	transparentCheckbox.setAttribute('type', 'checkbox');
 	transparentCheckbox.checked = graph.background == null || graph.background == mxConstants.NONE;
 
@@ -953,7 +953,7 @@ var ExportDialog = function(editorUi)
 	
 	row.appendChild(td);
 	
-	var borderInput = document.createElement('input');
+	let borderInput = document.createElement('input');
 	borderInput.setAttribute('type', 'number');
 	borderInput.setAttribute('value', ExportDialog.lastBorderValue);
 	borderInput.style.width = '180px';
@@ -968,8 +968,8 @@ var ExportDialog = function(editorUi)
 	// Handles changes in the export format
 	function formatChanged()
 	{
-		var name = nameInput.value;
-		var dot = name.lastIndexOf('.');
+		let name = nameInput.value;
+		let dot = name.lastIndexOf('.');
 		
 		if (dot > 0)
 		{
@@ -1043,7 +1043,7 @@ var ExportDialog = function(editorUi)
 	mxEvent.addListener(zoomInput, 'change', function()
 	{
 		zoomUserChanged = true;
-		var s = Math.max(0, parseFloat(zoomInput.value) || 100) / 100;
+		let s = Math.max(0, parseFloat(zoomInput.value) || 100) / 100;
 		zoomInput.value = parseFloat((s * 100).toFixed(2));
 		
 		if (width > 0)
@@ -1063,7 +1063,7 @@ var ExportDialog = function(editorUi)
 
 	mxEvent.addListener(widthInput, 'change', function()
 	{
-		var s = parseInt(widthInput.value) / width;
+		let s = parseInt(widthInput.value) / width;
 		
 		if (s > 0)
 		{
@@ -1082,7 +1082,7 @@ var ExportDialog = function(editorUi)
 
 	mxEvent.addListener(heightInput, 'change', function()
 	{
-		var s = parseInt(heightInput.value) / height;
+		let s = parseInt(heightInput.value) / height;
 		
 		if (s > 0)
 		{
@@ -1105,7 +1105,7 @@ var ExportDialog = function(editorUi)
 	td.style.paddingTop = '22px';
 	td.colSpan = 2;
 	
-	var saveBtn = mxUtils.button(mxResources.get('export'), mxUtils.bind(this, function()
+	let saveBtn = mxUtils.button(mxResources.get('export'), mxUtils.bind(this, function()
 	{
 		if (parseInt(zoomInput.value) <= 0)
 		{
@@ -1113,12 +1113,12 @@ var ExportDialog = function(editorUi)
 		}
 		else
 		{
-	    	var name = nameInput.value;
-			var format = imageFormatSelect.value;
-	    	var s = Math.max(0, parseFloat(zoomInput.value) || 100) / 100;
-			var b = Math.max(0, parseInt(borderInput.value));
-			var bg = graph.background;
-			var dpi = Math.max(1, parseInt(customDpi.value));
+	    	let name = nameInput.value;
+			let format = imageFormatSelect.value;
+	    	let s = Math.max(0, parseFloat(zoomInput.value) || 100) / 100;
+			let b = Math.max(0, parseInt(borderInput.value));
+			let bg = graph.background;
+			let dpi = Math.max(1, parseInt(customDpi.value));
 			
 			if ((format == 'svg' || format == 'png' || format == 'pdf') && transparentCheckbox.checked)
 			{
@@ -1135,7 +1135,7 @@ var ExportDialog = function(editorUi)
 	}));
 	saveBtn.className = 'geBtn gePrimaryBtn';
 	
-	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
+	let cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
 	{
 		editorUi.hideDialog();
 	});
@@ -1181,7 +1181,7 @@ ExportDialog.showXmlOption = true;
  */
 ExportDialog.exportFile = function(editorUi, name, format, bg, s, b, dpi)
 {
-	var graph = editorUi.editor.graph;
+	let graph = editorUi.editor.graph;
 	
 	if (format == 'xml')
 	{
@@ -1193,32 +1193,32 @@ ExportDialog.exportFile = function(editorUi, name, format, bg, s, b, dpi)
 	}
     else
     {
-    	var bounds = graph.getGraphBounds();
+    	let bounds = graph.getGraphBounds();
     	
 		// New image export
-		var xmlDoc = mxUtils.createXmlDocument();
-		var root = xmlDoc.createElement('output');
+		let xmlDoc = mxUtils.createXmlDocument();
+		let root = xmlDoc.createElement('output');
 		xmlDoc.appendChild(root);
 		
 	    // Renders graph. Offset will be multiplied with state's scale when painting state.
-		var xmlCanvas = new mxXmlCanvas2D(root);
+		let xmlCanvas = new mxXmlCanvas2D(root);
 		xmlCanvas.translate(Math.floor((b / s - bounds.x) / graph.view.scale),
 			Math.floor((b / s - bounds.y) / graph.view.scale));
 		xmlCanvas.scale(s / graph.view.scale);
 		
-		var imgExport = new mxImageExport()
+		let imgExport = new mxImageExport()
 	    imgExport.drawState(graph.getView().getState(graph.model.root), xmlCanvas);
 	    
 		// Puts request data together
-		var param = 'xml=' + encodeURIComponent(mxUtils.getXml(root));
-		var w = Math.ceil(bounds.width * s / graph.view.scale + 2 * b);
-		var h = Math.ceil(bounds.height * s / graph.view.scale + 2 * b);
+		let param = 'xml=' + encodeURIComponent(mxUtils.getXml(root));
+		let w = Math.ceil(bounds.width * s / graph.view.scale + 2 * b);
+		let h = Math.ceil(bounds.height * s / graph.view.scale + 2 * b);
 		
 		// Requests image if request is valid
 		if (param.length <= MAX_REQUEST_SIZE && w * h < MAX_AREA)
 		{
 			editorUi.hideDialog();
-			var req = new mxXmlRequest(EXPORT_URL, 'format=' + format +
+			let req = new mxXmlRequest(EXPORT_URL, 'format=' + format +
 				'&filename=' + encodeURIComponent(name) +
 				'&bg=' + ((bg != null) ? bg : 'none') +
 				'&w=' + w + '&h=' + h + '&' + param +
@@ -1243,7 +1243,7 @@ ExportDialog.saveLocalFile = function(editorUi, data, filename, format)
 	if (data.length < MAX_REQUEST_SIZE)
 	{
 		editorUi.hideDialog();
-		var req = new mxXmlRequest(SAVE_URL, 'xml=' + encodeURIComponent(data) + '&filename=' +
+		let req = new mxXmlRequest(SAVE_URL, 'xml=' + encodeURIComponent(data) + '&filename=' +
 			encodeURIComponent(filename) + '&format=' + format);
 		req.simulate(document, '_blank');
 	}
@@ -1257,27 +1257,27 @@ ExportDialog.saveLocalFile = function(editorUi, data, filename, format)
 /**
  * Constructs a new metadata dialog.
  */
-var EditDataDialog = function(ui, cell)
+let EditDataDialog = function(ui, cell)
 {
-	var div = document.createElement('div');
-	var graph = ui.editor.graph;
+	let div = document.createElement('div');
+	let graph = ui.editor.graph;
 	
-	var value = graph.getModel().getValue(cell);
+	let value = graph.getModel().getValue(cell);
 	
 	// Converts the value to an XML node
 	if (!mxUtils.isNode(value))
 	{
-		var doc = mxUtils.createXmlDocument();
-		var obj = doc.createElement('object');
+		let doc = mxUtils.createXmlDocument();
+		let obj = doc.createElement('object');
 		obj.setAttribute('label', value || '');
 		value = obj;
 	}
 	
-	var meta = {};
+	let meta = {};
 	
 	try
 	{
-		var temp = mxUtils.getValue(ui.editor.graph.getCurrentCellStyle(cell), 'metaData', null);
+		let temp = mxUtils.getValue(ui.editor.graph.getCurrentCellStyle(cell), 'metaData', null);
 		
 		if (temp != null)
 		{
@@ -1290,27 +1290,27 @@ var EditDataDialog = function(ui, cell)
 	}
 	
 	// Creates the dialog contents
-	var form = new mxForm('properties');
+	let form = new mxForm('properties');
 	form.table.style.width = '100%';
 
-	var attrs = value.attributes;
-	var names = [];
-	var texts = [];
-	var count = 0;
+	let attrs = value.attributes;
+	let names = [];
+	let texts = [];
+	let count = 0;
 
-	var id = (EditDataDialog.getDisplayIdForCell != null) ?
+	let id = (EditDataDialog.getDisplayIdForCell != null) ?
 		EditDataDialog.getDisplayIdForCell(ui, cell) : null;
 	
-	var addRemoveButton = function(text, name)
+	let addRemoveButton = function(text, name)
 	{
-		var wrapper = document.createElement('div');
+		let wrapper = document.createElement('div');
 		wrapper.style.position = 'relative';
 		wrapper.style.paddingRight = '20px';
 		wrapper.style.boxSizing = 'border-box';
 		wrapper.style.width = '100%';
 		
-		var removeAttr = document.createElement('a');
-		var img = mxUtils.createImage(Dialog.prototype.closeImage);
+		let removeAttr = document.createElement('a');
+		let img = mxUtils.createImage(Dialog.prototype.closeImage);
 		img.style.height = '9px';
 		img.style.fontSize = '9px';
 		img.style.marginBottom = '5px';
@@ -1326,13 +1326,13 @@ var EditDataDialog = function(ui, cell)
 		removeAttr.style.cursor = 'pointer';
 		removeAttr.appendChild(img);
 		
-		var removeAttrFn = (function(name)
+		let removeAttrFn = (function(name)
 		{
 			return function()
 			{
-				var count = 0;
+				let count = 0;
 				
-				for (var j = 0; j < names.length; j++)
+				for (let j = 0; j < names.length; j++)
 				{
 					if (names[j] == name)
 					{
@@ -1352,13 +1352,13 @@ var EditDataDialog = function(ui, cell)
 		
 		mxEvent.addListener(removeAttr, 'click', removeAttrFn);
 		
-		var parent = text.parentNode;
+		let parent = text.parentNode;
 		wrapper.appendChild(text);
 		wrapper.appendChild(removeAttr);
 		parent.appendChild(wrapper);
 	};
 	
-	var addTextArea = function(index, name, value)
+	let addTextArea = function(index, name, value)
 	{
 		names[index] = name;
 		texts[index] = form.addTextarea(names[count] + ':', value, 2);
@@ -1377,10 +1377,10 @@ var EditDataDialog = function(ui, cell)
 		}
 	};
 	
-	var temp = [];
-	var isLayer = graph.getModel().getParent(cell) == graph.getModel().getRoot();
+	let temp = [];
+	let isLayer = graph.getModel().getParent(cell) == graph.getModel().getRoot();
 
-	for (var i = 0; i < attrs.length; i++)
+	for (let i = 0; i < attrs.length; i++)
 	{
 		if ((isLayer || attrs[i].nodeName != 'label') && attrs[i].nodeName != 'placeholders')
 		{
@@ -1407,7 +1407,7 @@ var EditDataDialog = function(ui, cell)
 
 	if (id != null)
 	{	
-		var text = document.createElement('div');
+		let text = document.createElement('div');
 		text.style.width = '100%';
 		text.style.fontSize = '11px';
 		text.style.textAlign = 'center';
@@ -1416,24 +1416,24 @@ var EditDataDialog = function(ui, cell)
 		form.addField(mxResources.get('id') + ':', text);
 	}
 	
-	for (var i = 0; i < temp.length; i++)
+	for (let i = 0; i < temp.length; i++)
 	{
 		addTextArea(count, temp[i].name, temp[i].value);
 		count++;
 	}
 	
-	var top = document.createElement('div');
+	let top = document.createElement('div');
 	top.style.cssText = 'position:absolute;left:30px;right:30px;overflow-y:auto;top:30px;bottom:80px;';
 	top.appendChild(form.table);
 
-	var newProp = document.createElement('div');
+	let newProp = document.createElement('div');
 	newProp.style.boxSizing = 'border-box';
 	newProp.style.paddingRight = '160px';
 	newProp.style.whiteSpace = 'nowrap';
 	newProp.style.marginTop = '6px';
 	newProp.style.width = '100%';
 	
-	var nameInput = document.createElement('input');
+	let nameInput = document.createElement('input');
 	nameInput.setAttribute('placeholder', mxResources.get('enterPropertyName'));
 	nameInput.setAttribute('type', 'text');
 	nameInput.setAttribute('size', '40');
@@ -1445,16 +1445,16 @@ var EditDataDialog = function(ui, cell)
 	top.appendChild(newProp);
 	div.appendChild(top);
 	
-	var addBtn = mxUtils.button(mxResources.get('addProperty'), function()
+	let addBtn = mxUtils.button(mxResources.get('addProperty'), function()
 	{
-		var name = nameInput.value;
+		let name = nameInput.value;
 
 		// Avoid ':' in attribute names which seems to be valid in Chrome
 		if (name.length > 0 && name != 'label' && name != 'placeholders' && name.indexOf(':') < 0)
 		{
 			try
 			{
-				var idx = mxUtils.indexOf(names, name);
+				let idx = mxUtils.indexOf(names, name);
 				
 				if (idx >= 0 && texts[idx] != null)
 				{
@@ -1463,7 +1463,7 @@ var EditDataDialog = function(ui, cell)
 				else
 				{
 					// Checks if the name is valid
-					var clone = value.cloneNode(false);
+					let clone = value.cloneNode(false);
 					clone.setAttribute(name, '');
 					
 					if (idx >= 0)
@@ -1473,7 +1473,7 @@ var EditDataDialog = function(ui, cell)
 					}
 
 					names.push(name);
-					var text = form.addTextarea(name + ':', '', 2);
+					let text = form.addTextarea(name + ':', '', 2);
 					text.style.width = '100%';
 					texts.push(text);
 					addRemoveButton(text, name);
@@ -1517,14 +1517,14 @@ var EditDataDialog = function(ui, cell)
 	addBtn.className = 'geBtn';
 	newProp.appendChild(addBtn);
 
-	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
+	let cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
 	{
 		ui.hideDialog.apply(ui, arguments);
 	});
 	
 	cancelBtn.className = 'geBtn';
 	
-	var applyBtn = mxUtils.button(mxResources.get('apply'), function()
+	let applyBtn = mxUtils.button(mxResources.get('apply'), function()
 	{
 		try
 		{
@@ -1532,9 +1532,9 @@ var EditDataDialog = function(ui, cell)
 			
 			// Clones and updates the value
 			value = value.cloneNode(true);
-			var removeLabel = false;
+			let removeLabel = false;
 			
-			for (var i = 0; i < names.length; i++)
+			for (let i = 0; i < names.length; i++)
 			{
 				if (texts[i] == null)
 				{
@@ -1581,14 +1581,14 @@ var EditDataDialog = function(ui, cell)
 	// Catches all changes that don't fire a keyup (such as paste via mouse)
 	mxEvent.addListener(nameInput, 'change', updateAddBtn);
 	
-	var buttons = document.createElement('div');
+	let buttons = document.createElement('div');
 	buttons.style.cssText = 'position:absolute;left:30px;right:30px;text-align:right;bottom:30px;height:40px;'
 	
 	if (ui.editor.graph.getModel().isVertex(cell) || ui.editor.graph.getModel().isEdge(cell))
 	{
-		var replace = document.createElement('span');
+		let replace = document.createElement('span');
 		replace.style.marginRight = '10px';
-		var input = document.createElement('input');
+		let input = document.createElement('input');
 		input.setAttribute('type', 'checkbox');
 		input.style.marginRight = '6px';
 		
@@ -1615,14 +1615,14 @@ var EditDataDialog = function(ui, cell)
 		
 		if (EditDataDialog.placeholderHelpLink != null)
 		{
-			var link = document.createElement('a');
+			let link = document.createElement('a');
 			link.setAttribute('href', EditDataDialog.placeholderHelpLink);
 			link.setAttribute('title', mxResources.get('help'));
 			link.setAttribute('target', '_blank');
 			link.style.marginLeft = '8px';
 			link.style.cursor = 'help';
 			
-			var icon = document.createElement('img');
+			let icon = document.createElement('img');
 			mxUtils.setOpacity(icon, 50);
 			icon.style.height = '16px';
 			icon.style.width = '16px';
@@ -1658,7 +1658,7 @@ var EditDataDialog = function(ui, cell)
  */
 EditDataDialog.getDisplayIdForCell = function(ui, cell)
 {
-	var id = null;
+	let id = null;
 	
 	if (ui.editor.graph.getModel().getParent(cell) != null)
 	{
@@ -1676,12 +1676,12 @@ EditDataDialog.placeholderHelpLink = null;
 /**
  * Constructs a new link dialog.
  */
-var LinkDialog = function(editorUi, initialValue, btnLabel, fn)
+let LinkDialog = function(editorUi, initialValue, btnLabel, fn)
 {
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	mxUtils.write(div, mxResources.get('editLink') + ':');
 	
-	var inner = document.createElement('div');
+	let inner = document.createElement('div');
 	inner.className = 'geTitle';
 	inner.style.backgroundColor = 'transparent';
 	inner.style.borderColor = 'transparent';
@@ -1690,7 +1690,7 @@ var LinkDialog = function(editorUi, initialValue, btnLabel, fn)
 	inner.style.cursor = 'default';
 	inner.style.paddingRight = '20px';
 
-	var linkInput = document.createElement('input');
+	let linkInput = document.createElement('input');
 	linkInput.setAttribute('value', initialValue);
 	linkInput.setAttribute('placeholder', 'http://www.example.com/');
 	linkInput.setAttribute('type', 'text');
@@ -1701,7 +1701,7 @@ var LinkDialog = function(editorUi, initialValue, btnLabel, fn)
 	linkInput.style.backgroundPosition = '100% 50%';
 	linkInput.style.paddingRight = '14px';
 	
-	var cross = document.createElement('div');
+	let cross = document.createElement('div');
 	cross.setAttribute('title', mxResources.get('reset'));
 	cross.style.position = 'relative';
 	cross.style.left = '-16px';
@@ -1738,7 +1738,7 @@ var LinkDialog = function(editorUi, initialValue, btnLabel, fn)
 		}
 	};
 	
-	var btns = document.createElement('div');
+	let btns = document.createElement('div');
 	btns.style.marginTop = '18px';
 	btns.style.textAlign = 'right';
 
@@ -1751,7 +1751,7 @@ var LinkDialog = function(editorUi, initialValue, btnLabel, fn)
 		}
 	});
 
-	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
+	let cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
 	{
 		editorUi.hideDialog();
 	});
@@ -1762,7 +1762,7 @@ var LinkDialog = function(editorUi, initialValue, btnLabel, fn)
 		btns.appendChild(cancelBtn);
 	}
 	
-	var mainBtn = mxUtils.button(btnLabel, function()
+	let mainBtn = mxUtils.button(btnLabel, function()
 	{
 		editorUi.hideDialog();
 		fn(linkInput.value);
@@ -1783,11 +1783,11 @@ var LinkDialog = function(editorUi, initialValue, btnLabel, fn)
 /**
  * 
  */
-var OutlineWindow = function(editorUi, x, y, w, h)
+let OutlineWindow = function(editorUi, x, y, w, h)
 {
-	var graph = editorUi.editor.graph;
+	let graph = editorUi.editor.graph;
 
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	div.style.position = 'absolute';
 	div.style.width = '100%';
 	div.style.height = '100%';
@@ -1804,8 +1804,8 @@ var OutlineWindow = function(editorUi, x, y, w, h)
 	
 	this.window.setLocation = function(x, y)
 	{
-		var iw = window.innerWidth || document.body.clientWidth || document.documentElement.clientWidth;
-		var ih = window.innerHeight || document.body.clientHeight || document.documentElement.clientHeight;
+		let iw = window.innerWidth || document.body.clientWidth || document.documentElement.clientWidth;
+		let ih = window.innerHeight || document.body.clientHeight || document.documentElement.clientHeight;
 		
 		x = Math.max(0, Math.min(x, iw - this.table.clientWidth));
 		y = Math.max(0, Math.min(y, ih - this.table.clientHeight - 48));
@@ -1816,17 +1816,17 @@ var OutlineWindow = function(editorUi, x, y, w, h)
 		}
 	};
 	
-	var resizeListener = mxUtils.bind(this, function()
+	let resizeListener = mxUtils.bind(this, function()
 	{
-		var x = this.window.getX();
-		var y = this.window.getY();
+		let x = this.window.getX();
+		let y = this.window.getY();
 		
 		this.window.setLocation(x, y);
 	});
 	
 	mxEvent.addListener(window, 'resize', resizeListener);
 	
-	var outline = editorUi.createOutline(this.window);
+	let outline = editorUi.createOutline(this.window);
 
 	this.destroy = function()
 	{
@@ -1865,17 +1865,17 @@ var OutlineWindow = function(editorUi, x, y, w, h)
 		outline.suspended = true;
 	}));
 
-	var outlineCreateGraph = outline.createGraph;
+	let outlineCreateGraph = outline.createGraph;
 	outline.createGraph = function(container)
 	{
-		var g = outlineCreateGraph.apply(this, arguments);
+		let g = outlineCreateGraph.apply(this, arguments);
 		g.gridEnabled = false;
 		g.pageScale = graph.pageScale;
 		g.pageFormat = graph.pageFormat;
 		g.background = (graph.background == null || graph.background == mxConstants.NONE) ? graph.defaultPageBackgroundColor : graph.background;
 		g.pageVisible = graph.pageVisible;
 
-		var current = mxUtils.getCurrentStyle(graph.container);
+		let current = mxUtils.getCurrentStyle(graph.container);
 		div.style.backgroundColor = current.backgroundColor;
 		
 		return g;
@@ -1888,7 +1888,7 @@ var OutlineWindow = function(editorUi, x, y, w, h)
 		outline.outline.pageVisible = graph.pageVisible;
 		outline.outline.background = (graph.background == null || graph.background == mxConstants.NONE) ? graph.defaultPageBackgroundColor : graph.background;;
 		
-		var current = mxUtils.getCurrentStyle(graph.container);
+		let current = mxUtils.getCurrentStyle(graph.container);
 		div.style.backgroundColor = current.backgroundColor;
 
 		if (graph.view.backgroundPageShape != null && outline.outline.view.backgroundPageShape != null)
@@ -1913,13 +1913,13 @@ var OutlineWindow = function(editorUi, x, y, w, h)
 	
 	if (outline.outline.dialect == mxConstants.DIALECT_SVG)
 	{
-		var zoomInAction = editorUi.actions.get('zoomIn');
-		var zoomOutAction = editorUi.actions.get('zoomOut');
+		let zoomInAction = editorUi.actions.get('zoomIn');
+		let zoomOutAction = editorUi.actions.get('zoomOut');
 		
 		mxEvent.addMouseWheelListener(function(evt, up)
 		{
-			var outlineWheel = false;
-			var source = mxEvent.getSource(evt);
+			let outlineWheel = false;
+			let source = mxEvent.getSource(evt);
 	
 			while (source != null)
 			{
@@ -1950,11 +1950,11 @@ var OutlineWindow = function(editorUi, x, y, w, h)
 /**
  * 
  */
-var LayersWindow = function(editorUi, x, y, w, h)
+let LayersWindow = function(editorUi, x, y, w, h)
 {
-	var graph = editorUi.editor.graph;
+	let graph = editorUi.editor.graph;
 	
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	div.style.userSelect = 'none';
 	div.style.background = (Dialog.backdropColor == 'white') ? 'whiteSmoke' : Dialog.backdropColor;
 	div.style.border = '1px solid whiteSmoke';
@@ -1962,9 +1962,9 @@ var LayersWindow = function(editorUi, x, y, w, h)
 	div.style.marginBottom = '10px';
 	div.style.overflow = 'auto';
 
-	var tbarHeight = (!EditorUi.compactUi) ? '30px' : '26px';
+	let tbarHeight = (!EditorUi.compactUi) ? '30px' : '26px';
 	
-	var listDiv = document.createElement('div')
+	let listDiv = document.createElement('div')
 	listDiv.style.backgroundColor = (Dialog.backdropColor == 'white') ? '#dcdcdc' : Dialog.backdropColor;
 	listDiv.style.position = 'absolute';
 	listDiv.style.overflow = 'auto';
@@ -1974,8 +1974,8 @@ var LayersWindow = function(editorUi, x, y, w, h)
 	listDiv.style.bottom = (parseInt(tbarHeight) + 7) + 'px';
 	div.appendChild(listDiv);
 	
-	var dragSource = null;
-	var dropIndex = null;
+	let dragSource = null;
+	let dropIndex = null;
 	
 	mxEvent.addListener(div, 'dragover', function(evt)
 	{
@@ -1992,9 +1992,9 @@ var LayersWindow = function(editorUi, x, y, w, h)
 		evt.preventDefault();
 	});
 
-	var layerCount = null;
-	var selectionLayer = null;
-	var ldiv = document.createElement('div');
+	let layerCount = null;
+	let selectionLayer = null;
+	let ldiv = document.createElement('div');
 	
 	ldiv.className = 'geToolbarContainer';
 	ldiv.style.position = 'absolute';
@@ -2011,10 +2011,10 @@ var LayersWindow = function(editorUi, x, y, w, h)
 	ldiv.style.display = 'block';
 	ldiv.style.whiteSpace = 'nowrap';
 
-	var link = document.createElement('a');
+	let link = document.createElement('a');
 	link.className = 'geButton';
 
-	var removeLink = link.cloneNode();
+	let removeLink = link.cloneNode();
 	removeLink.innerHTML = '<div class="geSprite geSprite-delete" style="display:inline-block;"></div>';
 
 	mxEvent.addListener(removeLink, 'click', function(evt)
@@ -2024,7 +2024,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
 			graph.model.beginUpdate();
 			try
 			{
-				var index = graph.model.root.getIndex(selectionLayer);
+				let index = graph.model.root.getIndex(selectionLayer);
 				graph.removeCells([selectionLayer], false);
 				
 				// Creates default layer if no layer exists
@@ -2058,7 +2058,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
 	
 	ldiv.appendChild(removeLink);
 
-	var insertLink = link.cloneNode();
+	let insertLink = link.cloneNode();
 	insertLink.setAttribute('title', mxUtils.trim(mxResources.get('moveSelectionTo', ['...'])));
 	insertLink.innerHTML = '<div class="geSprite geSprite-insert" style="display:inline-block;"></div>';
 	
@@ -2066,15 +2066,15 @@ var LayersWindow = function(editorUi, x, y, w, h)
 	{
 		if (graph.isEnabled() && !graph.isSelectionEmpty())
 		{
-			var offset = mxUtils.getOffset(insertLink);
+			let offset = mxUtils.getOffset(insertLink);
 			
 			editorUi.showPopupMenu(mxUtils.bind(this, function(menu, parent)
 			{
-				for (var i = layerCount - 1; i >= 0; i--)
+				for (let i = layerCount - 1; i >= 0; i--)
 				{
 					(mxUtils.bind(this, function(child)
 					{
-						var item = menu.addItem(graph.convertValueToString(child) ||
+						let item = menu.addItem(graph.convertValueToString(child) ||
 								mxResources.get('background'), null, mxUtils.bind(this, function()
 						{
 							graph.moveCells(graph.getSelectionCells(), 0, 0, false, child);
@@ -2093,7 +2093,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
 
 	ldiv.appendChild(insertLink);
 	
-	var dataLink = link.cloneNode();
+	let dataLink = link.cloneNode();
 	dataLink.innerHTML = '<div class="geSprite geSprite-dots" style="display:inline-block;"></div>';
 	dataLink.setAttribute('title', mxResources.get('rename'));
 
@@ -2118,8 +2118,8 @@ var LayersWindow = function(editorUi, x, y, w, h)
 	{
 		if (graph.isEnabled() && layer != null)
 		{
-			var label = graph.convertValueToString(layer);
-			var dlg = new FilenameDialog(editorUi, label || mxResources.get('background'), mxResources.get('rename'), mxUtils.bind(this, function(newValue)
+			let label = graph.convertValueToString(layer);
+			let dlg = new FilenameDialog(editorUi, label || mxResources.get('background'), mxResources.get('rename'), mxUtils.bind(this, function(newValue)
 			{
 				if (newValue != null)
 				{
@@ -2131,14 +2131,14 @@ var LayersWindow = function(editorUi, x, y, w, h)
 		}
 	};
 	
-	var duplicateLink = link.cloneNode();
+	let duplicateLink = link.cloneNode();
 	duplicateLink.innerHTML = '<div class="geSprite geSprite-duplicate" style="display:inline-block;"></div>';
 	
 	mxEvent.addListener(duplicateLink, 'click', function(evt)
 	{
 		if (graph.isEnabled())
 		{
-			var newCell = null;
+			let newCell = null;
 			graph.model.beginUpdate();
 			try
 			{
@@ -2167,7 +2167,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
 
 	ldiv.appendChild(duplicateLink);
 
-	var addLink = link.cloneNode();
+	let addLink = link.cloneNode();
 	addLink.innerHTML = '<div class="geSprite geSprite-plus" style="display:inline-block;"></div>';
 	addLink.setAttribute('title', mxResources.get('addLayer'));
 	
@@ -2179,7 +2179,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
 			
 			try
 			{
-				var cell = graph.addCell(new mxCell(mxResources.get('untitledLayer')), graph.model.root);
+				let cell = graph.addCell(new mxCell(mxResources.get('untitledLayer')), graph.model.root);
 				graph.setDefaultParent(cell);
 			}
 			finally
@@ -2206,7 +2206,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
 
 		function addLayer(index, label, child, defaultParent)
 		{
-			var ldiv = document.createElement('div');
+			let ldiv = document.createElement('div');
 			ldiv.className = 'geToolbarContainer';
 
 			ldiv.style.overflow = 'hidden';
@@ -2221,7 +2221,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
 			ldiv.style.whiteSpace = 'nowrap';
 			ldiv.setAttribute('title', label);
 			
-			var left = document.createElement('div');
+			let left = document.createElement('div');
 			left.style.display = 'inline-block';
 			left.style.width = '100%';
 			left.style.textOverflow = 'ellipsis';
@@ -2260,14 +2260,14 @@ var LayersWindow = function(editorUi, x, y, w, h)
 				evt.preventDefault();
 			});
 
-			var btn = document.createElement('img');
+			let btn = document.createElement('img');
 			btn.setAttribute('draggable', 'false');
 			btn.setAttribute('align', 'top');
 			btn.setAttribute('border', '0');
 			btn.style.padding = '4px';
 			btn.setAttribute('title', mxResources.get('lockUnlock'));
 
-			var style = graph.getCurrentCellStyle(child);
+			let style = graph.getCurrentCellStyle(child);
 
 			if (mxUtils.getValue(style, 'locked', '0') == '1')
 			{
@@ -2287,7 +2287,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
 			{
 				if (graph.isEnabled())
 				{
-					var value = null;
+					let value = null;
 					
 					graph.getModel().beginUpdate();
 					try
@@ -2311,7 +2311,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
 
 			left.appendChild(btn);
 
-			var inp = document.createElement('input');
+			let inp = document.createElement('input');
 			inp.setAttribute('type', 'checkbox');
 			inp.setAttribute('title', mxResources.get('hideIt', [child.value || mxResources.get('background')]));
 			inp.style.marginLeft = '4px';
@@ -2339,7 +2339,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
 				// Fallback if no drag and drop is available
 				if (mxClient.IS_TOUCH || mxClient.IS_POINTER)
 				{
-					var right = document.createElement('div');
+					let right = document.createElement('div');
 					right.style.display = 'block';
 					right.style.textAlign = 'right';
 					right.style.whiteSpace = 'nowrap';
@@ -2414,7 +2414,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
 
 			mxEvent.addListener(ldiv, 'dblclick', function(evt)
 			{
-				var nodeName = mxEvent.getSource(evt).nodeName;
+				let nodeName = mxEvent.getSource(evt).nodeName;
 				
 				if (nodeName != 'INPUT' && nodeName != 'IMG')
 				{
@@ -2445,7 +2445,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
 		};
 		
 		// Cannot be moved or deleted
-		for (var i = layerCount - 1; i >= 0; i--)
+		for (let i = layerCount - 1; i >= 0; i--)
 		{
 			(mxUtils.bind(this, function(child)
 			{
@@ -2454,7 +2454,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
 			}))(graph.model.getChildAt(graph.model.root, i));
 		}
 		
-		var label = graph.convertValueToString(selectionLayer) || mxResources.get('background');
+		let label = graph.convertValueToString(selectionLayer) || mxResources.get('background');
 		removeLink.setAttribute('title', mxResources.get('removeIt', [label]));
 		duplicateLink.setAttribute('title', mxResources.get('duplicateIt', [label]));
 		dataLink.setAttribute('title', mxResources.get('editData'));
@@ -2504,8 +2504,8 @@ var LayersWindow = function(editorUi, x, y, w, h)
 	
 	this.window.setLocation = function(x, y)
 	{
-		var iw = window.innerWidth || document.body.clientWidth || document.documentElement.clientWidth;
-		var ih = window.innerHeight || document.body.clientHeight || document.documentElement.clientHeight;
+		let iw = window.innerWidth || document.body.clientWidth || document.documentElement.clientWidth;
+		let ih = window.innerHeight || document.body.clientHeight || document.documentElement.clientHeight;
 		
 		x = Math.max(0, Math.min(x, iw - this.table.clientWidth));
 		y = Math.max(0, Math.min(y, ih - this.table.clientHeight - 48));
@@ -2516,10 +2516,10 @@ var LayersWindow = function(editorUi, x, y, w, h)
 		}
 	};
 	
-	var resizeListener = mxUtils.bind(this, function()
+	let resizeListener = mxUtils.bind(this, function()
 	{
-		var x = this.window.getX();
-		var y = this.window.getY();
+		let x = this.window.getX();
+		let y = this.window.getY();
 		
 		this.window.setLocation(x, y);
 	});
diff --git a/src/examples/grapheditor/www/js/Editor.js b/src/examples/grapheditor/www/js/Editor.js
index 9ab78853d..0fdc52ddd 100644
--- a/src/examples/grapheditor/www/js/Editor.js
+++ b/src/examples/grapheditor/www/js/Editor.js
@@ -40,7 +40,7 @@ Editor = function(chromeless, themes, model, graph, editable)
 	// Updates modified state if graph changes
 	this.graphChangeListener = function(sender, eventObject) 
 	{
-		var edit = (eventObject != null) ? eventObject.getProperty('edit') : null;
+		let edit = (eventObject != null) ? eventObject.getProperty('edit') : null;
 				
 		if (edit == null || !edit.ignoreEdit)
 		{
@@ -69,7 +69,7 @@ Editor.pageCounter = 0;
 {
 	try
 	{
-		var op = window;
+		let op = window;
 
 		while (op.opener != null && typeof op.opener.Editor !== 'undefined' &&
 			!isNaN(op.opener.Editor.pageCounter) &&	
@@ -359,7 +359,7 @@ Editor.prototype.getEditBlankUrl = function(params)
  */
 Editor.prototype.editAsNew = function(xml, title)
 {
-	var p = (title != null) ? '?title=' + encodeURIComponent(title) : '';
+	let p = (title != null) ? '?title=' + encodeURIComponent(title) : '';
 	
 	if (urlParams['ui'] != null)
 	{
@@ -368,9 +368,9 @@ Editor.prototype.editAsNew = function(xml, title)
 	
 	if (typeof window.postMessage !== 'undefined' )
 	{
-		var wnd = null;
+		let wnd = null;
 		
-		var l = mxUtils.bind(this, function(evt)
+		let l = mxUtils.bind(this, function(evt)
 		{
 			if (evt.data == 'ready' && evt.source == wnd)
 			{
@@ -391,7 +391,7 @@ Editor.prototype.editAsNew = function(xml, title)
  */
 Editor.prototype.createGraph = function(themes, model)
 {
-	var graph = new Graph(null, model, null, null, themes);
+	let graph = new Graph(null, model, null, null, themes);
 	graph.transparentBackground = false;
 	
 	// Opens all links in a new window while editing
@@ -449,7 +449,7 @@ Editor.prototype.readGraphState = function(node)
 		this.graph.cellRenderer.forceControlClickHandler = this.graph.foldingEnabled;
 	}
 	
-	var ps = parseFloat(node.getAttribute('pageScale'));
+	let ps = parseFloat(node.getAttribute('pageScale'));
 	
 	if (!isNaN(ps) && ps > 0)
 	{
@@ -462,7 +462,7 @@ Editor.prototype.readGraphState = function(node)
 
 	if (!this.graph.isLightboxView() && !this.graph.isViewer())
 	{
-		var pv = node.getAttribute('page');
+		let pv = node.getAttribute('page');
 	
 		if (pv != null)
 		{
@@ -481,8 +481,8 @@ Editor.prototype.readGraphState = function(node)
 	this.graph.pageBreaksVisible = this.graph.pageVisible; 
 	this.graph.preferPageSize = this.graph.pageBreaksVisible;
 	
-	var pw = parseFloat(node.getAttribute('pageWidth'));
-	var ph = parseFloat(node.getAttribute('pageHeight'));
+	let pw = parseFloat(node.getAttribute('pageWidth'));
+	let ph = parseFloat(node.getAttribute('pageHeight'));
 	
 	if (!isNaN(pw) && !isNaN(ph))
 	{
@@ -490,7 +490,7 @@ Editor.prototype.readGraphState = function(node)
 	}
 
 	// Loads the persistent state settings
-	var bg = node.getAttribute('background');
+	let bg = node.getAttribute('background');
 	
 	if (bg != null && bg.length > 0)
 	{
@@ -509,7 +509,7 @@ Editor.prototype.setGraphXml = function(node)
 {
 	if (node != null)
 	{
-		var dec = new mxCodec(node.ownerDocument);
+		let dec = new mxCodec(node.ownerDocument);
 	
 		if (node.nodeName == 'mxGraphModel')
 		{
@@ -535,7 +535,7 @@ Editor.prototype.setGraphXml = function(node)
 			this.resetGraph();
 			
 			// Workaround for invalid XML output in Firefox 20 due to bug in mxUtils.getXml
-			var wrapper = dec.document.createElement('mxGraphModel');
+			let wrapper = dec.document.createElement('mxGraphModel');
 			wrapper.appendChild(node);
 			
 			dec.decode(wrapper, this.graph.getModel());
@@ -565,11 +565,11 @@ Editor.prototype.setGraphXml = function(node)
 Editor.prototype.getGraphXml = function(ignoreSelection)
 {
 	ignoreSelection = (ignoreSelection != null) ? ignoreSelection : true;
-	var node = null;
+	let node = null;
 	
 	if (ignoreSelection)
 	{
-		var enc = new mxCodec(mxUtils.createXmlDocument());
+		let enc = new mxCodec(mxUtils.createXmlDocument());
 		node = enc.encode(this.graph.getModel());
 	}
 	else
@@ -609,7 +609,7 @@ Editor.prototype.getGraphXml = function(ignoreSelection)
  */
 Editor.prototype.updateGraphComponents = function()
 {
-	var graph = this.graph;
+	let graph = this.graph;
 	
 	if (graph.container != null)
 	{
@@ -641,8 +641,8 @@ Editor.prototype.setFilename = function(value)
  */
 Editor.prototype.createUndoManager = function()
 {
-	var graph = this.graph;
-	var undoMgr = new mxUndoManager();
+	let graph = this.graph;
+	let undoMgr = new mxUndoManager();
 
 	this.undoListener = function(sender, evt)
 	{
@@ -650,7 +650,7 @@ Editor.prototype.createUndoManager = function()
 	};
 	
     // Installs the command history
-	var listener = mxUtils.bind(this, function(sender, evt)
+	let listener = mxUtils.bind(this, function(sender, evt)
 	{
 		this.undoListener.apply(this, arguments);
 	});
@@ -659,9 +659,9 @@ Editor.prototype.createUndoManager = function()
 	graph.getView().addListener(mxEvent.UNDO, listener);
 
 	// Keeps the selection in sync with the history
-	var undoHandler = function(sender, evt)
+	let undoHandler = function(sender, evt)
 	{
-		var cand = graph.getSelectionCellsForChanges(evt.getProperty('edit').changes, function(change)
+		let cand = graph.getSelectionCellsForChanges(evt.getProperty('edit').changes, function(change)
 		{
 			// Only selects changes to the cell hierarchy
 			return !(change instanceof mxChildChange);
@@ -669,10 +669,10 @@ Editor.prototype.createUndoManager = function()
 		
 		if (cand.length > 0)
 		{
-			var model = graph.getModel();
-			var cells = [];
+			let model = graph.getModel();
+			let cells = [];
 			
-			for (var i = 0; i < cand.length; i++)
+			for (let i = 0; i < cand.length; i++)
 			{
 				if (graph.view.getState(cand[i]) != null)
 				{
@@ -774,7 +774,7 @@ OpenFile.prototype.cancel = function(cancel)
  */
 function Dialog(editorUi, elt, w, h, modal, closable, onClose, noScroll, transparent, onResize, ignoreBgClick)
 {
-	var dx = 0;
+	let dx = 0;
 	
 	w += dx;
 	h += dx;
@@ -782,7 +782,7 @@ function Dialog(editorUi, elt, w, h, modal, closable, onClose, noScroll, transpa
 	var w0 = w;
 	var h0 = h;
 	
-	var ds = mxUtils.getDocumentSize();
+	let ds = mxUtils.getDocumentSize();
 	
 	// Workaround for print dialog offset in viewer lightbox
 	if (window.innerHeight != null)
@@ -790,9 +790,9 @@ function Dialog(editorUi, elt, w, h, modal, closable, onClose, noScroll, transpa
 		ds.height = window.innerHeight;
 	}
 	
-	var dh = ds.height;
-	var left = Math.max(1, Math.round((ds.width - w - 64) / 2));
-	var top = Math.max(1, Math.round((dh - h - editorUi.footerHeight) / 3));
+	let dh = ds.height;
+	let left = Math.max(1, Math.round((ds.width - w - 64) / 2));
+	let top = Math.max(1, Math.round((dh - h - editorUi.footerHeight) / 3));
 	elt.style.maxHeight = '100%';
 
 	w = (document.body != null) ? Math.min(w, document.body.scrollWidth - 64) : w;
@@ -816,7 +816,7 @@ function Dialog(editorUi, elt, w, h, modal, closable, onClose, noScroll, transpa
 		mxUtils.setOpacity(this.bg, this.bgOpacity);
 	}
 	
-	var origin = mxUtils.getDocumentScrollOrigin(document);
+	let origin = mxUtils.getDocumentScrollOrigin(document);
 	this.bg.style.left = origin.x + 'px';
 	this.bg.style.top = origin.y + 'px';
 	left += origin.x;
@@ -827,8 +827,8 @@ function Dialog(editorUi, elt, w, h, modal, closable, onClose, noScroll, transpa
 		document.body.appendChild(this.bg);
 	}
 	
-	var div = editorUi.createDiv(transparent? 'geTransDialog' : 'geDialog');
-	var pos = this.getPosition(left, top, w, h);
+	let div = editorUi.createDiv(transparent? 'geTransDialog' : 'geDialog');
+	let pos = this.getPosition(left, top, w, h);
 	left = pos.x;
 	top = pos.y;
 	
@@ -849,7 +849,7 @@ function Dialog(editorUi, elt, w, h, modal, closable, onClose, noScroll, transpa
 	
 	if (closable)
 	{
-		var img = document.createElement('img');
+		let img = document.createElement('img');
 
 		img.setAttribute('src', Dialog.prototype.closeImage);
 		img.setAttribute('title', mxResources.get('close'));
@@ -868,7 +868,7 @@ function Dialog(editorUi, elt, w, h, modal, closable, onClose, noScroll, transpa
 		
 		if (!ignoreBgClick)
 		{
-			var mouseDownSeen = false;
+			let mouseDownSeen = false;
 			
 			mxEvent.addGestureListeners(this.bg, mxUtils.bind(this, function(evt)
 			{
@@ -888,7 +888,7 @@ function Dialog(editorUi, elt, w, h, modal, closable, onClose, noScroll, transpa
 	{
 		if (onResize != null)
 		{
-			var newWH = onResize();
+			let newWH = onResize();
 			
 			if (newWH != null)
 			{
@@ -897,7 +897,7 @@ function Dialog(editorUi, elt, w, h, modal, closable, onClose, noScroll, transpa
 			}
 		}
 		
-		var ds = mxUtils.getDocumentSize();
+		let ds = mxUtils.getDocumentSize();
 		dh = ds.height;
 		this.bg.style.height = dh + 'px';
 		
@@ -906,7 +906,7 @@ function Dialog(editorUi, elt, w, h, modal, closable, onClose, noScroll, transpa
 		w = (document.body != null) ? Math.min(w0, document.body.scrollWidth - 64) : w0;
 		h = Math.min(h0, dh - 64);
 		
-		var pos = this.getPosition(left, top, w, h);
+		let pos = this.getPosition(left, top, w, h);
 		left = pos.x;
 		top = pos.y;
 		
@@ -1017,16 +1017,16 @@ Dialog.prototype.close = function(cancel, isEsc)
 /**
  * 
  */
-var ErrorDialog = function(editorUi, title, message, buttonText, fn, retry, buttonText2, fn2, hide, buttonText3, fn3)
+let ErrorDialog = function(editorUi, title, message, buttonText, fn, retry, buttonText2, fn2, hide, buttonText3, fn3)
 {
 	hide = (hide != null) ? hide : true;
 	
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	div.style.textAlign = 'center';
 
 	if (title != null)
 	{
-		var hd = document.createElement('div');
+		let hd = document.createElement('div');
 		hd.style.padding = '0px';
 		hd.style.margin = '0px';
 		hd.style.fontSize = '18px';
@@ -1048,13 +1048,13 @@ var ErrorDialog = function(editorUi, title, message, buttonText, fn, retry, butt
 	p2.innerHTML = message;
 	div.appendChild(p2);
 	
-	var btns = document.createElement('div');
+	let btns = document.createElement('div');
 	btns.style.marginTop = '12px';
 	btns.style.textAlign = 'center';
 	
 	if (retry != null)
 	{
-		var retryBtn = mxUtils.button(mxResources.get('tryAgain'), function()
+		let retryBtn = mxUtils.button(mxResources.get('tryAgain'), function()
 		{
 			editorUi.hideDialog();
 			retry();
@@ -1079,7 +1079,7 @@ var ErrorDialog = function(editorUi, title, message, buttonText, fn, retry, butt
 		btns.appendChild(btn3);
 	}
 	
-	var btn = mxUtils.button(buttonText, function()
+	let btn = mxUtils.button(buttonText, function()
 	{
 		if (hide)
 		{
@@ -1097,7 +1097,7 @@ var ErrorDialog = function(editorUi, title, message, buttonText, fn, retry, butt
 
 	if (buttonText2 != null)
 	{
-		var mainBtn = mxUtils.button(buttonText2, function()
+		let mainBtn = mxUtils.button(buttonText2, function()
 		{
 			if (hide)
 			{
@@ -1127,7 +1127,7 @@ var ErrorDialog = function(editorUi, title, message, buttonText, fn, retry, butt
 /**
  * Constructs a new print dialog.
  */
-var PrintDialog = function(editorUi, title)
+let PrintDialog = function(editorUi, title)
 {
 	this.create(editorUi, title);
 };
@@ -1137,24 +1137,24 @@ var PrintDialog = function(editorUi, title)
  */
 PrintDialog.prototype.create = function(editorUi)
 {
-	var graph = editorUi.editor.graph;
+	let graph = editorUi.editor.graph;
 	var row, td;
 	
-	var table = document.createElement('table');
+	let table = document.createElement('table');
 	table.style.width = '100%';
 	table.style.height = '100%';
-	var tbody = document.createElement('tbody');
+	let tbody = document.createElement('tbody');
 	
 	row = document.createElement('tr');
 	
-	var onePageCheckBox = document.createElement('input');
+	let onePageCheckBox = document.createElement('input');
 	onePageCheckBox.setAttribute('type', 'checkbox');
 	td = document.createElement('td');
 	td.setAttribute('colspan', '2');
 	td.style.fontSize = '10pt';
 	td.appendChild(onePageCheckBox);
 	
-	var span = document.createElement('span');
+	let span = document.createElement('span');
 	mxUtils.write(span, ' ' + mxResources.get('fitPage'));
 	td.appendChild(span);
 	
@@ -1175,13 +1175,13 @@ PrintDialog.prototype.create = function(editorUi)
 
 	row = row.cloneNode(false);
 	
-	var pageCountCheckBox = document.createElement('input');
+	let pageCountCheckBox = document.createElement('input');
 	pageCountCheckBox.setAttribute('type', 'checkbox');
 	td = document.createElement('td');
 	td.style.fontSize = '10pt';
 	td.appendChild(pageCountCheckBox);
 	
-	var span = document.createElement('span');
+	let span = document.createElement('span');
 	mxUtils.write(span, ' ' + mxResources.get('posterPrint') + ':');
 	td.appendChild(span);
 	
@@ -1194,7 +1194,7 @@ PrintDialog.prototype.create = function(editorUi)
 	
 	row.appendChild(td);
 	
-	var pageCountInput = document.createElement('input');
+	let pageCountInput = document.createElement('input');
 	pageCountInput.setAttribute('value', '1');
 	pageCountInput.setAttribute('type', 'number');
 	pageCountInput.setAttribute('min', '1');
@@ -1230,7 +1230,7 @@ PrintDialog.prototype.create = function(editorUi)
 	row.appendChild(td);
 	
 	td = document.createElement('td');
-	var pageScaleInput = document.createElement('input');
+	let pageScaleInput = document.createElement('input');
 	pageScaleInput.setAttribute('value', '100 %');
 	pageScaleInput.setAttribute('size', '5');
 	pageScaleInput.style.width = '50px';
@@ -1248,8 +1248,8 @@ PrintDialog.prototype.create = function(editorUi)
 	// Overall scale for print-out to account for print borders in dialogs etc
 	function preview(print)
 	{
-		var autoOrigin = onePageCheckBox.checked || pageCountCheckBox.checked;
-		var printScale = parseInt(pageScaleInput.value) / 100;
+		let autoOrigin = onePageCheckBox.checked || pageCountCheckBox.checked;
+		let printScale = parseInt(pageScaleInput.value) / 100;
 		
 		if (isNaN(printScale))
 		{
@@ -1260,12 +1260,12 @@ PrintDialog.prototype.create = function(editorUi)
 		// Workaround to match available paper size in actual print output
 		printScale *= 0.75;
 
-		var pf = graph.pageFormat || mxConstants.PAGE_FORMAT_A4_PORTRAIT;
-		var scale = 1 / graph.pageScale;
+		let pf = graph.pageFormat || mxConstants.PAGE_FORMAT_A4_PORTRAIT;
+		let scale = 1 / graph.pageScale;
 		
 		if (autoOrigin)
 		{
-    		var pageCount = (onePageCheckBox.checked) ? 1 : parseInt(pageCountInput.value);
+    		let pageCount = (onePageCheckBox.checked) ? 1 : parseInt(pageCountInput.value);
 			
 			if (!isNaN(pageCount))
 			{
@@ -1274,8 +1274,8 @@ PrintDialog.prototype.create = function(editorUi)
 		}
 
 		// Negative coordinates are cropped or shifted if page visible
-		var gb = graph.getGraphBounds();
-		var border = 0;
+		let gb = graph.getGraphBounds();
+		let border = 0;
 		var x0 = 0;
 		var y0 = 0;
 
@@ -1288,7 +1288,7 @@ PrintDialog.prototype.create = function(editorUi)
 		// Starts at first visible page
 		if (!autoOrigin && graph.pageVisible)
 		{
-			var layout = graph.getPageLayout();
+			let layout = graph.getPageLayout();
 			x0 -= layout.x * pf.width;
 			y0 -= layout.y * pf.height;
 		}
@@ -1297,7 +1297,7 @@ PrintDialog.prototype.create = function(editorUi)
 			autoOrigin = true;
 		}
 		
-		var preview = PrintDialog.createPrintPreview(graph, scale, pf, border, x0, y0, autoOrigin);
+		let preview = PrintDialog.createPrintPreview(graph, scale, pf, border, x0, y0, autoOrigin);
 		preview.open();
 	
 		if (print)
@@ -1306,7 +1306,7 @@ PrintDialog.prototype.create = function(editorUi)
 		}
 	};
 	
-	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
+	let cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
 	{
 		editorUi.hideDialog();
 	});
@@ -1319,7 +1319,7 @@ PrintDialog.prototype.create = function(editorUi)
 
 	if (PrintDialog.previewEnabled)
 	{
-		var previewBtn = mxUtils.button(mxResources.get('preview'), function()
+		let previewBtn = mxUtils.button(mxResources.get('preview'), function()
 		{
 			editorUi.hideDialog();
 			preview(false);
@@ -1328,7 +1328,7 @@ PrintDialog.prototype.create = function(editorUi)
 		td.appendChild(previewBtn);
 	}
 	
-	var printBtn = mxUtils.button(mxResources.get((!PrintDialog.previewEnabled) ? 'ok' : 'print'), function()
+	let printBtn = mxUtils.button(mxResources.get((!PrintDialog.previewEnabled) ? 'ok' : 'print'), function()
 	{
 		editorUi.hideDialog();
 		preview(true);
@@ -1357,7 +1357,7 @@ PrintDialog.printPreview = function(preview)
 	{
 		if (preview.wnd != null)
 		{
-			var printFn = function()
+			let printFn = function()
 			{
 				preview.wnd.focus();
 				preview.wnd.print();
@@ -1388,11 +1388,11 @@ PrintDialog.printPreview = function(preview)
  */
 PrintDialog.createPrintPreview = function(graph, scale, pf, border, x0, y0, autoOrigin)
 {
-	var preview = new mxPrintPreview(graph, scale, pf, border, x0, y0);
+	let preview = new mxPrintPreview(graph, scale, pf, border, x0, y0);
 	preview.title = mxResources.get('preview');
 	preview.printBackgroundImage = true;
 	preview.autoOrigin = autoOrigin;
-	var bg = graph.background;
+	let bg = graph.background;
 	
 	if (bg == null || bg == '' || bg == mxConstants.NONE)
 	{
@@ -1401,7 +1401,7 @@ PrintDialog.createPrintPreview = function(graph, scale, pf, border, x0, y0, auto
 	
 	preview.backgroundColor = bg;
 	
-	var writeHead = preview.writeHead;
+	let writeHead = preview.writeHead;
 	
 	// Adds a border in the preview
 	preview.writeHead = function(doc)
@@ -1426,15 +1426,15 @@ PrintDialog.previewEnabled = true;
 /**
  * Constructs a new page setup dialog.
  */
-var PageSetupDialog = function(editorUi)
+let PageSetupDialog = function(editorUi)
 {
-	var graph = editorUi.editor.graph;
+	let graph = editorUi.editor.graph;
 	var row, td;
 
-	var table = document.createElement('table');
+	let table = document.createElement('table');
 	table.style.width = '100%';
 	table.style.height = '100%';
-	var tbody = document.createElement('tbody');
+	let tbody = document.createElement('tbody');
 	
 	row = document.createElement('tr');
 	
@@ -1449,7 +1449,7 @@ var PageSetupDialog = function(editorUi)
 	td.style.verticalAlign = 'top';
 	td.style.fontSize = '10pt';
 	
-	var accessor = PageSetupDialog.addPageFormatPanel(td, 'pagesetupdialog', graph.pageFormat);
+	let accessor = PageSetupDialog.addPageFormatPanel(td, 'pagesetupdialog', graph.pageFormat);
 
 	row.appendChild(td);
 	tbody.appendChild(row);
@@ -1464,9 +1464,9 @@ var PageSetupDialog = function(editorUi)
 	td = document.createElement('td');
 	td.style.whiteSpace = 'nowrap';
 	
-	var backgroundInput = document.createElement('input');
+	let backgroundInput = document.createElement('input');
 	backgroundInput.setAttribute('type', 'text');
-	var backgroundButton = document.createElement('button');
+	let backgroundButton = document.createElement('button');
 	
 	backgroundButton.style.width = '18px';
 	backgroundButton.style.height = '18px';
@@ -1474,7 +1474,7 @@ var PageSetupDialog = function(editorUi)
 	backgroundButton.style.backgroundPosition = 'center center';
 	backgroundButton.style.backgroundRepeat = 'no-repeat';
 	
-	var newBackgroundColor = graph.background;
+	let newBackgroundColor = graph.background;
 	
 	function updateBackgroundColor()
 	{
@@ -1506,7 +1506,7 @@ var PageSetupDialog = function(editorUi)
 	
 	mxUtils.write(td, mxResources.get('gridSize') + ':');
 	
-	var gridSizeInput = document.createElement('input');
+	let gridSizeInput = document.createElement('input');
 	gridSizeInput.setAttribute('type', 'number');
 	gridSizeInput.setAttribute('min', '0');
 	gridSizeInput.style.width = '40px';
@@ -1517,7 +1517,7 @@ var PageSetupDialog = function(editorUi)
 	
 	mxEvent.addListener(gridSizeInput, 'change', function()
 	{
-		var value = parseInt(gridSizeInput.value);
+		let value = parseInt(gridSizeInput.value);
 		gridSizeInput.value = Math.max(1, (isNaN(value)) ? graph.getGridSize() : value);
 	});
 	
@@ -1532,12 +1532,12 @@ var PageSetupDialog = function(editorUi)
 	row.appendChild(td);
 	td = document.createElement('td');
 	
-	var changeImageLink = document.createElement('a');
+	let changeImageLink = document.createElement('a');
 	changeImageLink.style.textDecoration = 'underline';
 	changeImageLink.style.cursor = 'pointer';
 	changeImageLink.style.color = '#a0a0a0';
 	
-	var newBackgroundImage = graph.backgroundImage;
+	let newBackgroundImage = graph.backgroundImage;
 	
 	function updateBackgroundImage()
 	{
@@ -1582,7 +1582,7 @@ var PageSetupDialog = function(editorUi)
 	td.style.paddingTop = '16px';
 	td.setAttribute('align', 'right');
 
-	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
+	let cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
 	{
 		editorUi.hideDialog();
 	});
@@ -1593,22 +1593,22 @@ var PageSetupDialog = function(editorUi)
 		td.appendChild(cancelBtn);
 	}
 	
-	var applyBtn = mxUtils.button(mxResources.get('apply'), function()
+	let applyBtn = mxUtils.button(mxResources.get('apply'), function()
 	{
 		editorUi.hideDialog();
-		var gridSize = parseInt(gridSizeInput.value);
+		let gridSize = parseInt(gridSizeInput.value);
 		
 		if (!isNaN(gridSize) && graph.gridSize !== gridSize)
 		{
 			graph.setGridSize(gridSize);
 		}
 
-		var change = new ChangePageSetup(editorUi, newBackgroundColor,
+		let change = new ChangePageSetup(editorUi, newBackgroundColor,
 			newBackgroundImage, accessor.get());
 		change.ignoreColor = graph.background == newBackgroundColor;
 		
-		var oldSrc = (graph.backgroundImage != null) ? graph.backgroundImage.src : null;
-		var newSrc = (newBackgroundImage != null) ? newBackgroundImage.src : null;
+		let oldSrc = (graph.backgroundImage != null) ? graph.backgroundImage.src : null;
+		let newSrc = (newBackgroundImage != null) ? newBackgroundImage.src : null;
 		
 		change.ignoreImage = oldSrc === newSrc;
 
@@ -1639,23 +1639,23 @@ var PageSetupDialog = function(editorUi)
  */
 PageSetupDialog.addPageFormatPanel = function(div, namePostfix, pageFormat, pageFormatListener)
 {
-	var formatName = 'format-' + namePostfix;
+	let formatName = 'format-' + namePostfix;
 	
-	var portraitCheckBox = document.createElement('input');
+	let portraitCheckBox = document.createElement('input');
 	portraitCheckBox.setAttribute('name', formatName);
 	portraitCheckBox.setAttribute('type', 'radio');
 	portraitCheckBox.setAttribute('value', 'portrait');
 	
-	var landscapeCheckBox = document.createElement('input');
+	let landscapeCheckBox = document.createElement('input');
 	landscapeCheckBox.setAttribute('name', formatName);
 	landscapeCheckBox.setAttribute('type', 'radio');
 	landscapeCheckBox.setAttribute('value', 'landscape');
 	
-	var paperSizeSelect = document.createElement('select');
+	let paperSizeSelect = document.createElement('select');
 	paperSizeSelect.style.marginBottom = '8px';
 	paperSizeSelect.style.width = '202px';
 
-	var formatDiv = document.createElement('div');
+	let formatDiv = document.createElement('div');
 	formatDiv.style.marginLeft = '4px';
 	formatDiv.style.width = '210px';
 	formatDiv.style.height = '24px';
@@ -1663,7 +1663,7 @@ PageSetupDialog.addPageFormatPanel = function(div, namePostfix, pageFormat, page
 	portraitCheckBox.style.marginRight = '6px';
 	formatDiv.appendChild(portraitCheckBox);
 	
-	var portraitSpan = document.createElement('span');
+	let portraitSpan = document.createElement('span');
 	portraitSpan.style.maxWidth = '100px';
 	mxUtils.write(portraitSpan, mxResources.get('portrait'));
 	formatDiv.appendChild(portraitSpan);
@@ -1672,23 +1672,23 @@ PageSetupDialog.addPageFormatPanel = function(div, namePostfix, pageFormat, page
 	landscapeCheckBox.style.marginRight = '6px';
 	formatDiv.appendChild(landscapeCheckBox);
 	
-	var landscapeSpan = document.createElement('span');
+	let landscapeSpan = document.createElement('span');
 	landscapeSpan.style.width = '100px';
 	mxUtils.write(landscapeSpan, mxResources.get('landscape'));
 	formatDiv.appendChild(landscapeSpan)
 
-	var customDiv = document.createElement('div');
+	let customDiv = document.createElement('div');
 	customDiv.style.marginLeft = '4px';
 	customDiv.style.width = '210px';
 	customDiv.style.height = '24px';
 	
-	var widthInput = document.createElement('input');
+	let widthInput = document.createElement('input');
 	widthInput.setAttribute('size', '7');
 	widthInput.style.textAlign = 'right';
 	customDiv.appendChild(widthInput);
 	mxUtils.write(customDiv, ' in x ');
 	
-	var heightInput = document.createElement('input');
+	let heightInput = document.createElement('input');
 	heightInput.setAttribute('size', '7');
 	heightInput.style.textAlign = 'right';
 	customDiv.appendChild(heightInput);
@@ -1697,31 +1697,31 @@ PageSetupDialog.addPageFormatPanel = function(div, namePostfix, pageFormat, page
 	formatDiv.style.display = 'none';
 	customDiv.style.display = 'none';
 	
-	var pf = {};
-	var formats = PageSetupDialog.getFormats();
+	let pf = {};
+	let formats = PageSetupDialog.getFormats();
 	
-	for (var i = 0; i < formats.length; i++)
+	for (let i = 0; i < formats.length; i++)
 	{
-		var f = formats[i];
+		let f = formats[i];
 		pf[f.key] = f;
 
-		var paperSizeOption = document.createElement('option');
+		let paperSizeOption = document.createElement('option');
 		paperSizeOption.setAttribute('value', f.key);
 		mxUtils.write(paperSizeOption, f.title);
 		paperSizeSelect.appendChild(paperSizeOption);
 	}
 	
-	var customSize = false;
+	let customSize = false;
 	
 	function listener(sender, evt, force)
 	{
 		if (force || (widthInput != document.activeElement && heightInput != document.activeElement))
 		{
-			var detected = false;
+			let detected = false;
 			
-			for (var i = 0; i < formats.length; i++)
+			for (let i = 0; i < formats.length; i++)
 			{
-				var f = formats[i];
+				let f = formats[i];
 	
 				// Special case where custom was chosen
 				if (customSize)
@@ -1813,11 +1813,11 @@ PageSetupDialog.addPageFormatPanel = function(div, namePostfix, pageFormat, page
 	div.appendChild(formatDiv);
 	div.appendChild(customDiv);
 	
-	var currentPageFormat = pageFormat;
+	let currentPageFormat = pageFormat;
 	
-	var update = function(evt, selectChanged)
+	let update = function(evt, selectChanged)
 	{
-		var f = pf[paperSizeSelect.value];
+		let f = pf[paperSizeSelect.value];
 		
 		if (f.format != null)
 		{
@@ -1832,21 +1832,21 @@ PageSetupDialog.addPageFormatPanel = function(div, namePostfix, pageFormat, page
 			customDiv.style.display = '';
 		}
 		
-		var wi = parseFloat(widthInput.value);
+		let wi = parseFloat(widthInput.value);
 		
 		if (isNaN(wi) || wi <= 0)
 		{
 			widthInput.value = pageFormat.width / 100;
 		}
 		
-		var hi = parseFloat(heightInput.value);
+		let hi = parseFloat(heightInput.value);
 		
 		if (isNaN(hi) || hi <= 0)
 		{
 			heightInput.value = pageFormat.height / 100;
 		}
 		
-		var newPageFormat = new mxRectangle(0, 0,
+		let newPageFormat = new mxRectangle(0, 0,
 			Math.floor(parseFloat(widthInput.value) * 100),
 			Math.floor(parseFloat(heightInput.value) * 100));
 		
@@ -1937,13 +1937,13 @@ PageSetupDialog.getFormats = function()
 /**
  * Constructs a new filename dialog.
  */
-var FilenameDialog = function(editorUi, filename, buttonText, fn, label, validateFn, content, helpLink, closeOnBtn, cancelFn, hints, w)
+let FilenameDialog = function(editorUi, filename, buttonText, fn, label, validateFn, content, helpLink, closeOnBtn, cancelFn, hints, w)
 {
 	closeOnBtn = (closeOnBtn != null) ? closeOnBtn : true;
 	var row, td;
 	
-	var table = document.createElement('table');
-	var tbody = document.createElement('tbody');
+	let table = document.createElement('table');
+	let tbody = document.createElement('tbody');
 	table.style.marginTop = '8px';
 	
 	row = document.createElement('tr');
@@ -1956,12 +1956,12 @@ var FilenameDialog = function(editorUi, filename, buttonText, fn, label, validat
 	
 	row.appendChild(td);
 	
-	var nameInput = document.createElement('input');
+	let nameInput = document.createElement('input');
 	nameInput.setAttribute('value', filename || '');
 	nameInput.style.marginLeft = '4px';
 	nameInput.style.width = (w != null) ? w + 'px' : '180px';
 	
-	var genericBtn = mxUtils.button(buttonText, function()
+	let genericBtn = mxUtils.button(buttonText, function()
 	{
 		if (validateFn == null || validateFn(nameInput.value))
 		{
@@ -1997,12 +1997,12 @@ var FilenameDialog = function(editorUi, filename, buttonText, fn, label, validat
 		if (Graph.fileSupport)
 		{
 			// Setup the dnd listeners
-			var dlg = table.parentNode;
+			let dlg = table.parentNode;
 			
 			if (dlg != null)
 			{
-				var graph = editorUi.editor.graph;
-				var dropElt = null;
+				let graph = editorUi.editor.graph;
+				let dropElt = null;
 					
 				mxEvent.addListener(dlg, 'dragleave', function(evt)
 				{
@@ -2062,7 +2062,7 @@ var FilenameDialog = function(editorUi, filename, buttonText, fn, label, validat
 		{
 			if (editorUi.editor.diagramFileTypes != null)
 			{
-				var typeSelect = FilenameDialog.createFileTypes(editorUi, nameInput, editorUi.editor.diagramFileTypes);
+				let typeSelect = FilenameDialog.createFileTypes(editorUi, nameInput, editorUi.editor.diagramFileTypes);
 				typeSelect.style.marginLeft = '6px';
 				typeSelect.style.width = '74px';
 				
@@ -2091,7 +2091,7 @@ var FilenameDialog = function(editorUi, filename, buttonText, fn, label, validat
 	td.style.whiteSpace = 'nowrap';
 	td.setAttribute('align', 'right');
 	
-	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
+	let cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
 	{
 		editorUi.hideDialog();
 		
@@ -2109,7 +2109,7 @@ var FilenameDialog = function(editorUi, filename, buttonText, fn, label, validat
 	
 	if (helpLink != null)
 	{
-		var helpBtn = mxUtils.button(mxResources.get('help'), function()
+		let helpBtn = mxUtils.button(mxResources.get('help'), function()
 		{
 			editorUi.editor.graph.openLink(helpLink);
 		});
@@ -2150,16 +2150,16 @@ FilenameDialog.filenameHelpLink = null;
  */
 FilenameDialog.createTypeHint = function(ui, nameInput, hints)
 {
-	var hint = document.createElement('img');
+	let hint = document.createElement('img');
 	hint.style.cssText = 'vertical-align:top;height:16px;width:16px;margin-left:4px;background-repeat:no-repeat;background-position:center bottom;cursor:pointer;';
 	mxUtils.setOpacity(hint, 70);
 	
-	var nameChanged = function()
+	let nameChanged = function()
 	{
 		hint.setAttribute('src', Editor.helpImage);
 		hint.setAttribute('title', mxResources.get('help'));
 		
-		for (var i = 0; i < hints.length; i++)
+		for (let i = 0; i < hints.length; i++)
 		{
 			if (hints[i].ext.length > 0 && nameInput.value.toLowerCase().substring(
 				nameInput.value.length - hints[i].ext.length - 1) == '.' + hints[i].ext)
@@ -2175,7 +2175,7 @@ FilenameDialog.createTypeHint = function(ui, nameInput, hints)
 	mxEvent.addListener(nameInput, 'change', nameChanged);
 	mxEvent.addListener(hint, 'click', function(evt)
 	{
-		var title = hint.getAttribute('title');
+		let title = hint.getAttribute('title');
 		
 		if (hint.getAttribute('src') == Editor.helpImage)
 		{
@@ -2202,11 +2202,11 @@ FilenameDialog.createTypeHint = function(ui, nameInput, hints)
  */
 FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 {
-	var typeSelect = document.createElement('select');
+	let typeSelect = document.createElement('select');
 	
-	for (var i = 0; i < types.length; i++)
+	for (let i = 0; i < types.length; i++)
 	{
-		var typeOption = document.createElement('option');
+		let typeOption = document.createElement('option');
 		typeOption.setAttribute('value', i);
 		mxUtils.write(typeOption, mxResources.get(types[i].description) +
 			' (.' + types[i].extension + ')');
@@ -2215,12 +2215,12 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 			
 	mxEvent.addListener(typeSelect, 'change', function(evt)
 	{
-		var ext = types[typeSelect.value].extension;
-		var idx = nameInput.value.lastIndexOf('.');
+		let ext = types[typeSelect.value].extension;
+		let idx = nameInput.value.lastIndexOf('.');
 		
 		if (idx > 0)
 		{
-			var ext = types[typeSelect.value].extension;
+			let ext = types[typeSelect.value].extension;
 			nameInput.value = nameInput.value.substring(0, idx + 1) + ext;
 		}
 		else
@@ -2230,7 +2230,7 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 		
 		if ('createEvent' in document)
 		{
-		    var changeEvent = document.createEvent('HTMLEvents');
+		    let changeEvent = document.createEvent('HTMLEvents');
 		    changeEvent.initEvent('change', false, true);
 		    nameInput.dispatchEvent(changeEvent);
 		}
@@ -2240,17 +2240,17 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 		}
 	});
 	
-	var nameInputChanged = function(evt)
+	let nameInputChanged = function(evt)
 	{
-		var idx = nameInput.value.lastIndexOf('.');
-		var active = 0;
+		let idx = nameInput.value.lastIndexOf('.');
+		let active = 0;
 		
 		// Finds current extension
 		if (idx > 0)
 		{
-			var ext = nameInput.value.toLowerCase().substring(idx + 1);
+			let ext = nameInput.value.toLowerCase().substring(idx + 1);
 			
-			for (var i = 0; i < types.length; i++)
+			for (let i = 0; i < types.length; i++)
 			{
 				if (ext == types[i].extension)
 				{
@@ -2278,18 +2278,18 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 	// Uses HTML for background pages (to support grid background image)
 	mxGraphView.prototype.validateBackgroundPage = function()
 	{
-		var graph = this.graph;
+		let graph = this.graph;
 		
 		if (graph.container != null && !graph.transparentBackground)
 		{
 			if (graph.pageVisible)
 			{
-				var bounds = this.getBackgroundPageBounds();
+				let bounds = this.getBackgroundPageBounds();
 				
 				if (this.backgroundPageShape == null)
 				{
 					// Finds first element in graph container
-					var firstChild = graph.container.firstChild;
+					let firstChild = graph.container.firstChild;
 					
 					while (firstChild != null && firstChild.nodeType != mxConstants.NODETYPE_ELEMENT)
 					{
@@ -2369,15 +2369,15 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 	// Updates the CSS of the background to draw the grid
 	mxGraphView.prototype.validateBackgroundStyles = function()
 	{
-		var graph = this.graph;
-		var color = (graph.background == null || graph.background == mxConstants.NONE) ? graph.defaultPageBackgroundColor : graph.background;
-		var gridColor = (color != null && this.gridColor != color.toLowerCase()) ? this.gridColor : '#ffffff';
-		var image = 'none';
-		var position = '';
+		let graph = this.graph;
+		let color = (graph.background == null || graph.background == mxConstants.NONE) ? graph.defaultPageBackgroundColor : graph.background;
+		let gridColor = (color != null && this.gridColor != color.toLowerCase()) ? this.gridColor : '#ffffff';
+		let image = 'none';
+		let position = '';
 		
 		if (graph.isGridEnabled())
 		{
-			var phase = 10;
+			let phase = 10;
 			
 			if (mxClient.IS_SVG)
 			{
@@ -2398,7 +2398,7 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 			
 			if (graph.view.backgroundPageShape != null)
 			{
-				var bds = this.getBackgroundPageBounds();
+				let bds = this.getBackgroundPageBounds();
 				
 				x0 = 1 + bds.x;
 				y0 = 1 + bds.y;
@@ -2409,7 +2409,7 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 				-Math.round(phase - mxUtils.mod(this.translate.y * this.scale - y0, phase)) + 'px';
 		}
 		
-		var canvas = graph.view.canvas;
+		let canvas = graph.view.canvas;
 		
 		if (canvas.ownerSVGElement != null)
 		{
@@ -2437,7 +2437,7 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 	// Returns the SVG required for painting the background grid.
 	mxGraphView.prototype.createSvgGrid = function(color)
 	{
-		var tmp = this.graph.gridSize * this.scale;
+		let tmp = this.graph.gridSize * this.scale;
 		
 		while (tmp < this.minGridSize)
 		{
@@ -2447,9 +2447,9 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 		var tmp2 = this.gridSteps * tmp;
 		
 		// Small grid lines
-		var d = [];
+		let d = [];
 		
-		for (var i = 1; i < this.gridSteps; i++)
+		for (let i = 1; i < this.gridSteps; i++)
 		{
 			var tmp3 = i * tmp;
 			d.push('M 0 ' + tmp3 + ' L ' + tmp2 + ' ' + tmp3 + ' M ' + tmp3 + ' 0 L ' + tmp3 + ' ' + tmp2);
@@ -2457,8 +2457,8 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 		
 		// KNOWN: Rounding errors for certain scales (eg. 144%, 121% in Chrome, FF and Safari). Workaround
 		// in Chrome is to use 100% for the svg size, but this results in blurred grid for large diagrams.
-		var size = tmp2;
-		var svg =  '<svg width="' + size + '" height="' + size + '" xmlns="' + mxConstants.NS_SVG + '">' +
+		let size = tmp2;
+		let svg =  '<svg width="' + size + '" height="' + size + '" xmlns="' + mxConstants.NS_SVG + '">' +
 		    '<defs><pattern id="grid" width="' + tmp2 + '" height="' + tmp2 + '" patternUnits="userSpaceOnUse">' +
 		    '<path d="' + d.join(' ') + '" fill="none" stroke="' + color + '" opacity="0.2" stroke-width="1"/>' +
 		    '<path d="M ' + tmp2 + ' 0 L 0 0 0 ' + tmp2 + '" fill="none" stroke="' + color + '" stroke-width="1"/>' +
@@ -2468,22 +2468,22 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 	};
 
 	// Adds panning for the grid with no page view and disabled scrollbars
-	var mxGraphPanGraph = mxGraph.prototype.panGraph;
+	let mxGraphPanGraph = mxGraph.prototype.panGraph;
 	mxGraph.prototype.panGraph = function(dx, dy)
 	{
 		mxGraphPanGraph.apply(this, arguments);
 		
 		if (this.shiftPreview1 != null)
 		{
-			var canvas = this.view.canvas;
+			let canvas = this.view.canvas;
 			
 			if (canvas.ownerSVGElement != null)
 			{
 				canvas = canvas.ownerSVGElement;
 			}
 			
-			var phase = this.gridSize * this.view.scale * this.view.gridSteps;
-			var position = -Math.round(phase - mxUtils.mod(this.view.translate.x * this.view.scale + dx, phase)) + 'px ' +
+			let phase = this.gridSize * this.view.scale * this.view.gridSteps;
+			let position = -Math.round(phase - mxUtils.mod(this.view.translate.x * this.view.scale + dx, phase)) + 'px ' +
 				-Math.round(phase - mxUtils.mod(this.view.translate.y * this.view.scale + dy, phase)) + 'px';
 			canvas.style.backgroundPosition = position;
 		}
@@ -2492,24 +2492,24 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 	// Draws page breaks only within the page
 	mxGraph.prototype.updatePageBreaks = function(visible, width, height)
 	{
-		var scale = this.view.scale;
-		var tr = this.view.translate;
-		var fmt = this.pageFormat;
-		var ps = scale * this.pageScale;
+		let scale = this.view.scale;
+		let tr = this.view.translate;
+		let fmt = this.pageFormat;
+		let ps = scale * this.pageScale;
 
 		var bounds2 = this.view.getBackgroundPageBounds();
 
 		width = bounds2.width;
 		height = bounds2.height;
-		var bounds = new mxRectangle(scale * tr.x, scale * tr.y, fmt.width * ps, fmt.height * ps);
+		let bounds = new mxRectangle(scale * tr.x, scale * tr.y, fmt.width * ps, fmt.height * ps);
 
 		// Does not show page breaks if the scale is too small
 		visible = visible && Math.min(bounds.width, bounds.height) > this.minPageBreakDist;
 
-		var horizontalCount = (visible) ? Math.ceil(height / bounds.height) - 1 : 0;
-		var verticalCount = (visible) ? Math.ceil(width / bounds.width) - 1 : 0;
-		var right = bounds2.x + width;
-		var bottom = bounds2.y + height;
+		let horizontalCount = (visible) ? Math.ceil(height / bounds.height) - 1 : 0;
+		let verticalCount = (visible) ? Math.ceil(width / bounds.width) - 1 : 0;
+		let right = bounds2.x + width;
+		let bottom = bounds2.y + height;
 
 		if (this.horizontalPageBreaks == null && horizontalCount > 0)
 		{
@@ -2521,15 +2521,15 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 			this.verticalPageBreaks = [];
 		}
 			
-		var drawPageBreaks = mxUtils.bind(this, function(breaks)
+		let drawPageBreaks = mxUtils.bind(this, function(breaks)
 		{
 			if (breaks != null)
 			{
-				var count = (breaks == this.horizontalPageBreaks) ? horizontalCount : verticalCount; 
+				let count = (breaks == this.horizontalPageBreaks) ? horizontalCount : verticalCount;
 				
-				for (var i = 0; i <= count; i++)
+				for (let i = 0; i <= count; i++)
 				{
-					var pts = (breaks == this.horizontalPageBreaks) ?
+					let pts = (breaks == this.horizontalPageBreaks) ?
 						[new mxPoint(Math.round(bounds2.x), Math.round(bounds2.y + (i + 1) * bounds.height)),
 						 new mxPoint(Math.round(right), Math.round(bounds2.y + (i + 1) * bounds.height))] :
 						[new mxPoint(Math.round(bounds2.x + (i + 1) * bounds.width), Math.round(bounds2.y)),
@@ -2542,7 +2542,7 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 					}
 					else
 					{
-						var pageBreak = new mxPolyline(pts, this.pageBreakColor);
+						let pageBreak = new mxPolyline(pts, this.pageBreakColor);
 						pageBreak.dialect = this.dialect;
 						pageBreak.isDashed = this.pageBreakDashed;
 						pageBreak.pointerEvents = false;
@@ -2553,7 +2553,7 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 					}
 				}
 				
-				for (var i = count; i < breaks.length; i++)
+				for (let i = count; i < breaks.length; i++)
 				{
 					breaks[i].destroy();
 				}
@@ -2567,10 +2567,10 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 	};
 	
 	// Disables removing relative children and table rows and cells from parents
-	var mxGraphHandlerShouldRemoveCellsFromParent = mxGraphHandler.prototype.shouldRemoveCellsFromParent;
+	let mxGraphHandlerShouldRemoveCellsFromParent = mxGraphHandler.prototype.shouldRemoveCellsFromParent;
 	mxGraphHandler.prototype.shouldRemoveCellsFromParent = function(parent, cells, evt)
 	{
-		for (var i = 0; i < cells.length; i++)
+		for (let i = 0; i < cells.length; i++)
 		{
 			if (this.graph.isTableCell(cells[i]) || this.graph.isTableRow(cells[i]))
 			{
@@ -2578,7 +2578,7 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 			}
 			else if (this.graph.getModel().isVertex(cells[i]))
 			{
-				var geo = this.graph.getCellGeometry(cells[i]);
+				let geo = this.graph.getCellGeometry(cells[i]);
 				
 				if (geo != null && geo.relative)
 				{
@@ -2591,10 +2591,10 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 	};
 
 	// Overrides to ignore hotspot only for target terminal
-	var mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker;
+	let mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker;
 	mxConnectionHandler.prototype.createMarker = function()
 	{
-		var marker = mxConnectionHandlerCreateMarker.apply(this, arguments);
+		let marker = mxConnectionHandlerCreateMarker.apply(this, arguments);
 		
 		marker.intersects = mxUtils.bind(this, function(state, evt)
 		{
@@ -2618,36 +2618,36 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 	// Fits the number of background pages to the graph
 	mxGraphView.prototype.getBackgroundPageBounds = function()
 	{
-		var gb = this.getGraphBounds();
+		let gb = this.getGraphBounds();
 		
 		// Computes unscaled, untranslated graph bounds
-		var x = (gb.width > 0) ? gb.x / this.scale - this.translate.x : 0;
-		var y = (gb.height > 0) ? gb.y / this.scale - this.translate.y : 0;
-		var w = gb.width / this.scale;
-		var h = gb.height / this.scale;
+		let x = (gb.width > 0) ? gb.x / this.scale - this.translate.x : 0;
+		let y = (gb.height > 0) ? gb.y / this.scale - this.translate.y : 0;
+		let w = gb.width / this.scale;
+		let h = gb.height / this.scale;
 		
-		var fmt = this.graph.pageFormat;
-		var ps = this.graph.pageScale;
+		let fmt = this.graph.pageFormat;
+		let ps = this.graph.pageScale;
 
-		var pw = fmt.width * ps;
-		var ph = fmt.height * ps;
+		let pw = fmt.width * ps;
+		let ph = fmt.height * ps;
 
 		var x0 = Math.floor(Math.min(0, x) / pw);
 		var y0 = Math.floor(Math.min(0, y) / ph);
-		var xe = Math.ceil(Math.max(1, x + w) / pw);
-		var ye = Math.ceil(Math.max(1, y + h) / ph);
+		let xe = Math.ceil(Math.max(1, x + w) / pw);
+		let ye = Math.ceil(Math.max(1, y + h) / ph);
 		
-		var rows = xe - x0;
-		var cols = ye - y0;
+		let rows = xe - x0;
+		let cols = ye - y0;
 
-		var bounds = new mxRectangle(this.scale * (this.translate.x + x0 * pw), this.scale *
+		let bounds = new mxRectangle(this.scale * (this.translate.x + x0 * pw), this.scale *
 				(this.translate.y + y0 * ph), this.scale * rows * pw, this.scale * cols * ph);
 		
 		return bounds;
 	};
 	
 	// Add panning for background page in VML
-	var graphPanGraph = mxGraph.prototype.panGraph;
+	let graphPanGraph = mxGraph.prototype.panGraph;
 	mxGraph.prototype.panGraph = function(dx, dy)
 	{
 		graphPanGraph.apply(this, arguments);
@@ -2663,10 +2663,10 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 	/**
 	 * Consumes click events for disabled menu items.
 	 */
-	var mxPopupMenuAddItem = mxPopupMenu.prototype.addItem;
+	let mxPopupMenuAddItem = mxPopupMenu.prototype.addItem;
 	mxPopupMenu.prototype.addItem = function(title, image, funct, parent, iconCls, enabled)
 	{
-		var result = mxPopupMenuAddItem.apply(this, arguments);
+		let result = mxPopupMenuAddItem.apply(this, arguments);
 		
 		if (enabled != null && !enabled)
 		{
@@ -2682,15 +2682,15 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 	/**
 	 * Selects tables before cells and rows.
 	 */
-	var mxGraphHandlerIsPropagateSelectionCell = mxGraphHandler.prototype.isPropagateSelectionCell;
+	let mxGraphHandlerIsPropagateSelectionCell = mxGraphHandler.prototype.isPropagateSelectionCell;
 	mxGraphHandler.prototype.isPropagateSelectionCell = function(cell, immediate, me)
 	{
-		var result = false;
-		var parent = this.graph.model.getParent(cell)
+		let result = false;
+		let parent = this.graph.model.getParent(cell)
 		
 		if (immediate)
 		{
-			var geo = (this.graph.model.isEdge(cell)) ? null :
+			let geo = (this.graph.model.isEdge(cell)) ? null :
 				this.graph.getCellGeometry(cell);
 			
 			result = !this.graph.model.isEdge(parent) &&
@@ -2705,7 +2705,7 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 			
 			if (this.graph.isTableCell(cell) || this.graph.isTableRow(cell))
 			{
-				var table = parent;
+				let table = parent;
 				
 				if (!this.graph.isTable(table))
 				{
@@ -2727,15 +2727,15 @@ FilenameDialog.createFileTypes = function(editorUi, nameInput, types)
 	 */
 	mxPopupMenuHandler.prototype.getCellForPopupEvent = function(me)
 	{
-		var cell = me.getCell();
-		var model = this.graph.getModel();
-		var parent = model.getParent(cell);
-		var state = this.graph.view.getState(parent);
-		var selected = this.graph.isCellSelected(cell);
+		let cell = me.getCell();
+		let model = this.graph.getModel();
+		let parent = model.getParent(cell);
+		let state = this.graph.view.getState(parent);
+		let selected = this.graph.isCellSelected(cell);
 		
 		while (state != null && (model.isVertex(parent) || model.isEdge(parent)))
 		{
-			var temp = this.graph.isCellSelected(parent);
+			let temp = this.graph.isCellSelected(parent);
 			selected = selected || temp;
 			
 			if (temp || (!selected && (this.graph.isTableCell(cell) ||
diff --git a/src/examples/grapheditor/www/js/EditorUi.js b/src/examples/grapheditor/www/js/EditorUi.js
index 2cf309a22..966c8af2c 100644
--- a/src/examples/grapheditor/www/js/EditorUi.js
+++ b/src/examples/grapheditor/www/js/EditorUi.js
@@ -12,7 +12,7 @@ EditorUi = function(editor, container, lightbox)
 	this.editor = editor || new Editor();
 	this.container = container || document.body;
 	
-	var graph = this.editor.graph;
+	let graph = this.editor.graph;
 	graph.lightbox = lightbox;
 	this.initialDefaultVertexStyle = mxUtils.clone(graph.defaultVertexStyle);
 	this.initialDefaultEdgeStyle = mxUtils.clone(graph.defaultEdgeStyle);
@@ -61,7 +61,7 @@ EditorUi = function(editor, container, lightbox)
 		this.refresh();
 
 		// Disables HTML and text selection
-		var textEditing =  mxUtils.bind(this, function(evt)
+		let textEditing =  mxUtils.bind(this, function(evt)
 		{
 			if (evt == null)
 			{
@@ -98,11 +98,11 @@ EditorUi = function(editor, container, lightbox)
 		if (!this.editor.chromeless || this.editor.editable)
 		{
 			// Allows context menu for links in hints
-			var linkHandler = function(evt)
+			let linkHandler = function(evt)
 			{
 				if (evt != null)
 				{
-					var source = mxEvent.getSource(evt);
+					let source = mxEvent.getSource(evt);
 					
 					if (source.nodeName == 'A')
 					{
@@ -135,7 +135,7 @@ EditorUi = function(editor, container, lightbox)
 	    // Improves line wrapping for in-place editor
 	    if (mxClient.IS_SVG && graph.view.getDrawPane() != null)
 	    {
-	        var root = graph.view.getDrawPane().ownerSVGElement;
+	        let root = graph.view.getDrawPane().ownerSVGElement;
 	        
 	        if (root != null)
 	        {
@@ -149,7 +149,7 @@ EditorUi = function(editor, container, lightbox)
 		// Hides hover icons when cells are moved
 		if (graph.graphHandler != null)
 		{
-			var graphHandlerStart = graph.graphHandler.start;
+			let graphHandlerStart = graph.graphHandler.start;
 			
 			graph.graphHandler.start = function()
 			{
@@ -165,7 +165,7 @@ EditorUi = function(editor, container, lightbox)
 		// Adds tooltip when mouse is over scrollbars to show space-drag panning option
 		mxEvent.addListener(this.diagramContainer, 'mousemove', mxUtils.bind(this, function(evt)
 		{
-			var off = mxUtils.getOffset(this.diagramContainer);
+			let off = mxUtils.getOffset(this.diagramContainer);
 			
 			if (mxEvent.getClientX(evt) - off.x - this.diagramContainer.clientWidth > 0 ||
 				mxEvent.getClientY(evt) - off.y - this.diagramContainer.clientHeight > 0)
@@ -179,10 +179,10 @@ EditorUi = function(editor, container, lightbox)
 		}));
 	
 	   	// Escape key hides dialogs, adds space+drag panning
-		var spaceKeyPressed = false;
+		let spaceKeyPressed = false;
 		
 		// Overrides hovericons to disable while space key is pressed
-		var hoverIconsIsResetEvent = this.hoverIcons.isResetEvent;
+		let hoverIconsIsResetEvent = this.hoverIcons.isResetEvent;
 		
 		this.hoverIcons.isResetEvent = function(evt, allowShift)
 		{
@@ -220,7 +220,7 @@ EditorUi = function(editor, container, lightbox)
 		mxEvent.addListener(document, 'keyup', this.keyupHandler);
 	    
 	    // Forces panning for middle and right mouse buttons
-		var panningHandlerIsForcePanningEvent = graph.panningHandler.isForcePanningEvent;
+		let panningHandlerIsForcePanningEvent = graph.panningHandler.isForcePanningEvent;
 		graph.panningHandler.isForcePanningEvent = function(me)
 		{
 			// Ctrl+left button is reported as right button in FF on Mac
@@ -234,7 +234,7 @@ EditorUi = function(editor, container, lightbox)
 	
 		// Ctrl/Cmd+Enter applies editing value except in Safari where Ctrl+Enter creates
 		// a new line (while Enter creates a new paragraph and Shift+Enter stops)
-		var cellEditorIsStopEditingEvent = graph.cellEditor.isStopEditingEvent;
+		let cellEditorIsStopEditingEvent = graph.cellEditor.isStopEditingEvent;
 		graph.cellEditor.isStopEditingEvent = function(evt)
 		{
 			return cellEditorIsStopEditingEvent.apply(this, arguments) ||
@@ -244,7 +244,7 @@ EditorUi = function(editor, container, lightbox)
 		};
 				
 		// Adds space+wheel for zoom
-		var graphIsZoomWheelEvent = graph.isZoomWheelEvent;
+		let graphIsZoomWheelEvent = graph.isZoomWheelEvent;
 		
 		graph.isZoomWheelEvent = function()
 		{
@@ -252,21 +252,21 @@ EditorUi = function(editor, container, lightbox)
 		};
 		
 		// Switches toolbar for text editing
-		var textMode = false;
-		var fontMenu = null;
-		var sizeMenu = null;
-		var nodes = null;
+		let textMode = false;
+		let fontMenu = null;
+		let sizeMenu = null;
+		let nodes = null;
 		
-		var updateToolbar = mxUtils.bind(this, function()
+		let updateToolbar = mxUtils.bind(this, function()
 		{
 			if (this.toolbar != null && textMode != graph.cellEditor.isContentEditing())
 			{
-				var node = this.toolbar.container.firstChild;
-				var newNodes = [];
+				let node = this.toolbar.container.firstChild;
+				let newNodes = [];
 				
 				while (node != null)
 				{
-					var tmp = node.nextSibling;
+					let tmp = node.nextSibling;
 					
 					if (mxUtils.indexOf(this.toolbar.staticElements, node) < 0)
 					{
@@ -287,7 +287,7 @@ EditorUi = function(editor, container, lightbox)
 				}
 				else
 				{
-					for (var i = 0; i < nodes.length; i++)
+					for (let i = 0; i < nodes.length; i++)
 					{
 						this.toolbar.container.appendChild(nodes[i]);
 					}
@@ -304,10 +304,10 @@ EditorUi = function(editor, container, lightbox)
 			}
 		});
 	
-		var ui = this;
+		let ui = this;
 		
 		// Overrides cell editor to update toolbar
-		var cellEditorStartEditing = graph.cellEditor.startEditing;
+		let cellEditorStartEditing = graph.cellEditor.startEditing;
 		graph.cellEditor.startEditing = function()
 		{
 			cellEditorStartEditing.apply(this, arguments);
@@ -315,9 +315,9 @@ EditorUi = function(editor, container, lightbox)
 			
 			if (graph.cellEditor.isContentEditing())
 			{
-				var updating = false;
+				let updating = false;
 				
-				var updateCssHandler = function()
+				let updateCssHandler = function()
 				{
 					if (!updating)
 					{
@@ -325,11 +325,11 @@ EditorUi = function(editor, container, lightbox)
 					
 						window.setTimeout(function()
 						{
-							var node = graph.getSelectedEditingElement();
+							let node = graph.getSelectedEditingElement();
 
 							if (node != null)
 							{
-								var css = mxUtils.getCurrentStyle(node);
+								let css = mxUtils.getCurrentStyle(node);
 		
 								if (css != null && ui.toolbar != null)
 								{
@@ -352,7 +352,7 @@ EditorUi = function(editor, container, lightbox)
 		};
 		
 		// Updates toolbar and handles possible errors
-		var cellEditorStopEditing = graph.cellEditor.stopEditing;
+		let cellEditorStopEditing = graph.cellEditor.stopEditing;
 		graph.cellEditor.stopEditing = function(cell, trigger)
 		{
 			try
@@ -384,7 +384,7 @@ EditorUi = function(editor, container, lightbox)
 		}
 	
 	   	// Keeps graph container focused on mouse down
-	   	var graphFireMouseEvent = graph.fireMouseEvent;
+	   	let graphFireMouseEvent = graph.fireMouseEvent;
 	   	graph.fireMouseEvent = function(evtName, me, sender)
 	   	{
 	   		if (evtName == mxEvent.MOUSE_DOWN)
@@ -423,11 +423,11 @@ EditorUi = function(editor, container, lightbox)
 		};
 		
 		// Stores the current style and assigns it to new cells
-		var styles = ['rounded', 'shadow', 'glass', 'dashed', 'dashPattern', 'labelBackgroundColor',
+		let styles = ['rounded', 'shadow', 'glass', 'dashed', 'dashPattern', 'labelBackgroundColor',
 			'comic', 'sketch', 'fillWeight', 'hachureGap', 'hachureAngle', 'jiggle',
 			'disableMultiStroke', 'disableMultiStrokeFill', 'fillStyle', 'curveFitting',
 			'simplification', 'sketchStyle'];
-		var connectStyles = ['shape', 'edgeStyle', 'curved', 'rounded', 'elbow', 'jumpStyle', 'jumpSize',
+		let connectStyles = ['shape', 'edgeStyle', 'curved', 'rounded', 'elbow', 'jumpStyle', 'jumpSize',
 			'comic', 'sketch', 'fillWeight', 'hachureGap', 'hachureAngle', 'jiggle',
 			'disableMultiStroke', 'disableMultiStrokeFill', 'fillStyle', 'curveFitting',
 			'simplification', 'sketchStyle'];
@@ -437,16 +437,16 @@ EditorUi = function(editor, container, lightbox)
 		{
 			try
 			{
-				var state = graph.view.getState(cell);
+				let state = graph.view.getState(cell);
 				
 				if (state != null)
 				{
 					// Ignores default styles
-					var clone = cell.clone();
+					let clone = cell.clone();
 					clone.style = ''
-					var defaultStyle = graph.getCellStyle(clone);
-					var values = [];
-					var keys = [];
+					let defaultStyle = graph.getCellStyle(clone);
+					let values = [];
+					let keys = [];
 		
 					for (var key in state.style)
 					{
@@ -458,18 +458,18 @@ EditorUi = function(editor, container, lightbox)
 					}
 					
 					// Handles special case for value "none"
-					var cellStyle = graph.getModel().getStyle(state.cell);
-					var tokens = (cellStyle != null) ? cellStyle.split(';') : [];
+					let cellStyle = graph.getModel().getStyle(state.cell);
+					let tokens = (cellStyle != null) ? cellStyle.split(';') : [];
 					
-					for (var i = 0; i < tokens.length; i++)
+					for (let i = 0; i < tokens.length; i++)
 					{
-						var tmp = tokens[i];
-				 		var pos = tmp.indexOf('=');
+						let tmp = tokens[i];
+				 		let pos = tmp.indexOf('=');
 				 					 		
 				 		if (pos >= 0)
 				 		{
-				 			var key = tmp.substring(0, pos);
-				 			var value = tmp.substring(pos + 1);
+				 			let key = tmp.substring(0, pos);
+				 			let value = tmp.substring(pos + 1);
 				 			
 				 			if (defaultStyle[key] != null && value == 'none')
 				 			{
@@ -509,14 +509,14 @@ EditorUi = function(editor, container, lightbox)
 	
 		// Keys that should be ignored if the cell has a value (known: new default for all cells is html=1 so
 	    // for the html key this effecticely only works for edges inserted via the connection handler)
-		var valueStyles = ['fontFamily', 'fontSource', 'fontSize', 'fontColor'];
+		let valueStyles = ['fontFamily', 'fontSource', 'fontSize', 'fontColor'];
 		
 		// Keys that always update the current edge style regardless of selection
-		var alwaysEdgeStyles = ['edgeStyle', 'startArrow', 'startFill', 'startSize', 'endArrow',
+		let alwaysEdgeStyles = ['edgeStyle', 'startArrow', 'startFill', 'startSize', 'endArrow',
 			'endFill', 'endSize'];
 		
 		// Keys that are ignored together (if one appears all are ignored)
-		var keyGroups = [['startArrow', 'startFill', 'startSize', 'sourcePerimeterSpacing',
+		let keyGroups = [['startArrow', 'startFill', 'startSize', 'sourcePerimeterSpacing',
 						'endArrow', 'endFill', 'endSize', 'targetPerimeterSpacing'],
 		                 ['strokeColor', 'strokeWidth'],
 		                 ['fillColor', 'gradientColor'],
@@ -526,15 +526,15 @@ EditorUi = function(editor, container, lightbox)
 		                 ['html']];
 		
 		// Adds all keys used above to the styles array
-		for (var i = 0; i < keyGroups.length; i++)
+		for (let i = 0; i < keyGroups.length; i++)
 		{
-			for (var j = 0; j < keyGroups[i].length; j++)
+			for (let j = 0; j < keyGroups[i].length; j++)
 			{
 				styles.push(keyGroups[i][j]);
 			}
 		}
 		
-		for (var i = 0; i < connectStyles.length; i++)
+		for (let i = 0; i < connectStyles.length; i++)
 		{
 			if (mxUtils.indexOf(styles, connectStyles[i]) < 0)
 			{
@@ -543,16 +543,16 @@ EditorUi = function(editor, container, lightbox)
 		}
 	
 		// Implements a global current style for edges and vertices that is applied to new cells
-		var insertHandler = function(cells, asText, model)
+		let insertHandler = function(cells, asText, model)
 		{
 			model = (model != null) ? model : graph.getModel();
 			
 			model.beginUpdate();
 			try
 			{
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
-					var cell = cells[i];
+					let cell = cells[i];
 
 					var appliedStyles;
 
@@ -564,19 +564,19 @@ EditorUi = function(editor, container, lightbox)
 					else
 					{
 						// Removes styles defined in the cell style from the styles to be applied
-						var cellStyle = model.getStyle(cell);
-						var tokens = (cellStyle != null) ? cellStyle.split(';') : [];
+						let cellStyle = model.getStyle(cell);
+						let tokens = (cellStyle != null) ? cellStyle.split(';') : [];
 						appliedStyles = styles.slice();
 						
-						for (var j = 0; j < tokens.length; j++)
+						for (let j = 0; j < tokens.length; j++)
 						{
-							var tmp = tokens[j];
-					 		var pos = tmp.indexOf('=');
+							let tmp = tokens[j];
+					 		let pos = tmp.indexOf('=');
 					 					 		
 					 		if (pos >= 0)
 					 		{
-					 			var key = tmp.substring(0, pos);
-					 			var index = mxUtils.indexOf(appliedStyles, key);
+					 			let key = tmp.substring(0, pos);
+					 			let index = mxUtils.indexOf(appliedStyles, key);
 					 			
 					 			if (index >= 0)
 					 			{
@@ -584,13 +584,13 @@ EditorUi = function(editor, container, lightbox)
 					 			}
 					 			
 					 			// Handles special cases where one defined style ignores other styles
-					 			for (var k = 0; k < keyGroups.length; k++)
+					 			for (let k = 0; k < keyGroups.length; k++)
 					 			{
-					 				var group = keyGroups[k];
+					 				let group = keyGroups[k];
 					 				
 					 				if (mxUtils.indexOf(group, key) >= 0)
 					 				{
-					 					for (var l = 0; l < group.length; l++)
+					 					for (let l = 0; l < group.length; l++)
 					 					{
 								 			var index2 = mxUtils.indexOf(appliedStyles, group[l]);
 								 			
@@ -606,14 +606,14 @@ EditorUi = function(editor, container, lightbox)
 					}
 					
 					// Applies the current style to the cell
-					var edge = model.isEdge(cell);
-					var current = (edge) ? graph.currentEdgeStyle : graph.currentVertexStyle;
-					var newStyle = model.getStyle(cell);
+					let edge = model.isEdge(cell);
+					let current = (edge) ? graph.currentEdgeStyle : graph.currentVertexStyle;
+					let newStyle = model.getStyle(cell);
 					
-					for (var j = 0; j < appliedStyles.length; j++)
+					for (let j = 0; j < appliedStyles.length; j++)
 					{
-						var key = appliedStyles[j];
-						var styleValue = current[key];
+						let key = appliedStyles[j];
+						let styleValue = current[key];
 	
 						if (styleValue != null && (key != 'shape' || edge))
 						{
@@ -648,7 +648,7 @@ EditorUi = function(editor, container, lightbox)
 		
 		graph.connectionHandler.addListener(mxEvent.CONNECT, function(sender, evt)
 		{
-			var cells = [evt.getProperty('cell')];
+			let cells = [evt.getProperty('cell')];
 			
 			if (evt.getProperty('terminalInserted'))
 			{
@@ -661,13 +661,13 @@ EditorUi = function(editor, container, lightbox)
 		this.addListener('styleChanged', mxUtils.bind(this, function(sender, evt)
 		{
 			// Checks if edges and/or vertices were modified
-			var cells = evt.getProperty('cells');
-			var vertex = false;
-			var edge = false;
+			let cells = evt.getProperty('cells');
+			let vertex = false;
+			let edge = false;
 			
 			if (cells.length > 0)
 			{
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
 					vertex = graph.getModel().isVertex(cells[i]) || vertex;
 					edge = graph.getModel().isEdge(cells[i]) || edge;
@@ -684,12 +684,12 @@ EditorUi = function(editor, container, lightbox)
 				edge = true;
 			}
 			
-			var keys = evt.getProperty('keys');
-			var values = evt.getProperty('values');
+			let keys = evt.getProperty('keys');
+			let values = evt.getProperty('values');
 	
-			for (var i = 0; i < keys.length; i++)
+			for (let i = 0; i < keys.length; i++)
 			{
-				var common = mxUtils.indexOf(valueStyles, keys[i]) >= 0;
+				let common = mxUtils.indexOf(valueStyles, keys[i]) >= 0;
 				
 				// Ignores transparent stroke colors
 				if (keys[i] != 'strokeColor' || (values[i] != null && values[i] != 'none'))
@@ -758,7 +758,7 @@ EditorUi = function(editor, container, lightbox)
 				if (this.toolbar.edgeStyleMenu != null)
 				{
 					// Updates toolbar icon for edge style
-					var edgeStyleDiv = this.toolbar.edgeStyleMenu.getElementsByTagName('div')[0];
+					let edgeStyleDiv = this.toolbar.edgeStyleMenu.getElementsByTagName('div')[0];
 	
 					if (graph.currentEdgeStyle['edgeStyle'] == 'orthogonalEdgeStyle' && graph.currentEdgeStyle['curved'] == '1')
 					{
@@ -792,7 +792,7 @@ EditorUi = function(editor, container, lightbox)
 				if (this.toolbar.edgeShapeMenu != null)
 				{
 					// Updates icon for edge shape
-					var edgeShapeDiv = this.toolbar.edgeShapeMenu.getElementsByTagName('div')[0];
+					let edgeShapeDiv = this.toolbar.edgeShapeMenu.getElementsByTagName('div')[0];
 					
 					if (graph.currentEdgeStyle['shape'] == 'link')
 					{
@@ -815,7 +815,7 @@ EditorUi = function(editor, container, lightbox)
 				// Updates icon for optinal line start shape
 				if (this.toolbar.lineStartMenu != null)
 				{
-					var lineStartDiv = this.toolbar.lineStartMenu.getElementsByTagName('div')[0];
+					let lineStartDiv = this.toolbar.lineStartMenu.getElementsByTagName('div')[0];
 					
 					lineStartDiv.className = this.getCssClassForMarker('start',
 							graph.currentEdgeStyle['shape'], graph.currentEdgeStyle[mxConstants.STYLE_STARTARROW],
@@ -825,7 +825,7 @@ EditorUi = function(editor, container, lightbox)
 				// Updates icon for optinal line end shape
 				if (this.toolbar.lineEndMenu != null)
 				{
-					var lineEndDiv = this.toolbar.lineEndMenu.getElementsByTagName('div')[0];
+					let lineEndDiv = this.toolbar.lineEndMenu.getElementsByTagName('div')[0];
 					
 					lineEndDiv.className = this.getCssClassForMarker('end',
 							graph.currentEdgeStyle['shape'], graph.currentEdgeStyle[mxConstants.STYLE_ENDARROW],
@@ -837,11 +837,11 @@ EditorUi = function(editor, container, lightbox)
 		// Update font size and font family labels
 		if (this.toolbar != null)
 		{
-			var update = mxUtils.bind(this, function()
+			let update = mxUtils.bind(this, function()
 			{
-				var ff = graph.currentVertexStyle['fontFamily'] || 'Helvetica';
-				var fs = String(graph.currentVertexStyle['fontSize'] || '12');
-			    	var state = graph.getView().getState(graph.getSelectionCell());
+				let ff = graph.currentVertexStyle['fontFamily'] || 'Helvetica';
+				let fs = String(graph.currentVertexStyle['fontSize'] || '12');
+			    	let state = graph.getView().getState(graph.getSelectionCell());
 			    	
 			    	if (state != null)
 			    	{
@@ -865,8 +865,8 @@ EditorUi = function(editor, container, lightbox)
 		// Makes sure the current layer is visible when cells are added
 		graph.addListener(mxEvent.CELLS_ADDED, function(sender, evt)
 		{
-			var cells = evt.getProperty('cells');
-			var parent = evt.getProperty('parent');
+			let cells = evt.getProperty('cells');
+			let parent = evt.getProperty('parent');
 			
 			if (graph.getModel().isLayer(parent) && !graph.isCellVisible(parent) && cells != null && cells.length > 0)
 			{
@@ -1038,7 +1038,7 @@ EditorUi.prototype.hsplitClickEnabled = false;
  */
 EditorUi.prototype.init = function()
 {
-	var graph = this.editor.graph;
+	let graph = this.editor.graph;
 	
 	if (!graph.standalone)
 	{
@@ -1062,7 +1062,7 @@ EditorUi.prototype.init = function()
 		graph.addListener(mxEvent.ESCAPE, mxUtils.bind(this, function()
 		{
 			graph.tooltipHandler.hide();
-			var rb = graph.getRubberband();
+			let rb = graph.getRubberband();
 			
 			if (rb != null)
 			{
@@ -1095,8 +1095,8 @@ EditorUi.prototype.init = function()
 		}));
 		
 		// Changes action states after change of default parent
-		var graphSetDefaultParent = graph.setDefaultParent;
-		var ui = this;
+		let graphSetDefaultParent = graph.setDefaultParent;
+		let ui = this;
 		
 		this.editor.graph.setDefaultParent = function()
 		{
@@ -1123,8 +1123,8 @@ EditorUi.prototype.init = function()
  */
 EditorUi.prototype.installShapePicker = function()
 {
-	var graph = this.editor.graph;
-	var ui = this;
+	let graph = this.editor.graph;
+	let ui = this;
 
 	// Uses this event to process mouseDown to check the selection state before it is changed
 	graph.addListener(mxEvent.FIRE_MOUSE_EVENT, mxUtils.bind(this, function(sender, evt)
@@ -1151,7 +1151,7 @@ EditorUi.prototype.installShapePicker = function()
 	}));
 	
 	// Counts as popup menu
-	var popupMenuHandlerIsMenuShowing = graph.popupMenuHandler.isMenuShowing;
+	let popupMenuHandlerIsMenuShowing = graph.popupMenuHandler.isMenuShowing;
 	 
 	graph.popupMenuHandler.isMenuShowing = function()
 	{
@@ -1159,7 +1159,7 @@ EditorUi.prototype.installShapePicker = function()
 	};
 	
 	// Adds dbl click dialog for inserting shapes
-	var graphDblClick = graph.dblClick;
+	let graphDblClick = graph.dblClick;
 	
 	graph.dblClick = function(evt, cell)
 	{
@@ -1168,7 +1168,7 @@ EditorUi.prototype.installShapePicker = function()
 			if (cell == null && ui.sidebar != null && !mxEvent.isShiftDown(evt))
 			{
 				mxEvent.consume(evt);
-				var pt = mxUtils.convertPoint(this.container, mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+				let pt = mxUtils.convertPoint(this.container, mxEvent.getClientX(evt), mxEvent.getClientY(evt));
 				
 				// Asynchronous to avoid direct insert after double tap
 				window.setTimeout(mxUtils.bind(this, function()
@@ -1185,7 +1185,7 @@ EditorUi.prototype.installShapePicker = function()
 	
 	if (this.hoverIcons != null)
 	{
-		var hoverIconsDrag = this.hoverIcons.drag;
+		let hoverIconsDrag = this.hoverIcons.drag;
 		
 		this.hoverIcons.drag = function()
 		{
@@ -1193,18 +1193,18 @@ EditorUi.prototype.installShapePicker = function()
 			hoverIconsDrag.apply(this, arguments);
 		};
 		
-		var hoverIconsExecute = this.hoverIcons.execute;
+		let hoverIconsExecute = this.hoverIcons.execute;
 		
 		this.hoverIcons.execute = function(state, dir, me)
 		{
-			var evt = me.getEvent();
+			let evt = me.getEvent();
 			
 			if (!this.graph.isCloneEvent(evt) && !mxEvent.isShiftDown(evt))
 			{
 				this.graph.connectVertex(state.cell, dir, this.graph.defaultEdgeLength, evt, null, null, mxUtils.bind(this, function(x, y, execute)
 				{
-					var temp = graph.getCompositeParent(state.cell);
-					var geo = graph.getCellGeometry(temp);
+					let temp = graph.getCompositeParent(state.cell);
+					let geo = graph.getCellGeometry(temp);
 					me.consume();
 					
 					while (temp != null && graph.model.isVertex(temp) && geo != null && geo.relative)
@@ -1240,15 +1240,15 @@ EditorUi.prototype.installShapePicker = function()
  */
 EditorUi.prototype.showShapePicker = function(x, y, source, callback, direction)
 {
-	var cells = this.getCellsForShapePicker(source);
+	let cells = this.getCellsForShapePicker(source);
 	
 	if (cells != null && cells.length > 0)
 	{
-		var ui = this;
-		var graph = this.editor.graph;
-		var div = document.createElement('div');
-		var sourceState = graph.view.getState(source);
-		var style = (source != null && (sourceState == null ||
+		let ui = this;
+		let graph = this.editor.graph;
+		let div = document.createElement('div');
+		let sourceState = graph.view.getState(source);
+		let style = (source != null && (sourceState == null ||
 			!graph.isTransparentState(sourceState))) ?
 			graph.copyStyle(source) : null;
 		
@@ -1266,10 +1266,10 @@ EditorUi.prototype.showShapePicker = function(x, y, source, callback, direction)
 		
 		graph.container.appendChild(div);
 		
-		var addCell = mxUtils.bind(this, function(cell)
+		let addCell = mxUtils.bind(this, function(cell)
 		{
 			// Wrapper needed to catch events
-			var node = document.createElement('a');
+			let node = document.createElement('a');
 			node.className = 'geItem';
 			node.style.cssText = 'position:relative;display:inline-block;position:relative;' +
 				'width:30px;height:30px;cursor:pointer;overflow:hidden;padding:3px 0 0 3px;';
@@ -1288,7 +1288,7 @@ EditorUi.prototype.showShapePicker = function(x, y, source, callback, direction)
 
 			mxEvent.addListener(node, 'click', function()
 			{
-				var clone = graph.cloneCell(cell);
+				let clone = graph.cloneCell(cell);
 				
 				if (callback != null)
 				{
@@ -1325,7 +1325,7 @@ EditorUi.prototype.showShapePicker = function(x, y, source, callback, direction)
 			});
 		});
 		
-		for (var i = 0; i < cells.length; i++)
+		for (let i = 0; i < cells.length; i++)
 		{
 			addCell(cells[i]);
 		}
@@ -1350,7 +1350,7 @@ EditorUi.prototype.showShapePicker = function(x, y, source, callback, direction)
  */
 EditorUi.prototype.getCellsForShapePicker = function(cell)
 {
-	var createVertex = mxUtils.bind(this, function(style, w, h, value)
+	let createVertex = mxUtils.bind(this, function(style, w, h, value)
 	{
 		return this.editor.graph.createVertex(null, null, value || '', 0, 0, w || 120, h || 60, style, false);
 	});
@@ -1398,7 +1398,7 @@ EditorUi.prototype.hideShapePicker = function(cancel)
  */
 EditorUi.prototype.onKeyDown = function(evt)
 {
-	var graph = this.editor.graph;
+	let graph = this.editor.graph;
 	
 	// Tab selects next cell
 	if (evt.which == 9 && graph.isEnabled() && !mxEvent.isAltDown(evt) &&
@@ -1422,7 +1422,7 @@ EditorUi.prototype.onKeyDown = function(evt)
  */
 EditorUi.prototype.onKeyPress = function(evt)
 {
-	var graph = this.editor.graph;
+	let graph = this.editor.graph;
 	
 	// KNOWN: Focus does not work if label is empty in quirks mode
 	if (this.isImmediateEditingEvent(evt) && !graph.isEditing() && !graph.isSelectionEmpty() && evt.which !== 0 &&
@@ -1434,17 +1434,17 @@ EditorUi.prototype.onKeyPress = function(evt)
 		// Workaround for FF where char is lost if cursor is placed before char
 		if (mxClient.IS_FF)
 		{
-			var ce = graph.cellEditor;
+			let ce = graph.cellEditor;
 			
 			if (ce.textarea != null)
 			{
 				ce.textarea.innerHTML = String.fromCharCode(evt.which);
 	
 				// Moves cursor to end of textarea
-				var range = document.createRange();
+				let range = document.createRange();
 				range.selectNodeContents(ce.textarea);
 				range.collapse(false);
-				var sel = window.getSelection();
+				let sel = window.getSelection();
 				sel.removeAllRanges();
 				sel.addRange(range);
 			}
@@ -1465,7 +1465,7 @@ EditorUi.prototype.isImmediateEditingEvent = function(evt)
  */
 EditorUi.prototype.getCssClassForMarker = function(prefix, shape, marker, fill)
 {
-	var result = '';
+	let result = '';
 
 	if (shape == 'flexArrow')
 	{
@@ -1581,9 +1581,9 @@ EditorUi.prototype.createMenus = function()
  */
 EditorUi.prototype.updatePasteActionStates = function()
 {
-	var graph = this.editor.graph;
-	var paste = this.actions.get('paste');
-	var pasteHere = this.actions.get('pasteHere');
+	let graph = this.editor.graph;
+	let paste = this.actions.get('paste');
+	let pasteHere = this.actions.get('pasteHere');
 	
 	paste.setEnabled(this.editor.graph.cellEditor.isContentEditing() || (!mxClipboard.isEmpty() &&
 		graph.isEnabled() && !graph.isCellLocked(graph.getDefaultParent())));
@@ -1595,9 +1595,9 @@ EditorUi.prototype.updatePasteActionStates = function()
  */
 EditorUi.prototype.initClipboard = function()
 {
-	var ui = this;
+	let ui = this;
 
-	var mxClipboardCut = mxClipboard.cut;
+	let mxClipboardCut = mxClipboard.cut;
 	mxClipboard.cut = function(graph)
 	{
 		if (graph.cellEditor.isContentEditing())
@@ -1612,10 +1612,10 @@ EditorUi.prototype.initClipboard = function()
 		ui.updatePasteActionStates();
 	};
 	
-	var mxClipboardCopy = mxClipboard.copy;
+	let mxClipboardCopy = mxClipboard.copy;
 	mxClipboard.copy = function(graph)
 	{
-		var result = null;
+		let result = null;
 		
 		if (graph.cellEditor.isContentEditing())
 		{
@@ -1626,26 +1626,26 @@ EditorUi.prototype.initClipboard = function()
 			result = result || graph.getSelectionCells();
 			result = graph.getExportableCells(graph.model.getTopmostCells(result));
 			
-			var cloneMap = {};
-			var lookup = graph.createCellLookup(result);
-			var clones = graph.cloneCells(result, null, cloneMap);
+			let cloneMap = {};
+			let lookup = graph.createCellLookup(result);
+			let clones = graph.cloneCells(result, null, cloneMap);
 			
 			// Uses temporary model to force new IDs to be assigned
 			// to avoid having to carry over the mapping from object
 			// ID to cell ID to the paste operation
-			var model = new mxGraphModel();
-			var parent = model.getChildAt(model.getRoot(), 0);
+			let model = new mxGraphModel();
+			let parent = model.getChildAt(model.getRoot(), 0);
 			
-			for (var i = 0; i < clones.length; i++)
+			for (let i = 0; i < clones.length; i++)
 			{
 				model.add(parent, clones[i]);
 				
 				// Checks for orphaned relative children and makes absolute				
-				var state = graph.view.getState(result[i]);
+				let state = graph.view.getState(result[i]);
 				
 				if (state != null)
 				{
-					var geo = graph.getCellGeometry(clones[i]);
+					let geo = graph.getCellGeometry(clones[i]);
 				
 					if (geo != null && geo.relative && !model.isEdge(result[i]) &&
 						lookup[mxObjectIdentity.get(model.getParent(result[i]))] == null)
@@ -1669,10 +1669,10 @@ EditorUi.prototype.initClipboard = function()
 		return result;
 	};
 
-	var mxClipboardPaste = mxClipboard.paste;
+	let mxClipboardPaste = mxClipboard.paste;
 	mxClipboard.paste = function(graph)
 	{
-		var result = null;
+		let result = null;
 		
 		if (graph.cellEditor.isContentEditing())
 		{
@@ -1689,7 +1689,7 @@ EditorUi.prototype.initClipboard = function()
 	};
 
 	// Overrides cell editor to update paste action state
-	var cellEditorStartEditing = this.editor.graph.cellEditor.startEditing;
+	let cellEditorStartEditing = this.editor.graph.cellEditor.startEditing;
 	
 	this.editor.graph.cellEditor.startEditing = function()
 	{
@@ -1697,7 +1697,7 @@ EditorUi.prototype.initClipboard = function()
 		ui.updatePasteActionStates();
 	};
 	
-	var cellEditorStopEditing = this.editor.graph.cellEditor.stopEditing;
+	let cellEditorStopEditing = this.editor.graph.cellEditor.stopEditing;
 	
 	this.editor.graph.cellEditor.stopEditing = function(cell, trigger)
 	{
@@ -1729,7 +1729,7 @@ EditorUi.prototype.buttonZoomDelay = 600;
 EditorUi.prototype.initCanvas = function()
 {
 	// Initial page layout view, scrollBuffer and timer-based scrolling
-	var graph = this.editor.graph;
+	let graph = this.editor.graph;
 	graph.timerAutoScroll = true;
 
 	/**
@@ -1744,8 +1744,8 @@ EditorUi.prototype.initCanvas = function()
 	// Fits the number of background pages to the graph
 	graph.view.getBackgroundPageBounds = function()
 	{
-		var layout = this.graph.getPageLayout();
-		var page = this.graph.getPageSize();
+		let layout = this.graph.getPageLayout();
+		let page = this.graph.getPageSize();
 		
 		return new mxRectangle(this.scale * (this.translate.x + layout.x * page.width),
 				this.scale * (this.translate.y + layout.y * page.height),
@@ -1755,15 +1755,15 @@ EditorUi.prototype.initCanvas = function()
 
 	graph.getPreferredPageSize = function(bounds, width, height)
 	{
-		var pages = this.getPageLayout();
-		var size = this.getPageSize();
+		let pages = this.getPageLayout();
+		let size = this.getPageSize();
 		
 		return new mxRectangle(0, 0, pages.width * size.width, pages.height * size.height);
 	};
 	
 	// Scales pages/graph to fit available size
-	var resize = null;
-	var ui = this;
+	let resize = null;
+	let ui = this;
 	
 	if (this.editor.isChromelessView())
 	{
@@ -1774,28 +1774,28 @@ EditorUi.prototype.initCanvas = function()
                 cx = (cx != null) ? cx : 0;
                 cy = (cy != null) ? cy : 0;
                 
-                var bds = (graph.pageVisible) ? graph.view.getBackgroundPageBounds() : graph.getGraphBounds();
-                var scroll = mxUtils.hasScrollbars(graph.container);
-                var tr = graph.view.translate;
-                var s = graph.view.scale;
+                let bds = (graph.pageVisible) ? graph.view.getBackgroundPageBounds() : graph.getGraphBounds();
+                let scroll = mxUtils.hasScrollbars(graph.container);
+                let tr = graph.view.translate;
+                let s = graph.view.scale;
                 
                 // Normalizes the bounds
-                var b = mxRectangle.fromRectangle(bds);
+                let b = mxRectangle.fromRectangle(bds);
                 b.x = b.x / s - tr.x;
                 b.y = b.y / s - tr.y;
                 b.width /= s;
                 b.height /= s;
                 
-                var st = graph.container.scrollTop;
-                var sl = graph.container.scrollLeft;
-                var sb = 14;
+                let st = graph.container.scrollTop;
+                let sl = graph.container.scrollLeft;
+                let sb = 14;
 
-                var cw = graph.container.offsetWidth - sb;
-                var ch = graph.container.offsetHeight - sb;
+                let cw = graph.container.offsetWidth - sb;
+                let ch = graph.container.offsetHeight - sb;
                 
-                var ns = (autoscale) ? Math.max(0.3, Math.min(maxScale || 1, cw / b.width)) : s;
-                var dx = ((cw - ns * b.width) / 2) / ns;
-                var dy = (this.lightboxVerticalDivider == 0) ? 0 : ((ch - ns * b.height) / this.lightboxVerticalDivider) / ns;
+                let ns = (autoscale) ? Math.max(0.3, Math.min(maxScale || 1, cw / b.width)) : s;
+                let dx = ((cw - ns * b.width) / 2) / ns;
+                let dy = (this.lightboxVerticalDivider == 0) ? 0 : ((ch - ns * b.height) / this.lightboxVerticalDivider) / ns;
                 
                 if (scroll)
                 {
@@ -1811,7 +1811,7 @@ EditorUi.prototype.initCanvas = function()
                 }
                 else if (cx != 0 || cy != 0)
                 {
-                    var t = graph.view.translate;
+                    let t = graph.view.translate;
                     graph.view.setTranslate(Math.floor(t.x + cx / s), Math.floor(t.y + cy / s));
                 }
             }
@@ -1827,7 +1827,7 @@ EditorUi.prototype.initCanvas = function()
 	   	});
 
 		// Removable resize listener
-		var autoscaleResize = mxUtils.bind(this, function()
+		let autoscaleResize = mxUtils.bind(this, function()
 	   	{
 			this.chromelessWindowResize(false);
 	   	});
@@ -1859,7 +1859,7 @@ EditorUi.prototype.initCanvas = function()
 		// as this may be used in a viewer that has no CSS
 		if (urlParams['toolbar'] != '0')
 		{
-			var toolbarConfig = JSON.parse(decodeURIComponent(urlParams['toolbar-config'] || '{}'));
+			let toolbarConfig = JSON.parse(decodeURIComponent(urlParams['toolbar-config'] || '{}'));
 			
 			this.chromelessToolbar = document.createElement('div');
 			this.chromelessToolbar.style.position = 'fixed';
@@ -1873,9 +1873,9 @@ EditorUi.prototype.initCanvas = function()
 			mxUtils.setPrefixedStyle(this.chromelessToolbar.style, 'borderRadius', '20px');
 			mxUtils.setPrefixedStyle(this.chromelessToolbar.style, 'transition', 'opacity 600ms ease-in-out');
 
-			var updateChromelessToolbarPosition = mxUtils.bind(this, function()
+			let updateChromelessToolbarPosition = mxUtils.bind(this, function()
 			{
-				var css = mxUtils.getCurrentStyle(graph.container);
+				let css = mxUtils.getCurrentStyle(graph.container);
 				
 				if (graph.isViewer())
 				{
@@ -1891,13 +1891,13 @@ EditorUi.prototype.initCanvas = function()
 			this.editor.addListener('resetGraphView', updateChromelessToolbarPosition);
 			updateChromelessToolbarPosition();
 			
-			var btnCount = 0;
+			let btnCount = 0;
 	
-			var addButton = mxUtils.bind(this, function(fn, imgSrc, tip)
+			let addButton = mxUtils.bind(this, function(fn, imgSrc, tip)
 			{
 				btnCount++;
 				
-				var a = document.createElement('span');
+				let a = document.createElement('span');
 				a.style.paddingLeft = '8px';
 				a.style.paddingRight = '8px';
 				a.style.cursor = 'pointer';
@@ -1908,7 +1908,7 @@ EditorUi.prototype.initCanvas = function()
 					a.setAttribute('title', tip);
 				}
 				
-				var img = document.createElement('img');
+				let img = document.createElement('img');
 				img.setAttribute('border', '0');
 				img.setAttribute('src', imgSrc);
 				
@@ -1929,13 +1929,13 @@ EditorUi.prototype.initCanvas = function()
 			
 			if (this.isPagesEnabled())
 			{
-				var prevButton = addButton(mxUtils.bind(this, function(evt)
+				let prevButton = addButton(mxUtils.bind(this, function(evt)
 				{
 					this.actions.get('previousPage').funct();
 					mxEvent.consume(evt);
 				}), Editor.previousLargeImage, mxResources.get('previousPage'));
 				
-				var pageInfo = document.createElement('div');
+				let pageInfo = document.createElement('div');
 				pageInfo.style.display = 'inline-block';
 				pageInfo.style.verticalAlign = 'top';
 				pageInfo.style.fontFamily = 'Helvetica,Arial';
@@ -1944,13 +1944,13 @@ EditorUi.prototype.initCanvas = function()
 				pageInfo.style.color = '#ffffff';
 				this.chromelessToolbar.appendChild(pageInfo);
 				
-				var nextButton = addButton(mxUtils.bind(this, function(evt)
+				let nextButton = addButton(mxUtils.bind(this, function(evt)
 				{
 					this.actions.get('nextPage').funct();
 					mxEvent.consume(evt);
 				}), Editor.nextLargeImage, mxResources.get('nextPage'));
 				
-				var updatePageInfo = mxUtils.bind(this, function()
+				let updatePageInfo = mxUtils.bind(this, function()
 				{
 					if (this.pages != null && this.pages.length > 1 && this.currentPage != null)
 					{
@@ -1964,7 +1964,7 @@ EditorUi.prototype.initCanvas = function()
 				nextButton.style.paddingLeft = '4px';
 				nextButton.style.paddingRight = '0px';
 				
-				var updatePageButtons = mxUtils.bind(this, function()
+				let updatePageButtons = mxUtils.bind(this, function()
 				{
 					if (this.pages != null && this.pages.length > 1 && this.currentPage != null)
 					{
@@ -2022,10 +2022,10 @@ EditorUi.prototype.initCanvas = function()
 			}), Editor.actualSizeLargeImage, mxResources.get('fit'));
 	
 			// Changes toolbar opacity on hover
-			var fadeThread = null;
+			let fadeThread = null;
 			var fadeThread2 = null;
 			
-			var fadeOut = mxUtils.bind(this, function(delay)
+			let fadeOut = mxUtils.bind(this, function(delay)
 			{
 				if (fadeThread != null)
 				{
@@ -2052,7 +2052,7 @@ EditorUi.prototype.initCanvas = function()
 				}), delay || 200);
 			});
 			
-			var fadeIn = mxUtils.bind(this, function(opacity)
+			let fadeIn = mxUtils.bind(this, function(opacity)
 			{
 				if (fadeThread != null)
 				{
@@ -2074,7 +2074,7 @@ EditorUi.prototype.initCanvas = function()
 			{
 				this.layersDialog = null;
 				
-				var layersButton = addButton(mxUtils.bind(this, function(evt)
+				let layersButton = addButton(mxUtils.bind(this, function(evt)
 				{
 					if (this.layersDialog != null)
 					{
@@ -2091,7 +2091,7 @@ EditorUi.prototype.initCanvas = function()
 							this.layersDialog = null;
 						}));
 						
-						var r = layersButton.getBoundingClientRect();
+						let r = layersButton.getBoundingClientRect();
 						
 						mxUtils.setPrefixedStyle(this.layersDialog.style, 'borderRadius', '5px');
 						this.layersDialog.style.position = 'fixed';
@@ -2106,7 +2106,7 @@ EditorUi.prototype.initCanvas = function()
 							this.chromelessToolbar.offsetHeight + 4 + 'px';
 						
 						// Puts the dialog on top of the container z-index
-						var style = mxUtils.getCurrentStyle(this.editor.graph.container);
+						let style = mxUtils.getCurrentStyle(this.editor.graph.container);
 						this.layersDialog.style.zIndex = style.zIndex;
 						
 						document.body.appendChild(this.layersDialog);
@@ -2116,7 +2116,7 @@ EditorUi.prototype.initCanvas = function()
 				}), Editor.layersLargeImage, mxResources.get('layers'));
 				
 				// Shows/hides layers button depending on content
-				var model = graph.getModel();
+				let model = graph.getModel();
 	
 				model.addListener(mxEvent.CHANGE, function()
 				{
@@ -2152,9 +2152,9 @@ EditorUi.prototype.initCanvas = function()
 			
 			if (this.lightboxToolbarActions != null)
 			{
-				for (var i = 0; i < this.lightboxToolbarActions.length; i++)
+				for (let i = 0; i < this.lightboxToolbarActions.length; i++)
 				{
-					var lbAction = this.lightboxToolbarActions[i];
+					let lbAction = this.lightboxToolbarActions[i];
 					addButton(lbAction.fn, lbAction.icon, lbAction.tooltip);
 				}
 			}
@@ -2274,7 +2274,7 @@ EditorUi.prototype.initCanvas = function()
 			}));
 
 			// Shows/hides toolbar for touch devices
-			var tol = graph.getTolerance();
+			let tol = graph.getTolerance();
 
 			graph.addMouseListener(
 			{
@@ -2326,18 +2326,18 @@ EditorUi.prototype.initCanvas = function()
 		 * Works if only the scale of the graph changes or if pages
 		 * are visible and the visible pages do not change.
 		 */
-		var graphViewValidate = graph.view.validate;
+		let graphViewValidate = graph.view.validate;
 		graph.view.validate = function()
 		{
 			if (this.graph.container != null && mxUtils.hasScrollbars(this.graph.container))
 			{
-				var pad = this.graph.getPagePadding();
-				var size = this.graph.getPageSize();
+				let pad = this.graph.getPagePadding();
+				let size = this.graph.getPageSize();
 				
 				// Updating scrollbars here causes flickering in quirks and is not needed
 				// if zoom method is always used to set the current scale on the graph.
-				var tx = this.translate.x;
-				var ty = this.translate.y;
+				let tx = this.translate.x;
+				let ty = this.translate.y;
 				this.translate.x = pad.x - (this.x0 || 0) * size.width;
 				this.translate.y = pad.y - (this.y0 || 0) * size.height;
 			}
@@ -2347,21 +2347,21 @@ EditorUi.prototype.initCanvas = function()
 		
 		if (!graph.isViewer())
 		{
-			var graphSizeDidChange = graph.sizeDidChange;
+			let graphSizeDidChange = graph.sizeDidChange;
 			
 			graph.sizeDidChange = function()
 			{
 				if (this.container != null && mxUtils.hasScrollbars(this.container))
 				{
-					var pages = this.getPageLayout();
-					var pad = this.getPagePadding();
-					var size = this.getPageSize();
+					let pages = this.getPageLayout();
+					let pad = this.getPagePadding();
+					let size = this.getPageSize();
 					
 					// Updates the minimum graph size
-					var minw = Math.ceil(2 * pad.x + pages.width * size.width);
-					var minh = Math.ceil(2 * pad.y + pages.height * size.height);
+					let minw = Math.ceil(2 * pad.x + pages.width * size.width);
+					let minh = Math.ceil(2 * pad.y + pages.height * size.height);
 					
-					var min = graph.minimumGraphSize;
+					let min = graph.minimumGraphSize;
 					
 					// LATER: Fix flicker of scrollbar size in IE quirks mode
 					// after delayed call in window.resize event handler
@@ -2371,8 +2371,8 @@ EditorUi.prototype.initCanvas = function()
 					}
 					
 					// Updates auto-translate to include padding and graph size
-					var dx = pad.x - pages.x * size.width;
-					var dy = pad.y - pages.y * size.height;
+					let dx = pad.x - pages.x * size.width;
+					let dy = pad.y - pages.y * size.height;
 					
 					if (!this.autoTranslate && (this.view.translate.x != dx || this.view.translate.y != dy))
 					{
@@ -2383,8 +2383,8 @@ EditorUi.prototype.initCanvas = function()
 						// NOTE: THIS INVOKES THIS METHOD AGAIN. UNFORTUNATELY THERE IS NO WAY AROUND THIS SINCE THE
 						// BOUNDS ARE KNOWN AFTER THE VALIDATION AND SETTING THE TRANSLATE TRIGGERS A REVALIDATION.
 						// SHOULD MOVE TRANSLATE/SCALE TO VIEW.
-						var tx = graph.view.translate.x;
-						var ty = graph.view.translate.y;
+						let tx = graph.view.translate.x;
+						let ty = graph.view.translate.y;
 						graph.view.setTranslate(dx, dy);
 						
 						// LATER: Fix rounding errors for small zoom
@@ -2409,16 +2409,16 @@ EditorUi.prototype.initCanvas = function()
 	
 	// Accumulates the zoom factor while the rendering is taking place
 	// so that not the complete sequence of zoom steps must be painted
-	var bgGroup = graph.view.getBackgroundPane();
-	var mainGroup = graph.view.getDrawPane();
+	let bgGroup = graph.view.getBackgroundPane();
+	let mainGroup = graph.view.getDrawPane();
 	graph.cumulativeZoomFactor = 1;
-	var updateZoomTimeout = null;
-	var cursorPosition = null;
-	var scrollPosition = null;
-	var forcedZoom = null;
-	var filter = null;
+	let updateZoomTimeout = null;
+	let cursorPosition = null;
+	let scrollPosition = null;
+	let forcedZoom = null;
+	let filter = null;
 	
-	var scheduleZoom = function(delay)
+	let scheduleZoom = function(delay)
 	{
 		if (updateZoomTimeout != null)
 		{
@@ -2467,11 +2467,11 @@ EditorUi.prototype.initCanvas = function()
 		            	graph.view.getOverlayPane().style.opacity = '';
 		    		}
 		        	
-		        	var sp = new mxPoint(graph.container.scrollLeft, graph.container.scrollTop);
-		            var offset = mxUtils.getOffset(graph.container);
-		        	var prev = graph.view.scale;
-		            var dx = 0;
-		            var dy = 0;
+		        	let sp = new mxPoint(graph.container.scrollLeft, graph.container.scrollTop);
+		            let offset = mxUtils.getOffset(graph.container);
+		        	let prev = graph.view.scale;
+		            let dx = 0;
+		            let dy = 0;
 		            
 		            if (cursorPosition != null)
 		            {
@@ -2480,7 +2480,7 @@ EditorUi.prototype.initCanvas = function()
 		            }
 	
 		            graph.zoom(graph.cumulativeZoomFactor);
-		            var s = graph.view.scale;
+		            let s = graph.view.scale;
 		            
 		            if (s != prev)
 		            {
@@ -2573,9 +2573,9 @@ EditorUi.prototype.initCanvas = function()
 
 			scrollPosition = new mxPoint(graph.container.scrollLeft, graph.container.scrollTop);
 			
-			var cx = (ignoreCursorPosition) ? graph.container.scrollLeft + graph.container.clientWidth / 2 :
+			let cx = (ignoreCursorPosition) ? graph.container.scrollLeft + graph.container.clientWidth / 2 :
 				cursorPosition.x + graph.container.scrollLeft - graph.container.offsetLeft;
-			var cy = (ignoreCursorPosition) ? graph.container.scrollTop + graph.container.clientHeight / 2 :
+			let cy = (ignoreCursorPosition) ? graph.container.scrollTop + graph.container.clientHeight / 2 :
 				cursorPosition.y + graph.container.scrollTop - graph.container.offsetTop;
 			mainGroup.style.transformOrigin = cx + 'px ' + cy + 'px';
 			mainGroup.style.transform = 'scale(' + this.cumulativeZoomFactor + ')';
@@ -2584,7 +2584,7 @@ EditorUi.prototype.initCanvas = function()
 			
 			if (graph.view.backgroundPageShape != null && graph.view.backgroundPageShape.node != null)
 			{
-				var page = graph.view.backgroundPageShape.node;
+				let page = graph.view.backgroundPageShape.node;
 				
 				mxUtils.setPrefixedStyle(page.style, 'transform-origin',
 					((ignoreCursorPosition) ? ((graph.container.clientWidth / 2 + graph.container.scrollLeft -
@@ -2640,8 +2640,8 @@ EditorUi.prototype.initCanvas = function()
 			// Scrolls with scrollbars turned off
 			if (!graph.scrollbars && !force && graph.isScrollWheelEvent(evt))
             {
-                var t = graph.view.getTranslate();
-                var step = 40 / graph.view.scale;
+                let t = graph.view.getTranslate();
+                let step = 40 / graph.view.scale;
                 
                 if (!mxEvent.isShiftDown(evt))
                 {
@@ -2654,7 +2654,7 @@ EditorUi.prototype.initCanvas = function()
             }
 			else if (force || graph.isZoomWheelEvent(evt))
 			{
-				var source = mxEvent.getSource(evt);
+				let source = mxEvent.getSource(evt);
 				
 				while (source != null)
 				{
@@ -2710,7 +2710,7 @@ EditorUi.prototype.isPagesEnabled = function()
  */
 EditorUi.prototype.createTemporaryGraph = function(stylesheet)
 {
-	var graph = new Graph(document.createElement('div'));
+	let graph = new Graph(document.createElement('div'));
 	graph.stylesheet.styles = mxUtils.clone(stylesheet.styles);
 	graph.resetViewOnRootChange = false;
 	graph.setConnectable(false);
@@ -2734,7 +2734,7 @@ EditorUi.prototype.createTemporaryGraph = function(stylesheet)
  */
 EditorUi.prototype.addChromelessClickHandler = function()
 {
-	var hl = urlParams['highlight'];
+	let hl = urlParams['highlight'];
 	
 	// Adds leading # for highlight color code
 	if (hl != null && hl.length > 0)
@@ -2773,8 +2773,8 @@ EditorUi.prototype.lightboxFit = function(maxHeight)
 	}
 	else
 	{
-		var p = urlParams['border'];
-		var border = 60;
+		let p = urlParams['border'];
+		let border = 60;
 		
 		if (p != null)
 		{
@@ -2796,7 +2796,7 @@ EditorUi.prototype.lightboxFit = function(maxHeight)
  */
 EditorUi.prototype.isDiagramEmpty = function()
 {
-	var model = this.editor.graph.getModel();
+	let model = this.editor.graph.getModel();
 	
 	return model.getChildCount(model.root) == 1 && model.getChildCount(model.getChildAt(model.root, 0)) == 0;
 };
@@ -2853,7 +2853,7 @@ EditorUi.prototype.open = function()
 			{
 				try
 				{
-					var doc = mxUtils.parseXml(xml); 
+					let doc = mxUtils.parseXml(xml); 
 					this.editor.setGraphXml(doc.documentElement);
 					this.editor.setModified(false);
 					this.editor.undoManager.clear();
@@ -2894,7 +2894,7 @@ EditorUi.prototype.showPopupMenu = function(fn, x, y, evt)
 {
 	this.editor.graph.popupMenuHandler.hideMenu();
 	
-	var menu = new mxPopupMenu(fn);
+	let menu = new mxPopupMenu(fn);
 	menu.div.className += ' geMenubarMenu';
 	menu.smartSeparators = true;
 	menu.showDisabled = true;
@@ -2948,7 +2948,7 @@ EditorUi.prototype.hideCurrentMenu = function()
  */
 EditorUi.prototype.updateDocumentTitle = function()
 {
-	var title = this.editor.getOrCreateFilename();
+	let title = this.editor.getOrCreateFilename();
 	
 	if (this.editor.appName != null)
 	{
@@ -2973,7 +2973,7 @@ EditorUi.prototype.redo = function()
 {
 	try
 	{
-		var graph = this.editor.graph;
+		let graph = this.editor.graph;
 		
 		if (graph.isEditing())
 		{
@@ -2997,13 +2997,13 @@ EditorUi.prototype.undo = function()
 {
 	try
 	{
-		var graph = this.editor.graph;
+		let graph = this.editor.graph;
 	
 		if (graph.isEditing())
 		{
 			// Stops editing and executes undo on graph if native undo
 			// does not affect current editing value
-			var value = graph.cellEditor.textarea.innerHTML;
+			let value = graph.cellEditor.textarea.innerHTML;
 			document.execCommand('undo', false, null);
 	
 			if (value == graph.cellEditor.textarea.innerHTML)
@@ -3052,8 +3052,8 @@ EditorUi.prototype.getEditBlankXml = function()
  */
 EditorUi.prototype.getUrl = function(pathname)
 {
-	var href = (pathname != null) ? pathname : window.location.pathname;
-	var parms = (href.indexOf('?') > 0) ? 1 : 0;
+	let href = (pathname != null) ? pathname : window.location.pathname;
+	let parms = (href.indexOf('?') > 0) ? 1 : 0;
 	
 	// Removes template URL parameter for new blank diagram
 	for (var key in urlParams)
@@ -3079,8 +3079,8 @@ EditorUi.prototype.getUrl = function(pathname)
  */
 EditorUi.prototype.setScrollbars = function(value)
 {
-	var graph = this.editor.graph;
-	var prev = graph.container.style.overflow;
+	let graph = this.editor.graph;
+	let prev = graph.container.style.overflow;
 	graph.scrollbars = value;
 	this.editor.updateGraphComponents();
 
@@ -3108,7 +3108,7 @@ EditorUi.prototype.hasScrollbars = function()
  */
 EditorUi.prototype.resetScrollbars = function()
 {
-	var graph = this.editor.graph;
+	let graph = this.editor.graph;
 	
 	if (!this.editor.extendCanvas)
 	{
@@ -3126,13 +3126,13 @@ EditorUi.prototype.resetScrollbars = function()
 		{
 			if (graph.pageVisible)
 			{
-				var pad = graph.getPagePadding();
+				let pad = graph.getPagePadding();
 				graph.container.scrollTop = Math.floor(pad.y - this.editor.initialTopSpacing) - 1;
 				graph.container.scrollLeft = Math.floor(Math.min(pad.x,
 					(graph.container.scrollWidth - graph.container.clientWidth) / 2)) - 1;
 
 				// Scrolls graph to visible area
-				var bounds = graph.getGraphBounds();
+				let bounds = graph.getGraphBounds();
 				
 				if (bounds.width > 0 && bounds.height > 0)
 				{
@@ -3149,24 +3149,24 @@ EditorUi.prototype.resetScrollbars = function()
 			}
 			else
 			{
-				var bounds = graph.getGraphBounds();
-				var width = Math.max(bounds.width, graph.scrollTileSize.width * graph.view.scale);
-				var height = Math.max(bounds.height, graph.scrollTileSize.height * graph.view.scale);
+				let bounds = graph.getGraphBounds();
+				let width = Math.max(bounds.width, graph.scrollTileSize.width * graph.view.scale);
+				let height = Math.max(bounds.height, graph.scrollTileSize.height * graph.view.scale);
 				graph.container.scrollTop = Math.floor(Math.max(0, bounds.y - Math.max(20, (graph.container.clientHeight - height) / 4)));
 				graph.container.scrollLeft = Math.floor(Math.max(0, bounds.x - Math.max(0, (graph.container.clientWidth - width) / 2)));
 			}
 		}
 		else
 		{
-			var b = mxRectangle.fromRectangle((graph.pageVisible) ? graph.view.getBackgroundPageBounds() : graph.getGraphBounds())
-			var tr = graph.view.translate;
-			var s = graph.view.scale;
+			let b = mxRectangle.fromRectangle((graph.pageVisible) ? graph.view.getBackgroundPageBounds() : graph.getGraphBounds())
+			let tr = graph.view.translate;
+			let s = graph.view.scale;
             b.x = b.x / s - tr.x;
             b.y = b.y / s - tr.y;
             b.width /= s;
             b.height /= s;
             
-            var dy = (graph.pageVisible) ? 0 : Math.max(0, (graph.container.clientHeight - b.height) / 4); 
+            let dy = (graph.pageVisible) ? 0 : Math.max(0, (graph.container.clientHeight - b.height) / 4); 
             
 			graph.view.setTranslate(Math.floor(Math.max(0,
 				(graph.container.clientWidth - b.width) / 2) - b.x + 2),
@@ -3180,10 +3180,10 @@ EditorUi.prototype.resetScrollbars = function()
  */
 EditorUi.prototype.setPageVisible = function(value)
 {
-	var graph = this.editor.graph;
-	var hasScrollbars = mxUtils.hasScrollbars(graph.container);
-	var tx = 0;
-	var ty = 0;
+	let graph = this.editor.graph;
+	let hasScrollbars = mxUtils.hasScrollbars(graph.container);
+	let tx = 0;
+	let ty = 0;
 	
 	if (hasScrollbars)
 	{
@@ -3199,7 +3199,7 @@ EditorUi.prototype.setPageVisible = function(value)
 	// Workaround for possible handle offset
 	if (hasScrollbars)
 	{
-		var cells = graph.getSelectionCells();
+		let cells = graph.getSelectionCells();
 		graph.clearSelection();
 		graph.setSelectionCells(cells);
 	}
@@ -3232,7 +3232,7 @@ function ChangeGridColor(ui, color)
  */
 ChangeGridColor.prototype.execute = function()
 {
-	var temp = this.ui.editor.graph.view.gridColor;
+	let temp = this.ui.editor.graph.view.gridColor;
 	this.ui.setGridColor(this.color);
 	this.color = temp;
 };
@@ -3240,7 +3240,7 @@ ChangeGridColor.prototype.execute = function()
 // Registers codec for ChangePageSetup
 (function()
 {
-	var codec = new mxObjectCodec(new ChangeGridColor(), ['ui']);
+	let codec = new mxObjectCodec(new ChangeGridColor(), ['ui']);
 
 	mxCodecRegistry.register(codec);
 })();
@@ -3270,12 +3270,12 @@ function ChangePageSetup(ui, color, image, format, pageScale)
  */
 ChangePageSetup.prototype.execute = function()
 {
-	var graph = this.ui.editor.graph;
+	let graph = this.ui.editor.graph;
 	
 	if (!this.ignoreColor)
 	{
 		this.color = this.previousColor;
-		var tmp = graph.background;
+		let tmp = graph.background;
 		this.ui.setBackgroundColor(this.previousColor);
 		this.previousColor = tmp;
 	}
@@ -3283,7 +3283,7 @@ ChangePageSetup.prototype.execute = function()
 	if (!this.ignoreImage)
 	{
 		this.image = this.previousImage;
-		var tmp = graph.backgroundImage;
+		let tmp = graph.backgroundImage;
 		this.ui.setBackgroundImage(this.previousImage);
 		this.previousImage = tmp;
 	}
@@ -3291,7 +3291,7 @@ ChangePageSetup.prototype.execute = function()
 	if (this.previousFormat != null)
 	{
 		this.format = this.previousFormat;
-		var tmp = graph.pageFormat;
+		let tmp = graph.pageFormat;
 		
 		if (this.previousFormat.width != tmp.width ||
 			this.previousFormat.height != tmp.height)
@@ -3309,7 +3309,7 @@ ChangePageSetup.prototype.execute = function()
 
     if (this.previousPageScale != null)
     {
-	    var currentPageScale = this.ui.editor.graph.pageScale;
+	    let currentPageScale = this.ui.editor.graph.pageScale;
 	    
 	    if (this.previousPageScale != currentPageScale)
 	    {
@@ -3322,7 +3322,7 @@ ChangePageSetup.prototype.execute = function()
 // Registers codec for ChangePageSetup
 (function()
 {
-	var codec = new mxObjectCodec(new ChangePageSetup(),  ['ui', 'previousColor', 'previousImage', 'previousFormat', 'previousPageScale']);
+	let codec = new mxObjectCodec(new ChangePageSetup(),  ['ui', 'previousColor', 'previousImage', 'previousFormat', 'previousPageScale']);
 
 	codec.afterDecode = function(dec, node, obj)
 	{
@@ -3419,12 +3419,12 @@ EditorUi.prototype.setGridColor = function(value)
  */
 EditorUi.prototype.addUndoListener = function()
 {
-	var undo = this.actions.get('undo');
-	var redo = this.actions.get('redo');
+	let undo = this.actions.get('undo');
+	let redo = this.actions.get('redo');
 	
-	var undoMgr = this.editor.undoManager;
+	let undoMgr = this.editor.undoManager;
 	
-    var undoListener = mxUtils.bind(this, function()
+    let undoListener = mxUtils.bind(this, function()
     {
     	undo.setEnabled(this.canUndo());
     	redo.setEnabled(this.canRedo());
@@ -3436,7 +3436,7 @@ EditorUi.prototype.addUndoListener = function()
     undoMgr.addListener(mxEvent.CLEAR, undoListener);
 	
 	// Overrides cell editor to update action states
-	var cellEditorStartEditing = this.editor.graph.cellEditor.startEditing;
+	let cellEditorStartEditing = this.editor.graph.cellEditor.startEditing;
 	
 	this.editor.graph.cellEditor.startEditing = function()
 	{
@@ -3444,7 +3444,7 @@ EditorUi.prototype.addUndoListener = function()
 		undoListener();
 	};
 	
-	var cellEditorStopEditing = this.editor.graph.cellEditor.stopEditing;
+	let cellEditorStopEditing = this.editor.graph.cellEditor.stopEditing;
 	
 	this.editor.graph.cellEditor.stopEditing = function(cell, trigger)
 	{
@@ -3461,19 +3461,19 @@ EditorUi.prototype.addUndoListener = function()
 */
 EditorUi.prototype.updateActionStates = function()
 {
-	var graph = this.editor.graph;
-	var selected = !graph.isSelectionEmpty();
-	var vertexSelected = false;
-	var groupSelected = false;
-	var edgeSelected = false;
+	let graph = this.editor.graph;
+	let selected = !graph.isSelectionEmpty();
+	let vertexSelected = false;
+	let groupSelected = false;
+	let edgeSelected = false;
 
-	var cells = graph.getSelectionCells();
+	let cells = graph.getSelectionCells();
 	
 	if (cells != null)
 	{
-    	for (var i = 0; i < cells.length; i++)
+    	for (let i = 0; i < cells.length; i++)
     	{
-    		var cell = cells[i];
+    		let cell = cells[i];
     		
     		if (graph.getModel().isEdge(cell))
     		{
@@ -3499,13 +3499,13 @@ EditorUi.prototype.updateActionStates = function()
 	}
 	
 	// Updates action states
-	var actions = ['cut', 'copy', 'bold', 'italic', 'underline', 'delete', 'duplicate',
+	let actions = ['cut', 'copy', 'bold', 'italic', 'underline', 'delete', 'duplicate',
 	               'editStyle', 'editTooltip', 'editLink', 'backgroundColor', 'borderColor',
 	               'edit', 'toFront', 'toBack', 'lockUnlock', 'solid', 'dashed', 'pasteSize',
 	               'dotted', 'fillColor', 'gradientColor', 'shadow', 'fontColor',
 	               'formattedText', 'rounded', 'toggleRounded', 'sharp', 'strokeColor'];
 	
-	for (var i = 0; i < actions.length; i++)
+	for (let i = 0; i < actions.length; i++)
 	{
 		this.actions.get(actions[i]).setEnabled(selected);
 	}
@@ -3518,7 +3518,7 @@ EditorUi.prototype.updateActionStates = function()
 	this.actions.get('rotation').setEnabled(vertexSelected);
 	this.actions.get('wordWrap').setEnabled(vertexSelected);
 	this.actions.get('autosize').setEnabled(vertexSelected);
-   	var oneVertexSelected = vertexSelected && graph.getSelectionCount() == 1;
+   	let oneVertexSelected = vertexSelected && graph.getSelectionCount() == 1;
 	this.actions.get('group').setEnabled(graph.getSelectionCount() > 1 ||
 		(oneVertexSelected && !graph.isContainer(graph.getSelectionCell())));
 	this.actions.get('ungroup').setEnabled(groupSelected);
@@ -3526,14 +3526,14 @@ EditorUi.prototype.updateActionStates = function()
    		graph.getModel().isVertex(graph.getModel().getParent(graph.getSelectionCell())));
 
 	// Updates menu states
-   	var state = graph.view.getState(graph.getSelectionCell());
+   	let state = graph.view.getState(graph.getSelectionCell());
     this.menus.get('navigation').setEnabled(selected || graph.view.currentRoot != null);
     this.actions.get('collapsible').setEnabled(vertexSelected &&
     	(graph.isContainer(graph.getSelectionCell()) || graph.model.getChildCount(graph.getSelectionCell()) > 0));
     this.actions.get('home').setEnabled(graph.view.currentRoot != null);
     this.actions.get('exitGroup').setEnabled(graph.view.currentRoot != null);
     this.actions.get('enterGroup').setEnabled(graph.getSelectionCount() == 1 && graph.isValidRoot(graph.getSelectionCell()));
-    var foldable = graph.getSelectionCount() == 1 && graph.isCellFoldable(graph.getSelectionCell());
+    let foldable = graph.getSelectionCount() == 1 && graph.isCellFoldable(graph.getSelectionCell());
     this.actions.get('expand').setEnabled(foldable);
     this.actions.get('collapse').setEnabled(foldable);
     this.actions.get('editLink').setEnabled(graph.getSelectionCount() == 1);
@@ -3542,7 +3542,7 @@ EditorUi.prototype.updateActionStates = function()
     this.actions.get('guides').setEnabled(graph.isEnabled());
     this.actions.get('grid').setEnabled(!this.editor.chromeless || this.editor.editable);
 
-    var unlocked = graph.isEnabled() && !graph.isCellLocked(graph.getDefaultParent());
+    let unlocked = graph.isEnabled() && !graph.isCellLocked(graph.getDefaultParent());
     this.menus.get('layout').setEnabled(unlocked);
     this.menus.get('insert').setEnabled(unlocked);
     this.menus.get('direction').setEnabled(unlocked && vertexSelected);
@@ -3570,9 +3570,9 @@ EditorUi.prototype.refresh = function(sizeDidChange)
 {
 	sizeDidChange = (sizeDidChange != null) ? sizeDidChange : true;
 	
-	var quirks = false;
-	var w = this.container.clientWidth;
-	var h = this.container.clientHeight;
+	let quirks = false;
+	let w = this.container.clientWidth;
+	let h = this.container.clientHeight;
 
 	if (this.container == document.body)
 	{
@@ -3583,7 +3583,7 @@ EditorUi.prototype.refresh = function(sizeDidChange)
 	// Workaround for bug on iOS see
 	// http://stackoverflow.com/questions/19012135/ios-7-ipad-safari-landscape-innerheight-outerheight-layout-issue
 	// FIXME: Fix if footer visible
-	var off = 0;
+	let off = 0;
 	
 	if (mxClient.IS_IOS && !window.navigator.standalone)
 	{
@@ -3594,8 +3594,8 @@ EditorUi.prototype.refresh = function(sizeDidChange)
 		}
 	}
 	
-	var effHsplitPosition = Math.max(0, Math.min(this.hsplitPosition, w - this.splitSize - 20));
-	var tmp = 0;
+	let effHsplitPosition = Math.max(0, Math.min(this.hsplitPosition, w - this.splitSize - 20));
+	let tmp = 0;
 	
 	if (this.menubar != null)
 	{
@@ -3615,26 +3615,26 @@ EditorUi.prototype.refresh = function(sizeDidChange)
 		tmp += 1;
 	}
 	
-	var sidebarFooterHeight = 0;
+	let sidebarFooterHeight = 0;
 	
 	if (this.sidebarFooterContainer != null)
 	{
-		var bottom = this.footerHeight + off;
+		let bottom = this.footerHeight + off;
 		sidebarFooterHeight = Math.max(0, Math.min(h - tmp - bottom, this.sidebarFooterHeight));
 		this.sidebarFooterContainer.style.width = effHsplitPosition + 'px';
 		this.sidebarFooterContainer.style.height = sidebarFooterHeight + 'px';
 		this.sidebarFooterContainer.style.bottom = bottom + 'px';
 	}
 	
-	var fw = (this.format != null) ? this.formatWidth : 0;
+	let fw = (this.format != null) ? this.formatWidth : 0;
 	this.sidebarContainer.style.top = tmp + 'px';
 	this.sidebarContainer.style.width = effHsplitPosition + 'px';
 	this.formatContainer.style.top = tmp + 'px';
 	this.formatContainer.style.width = fw + 'px';
 	this.formatContainer.style.display = (this.format != null) ? '' : 'none';
 	
-	var diagContOffset = this.getDiagramContainerOffset();
-	var contLeft = (this.hsplit.parentNode != null) ? (effHsplitPosition + this.splitSize) : 0;
+	let diagContOffset = this.getDiagramContainerOffset();
+	let contLeft = (this.hsplit.parentNode != null) ? (effHsplitPosition + this.splitSize) : 0;
 	this.diagramContainer.style.left =  (contLeft + diagContOffset.x) + 'px';
 	this.diagramContainer.style.top = (tmp + diagContOffset.y) + 'px';
 	this.footerContainer.style.height = this.footerHeight + 'px';
@@ -3652,12 +3652,12 @@ EditorUi.prototype.refresh = function(sizeDidChange)
 	{
 		this.menubarContainer.style.width = w + 'px';
 		this.toolbarContainer.style.width = this.menubarContainer.style.width;
-		var sidebarHeight = Math.max(0, h - this.footerHeight - this.menubarHeight - this.toolbarHeight);
+		let sidebarHeight = Math.max(0, h - this.footerHeight - this.menubarHeight - this.toolbarHeight);
 		this.sidebarContainer.style.height = (sidebarHeight - sidebarFooterHeight) + 'px';
 		this.formatContainer.style.height = sidebarHeight + 'px';
 		this.diagramContainer.style.width = (this.hsplit.parentNode != null) ? Math.max(0, w - effHsplitPosition - this.splitSize - fw) + 'px' : w + 'px';
 		this.footerContainer.style.width = this.menubarContainer.style.width;
-		var diagramHeight = Math.max(0, h - this.footerHeight - this.menubarHeight - this.toolbarHeight);
+		let diagramHeight = Math.max(0, h - this.footerHeight - this.menubarHeight - this.toolbarHeight);
 		
 		if (this.tabContainer != null)
 		{
@@ -3677,7 +3677,7 @@ EditorUi.prototype.refresh = function(sizeDidChange)
 		}
 		
 		this.diagramContainer.style.right = fw + 'px';
-		var th = 0;
+		let th = 0;
 		
 		if (this.tabContainer != null)
 		{
@@ -3807,7 +3807,7 @@ EditorUi.prototype.createUi = function()
 	}
 	
 	// Creates the footer
-	var footer = (this.editor.chromeless) ? null : this.createFooter();
+	let footer = (this.editor.chromeless) ? null : this.createFooter();
 	
 	if (footer != null)
 	{
@@ -3854,7 +3854,7 @@ EditorUi.prototype.createUi = function()
  */
 EditorUi.prototype.createStatusContainer = function()
 {
-	var container = document.createElement('a');
+	let container = document.createElement('a');
 	container.className = 'geItem geStatus';
 
 	return container;
@@ -3905,7 +3905,7 @@ EditorUi.prototype.createFooter = function()
  */
 EditorUi.prototype.createDiv = function(classname)
 {
-	var elt = document.createElement('div');
+	let elt = document.createElement('div');
 	elt.className = classname;
 	
 	return elt;
@@ -3916,10 +3916,10 @@ EditorUi.prototype.createDiv = function(classname)
  */
 EditorUi.prototype.addSplitHandler = function(elt, horizontal, dx, onChange)
 {
-	var start = null;
-	var initial = null;
-	var ignoreClick = true;
-	var last = null;
+	let start = null;
+	let initial = null;
+	let ignoreClick = true;
+	let last = null;
 
 	// Disables built-in pan and zoom in IE10 and later
 	if (mxClient.IS_POINTER)
@@ -3927,9 +3927,9 @@ EditorUi.prototype.addSplitHandler = function(elt, horizontal, dx, onChange)
 		elt.style.touchAction = 'none';
 	}
 	
-	var getValue = mxUtils.bind(this, function()
+	let getValue = mxUtils.bind(this, function()
 	{
-		var result = parseInt(((horizontal) ? elt.style.left : elt.style.bottom));
+		let result = parseInt(((horizontal) ? elt.style.left : elt.style.bottom));
 	
 		// Takes into account hidden footer
 		if (!horizontal)
@@ -3944,7 +3944,7 @@ EditorUi.prototype.addSplitHandler = function(elt, horizontal, dx, onChange)
 	{
 		if (start != null)
 		{
-			var pt = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+			let pt = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt));
 			onChange(Math.max(0, initial + ((horizontal) ? (pt.x - start.x) : (start.y - pt.y)) - dx));
 			mxEvent.consume(evt);
 			
@@ -3975,7 +3975,7 @@ EditorUi.prototype.addSplitHandler = function(elt, horizontal, dx, onChange)
 	{
 		if (!ignoreClick && this.hsplitClickEnabled)
 		{
-			var next = (last != null) ? last - dx : 0;
+			let next = (last != null) ? last - dx : 0;
 			last = getValue();
 			onChange(next);
 			mxEvent.consume(evt);
@@ -3998,12 +3998,12 @@ EditorUi.prototype.addSplitHandler = function(elt, horizontal, dx, onChange)
  */
 EditorUi.prototype.handleError = function(resp, title, fn, invokeFnOnClose, notFoundMessage)
 {
-	var e = (resp != null && resp.error != null) ? resp.error : resp;
+	let e = (resp != null && resp.error != null) ? resp.error : resp;
 
 	if (e != null || title != null)
 	{
-		var msg = mxUtils.htmlEntities(mxResources.get('unknownError'));
-		var btn = mxResources.get('ok');
+		let msg = mxUtils.htmlEntities(mxResources.get('unknownError'));
+		let btn = mxResources.get('ok');
 		title = (title != null) ? title : mxResources.get('error');
 		
 		if (e != null && e.message != null)
@@ -4028,9 +4028,9 @@ EditorUi.prototype.handleError = function(resp, title, fn, invokeFnOnClose, notF
  */
 EditorUi.prototype.showError = function(title, msg, btn, fn, retry, btn2, fn2, btn3, fn3, w, h, hide, onClose)
 {
-	var dlg = new ErrorDialog(this, title, msg, btn || mxResources.get('ok'),
+	let dlg = new ErrorDialog(this, title, msg, btn || mxResources.get('ok'),
 		fn, retry, btn2, fn2, hide, btn3, fn3);
-	var lines = Math.ceil((msg != null) ? msg.length / 50 : 1);
+	let lines = Math.ceil((msg != null) ? msg.length / 50 : 1);
 	this.showDialog(dlg.container, w || 340, h || (100 + lines * 20), true, false, onClose);
 	dlg.init();
 };
@@ -4058,7 +4058,7 @@ EditorUi.prototype.hideDialog = function(cancel, isEsc)
 {
 	if (this.dialogs != null && this.dialogs.length > 0)
 	{
-		var dlg = this.dialogs.pop();
+		let dlg = this.dialogs.pop();
 		
 		if (dlg.close(cancel, isEsc) == false) 
 		{
@@ -4093,20 +4093,20 @@ EditorUi.prototype.hideDialog = function(cancel, isEsc)
  */
 EditorUi.prototype.ctrlEnter = function()
 {
-	var graph = this.editor.graph;
+	let graph = this.editor.graph;
 
 	if (graph.isEnabled())
 	{
 		try
 		{
-			var cells = graph.getSelectionCells();
-		    var lookup = new mxDictionary();
-		    var newCells = [];
+			let cells = graph.getSelectionCells();
+		    let lookup = new mxDictionary();
+		    let newCells = [];
 
-		    for (var i = 0; i < cells.length; i++)
+		    for (let i = 0; i < cells.length; i++)
 		    {
 		    	// Clones table rows instead of cells
-		    	var cell = (graph.isTableCell(cells[i])) ? graph.model.getParent(cells[i]) : cells[i];
+		    	let cell = (graph.isTableCell(cells[i])) ? graph.model.getParent(cells[i]) : cells[i];
 		    	
 		    	if (cell != null && !lookup.get(cell))
 		    	{
@@ -4129,12 +4129,12 @@ EditorUi.prototype.ctrlEnter = function()
  */
 EditorUi.prototype.pickColor = function(color, apply)
 {
-	var graph = this.editor.graph;
-	var selState = graph.cellEditor.saveSelection();
-	var h = 226 + ((Math.ceil(ColorDialog.prototype.presetColors.length / 12) +
+	let graph = this.editor.graph;
+	let selState = graph.cellEditor.saveSelection();
+	let h = 226 + ((Math.ceil(ColorDialog.prototype.presetColors.length / 12) +
 		Math.ceil(ColorDialog.prototype.defaultColors.length / 12)) * 17);
 	
-	var dlg = new ColorDialog(this, color || 'none', function(color)
+	let dlg = new ColorDialog(this, color || 'none', function(color)
 	{
 		graph.cellEditor.restoreSelection(selState);
 		apply(color);
@@ -4170,11 +4170,11 @@ EditorUi.prototype.openFile = function()
  */
 EditorUi.prototype.extractGraphModelFromHtml = function(data)
 {
-	var result = null;
+	let result = null;
 	
 	try
 	{
-    	var idx = data.indexOf('&lt;mxGraphModel ');
+    	let idx = data.indexOf('&lt;mxGraphModel ');
     	
     	if (idx >= 0)
     	{
@@ -4200,12 +4200,12 @@ EditorUi.prototype.extractGraphModelFromHtml = function(data)
  */
 EditorUi.prototype.extractGraphModelFromEvent = function(evt)
 {
-	var result = null;
-	var data = null;
+	let result = null;
+	let data = null;
 	
 	if (evt != null)
 	{
-		var provider = (evt.dataTransfer != null) ? evt.dataTransfer : evt.clipboardData;
+		let provider = (evt.dataTransfer != null) ? evt.dataTransfer : evt.clipboardData;
 		
 		if (provider != null)
 		{
@@ -4221,7 +4221,7 @@ EditorUi.prototype.extractGraphModelFromEvent = function(evt)
 				data = Graph.zapGremlins(mxUtils.trim(data));
 				
 				// Tries parsing as HTML document with embedded XML
-				var xml =  this.extractGraphModelFromHtml(data);
+				let xml =  this.extractGraphModelFromHtml(data);
 				
 				if (xml != null)
 				{
@@ -4259,7 +4259,7 @@ EditorUi.prototype.saveFile = function(forceDialog)
 	}
 	else
 	{
-		var dlg = new FilenameDialog(this, this.editor.getOrCreateFilename(), mxResources.get('save'), mxUtils.bind(this, function(name)
+		let dlg = new FilenameDialog(this, this.editor.getOrCreateFilename(), mxResources.get('save'), mxUtils.bind(this, function(name)
 		{
 			this.save(name);
 		}), null, mxUtils.bind(this, function(name)
@@ -4290,7 +4290,7 @@ EditorUi.prototype.save = function(name)
 			this.editor.graph.stopEditing();
 		}
 		
-		var xml = mxUtils.getXml(this.editor.getGraphXml());
+		let xml = mxUtils.getXml(this.editor.getGraphXml());
 		
 		try
 		{
@@ -4337,7 +4337,7 @@ EditorUi.prototype.save = function(name)
  */
 EditorUi.prototype.executeLayout = function(exec, animate, post)
 {
-	var graph = this.editor.graph;
+	let graph = this.editor.graph;
 
 	if (graph.isEnabled())
 	{
@@ -4358,7 +4358,7 @@ EditorUi.prototype.executeLayout = function(exec, animate, post)
 				navigator.userAgent.indexOf('Camino') < 0))
 			{
 				// New API for animating graph layout results asynchronously
-				var morph = new mxMorphing(graph);
+				let morph = new mxMorphing(graph);
 				morph.addListener(mxEvent.DONE, mxUtils.bind(this, function()
 				{
 					graph.getModel().endUpdate();
@@ -4389,14 +4389,14 @@ EditorUi.prototype.executeLayout = function(exec, animate, post)
  */
 EditorUi.prototype.showImageDialog = function(title, value, fn, ignoreExisting)
 {
-	var cellEditor = this.editor.graph.cellEditor;
-	var selState = cellEditor.saveSelection();
-	var newValue = mxUtils.prompt(title, value);
+	let cellEditor = this.editor.graph.cellEditor;
+	let selState = cellEditor.saveSelection();
+	let newValue = mxUtils.prompt(title, value);
 	cellEditor.restoreSelection(selState);
 	
 	if (newValue != null && newValue.length > 0)
 	{
-		var img = new Image();
+		let img = new Image();
 		
 		img.onload = function()
 		{
@@ -4421,7 +4421,7 @@ EditorUi.prototype.showImageDialog = function(title, value, fn, ignoreExisting)
  */
 EditorUi.prototype.showLinkDialog = function(value, btnLabel, fn)
 {
-	var dlg = new LinkDialog(this, value, btnLabel, fn);
+	let dlg = new LinkDialog(this, value, btnLabel, fn);
 	this.showDialog(dlg.container, 420, 90, true, true);
 	dlg.init();
 };
@@ -4433,7 +4433,7 @@ EditorUi.prototype.showDataDialog = function(cell)
 {
 	if (cell != null)
 	{
-		var dlg = new EditDataDialog(this, cell);
+		let dlg = new EditDataDialog(this, cell);
 		this.showDialog(dlg.container, 480, 420, true, false, null, false);
 		dlg.init();
 	}
@@ -4446,17 +4446,17 @@ EditorUi.prototype.showBackgroundImageDialog = function(apply, img)
 {
 	apply = (apply != null) ? apply : mxUtils.bind(this, function(image)
 	{
-		var change = new ChangePageSetup(this, null, image);
+		let change = new ChangePageSetup(this, null, image);
 		change.ignoreColor = true;
 		
 		this.editor.graph.model.execute(change);
 	});
 	
-	var newValue = mxUtils.prompt(mxResources.get('backgroundImage'), (img != null) ? img.src : '');
+	let newValue = mxUtils.prompt(mxResources.get('backgroundImage'), (img != null) ? img.src : '');
 	
 	if (newValue != null && newValue.length > 0)
 	{
-		var img = new Image();
+		let img = new Image();
 		
 		img.onload = function()
 		{
@@ -4510,7 +4510,7 @@ EditorUi.prototype.confirm = function(msg, okFn, cancelFn)
  */
 EditorUi.prototype.createOutline = function(wnd)
 {
-	var outline = new mxOutline(this.editor.graph);
+	let outline = new mxOutline(this.editor.graph);
 	outline.border = 20;
 
 	mxEvent.addListener(window, 'resize', function()
@@ -4541,11 +4541,11 @@ EditorUi.prototype.altShiftActions = {67: 'clearWaypoints', // Alt+Shift+C
  */
 EditorUi.prototype.createKeyHandler = function(editor)
 {
-	var editorUi = this;
-	var graph = this.editor.graph;
-	var keyHandler = new mxKeyHandler(graph);
+	let editorUi = this;
+	let graph = this.editor.graph;
+	let keyHandler = new mxKeyHandler(graph);
 
-	var isEventIgnored = keyHandler.isEventIgnored;
+	let isEventIgnored = keyHandler.isEventIgnored;
 	keyHandler.isEventIgnored = function(evt)
 	{
 		// Handles undo/redo/ctrl+./,/u via action and allows ctrl+b/i
@@ -4571,8 +4571,8 @@ EditorUi.prototype.createKeyHandler = function(editor)
 		return mxEvent.isControlDown(evt) || (mxClient.IS_MAC && evt.metaKey);
 	};
 
-	var queue = [];
-	var thread = null;
+	let queue = [];
+	let thread = null;
 	
 	// Helper function to move cells with the cursor keys
 	function nudge(keyCode, stepSize, resize)
@@ -4589,13 +4589,13 @@ EditorUi.prototype.createKeyHandler = function(editor)
 					graph.getModel().beginUpdate();
 					try
 					{
-						var cells = graph.getSelectionCells();
+						let cells = graph.getSelectionCells();
 						
-						for (var i = 0; i < cells.length; i++)
+						for (let i = 0; i < cells.length; i++)
 						{
 							if (graph.getModel().isVertex(cells[i]) && graph.isCellResizable(cells[i]))
 							{
-								var geo = graph.getCellGeometry(cells[i]);
+								let geo = graph.getCellGeometry(cells[i]);
 								
 								if (geo != null)
 								{
@@ -4631,9 +4631,9 @@ EditorUi.prototype.createKeyHandler = function(editor)
 				else
 				{
 					// Moves vertices up/down in a stack layout
-					var cell = graph.getSelectionCell();
-					var parent = graph.model.getParent(cell);
-					var layout = null;
+					let cell = graph.getSelectionCell();
+					let parent = graph.model.getParent(cell);
+					let layout = null;
 	
 					if (graph.getSelectionCount() == 1 && graph.model.isVertex(cell) &&
 						graph.layoutManager != null && !graph.isCellLocked(cell))
@@ -4643,7 +4643,7 @@ EditorUi.prototype.createKeyHandler = function(editor)
 					
 					if (layout != null && layout.constructor == mxStackLayout)
 					{
-						var index = parent.getIndex(cell);
+						let index = parent.getIndex(cell);
 						
 						if (keyCode == 37 || keyCode == 38)
 						{
@@ -4656,17 +4656,17 @@ EditorUi.prototype.createKeyHandler = function(editor)
 					}
 					else
 					{
-						var cells = graph.getMovableCells(graph.getSelectionCells());
-						var realCells = [];
+						let cells = graph.getMovableCells(graph.getSelectionCells());
+						let realCells = [];
 						
-					    for (var i = 0; i < cells.length; i++)
+					    for (let i = 0; i < cells.length; i++)
 					    {
 					    	// TODO: Use getCompositeParent
-							var style = graph.getCurrentCellStyle(cells[i]);
+							let style = graph.getCurrentCellStyle(cells[i]);
 					    	
 							if (mxUtils.getValue(style, 'part', '0') == '1')
 							{
-						        var parent = graph.model.getParent(cells[i]);
+						        let parent = graph.model.getParent(cells[i]);
 					
 						        if (graph.model.isVertex(parent) && mxUtils.indexOf(cells, parent) < 0)
 						        {
@@ -4682,8 +4682,8 @@ EditorUi.prototype.createKeyHandler = function(editor)
 					    if (realCells.length > 0)
 					    {
 						    cells = realCells;
-							var dx = 0;
-							var dy = 0;
+							let dx = 0;
+							let dy = 0;
 							
 							if (keyCode == 37)
 							{
@@ -4722,7 +4722,7 @@ EditorUi.prototype.createKeyHandler = function(editor)
 				
 				try
 				{
-					for (var i = 0; i < queue.length; i++)
+					for (let i = 0; i < queue.length; i++)
 					{
 						queue[i]();
 					}
@@ -4738,10 +4738,10 @@ EditorUi.prototype.createKeyHandler = function(editor)
 	};
 	
 	// Overridden to handle special alt+shift+cursor keyboard shortcuts
-	var directions = {37: mxConstants.DIRECTION_WEST, 38: mxConstants.DIRECTION_NORTH,
+	let directions = {37: mxConstants.DIRECTION_WEST, 38: mxConstants.DIRECTION_NORTH,
 			39: mxConstants.DIRECTION_EAST, 40: mxConstants.DIRECTION_SOUTH};
 	
-	var keyHandlerGetFunction = keyHandler.getFunction;
+	let keyHandlerGetFunction = keyHandler.getFunction;
 
 	mxKeyHandler.prototype.getFunction = function(evt)
 	{
@@ -4750,7 +4750,7 @@ EditorUi.prototype.createKeyHandler = function(editor)
 			// TODO: Add alt modified state in core API, here are some specific cases
 			if (mxEvent.isShiftDown(evt) && mxEvent.isAltDown(evt))
 			{
-				var action = editorUi.actions.get(editorUi.altShiftActions[evt.keyCode]);
+				let action = editorUi.actions.get(editorUi.altShiftActions[evt.keyCode]);
 
 				if (action != null)
 				{
@@ -4794,7 +4794,7 @@ EditorUi.prototype.createKeyHandler = function(editor)
 					{
 						return function()
 						{
-							var cells = graph.connectVertex(graph.getSelectionCell(), directions[evt.keyCode],
+							let cells = graph.connectVertex(graph.getSelectionCell(), directions[evt.keyCode],
 								graph.defaultEdgeLength, evt, true);
 			
 							if (cells != null && cells.length > 0)
@@ -4846,11 +4846,11 @@ EditorUi.prototype.createKeyHandler = function(editor)
 	// Binds keystrokes to actions
 	keyHandler.bindAction = mxUtils.bind(this, function(code, control, key, shift)
 	{
-		var action = this.actions.get(key);
+		let action = this.actions.get(key);
 		
 		if (action != null)
 		{
-			var f = function()
+			let f = function()
 			{
 				if (action.isEnabled())
 				{
@@ -4883,8 +4883,8 @@ EditorUi.prototype.createKeyHandler = function(editor)
 		}
 	});
 
-	var ui = this;
-	var keyHandlerEscape = keyHandler.escape;
+	let ui = this;
+	let keyHandlerEscape = keyHandler.escape;
 	keyHandler.escape = function(evt)
 	{
 		keyHandlerEscape.apply(this, arguments);
@@ -5039,7 +5039,7 @@ EditorUi.prototype.destroy = function()
 
 	if (this.destroyFunctions != null)
 	{
-		for (var i = 0; i < this.destroyFunctions.length; i++)
+		for (let i = 0; i < this.destroyFunctions.length; i++)
 		{
 			this.destroyFunctions[i]();
 		}
@@ -5047,12 +5047,12 @@ EditorUi.prototype.destroy = function()
 		this.destroyFunctions = null;
 	}
 	
-	var c = [this.menubarContainer, this.toolbarContainer, this.sidebarContainer,
+	let c = [this.menubarContainer, this.toolbarContainer, this.sidebarContainer,
 	         this.formatContainer, this.diagramContainer, this.footerContainer,
 	         this.chromelessToolbar, this.hsplit, this.sidebarFooterContainer,
 	         this.layersDialog];
 	
-	for (var i = 0; i < c.length; i++)
+	for (let i = 0; i < c.length; i++)
 	{
 		if (c[i] != null && c[i].parentNode != null)
 		{
diff --git a/src/examples/grapheditor/www/js/Format.js b/src/examples/grapheditor/www/js/Format.js
index 33a7d78ac..837150e26 100644
--- a/src/examples/grapheditor/www/js/Format.js
+++ b/src/examples/grapheditor/www/js/Format.js
@@ -45,9 +45,9 @@ Format.prototype.roundableShapes = ['label', 'rectangle', 'internalStorage', 'co
  */
 Format.prototype.init = function()
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
 	
 	this.update = mxUtils.bind(this, function(sender, evt)
 	{
@@ -103,10 +103,10 @@ Format.prototype.getSelectionState = function()
  */
 Format.prototype.createSelectionState = function()
 {
-	var cells = this.editorUi.editor.graph.getSelectionCells();
-	var result = this.initSelectionState();
+	let cells = this.editorUi.editor.graph.getSelectionCells();
+	let result = this.initSelectionState();
 	
-	for (var i = 0; i < cells.length; i++)
+	for (let i = 0; i < cells.length; i++)
 	{
 		this.updateSelectionStateForCell(result, cells[i], cells);
 	}
@@ -130,7 +130,7 @@ Format.prototype.initSelectionState = function()
  */
 Format.prototype.updateSelectionStateForCell = function(result, cell, cells)
 {
-	var graph = this.editorUi.editor.graph;
+	let graph = this.editorUi.editor.graph;
 	
 	if (graph.getModel().isVertex(cell))
 	{
@@ -142,7 +142,7 @@ Format.prototype.updateSelectionStateForCell = function(result, cell, cells)
 		result.cell = result.cell || graph.isTableCell(cell);
 		result.row = result.row || graph.isTableRow(cell);
 		result.vertices.push(cell);
-		var geo = graph.getCellGeometry(cell);
+		let geo = graph.getCellGeometry(cell);
 		
 		if (geo != null)
 		{
@@ -180,8 +180,8 @@ Format.prototype.updateSelectionStateForCell = function(result, cell, cells)
 			
 			if (!geo.relative || geo.offset != null)
 			{
-				var x = (geo.relative) ? geo.offset.x : geo.x;
-				var y = (geo.relative) ? geo.offset.y : geo.y;
+				let x = (geo.relative) ? geo.offset.x : geo.x;
+				let y = (geo.relative) ? geo.offset.y : geo.y;
 				
 				if (result.x == null)
 				{
@@ -211,7 +211,7 @@ Format.prototype.updateSelectionStateForCell = function(result, cell, cells)
 		result.movable = false;
 	}
 
-	var state = graph.view.getState(cell);
+	let state = graph.view.getState(cell);
 	
 	if (state != null)
 	{
@@ -224,12 +224,12 @@ Format.prototype.updateSelectionStateForCell = function(result, cell, cells)
 		result.fill = result.fill && this.isFillState(state);
 		result.stroke = result.stroke && this.isStrokeState(state);
 		
-		var shape = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
+		let shape = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
 		result.containsImage = result.containsImage || shape == 'image';
 		
 		for (var key in state.style)
 		{
-			var value = state.style[key];
+			let value = state.style[key];
 			
 			if (value != null)
 			{
@@ -281,7 +281,7 @@ Format.prototype.isSpecialColor = function(color)
  */
 Format.prototype.isGlassState = function(state)
 {
-	var shape = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
+	let shape = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
 	
 	return (shape == 'label' || shape == 'rectangle' || shape == 'internalStorage' ||
 			shape == 'ext' || shape == 'umlLifeline' || shape == 'swimlane' ||
@@ -303,8 +303,8 @@ Format.prototype.isRoundedState = function(state)
  */
 Format.prototype.isLineJumpState = function(state)
 {
-	var shape = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
-	var curved = mxUtils.getValue(state.style, mxConstants.STYLE_CURVED, false);
+	let shape = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
+	let curved = mxUtils.getValue(state.style, mxConstants.STYLE_CURVED, false);
 	
 	return !curved && (shape == 'connector' || shape == 'filledEdge');
 };
@@ -322,7 +322,7 @@ Format.prototype.isAutoSizeState = function(state)
  */
 Format.prototype.isImageState = function(state)
 {
-	var shape = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
+	let shape = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
 	
 	return (shape == 'label' || shape == 'image');
 };
@@ -332,7 +332,7 @@ Format.prototype.isImageState = function(state)
  */
 Format.prototype.isShadowState = function(state)
 {
-	var shape = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
+	let shape = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
 	
 	return (shape != 'image');
 };
@@ -347,7 +347,7 @@ Format.prototype.clear = function()
 	// Destroy existing panels
 	if (this.panels != null)
 	{
-		for (var i = 0; i < this.panels.length; i++)
+		for (let i = 0; i < this.panels.length; i++)
 		{
 			this.panels[i].destroy();
 		}
@@ -368,16 +368,16 @@ Format.prototype.refresh = function()
 	}
 	
 	this.clear();
-	var ui = this.editorUi;
-	var graph = ui.editor.graph;
+	let ui = this.editorUi;
+	let graph = ui.editor.graph;
 	
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	div.style.whiteSpace = 'nowrap';
 	div.style.color = 'rgb(112, 112, 112)';
 	div.style.textAlign = 'left';
 	div.style.cursor = 'default';
 	
-	var label = document.createElement('div');
+	let label = document.createElement('div');
 	label.className = 'geFormatSection';
 	label.style.textAlign = 'center';
 	label.style.fontWeight = 'bold';
@@ -398,13 +398,13 @@ Format.prototype.refresh = function()
 		evt.preventDefault();
 	}));
 
-	var containsLabel = this.getSelectionState().containsLabel;
-	var currentLabel = null;
-	var currentPanel = null;
+	let containsLabel = this.getSelectionState().containsLabel;
+	let currentLabel = null;
+	let currentPanel = null;
 	
-	var addClickHandler = mxUtils.bind(this, function(elt, panel, index)
+	let addClickHandler = mxUtils.bind(this, function(elt, panel, index)
 	{
-		var clickHandler = mxUtils.bind(this, function(evt)
+		let clickHandler = mxUtils.bind(this, function(evt)
 		{
 			if (currentLabel != elt)
 			{
@@ -461,7 +461,7 @@ Format.prototype.refresh = function()
 		}
 	});
 	
-	var idx = 0;
+	let idx = 0;
 
 	if (graph.isSelectionEmpty())
 	{
@@ -469,7 +469,7 @@ Format.prototype.refresh = function()
 		label.style.borderLeftWidth = '0px';
 
 		div.appendChild(label);
-		var diagramPanel = div.cloneNode(false);
+		let diagramPanel = div.cloneNode(false);
 		this.panels.push(new DiagramFormatPanel(this, ui, diagramPanel));
 		this.container.appendChild(diagramPanel);
 		
@@ -487,7 +487,7 @@ Format.prototype.refresh = function()
 			
 			addClickHandler(label, diagramPanel, idx++);
 			
-			var stylePanel = div.cloneNode(false);
+			let stylePanel = div.cloneNode(false);
 			stylePanel.style.display = 'none';
 			mxUtils.write(label2, mxResources.get('style'));
 			div.appendChild(label2);
@@ -512,7 +512,7 @@ Format.prototype.refresh = function()
 			label2.style.top = '0px';
 			label2.style.width = '25px';
 			
-			var img = document.createElement('img');
+			let img = document.createElement('img');
 			img.setAttribute('border', '0');
 			img.setAttribute('src', Dialog.prototype.closeImage);
 			img.setAttribute('title', mxResources.get('hide'));
@@ -566,7 +566,7 @@ Format.prototype.refresh = function()
 			mxUtils.write(label, mxResources.get('style'));
 			div.appendChild(label);
 			
-			var stylePanel = div.cloneNode(false);
+			let stylePanel = div.cloneNode(false);
 			stylePanel.style.display = 'none';
 			this.panels.push(new StyleFormatPanel(this, ui, stylePanel));
 			this.container.appendChild(stylePanel);
@@ -578,7 +578,7 @@ Format.prototype.refresh = function()
 		mxUtils.write(label2, mxResources.get('text'));
 		div.appendChild(label2);
 
-		var textPanel = div.cloneNode(false);
+		let textPanel = div.cloneNode(false);
 		textPanel.style.display = 'none';
 		this.panels.push(new TextFormatPanel(this, ui, textPanel));
 		this.container.appendChild(textPanel);
@@ -587,7 +587,7 @@ Format.prototype.refresh = function()
 		mxUtils.write(label3, mxResources.get('arrange'));
 		div.appendChild(label3);
 
-		var arrangePanel = div.cloneNode(false);
+		let arrangePanel = div.cloneNode(false);
 		arrangePanel.style.display = 'none';
 		this.panels.push(new ArrangePanel(this, ui, arrangePanel));
 		this.container.appendChild(arrangePanel);
@@ -618,17 +618,17 @@ BaseFormatPanel.prototype.buttonBackgroundColor = 'white';
  */
 BaseFormatPanel.prototype.getSelectionState = function()
 {
-	var graph = this.editorUi.editor.graph;
-	var cells = graph.getSelectionCells();
-	var shape = null;
+	let graph = this.editorUi.editor.graph;
+	let cells = graph.getSelectionCells();
+	let shape = null;
 
-	for (var i = 0; i < cells.length; i++)
+	for (let i = 0; i < cells.length; i++)
 	{
-		var state = graph.view.getState(cells[i]);
+		let state = graph.view.getState(cells[i]);
 		
 		if (state != null)
 		{
-			var tmp = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
+			let tmp = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
 			
 			if (tmp != null)
 			{
@@ -656,18 +656,18 @@ BaseFormatPanel.prototype.installInputHandler = function(input, key, defaultValu
 	unit = (unit != null) ? unit : '';
 	isFloat = (isFloat != null) ? isFloat : false;
 	
-	var ui = this.editorUi;
-	var graph = ui.editor.graph;
+	let ui = this.editorUi;
+	let graph = ui.editor.graph;
 	
 	min = (min != null) ? min : 1;
 	max = (max != null) ? max : 999;
 	
-	var selState = null;
-	var updating = false;
+	let selState = null;
+	let updating = false;
 	
-	var update = mxUtils.bind(this, function(evt)
+	let update = mxUtils.bind(this, function(evt)
 	{
-		var value = (isFloat) ? parseFloat(input.value) : parseInt(input.value);
+		let value = (isFloat) ? parseFloat(input.value) : parseInt(input.value);
 
 		// Special case: angle mod 360
 		if (!isNaN(value) && key == mxConstants.STYLE_ROTATION)
@@ -708,7 +708,7 @@ BaseFormatPanel.prototype.installInputHandler = function(input, key, defaultValu
 			graph.getModel().beginUpdate();
 			try
 			{
-				var cells = graph.getSelectionCells();
+				let cells = graph.getSelectionCells();
 				graph.setCellStyles(key, value, cells);
 
 				// Handles special case for fontSize where HTML labels are parsed and updated
@@ -721,7 +721,7 @@ BaseFormatPanel.prototype.installInputHandler = function(input, key, defaultValu
 					});
 				}
 				
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
 					if (graph.model.getChildCount(cells[i]) == 0)
 					{
@@ -774,7 +774,7 @@ BaseFormatPanel.prototype.installInputHandler = function(input, key, defaultValu
  */
 BaseFormatPanel.prototype.createPanel = function()
 {
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	div.className = 'geFormatSection';
 	div.style.padding = '12px 0px 12px 18px';
 	
@@ -786,7 +786,7 @@ BaseFormatPanel.prototype.createPanel = function()
  */
 BaseFormatPanel.prototype.createTitle = function(title)
 {
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	div.style.padding = '0px 0px 6px 0px';
 	div.style.whiteSpace = 'nowrap';
 	div.style.overflow = 'hidden';
@@ -810,12 +810,12 @@ BaseFormatPanel.prototype.createStepper = function(input, update, step, height,
 		height = height + 1;
 	} 
 	
-	var stepper = document.createElement('div');
+	let stepper = document.createElement('div');
 	mxUtils.setPrefixedStyle(stepper.style, 'borderRadius', '3px');
 	stepper.style.border = '1px solid rgb(192, 192, 192)';
 	stepper.style.position = 'absolute';
 	
-	var up = document.createElement('div');
+	let up = document.createElement('div');
 	up.style.borderBottom = '1px solid rgb(192, 192, 192)';
 	up.style.position = 'relative';
 	up.style.height = height + 'px';
@@ -823,7 +823,7 @@ BaseFormatPanel.prototype.createStepper = function(input, update, step, height,
 	up.className = 'geBtnUp';
 	stepper.appendChild(up);
 	
-	var down = up.cloneNode(false);
+	let down = up.cloneNode(false);
 	down.style.border = 'none';
 	down.style.height = height + 'px';
 	down.className = 'geBtnDown';
@@ -836,7 +836,7 @@ BaseFormatPanel.prototype.createStepper = function(input, update, step, height,
 			input.value = defaultValue || '2';
 		}
 		
-		var val = isFloat? parseFloat(input.value) : parseInt(input.value);
+		let val = isFloat? parseFloat(input.value) : parseInt(input.value);
 		
 		if (!isNaN(val))
 		{
@@ -858,7 +858,7 @@ BaseFormatPanel.prototype.createStepper = function(input, update, step, height,
 			input.value = defaultValue || '0';
 		}
 		
-		var val = isFloat? parseFloat(input.value) : parseInt(input.value);
+		let val = isFloat? parseFloat(input.value) : parseInt(input.value);
 		
 		if (!isNaN(val))
 		{
@@ -878,7 +878,7 @@ BaseFormatPanel.prototype.createStepper = function(input, update, step, height,
 	// stay on the selected text, but not for any other input.
 	if (disableFocus)
 	{
-		var currentSelection = null;
+		let currentSelection = null;
 		
 		mxEvent.addGestureListeners(stepper,
 			function(evt)
@@ -915,26 +915,26 @@ BaseFormatPanel.prototype.createStepper = function(input, update, step, height,
  */
 BaseFormatPanel.prototype.createOption = function(label, isCheckedFn, setCheckedFn, listener, fn)
 {
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	div.style.padding = '6px 0px 1px 0px';
 	div.style.whiteSpace = 'nowrap';
 	div.style.overflow = 'hidden';
 	div.style.width = '200px';
 	div.style.height = '18px';
 	
-	var cb = document.createElement('input');
+	let cb = document.createElement('input');
 	cb.setAttribute('type', 'checkbox');
 	cb.style.margin = '0px 6px 0px 0px';
 	div.appendChild(cb);
 
-	var span = document.createElement('span');
+	let span = document.createElement('span');
 	mxUtils.write(span, label);
 	div.appendChild(span);
 
-	var applying = false;
-	var value = isCheckedFn();
+	let applying = false;
+	let value = isCheckedFn();
 	
-	var apply = function(newValue)
+	let apply = function(newValue)
 	{
 		if (!applying)
 		{
@@ -973,7 +973,7 @@ BaseFormatPanel.prototype.createOption = function(label, isCheckedFn, setChecked
 		if (cb.getAttribute('disabled') != 'disabled')
 		{
 			// Toggles checkbox state for click on label
-			var source = mxEvent.getSource(evt);
+			let source = mxEvent.getSource(evt);
 			
 			if (source == div || source == span)
 			{
@@ -1008,14 +1008,14 @@ BaseFormatPanel.prototype.createCellOption = function(label, key, defaultValue,
 	enabledValue = (enabledValue != null) ? ((enabledValue == 'null') ? null : enabledValue) : '1';
 	disabledValue = (disabledValue != null) ? ((disabledValue == 'null') ? null : disabledValue) : '0';
 	
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
 	
 	return this.createOption(label, function()
 	{
 		// Seems to be null sometimes, not sure why...
-		var state = graph.view.getState(graph.getSelectionCell());
+		let state = graph.view.getState(graph.getSelectionCell());
 		
 		if (state != null)
 		{
@@ -1039,7 +1039,7 @@ BaseFormatPanel.prototype.createCellOption = function(label, key, defaultValue,
 			graph.getModel().beginUpdate();
 			try
 			{
-				var value = (checked) ? enabledValue : disabledValue;
+				let value = (checked) ? enabledValue : disabledValue;
 				graph.setCellStyles(key, value, graph.getSelectionCells());
 				
 				if (fn != null)
@@ -1062,7 +1062,7 @@ BaseFormatPanel.prototype.createCellOption = function(label, key, defaultValue,
 			this.listener = function()
 			{
 				// Seems to be null sometimes, not sure why...
-				var state = graph.view.getState(graph.getSelectionCell());
+				let state = graph.view.getState(graph.getSelectionCell());
 				
 				if (state != null)
 				{
@@ -1084,14 +1084,14 @@ BaseFormatPanel.prototype.createCellOption = function(label, key, defaultValue,
  */
 BaseFormatPanel.prototype.createColorOption = function(label, getColorFn, setColorFn, defaultColor, listener, callbackFn, hideCheckbox)
 {
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	div.style.padding = '6px 0px 1px 0px';
 	div.style.whiteSpace = 'nowrap';
 	div.style.overflow = 'hidden';
 	div.style.width = '200px';
 	div.style.height = '18px';
 	
-	var cb = document.createElement('input');
+	let cb = document.createElement('input');
 	cb.setAttribute('type', 'checkbox');
 	cb.style.margin = '0px 6px 0px 0px';
 	
@@ -1100,15 +1100,15 @@ BaseFormatPanel.prototype.createColorOption = function(label, getColorFn, setCol
 		div.appendChild(cb);	
 	}
 
-	var span = document.createElement('span');
+	let span = document.createElement('span');
 	mxUtils.write(span, label);
 	div.appendChild(span);
 	
-	var value = getColorFn();
-	var applying = false;
-	var btn = null;
+	let value = getColorFn();
+	let applying = false;
+	let btn = null;
 
-	var apply = function(color, disableUpdate, forceUpdate)
+	let apply = function(color, disableUpdate, forceUpdate)
 	{
 		if (!applying)
 		{
@@ -1173,7 +1173,7 @@ BaseFormatPanel.prototype.createColorOption = function(label, getColorFn, setCol
 
 	mxEvent.addListener(div, 'click', function(evt)
 	{
-		var source = mxEvent.getSource(evt);
+		let source = mxEvent.getSource(evt);
 		
 		if (source == cb || source.nodeName != 'INPUT')
 		{		
@@ -1211,14 +1211,14 @@ BaseFormatPanel.prototype.createColorOption = function(label, getColorFn, setCol
  */
 BaseFormatPanel.prototype.createCellColorOption = function(label, colorKey, defaultColor, callbackFn, setStyleFn)
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
 	
 	return this.createColorOption(label, function()
 	{
 		// Seems to be null sometimes, not sure why...
-		var state = graph.view.getState(graph.getSelectionCell());
+		let state = graph.view.getState(graph.getSelectionCell());
 		
 		if (state != null)
 		{
@@ -1252,7 +1252,7 @@ BaseFormatPanel.prototype.createCellColorOption = function(label, colorKey, defa
 			this.listener = function()
 			{
 				// Seems to be null sometimes, not sure why...
-				var state = graph.view.getState(graph.getSelectionCell());
+				let state = graph.view.getState(graph.getSelectionCell());
 				
 				if (state != null)
 				{
@@ -1276,12 +1276,12 @@ BaseFormatPanel.prototype.addArrow = function(elt, height)
 {
 	height = (height != null) ? height : 10;
 	
-	var arrow = document.createElement('div');
+	let arrow = document.createElement('div');
 	arrow.style.display = 'inline-block';
 	arrow.style.padding = '6px';
 	arrow.style.paddingRight = '4px';
 	
-	var m = (10 - height);
+	let m = (10 - height);
 	
 	if (m == 2)
 	{
@@ -1302,7 +1302,7 @@ BaseFormatPanel.prototype.addArrow = function(elt, height)
 		IMAGE_PATH + '/dropdown.png') + '" style="margin-bottom:4px;">';
 	mxUtils.setOpacity(arrow, 70);
 	
-	var symbol = elt.getElementsByTagName('div')[0];
+	let symbol = elt.getElementsByTagName('div')[0];
 	
 	if (symbol != null)
 	{
@@ -1333,7 +1333,7 @@ BaseFormatPanel.prototype.addUnitInput = function(container, unit, right, width,
 {
 	marginTop = (marginTop != null) ? marginTop : 0;
 	
-	var input = document.createElement('input');
+	let input = document.createElement('input');
 	input.style.position = 'absolute';
 	input.style.textAlign = 'right';
 	input.style.marginTop = '-2px';
@@ -1341,7 +1341,7 @@ BaseFormatPanel.prototype.addUnitInput = function(container, unit, right, width,
 	input.style.width = width + 'px';
 	container.appendChild(input);
 	
-	var stepper = this.createStepper(input, update, step, null, disableFocus, null, isFloat);
+	let stepper = this.createStepper(input, update, step, null, disableFocus, null, isFloat);
 	stepper.style.marginTop = (marginTop - 2) + 'px';
 	stepper.style.right = right + 'px';
 	container.appendChild(stepper);
@@ -1356,14 +1356,14 @@ BaseFormatPanel.prototype.createRelativeOption = function(label, key, width, han
 {
 	width = (width != null) ? width : 44;
 	
-	var graph = this.editorUi.editor.graph;
-	var div = this.createPanel();
+	let graph = this.editorUi.editor.graph;
+	let div = this.createPanel();
 	div.style.paddingTop = '10px';
 	div.style.paddingBottom = '10px';
 	mxUtils.write(div, label);
 	div.style.fontWeight = 'bold';
 	
-	var update = mxUtils.bind(this, function(evt)
+	let update = mxUtils.bind(this, function(evt)
 	{
 		if (handler != null)
 		{
@@ -1371,9 +1371,9 @@ BaseFormatPanel.prototype.createRelativeOption = function(label, key, width, han
 		}
 		else
 		{
-			var value = parseInt(input.value);
+			let value = parseInt(input.value);
 			value = Math.min(100, Math.max(0, (isNaN(value)) ? 100 : value));
-			var state = graph.view.getState(graph.getSelectionCell());
+			let state = graph.view.getState(graph.getSelectionCell());
 			
 			if (state != null && value != mxUtils.getValue(state.style, key, 100))
 			{
@@ -1394,16 +1394,16 @@ BaseFormatPanel.prototype.createRelativeOption = function(label, key, width, han
 		mxEvent.consume(evt);
 	});
 
-	var input = this.addUnitInput(div, '%', 20, width, update, 10, -15, handler != null);
+	let input = this.addUnitInput(div, '%', 20, width, update, 10, -15, handler != null);
 
 	if (key != null)
 	{
-		var listener = mxUtils.bind(this, function(sender, evt, force)
+		let listener = mxUtils.bind(this, function(sender, evt, force)
 		{
 			if (force || input != document.activeElement)
 			{
-				var ss = this.format.getSelectionState();
-				var tmp = parseInt(mxUtils.getValue(ss.style, key, 100));
+				let ss = this.format.getSelectionState();
+				let tmp = parseInt(mxUtils.getValue(ss.style, key, 100));
 				input.value = (isNaN(tmp)) ? '' : tmp + ' %';
 			}
 		});
@@ -1446,7 +1446,7 @@ BaseFormatPanel.prototype.addLabel = function(div, title, right, width)
 {
 	width = (width != null) ? width : 61;
 	
-	var label = document.createElement('div');
+	let label = document.createElement('div');
 	mxUtils.write(label, title);
 	label.style.position = 'absolute';
 	label.style.right = right + 'px';
@@ -1486,7 +1486,7 @@ BaseFormatPanel.prototype.addKeyHandler = function(input, listener)
  */
 BaseFormatPanel.prototype.styleButtons = function(elts)
 {
-	for (var i = 0; i < elts.length; i++)
+	for (let i = 0; i < elts.length; i++)
 	{
 		mxUtils.setPrefixedStyle(elts[i].style, 'borderRadius', '3px');
 		mxUtils.setOpacity(elts[i], 100);
@@ -1508,7 +1508,7 @@ BaseFormatPanel.prototype.destroy = function()
 {
 	if (this.listeners != null)
 	{
-		for (var i = 0; i < this.listeners.length; i++)
+		for (let i = 0; i < this.listeners.length; i++)
 		{
 			this.listeners[i].destroy();
 		}
@@ -1533,8 +1533,8 @@ mxUtils.extend(ArrangePanel, BaseFormatPanel);
  */
 ArrangePanel.prototype.init = function()
 {
-	var graph = this.editorUi.editor.graph;
-	var ss = this.format.getSelectionState();
+	let graph = this.editorUi.editor.graph;
+	let ss = this.format.getSelectionState();
 
 	this.container.appendChild(this.addLayerOps(this.createPanel()));
 	// Special case that adds two panels
@@ -1571,7 +1571,7 @@ ArrangePanel.prototype.init = function()
 	if (ss.containsLabel)
 	{
 		// Adds functions from hidden style format panel
-		var span = document.createElement('div');
+		let span = document.createElement('div');
 		span.style.width = '100%';
 		span.style.marginTop = '0px';
 		span.style.fontWeight = 'bold';
@@ -1588,27 +1588,27 @@ ArrangePanel.prototype.init = function()
  */
 ArrangePanel.prototype.addTable = function(div)
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
-	var ss = this.format.getSelectionState();
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
+	let ss = this.format.getSelectionState();
 	div.style.paddingTop = '6px';
 	div.style.paddingBottom = '10px';
 
-	var span = document.createElement('div');
+	let span = document.createElement('div');
 	span.style.marginTop = '2px';
 	span.style.marginBottom = '8px';
 	span.style.fontWeight = 'bold';
 	mxUtils.write(span, mxResources.get('table'));
 	div.appendChild(span);
 	
-	var panel = document.createElement('div');
+	let panel = document.createElement('div');
 	panel.style.position = 'relative';
 	panel.style.paddingLeft = '0px';
 	panel.style.borderWidth = '0px';
 	panel.className = 'geToolbarContainer';
 
-	var btns = [
+	let btns = [
         ui.toolbar.addButton('geSprite-insertcolumnbefore', mxResources.get('insertColumnBefore'),
  		mxUtils.bind(this, function()
 		{
@@ -1693,9 +1693,9 @@ ArrangePanel.prototype.addTable = function(div)
  */
 ArrangePanel.prototype.addLayerOps = function(div)
 {
-	var ui = this.editorUi;
+	let ui = this.editorUi;
 	
-	var btn = mxUtils.button(mxResources.get('toFront'), function(evt)
+	let btn = mxUtils.button(mxResources.get('toFront'), function(evt)
 	{
 		ui.actions.get('toFront').funct();
 	})
@@ -1705,7 +1705,7 @@ ArrangePanel.prototype.addLayerOps = function(div)
 	btn.style.marginRight = '2px';
 	div.appendChild(btn);
 	
-	var btn = mxUtils.button(mxResources.get('toBack'), function(evt)
+	let btn = mxUtils.button(mxResources.get('toBack'), function(evt)
 	{
 		ui.actions.get('toBack').funct();
 	})
@@ -1722,12 +1722,12 @@ ArrangePanel.prototype.addLayerOps = function(div)
  */
 ArrangePanel.prototype.addGroupOps = function(div)
 {
-	var ui = this.editorUi;
-	var graph = ui.editor.graph;
-	var cell = graph.getSelectionCell();
-	var ss = this.format.getSelectionState();
-	var count = 0;
-	var btn = null;
+	let ui = this.editorUi;
+	let graph = ui.editor.graph;
+	let cell = graph.getSelectionCell();
+	let ss = this.format.getSelectionState();
+	let count = 0;
+	let btn = null;
 	
 	div.style.paddingTop = '8px';
 	div.style.paddingBottom = '6px';
@@ -1769,7 +1769,7 @@ ArrangePanel.prototype.addGroupOps = function(div)
 			count = 0;
 		}
 		
-		var btn = mxUtils.button(mxResources.get('copySize'), function(evt)
+		let btn = mxUtils.button(mxResources.get('copySize'), function(evt)
 		{
 			ui.actions.get('copySize').funct();
 		});
@@ -1885,29 +1885,29 @@ ArrangePanel.prototype.addGroupOps = function(div)
  */
 ArrangePanel.prototype.addAlign = function(div)
 {
-	var graph = this.editorUi.editor.graph;
+	let graph = this.editorUi.editor.graph;
 	div.style.paddingTop = '6px';
 	div.style.paddingBottom = '12px';
 	div.appendChild(this.createTitle(mxResources.get('align')));
 	
-	var stylePanel = document.createElement('div');
+	let stylePanel = document.createElement('div');
 	stylePanel.style.position = 'relative';
 	stylePanel.style.paddingLeft = '0px';
 	stylePanel.style.borderWidth = '0px';
 	stylePanel.className = 'geToolbarContainer';
 
-	var left = this.editorUi.toolbar.addButton('geSprite-alignleft', mxResources.get('left'),
+	let left = this.editorUi.toolbar.addButton('geSprite-alignleft', mxResources.get('left'),
 		function() { graph.alignCells(mxConstants.ALIGN_LEFT); }, stylePanel);
-	var center = this.editorUi.toolbar.addButton('geSprite-aligncenter', mxResources.get('center'),
+	let center = this.editorUi.toolbar.addButton('geSprite-aligncenter', mxResources.get('center'),
 		function() { graph.alignCells(mxConstants.ALIGN_CENTER); }, stylePanel);
-	var right = this.editorUi.toolbar.addButton('geSprite-alignright', mxResources.get('right'),
+	let right = this.editorUi.toolbar.addButton('geSprite-alignright', mxResources.get('right'),
 		function() { graph.alignCells(mxConstants.ALIGN_RIGHT); }, stylePanel);
 
-	var top = this.editorUi.toolbar.addButton('geSprite-aligntop', mxResources.get('top'),
+	let top = this.editorUi.toolbar.addButton('geSprite-aligntop', mxResources.get('top'),
 		function() { graph.alignCells(mxConstants.ALIGN_TOP); }, stylePanel);
-	var middle = this.editorUi.toolbar.addButton('geSprite-alignmiddle', mxResources.get('middle'),
+	let middle = this.editorUi.toolbar.addButton('geSprite-alignmiddle', mxResources.get('middle'),
 		function() { graph.alignCells(mxConstants.ALIGN_MIDDLE); }, stylePanel);
-	var bottom = this.editorUi.toolbar.addButton('geSprite-alignbottom', mxResources.get('bottom'),
+	let bottom = this.editorUi.toolbar.addButton('geSprite-alignbottom', mxResources.get('bottom'),
 		function() { graph.alignCells(mxConstants.ALIGN_BOTTOM); }, stylePanel);
 	
 	this.styleButtons([left, center, right, top, middle, bottom]);
@@ -1922,20 +1922,20 @@ ArrangePanel.prototype.addAlign = function(div)
  */
 ArrangePanel.prototype.addFlip = function(div)
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
 	div.style.paddingTop = '6px';
 	div.style.paddingBottom = '10px';
 
-	var span = document.createElement('div');
+	let span = document.createElement('div');
 	span.style.marginTop = '2px';
 	span.style.marginBottom = '8px';
 	span.style.fontWeight = 'bold';
 	mxUtils.write(span, mxResources.get('flip'));
 	div.appendChild(span);
 	
-	var btn = mxUtils.button(mxResources.get('horizontal'), function(evt)
+	let btn = mxUtils.button(mxResources.get('horizontal'), function(evt)
 	{
 		graph.toggleCellStyles(mxConstants.STYLE_FLIPH, false);
 	})
@@ -1945,7 +1945,7 @@ ArrangePanel.prototype.addFlip = function(div)
 	btn.style.marginRight = '2px';
 	div.appendChild(btn);
 	
-	var btn = mxUtils.button(mxResources.get('vertical'), function(evt)
+	let btn = mxUtils.button(mxResources.get('vertical'), function(evt)
 	{
 		graph.toggleCellStyles(mxConstants.STYLE_FLIPV, false);
 	})
@@ -1962,15 +1962,15 @@ ArrangePanel.prototype.addFlip = function(div)
  */
 ArrangePanel.prototype.addDistribute = function(div)
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
 	div.style.paddingTop = '6px';
 	div.style.paddingBottom = '12px';
 	
 	div.appendChild(this.createTitle(mxResources.get('distribute')));
 
-	var btn = mxUtils.button(mxResources.get('horizontal'), function(evt)
+	let btn = mxUtils.button(mxResources.get('horizontal'), function(evt)
 	{
 		graph.distributeCells(true);
 	})
@@ -1980,7 +1980,7 @@ ArrangePanel.prototype.addDistribute = function(div)
 	btn.style.marginRight = '2px';
 	div.appendChild(btn);
 	
-	var btn = mxUtils.button(mxResources.get('vertical'), function(evt)
+	let btn = mxUtils.button(mxResources.get('vertical'), function(evt)
 	{
 		graph.distributeCells(false);
 	})
@@ -1997,22 +1997,22 @@ ArrangePanel.prototype.addDistribute = function(div)
  */
 ArrangePanel.prototype.addAngle = function(div)
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
-	var ss = this.format.getSelectionState();
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
+	let ss = this.format.getSelectionState();
 
 	div.style.paddingBottom = '8px';
 	
-	var span = document.createElement('div');
+	let span = document.createElement('div');
 	span.style.position = 'absolute';
 	span.style.width = '70px';
 	span.style.marginTop = '0px';
 	span.style.fontWeight = 'bold';
 	
-	var input = null;
-	var update = null;
-	var btn = null;
+	let input = null;
+	let update = null;
+	let btn = null;
 	
 	if (ss.rotatable && !ss.table && !ss.row && !ss.cell)
 	{
@@ -2034,7 +2034,7 @@ ArrangePanel.prototype.addAngle = function(div)
 
 	if (!ss.containsLabel)
 	{
-		var label = mxResources.get('reverse');
+		let label = mxResources.get('reverse');
 		
 		if (ss.vertices.length > 0 && ss.edges.length > 0)
 		{
@@ -2062,12 +2062,12 @@ ArrangePanel.prototype.addAngle = function(div)
 	
 	if (input != null)
 	{
-		var listener = mxUtils.bind(this, function(sender, evt, force)
+		let listener = mxUtils.bind(this, function(sender, evt, force)
 		{
 			if (force || document.activeElement != input)
 			{
 				ss = this.format.getSelectionState();
-				var tmp = parseFloat(mxUtils.getValue(ss.style, mxConstants.STYLE_ROTATION, 0));
+				let tmp = parseFloat(mxUtils.getValue(ss.style, mxConstants.STYLE_ROTATION, 0));
 				input.value = (isNaN(tmp)) ? '' : tmp  + '°';
 			}
 		});
@@ -2085,7 +2085,7 @@ ArrangePanel.prototype.addAngle = function(div)
 
 BaseFormatPanel.prototype.getUnit = function()
 {
-	var unit = this.editorUi.editor.graph.view.unit;
+	let unit = this.editorUi.editor.graph.view.unit;
 	
 	switch(unit)
 	{
@@ -2105,7 +2105,7 @@ BaseFormatPanel.prototype.inUnit = function(pixels)
 
 BaseFormatPanel.prototype.fromUnit = function(value)
 {
-	var unit = this.editorUi.editor.graph.view.unit;
+	let unit = this.editorUi.editor.graph.view.unit;
 	
 	switch(unit)
 	{
@@ -2125,7 +2125,7 @@ BaseFormatPanel.prototype.isFloatUnit = function()
 
 BaseFormatPanel.prototype.getUnitStep = function()
 {
-	var unit = this.editorUi.editor.graph.view.unit;
+	let unit = this.editorUi.editor.graph.view.unit;
 	
 	switch(unit)
 	{
@@ -2143,15 +2143,15 @@ BaseFormatPanel.prototype.getUnitStep = function()
  */
 ArrangePanel.prototype.addGeometry = function(container)
 {
-	var panel = this;
-	var ui = this.editorUi;
-	var graph = ui.editor.graph;
-	var rect = this.format.getSelectionState();
+	let panel = this;
+	let ui = this.editorUi;
+	let graph = ui.editor.graph;
+	let rect = this.format.getSelectionState();
 
-	var div = this.createPanel();
+	let div = this.createPanel();
 	div.style.paddingBottom = '8px';
 		
-	var span = document.createElement('div');
+	let span = document.createElement('div');
 	span.style.position = 'absolute';
 	span.style.width = '50px';
 	span.style.marginTop = '0px';
@@ -2160,16 +2160,16 @@ ArrangePanel.prototype.addGeometry = function(container)
 	div.appendChild(span);
 
 	var widthUpdate, heightUpdate, leftUpdate, topUpdate;
-	var width = this.addUnitInput(div, this.getUnit(), 84, 44, function()
+	let width = this.addUnitInput(div, this.getUnit(), 84, 44, function()
 	{
 		widthUpdate.apply(this, arguments);
 	}, this.getUnitStep(), null, null, this.isFloatUnit());
-	var height = this.addUnitInput(div, this.getUnit(), 20, 44, function()
+	let height = this.addUnitInput(div, this.getUnit(), 20, 44, function()
 	{
 		heightUpdate.apply(this, arguments);
 	}, this.getUnitStep(), null, null, this.isFloatUnit());
 	
-	var autosizeBtn = document.createElement('div');
+	let autosizeBtn = document.createElement('div');
 	autosizeBtn.className = 'geSprite geSprite-fit';
 	autosizeBtn.setAttribute('title', mxResources.get('autosize') + ' (' + this.editorUi.actions.get('autosize').shortcut + ')');
 	autosizeBtn.style.position = 'relative';
@@ -2209,12 +2209,12 @@ ArrangePanel.prototype.addGeometry = function(container)
 	this.addLabel(div, mxResources.get('height'), 20);
 	mxUtils.br(div);
 
-	var wrapper = document.createElement('div');
+	let wrapper = document.createElement('div');
 	wrapper.style.paddingTop = '8px';
 	wrapper.style.paddingRight = '20px';
 	wrapper.style.whiteSpace = 'nowrap';
 	wrapper.style.textAlign = 'right';
-	var opt = this.createCellOption(mxResources.get('constrainProportions'),
+	let opt = this.createCellOption(mxResources.get('constrainProportions'),
 		mxConstants.STYLE_ASPECT, null, 'fixed', 'null');
 	opt.style.width = '100%';
 	wrapper.appendChild(opt);
@@ -2228,7 +2228,7 @@ ArrangePanel.prototype.addGeometry = function(container)
 		autosizeBtn.style.visibility = 'hidden';
 	}
 	
-	var constrainCheckbox = opt.getElementsByTagName('input')[0];
+	let constrainCheckbox = opt.getElementsByTagName('input')[0];
 	this.addKeyHandler(width, listener);
 	this.addKeyHandler(height, listener);
 	
@@ -2243,7 +2243,7 @@ ArrangePanel.prototype.addGeometry = function(container)
 		}
 		else if (geo.width > 0)
 		{
-			var value = Math.max(1, panel.fromUnit(value));
+			let value = Math.max(1, panel.fromUnit(value));
 			
 			if (constrainCheckbox.checked)
 			{
@@ -2269,7 +2269,7 @@ ArrangePanel.prototype.addGeometry = function(container)
 		}
 		else if (geo.height > 0)
 		{
-			var value = Math.max(1, panel.fromUnit(value));
+			let value = Math.max(1, panel.fromUnit(value));
 			
 			if (constrainCheckbox.checked)
 			{
@@ -2288,7 +2288,7 @@ ArrangePanel.prototype.addGeometry = function(container)
 	var div2 = this.createPanel();
 	div2.style.paddingBottom = '30px';
 	
-	var span = document.createElement('div');
+	let span = document.createElement('div');
 	span.style.position = 'absolute';
 	span.style.width = '70px';
 	span.style.marginTop = '0px';
@@ -2296,11 +2296,11 @@ ArrangePanel.prototype.addGeometry = function(container)
 	mxUtils.write(span, mxResources.get('position'));
 	div2.appendChild(span);
 	
-	var left = this.addUnitInput(div2, this.getUnit(), 84, 44, function()
+	let left = this.addUnitInput(div2, this.getUnit(), 84, 44, function()
 	{
 		leftUpdate.apply(this, arguments);
 	}, this.getUnitStep(), null, null, this.isFloatUnit());
-	var top = this.addUnitInput(div2, this.getUnit(), 20, 44, function()
+	let top = this.addUnitInput(div2, this.getUnit(), 20, 44, function()
 	{
 		topUpdate.apply(this, arguments);
 	}, this.getUnitStep(), null, null, this.isFloatUnit());
@@ -2310,7 +2310,7 @@ ArrangePanel.prototype.addGeometry = function(container)
 	this.addLabel(div2, mxResources.get('left'), 84);
 	this.addLabel(div2, mxResources.get('top'), 20);
 	
-	var listener = mxUtils.bind(this, function(sender, evt, force)
+	let listener = mxUtils.bind(this, function(sender, evt, force)
 	{
 		rect = this.format.getSelectionState();
 
@@ -2400,16 +2400,16 @@ ArrangePanel.prototype.addGeometry = function(container)
  */
 ArrangePanel.prototype.addGeometryHandler = function(input, fn)
 {
-	var ui = this.editorUi;
-	var graph = ui.editor.graph;
-	var initialValue = null;
-	var panel = this;
+	let ui = this.editorUi;
+	let graph = ui.editor.graph;
+	let initialValue = null;
+	let panel = this;
 	
 	function update(evt)
 	{
 		if (input.value != '')
 		{
-			var value = parseFloat(input.value);
+			let value = parseFloat(input.value);
 
 			if (isNaN(value)) 
 			{
@@ -2420,13 +2420,13 @@ ArrangePanel.prototype.addGeometryHandler = function(input, fn)
 				graph.getModel().beginUpdate();
 				try
 				{
-					var cells = graph.getSelectionCells();
+					let cells = graph.getSelectionCells();
 					
-					for (var i = 0; i < cells.length; i++)
+					for (let i = 0; i < cells.length; i++)
 					{
 						if (graph.getModel().isVertex(cells[i]))
 						{
-							var geo = graph.getCellGeometry(cells[i]);
+							let geo = graph.getCellGeometry(cells[i]);
 							
 							if (geo != null)
 							{
@@ -2434,7 +2434,7 @@ ArrangePanel.prototype.addGeometryHandler = function(input, fn)
 								
 								if (!fn(geo, value, cells[i]))
 								{
-									var state = graph.view.getState(cells[i]);
+									let state = graph.view.getState(cells[i]);
 									
 									if (state != null && graph.isRecursiveVertexResize(state))
 									{
@@ -2473,15 +2473,15 @@ ArrangePanel.prototype.addGeometryHandler = function(input, fn)
 
 ArrangePanel.prototype.addEdgeGeometryHandler = function(input, fn)
 {
-    var ui = this.editorUi;
-    var graph = ui.editor.graph;
-    var initialValue = null;
+    let ui = this.editorUi;
+    let graph = ui.editor.graph;
+    let initialValue = null;
 
     function update(evt)
     {
         if (input.value != '')
         {
-            var value = parseFloat(input.value);
+            let value = parseFloat(input.value);
 
             if (isNaN(value))
             {
@@ -2492,13 +2492,13 @@ ArrangePanel.prototype.addEdgeGeometryHandler = function(input, fn)
                 graph.getModel().beginUpdate();
                 try
                 {
-                    var cells = graph.getSelectionCells();
+                    let cells = graph.getSelectionCells();
 
-                    for (var i = 0; i < cells.length; i++)
+                    for (let i = 0; i < cells.length; i++)
                     {
                         if (graph.getModel().isEdge(cells[i]))
                         {
-                            var geo = graph.getCellGeometry(cells[i]);
+                            let geo = graph.getCellGeometry(cells[i]);
 
                             if (geo != null)
                             {
@@ -2538,13 +2538,13 @@ ArrangePanel.prototype.addEdgeGeometryHandler = function(input, fn)
  */
 ArrangePanel.prototype.addEdgeGeometry = function(container)
 {
-	var ui = this.editorUi;
-	var graph = ui.editor.graph;
-	var rect = this.format.getSelectionState();
+	let ui = this.editorUi;
+	let graph = ui.editor.graph;
+	let rect = this.format.getSelectionState();
 	
-	var div = this.createPanel();
+	let div = this.createPanel();
 	
-	var span = document.createElement('div');
+	let span = document.createElement('div');
 	span.style.position = 'absolute';
 	span.style.width = '70px';
 	span.style.marginTop = '0px';
@@ -2553,7 +2553,7 @@ ArrangePanel.prototype.addEdgeGeometry = function(container)
 	div.appendChild(span);
 
 	var widthUpdate, xtUpdate, ytUpdate, xsUpdate, ysUpdate;
-	var width = this.addUnitInput(div, 'pt', 20, 44, function()
+	let width = this.addUnitInput(div, 'pt', 20, 44, function()
 	{
 		widthUpdate.apply(this, arguments);
 	});
@@ -2564,7 +2564,7 @@ ArrangePanel.prototype.addEdgeGeometry = function(container)
 	function widthUpdate(evt)
 	{
 		// Maximum stroke width is 999
-		var value = parseInt(width.value);
+		let value = parseInt(width.value);
 		value = Math.min(999, Math.max(1, (isNaN(value)) ? 1 : value));
 		
 		if (value != mxUtils.getValue(rect.style, 'width', mxCellRenderer.defaultShapes['flexArrow'].prototype.defaultWidth))
@@ -2583,10 +2583,10 @@ ArrangePanel.prototype.addEdgeGeometry = function(container)
 
 	container.appendChild(div);
 
-	var divs = this.createPanel();
+	let divs = this.createPanel();
 	divs.style.paddingBottom = '30px';
 
-	var span = document.createElement('div');
+	let span = document.createElement('div');
 	span.style.position = 'absolute';
 	span.style.width = '70px';
 	span.style.marginTop = '0px';
@@ -2594,11 +2594,11 @@ ArrangePanel.prototype.addEdgeGeometry = function(container)
 	mxUtils.write(span, 'Start');
 	divs.appendChild(span);
 
-	var xs = this.addUnitInput(divs, 'pt', 84, 44, function()
+	let xs = this.addUnitInput(divs, 'pt', 84, 44, function()
 	{
 		xsUpdate.apply(this, arguments);
 	});
-	var ys = this.addUnitInput(divs, 'pt', 20, 44, function()
+	let ys = this.addUnitInput(divs, 'pt', 20, 44, function()
 	{
 		ysUpdate.apply(this, arguments);
 	});
@@ -2610,10 +2610,10 @@ ArrangePanel.prototype.addEdgeGeometry = function(container)
 	this.addKeyHandler(xs, listener);
 	this.addKeyHandler(ys, listener);
 
-	var divt = this.createPanel();
+	let divt = this.createPanel();
 	divt.style.paddingBottom = '30px';
 
-	var span = document.createElement('div');
+	let span = document.createElement('div');
 	span.style.position = 'absolute';
 	span.style.width = '70px';
 	span.style.marginTop = '0px';
@@ -2621,11 +2621,11 @@ ArrangePanel.prototype.addEdgeGeometry = function(container)
 	mxUtils.write(span, 'End');
 	divt.appendChild(span);
 
-	var xt = this.addUnitInput(divt, 'pt', 84, 44, function()
+	let xt = this.addUnitInput(divt, 'pt', 84, 44, function()
 	{
 		xtUpdate.apply(this, arguments);
 	});
-	var yt = this.addUnitInput(divt, 'pt', 20, 44, function()
+	let yt = this.addUnitInput(divt, 'pt', 20, 44, function()
 	{
 		ytUpdate.apply(this, arguments);
 	});
@@ -2637,10 +2637,10 @@ ArrangePanel.prototype.addEdgeGeometry = function(container)
 	this.addKeyHandler(xt, listener);
 	this.addKeyHandler(yt, listener);
 
-	var listener = mxUtils.bind(this, function(sender, evt, force)
+	let listener = mxUtils.bind(this, function(sender, evt, force)
 	{
 		rect = this.format.getSelectionState();
-		var cell = graph.getSelectionCell();
+		let cell = graph.getSelectionCell();
 		
 		if (rect.style.shape == 'link' || rect.style.shape == 'flexArrow')
 		{
@@ -2648,7 +2648,7 @@ ArrangePanel.prototype.addEdgeGeometry = function(container)
 			
 			if (force || document.activeElement != width)
 			{
-				var value = mxUtils.getValue(rect.style, 'width',
+				let value = mxUtils.getValue(rect.style, 'width',
 					mxCellRenderer.defaultShapes['flexArrow'].prototype.defaultWidth);
 				width.value = value + ' pt';
 			}
@@ -2660,7 +2660,7 @@ ArrangePanel.prototype.addEdgeGeometry = function(container)
 
 		if (graph.getSelectionCount() == 1 && graph.model.isEdge(cell))
 		{
-			var geo = graph.model.getGeometry(cell);
+			let geo = graph.model.getGeometry(cell);
 			
 			if (geo.sourcePoint != null && graph.model.getTerminal(cell, true) == null)
 			{
@@ -2739,18 +2739,18 @@ TextFormatPanel.prototype.init = function()
  */
 TextFormatPanel.prototype.addFont = function(container)
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
-	var ss = this.format.getSelectionState();
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
+	let ss = this.format.getSelectionState();
 	
-	var title = this.createTitle(mxResources.get('font'));
+	let title = this.createTitle(mxResources.get('font'));
 	title.style.paddingLeft = '18px';
 	title.style.paddingTop = '10px';
 	title.style.paddingBottom = '6px';
 	container.appendChild(title);
 
-	var stylePanel = this.createPanel();
+	let stylePanel = this.createPanel();
 	stylePanel.style.paddingTop = '2px';
 	stylePanel.style.paddingBottom = '2px';
 	stylePanel.style.position = 'relative';
@@ -2760,9 +2760,9 @@ TextFormatPanel.prototype.addFont = function(container)
 
 	if (graph.cellEditor.isContentEditing())
 	{
-		var cssPanel = stylePanel.cloneNode();
+		let cssPanel = stylePanel.cloneNode();
 		
-		var cssMenu = this.editorUi.toolbar.addMenu(mxResources.get('style'),
+		let cssMenu = this.editorUi.toolbar.addMenu(mxResources.get('style'),
 			mxResources.get('style'), true, 'formatBlock', cssPanel, null, true);
 		cssMenu.style.color = 'rgb(112, 112, 112)';
 		cssMenu.style.whiteSpace = 'nowrap';
@@ -2772,20 +2772,20 @@ TextFormatPanel.prototype.addFont = function(container)
 		cssMenu.style.width = '192px';
 		cssMenu.style.height = '15px';
 		
-		var arrow = cssMenu.getElementsByTagName('div')[0];
+		let arrow = cssMenu.getElementsByTagName('div')[0];
 		arrow.style.cssFloat = 'right';
 		container.appendChild(cssPanel);
 	}
 	
 	container.appendChild(stylePanel);
 	
-	var colorPanel = this.createPanel();
+	let colorPanel = this.createPanel();
 	colorPanel.style.marginTop = '8px';
 	colorPanel.style.borderTop = '1px solid #c0c0c0';
 	colorPanel.style.paddingTop = '6px';
 	colorPanel.style.paddingBottom = '6px';
 	
-	var fontMenu = this.editorUi.toolbar.addMenu('Helvetica', mxResources.get('fontFamily'),
+	let fontMenu = this.editorUi.toolbar.addMenu('Helvetica', mxResources.get('fontFamily'),
 		true, 'fontFamily', stylePanel, null, true);
 	fontMenu.style.color = 'rgb(112, 112, 112)';
 	fontMenu.style.whiteSpace = 'nowrap';
@@ -2798,12 +2798,12 @@ TextFormatPanel.prototype.addFont = function(container)
 	
 	var stylePanel2 = stylePanel.cloneNode(false);
 	stylePanel2.style.marginLeft = '-3px';
-	var fontStyleItems = this.editorUi.toolbar.addItems(['bold', 'italic', 'underline'], stylePanel2, true);
+	let fontStyleItems = this.editorUi.toolbar.addItems(['bold', 'italic', 'underline'], stylePanel2, true);
 	fontStyleItems[0].setAttribute('title', mxResources.get('bold') + ' (' + this.editorUi.actions.get('bold').shortcut + ')');
 	fontStyleItems[1].setAttribute('title', mxResources.get('italic') + ' (' + this.editorUi.actions.get('italic').shortcut + ')');
 	fontStyleItems[2].setAttribute('title', mxResources.get('underline') + ' (' + this.editorUi.actions.get('underline').shortcut + ')');
 	
-	var verticalItem = this.editorUi.toolbar.addItems(['vertical'], stylePanel2, true)[0];
+	let verticalItem = this.editorUi.toolbar.addItems(['vertical'], stylePanel2, true)[0];
 
 	container.appendChild(stylePanel2);
 
@@ -2815,7 +2815,7 @@ TextFormatPanel.prototype.addFont = function(container)
 	stylePanel3.style.paddingBottom = '0px';
 	
 	// Helper function to return a wrapper function does not pass any arguments
-	var callFn = function(fn)
+	let callFn = function(fn)
 	{
 		return function()
 		{
@@ -2823,19 +2823,19 @@ TextFormatPanel.prototype.addFont = function(container)
 		};
 	};
 	
-	var left = this.editorUi.toolbar.addButton('geSprite-left', mxResources.get('left'),
+	let left = this.editorUi.toolbar.addButton('geSprite-left', mxResources.get('left'),
 		(graph.cellEditor.isContentEditing()) ?
 		function(evt)
 		{
 			graph.cellEditor.alignText(mxConstants.ALIGN_LEFT, evt);
 		} : callFn(this.editorUi.menus.createStyleChangeFunction([mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_LEFT])), stylePanel3);
-	var center = this.editorUi.toolbar.addButton('geSprite-center', mxResources.get('center'),
+	let center = this.editorUi.toolbar.addButton('geSprite-center', mxResources.get('center'),
 		(graph.cellEditor.isContentEditing()) ?
 		function(evt)
 		{
 			graph.cellEditor.alignText(mxConstants.ALIGN_CENTER, evt);
 		} : callFn(this.editorUi.menus.createStyleChangeFunction([mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_CENTER])), stylePanel3);
-	var right = this.editorUi.toolbar.addButton('geSprite-right', mxResources.get('right'),
+	let right = this.editorUi.toolbar.addButton('geSprite-right', mxResources.get('right'),
 		(graph.cellEditor.isContentEditing()) ?
 		function(evt)
 		{
@@ -2848,7 +2848,7 @@ TextFormatPanel.prototype.addFont = function(container)
 	// TODO: Add translations and toggle state
 	if (graph.cellEditor.isContentEditing())
 	{
-		var strike = this.editorUi.toolbar.addButton('geSprite-removeformat', mxResources.get('strikethrough'),
+		let strike = this.editorUi.toolbar.addButton('geSprite-removeformat', mxResources.get('strikethrough'),
 			function()
 			{
 				document.execCommand('strikeThrough', false, null);
@@ -2862,11 +2862,11 @@ TextFormatPanel.prototype.addFont = function(container)
 		this.styleButtons([strike]);
 	}
 	
-	var top = this.editorUi.toolbar.addButton('geSprite-top', mxResources.get('top'),
+	let top = this.editorUi.toolbar.addButton('geSprite-top', mxResources.get('top'),
 		callFn(this.editorUi.menus.createStyleChangeFunction([mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_TOP])), stylePanel3);
-	var middle = this.editorUi.toolbar.addButton('geSprite-middle', mxResources.get('middle'),
+	let middle = this.editorUi.toolbar.addButton('geSprite-middle', mxResources.get('middle'),
 		callFn(this.editorUi.menus.createStyleChangeFunction([mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_MIDDLE])), stylePanel3);
-	var bottom = this.editorUi.toolbar.addButton('geSprite-bottom', mxResources.get('bottom'),
+	let bottom = this.editorUi.toolbar.addButton('geSprite-bottom', mxResources.get('bottom'),
 		callFn(this.editorUi.menus.createStyleChangeFunction([mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_BOTTOM])), stylePanel3);
 	
 	this.styleButtons([top, middle, bottom]);
@@ -2909,9 +2909,9 @@ TextFormatPanel.prototype.addFont = function(container)
 			}, stylePanel3)]);
 		sub.style.marginLeft = '9px';
 		
-		var tmp = stylePanel3.cloneNode(false);
+		let tmp = stylePanel3.cloneNode(false);
 		tmp.style.paddingTop = '4px';
-		var btns = [this.editorUi.toolbar.addButton('geSprite-orderedlist', mxResources.get('numberedList'),
+		let btns = [this.editorUi.toolbar.addButton('geSprite-orderedlist', mxResources.get('numberedList'),
 				function()
 				{
 					document.execCommand('insertorderedlist', false, null);
@@ -2962,14 +2962,14 @@ TextFormatPanel.prototype.addFont = function(container)
 	mxUtils.write(stylePanel4, mxResources.get('position'));
 	
 	// Adds label position options
-	var positionSelect = document.createElement('select');
+	let positionSelect = document.createElement('select');
 	positionSelect.style.position = 'absolute';
 	positionSelect.style.right = '20px';
 	positionSelect.style.width = '97px';
 	positionSelect.style.marginTop = '-2px';
 	
-	var directions = ['topLeft', 'top', 'topRight', 'left', 'center', 'right', 'bottomLeft', 'bottom', 'bottomRight'];
-	var lset = {'topLeft': [mxConstants.ALIGN_LEFT, mxConstants.ALIGN_TOP, mxConstants.ALIGN_RIGHT, mxConstants.ALIGN_BOTTOM],
+	let directions = ['topLeft', 'top', 'topRight', 'left', 'center', 'right', 'bottomLeft', 'bottom', 'bottomRight'];
+	let lset = {'topLeft': [mxConstants.ALIGN_LEFT, mxConstants.ALIGN_TOP, mxConstants.ALIGN_RIGHT, mxConstants.ALIGN_BOTTOM],
 			'top': [mxConstants.ALIGN_CENTER, mxConstants.ALIGN_TOP, mxConstants.ALIGN_CENTER, mxConstants.ALIGN_BOTTOM],
 			'topRight': [mxConstants.ALIGN_RIGHT, mxConstants.ALIGN_TOP, mxConstants.ALIGN_LEFT, mxConstants.ALIGN_BOTTOM],
 			'left': [mxConstants.ALIGN_LEFT, mxConstants.ALIGN_MIDDLE, mxConstants.ALIGN_RIGHT, mxConstants.ALIGN_MIDDLE],
@@ -2979,9 +2979,9 @@ TextFormatPanel.prototype.addFont = function(container)
 			'bottom': [mxConstants.ALIGN_CENTER, mxConstants.ALIGN_BOTTOM, mxConstants.ALIGN_CENTER, mxConstants.ALIGN_TOP],
 			'bottomRight': [mxConstants.ALIGN_RIGHT, mxConstants.ALIGN_BOTTOM, mxConstants.ALIGN_LEFT, mxConstants.ALIGN_TOP]};
 
-	for (var i = 0; i < directions.length; i++)
+	for (let i = 0; i < directions.length; i++)
 	{
-		var positionOption = document.createElement('option');
+		let positionOption = document.createElement('option');
 		positionOption.setAttribute('value', directions[i]);
 		mxUtils.write(positionOption, mxResources.get(directions[i]));
 		positionSelect.appendChild(positionOption);
@@ -3002,7 +3002,7 @@ TextFormatPanel.prototype.addFont = function(container)
 	// LATER: Handle reselect of same option in all selects (change event
 	// is not fired for same option so have opened state on click) and
 	// handle multiple different styles for current selection
-	var dirSelect = document.createElement('select');
+	let dirSelect = document.createElement('select');
 	dirSelect.style.position = 'absolute';
 	dirSelect.style.right = '20px';
 	dirSelect.style.width = '97px';
@@ -3010,14 +3010,14 @@ TextFormatPanel.prototype.addFont = function(container)
 
 	// NOTE: For automatic we use the value null since automatic
 	// requires the text to be non formatted and non-wrapped
-	var dirs = ['automatic', 'leftToRight', 'rightToLeft'];
-	var dirSet = {'automatic': null,
+	let dirs = ['automatic', 'leftToRight', 'rightToLeft'];
+	let dirSet = {'automatic': null,
 			'leftToRight': mxConstants.TEXT_DIRECTION_LTR,
 			'rightToLeft': mxConstants.TEXT_DIRECTION_RTL};
 
-	for (var i = 0; i < dirs.length; i++)
+	for (let i = 0; i < dirs.length; i++)
 	{
-		var dirOption = document.createElement('option');
+		let dirOption = document.createElement('option');
 		dirOption.setAttribute('value', dirs[i]);
 		mxUtils.write(dirOption, mxResources.get(dirs[i]));
 		dirSelect.appendChild(dirOption);
@@ -3034,7 +3034,7 @@ TextFormatPanel.prototype.addFont = function(container)
 			graph.getModel().beginUpdate();
 			try
 			{
-				var vals = lset[positionSelect.value];
+				let vals = lset[positionSelect.value];
 				
 				if (vals != null)
 				{
@@ -3064,7 +3064,7 @@ TextFormatPanel.prototype.addFont = function(container)
 	}
 
 	// Font size
-	var input = document.createElement('input');
+	let input = document.createElement('input');
 	input.style.textAlign = 'right';
 	input.style.marginTop = '4px';
 	input.style.position = 'absolute';
@@ -3075,17 +3075,17 @@ TextFormatPanel.prototype.addFont = function(container)
 	
 	// Workaround for font size 4 if no text is selected is update font size below
 	// after first character was entered (as the font element is lazy created)
-	var pendingFontSize = null;
+	let pendingFontSize = null;
 
-	var inputUpdate = this.installInputHandler(input, mxConstants.STYLE_FONTSIZE, Menus.prototype.defaultFontSize, 1, 999, ' pt',
+	let inputUpdate = this.installInputHandler(input, mxConstants.STYLE_FONTSIZE, Menus.prototype.defaultFontSize, 1, 999, ' pt',
 	function(fontSize)
 	{
 		// IE does not support containsNode
 		// KNOWN: Fixes font size issues but bypasses undo
 		if (window.getSelection)
 		{
-			var selection = window.getSelection();
-			var container = (selection.rangeCount > 0) ? selection.getRangeAt(0).commonAncestorContainer :
+			let selection = window.getSelection();
+			let container = (selection.rangeCount > 0) ? selection.getRangeAt(0).commonAncestorContainer :
 				graph.cellEditor.textarea;
 
 			function updateSize(elt, ignoreContains)
@@ -3101,7 +3101,7 @@ TextFormatPanel.prototype.addFont = function(container)
 					}
 					else
 					{
-						var css = mxUtils.getCurrentStyle(elt);
+						let css = mxUtils.getCurrentStyle(elt);
 						
 						if (css.fontSize != fontSize + 'px')
 						{
@@ -3132,10 +3132,10 @@ TextFormatPanel.prototype.addFont = function(container)
 			
 			if (container != null && container.nodeType == mxConstants.NODETYPE_ELEMENT)
 			{
-				var elts = container.getElementsByTagName('*');
+				let elts = container.getElementsByTagName('*');
 				updateSize(container);
 				
-				for (var i = 0; i < elts.length; i++)
+				for (let i = 0; i < elts.length; i++)
 				{
 					updateSize(elts[i]);
 				}
@@ -3146,7 +3146,7 @@ TextFormatPanel.prototype.addFont = function(container)
 		else if (window.getSelection || document.selection)
 		{
 			// Checks selection
-			var par = null;
+			let par = null;
 			
 			if (document.selection)
 			{
@@ -3154,7 +3154,7 @@ TextFormatPanel.prototype.addFont = function(container)
 			}
 			else
 			{
-				var selection = window.getSelection();
+				let selection = window.getSelection();
 				
 				if (selection.rangeCount > 0)
 				{
@@ -3184,9 +3184,9 @@ TextFormatPanel.prototype.addFont = function(container)
 				
 				// Workaround for can't set font size in px is to change font size afterwards
 				document.execCommand('fontSize', false, '4');
-				var elts = graph.cellEditor.textarea.getElementsByTagName('font');
+				let elts = graph.cellEditor.textarea.getElementsByTagName('font');
 				
-				for (var i = 0; i < elts.length; i++)
+				for (let i = 0; i < elts.length; i++)
 				{
 					if (elts[i].getAttribute('size') == '4')
 					{
@@ -3208,23 +3208,23 @@ TextFormatPanel.prototype.addFont = function(container)
 		}
 	}, true);
 	
-	var stepper = this.createStepper(input, inputUpdate, 1, 10, true, Menus.prototype.defaultFontSize);
+	let stepper = this.createStepper(input, inputUpdate, 1, 10, true, Menus.prototype.defaultFontSize);
 	stepper.style.display = input.style.display;
 	stepper.style.marginTop = '4px';
 	stepper.style.right = '20px';
 
 	stylePanel2.appendChild(stepper);
 	
-	var arrow = fontMenu.getElementsByTagName('div')[0];
+	let arrow = fontMenu.getElementsByTagName('div')[0];
 	arrow.style.cssFloat = 'right';
 	
-	var bgColorApply = null;
-	var currentBgColor = '#ffffff';
+	let bgColorApply = null;
+	let currentBgColor = '#ffffff';
 	
-	var fontColorApply = null;
-	var currentFontColor = '#000000';
+	let fontColorApply = null;
+	let currentFontColor = '#000000';
 		
-	var bgPanel = (graph.cellEditor.isContentEditing()) ? this.createColorOption(mxResources.get('backgroundColor'), function()
+	let bgPanel = (graph.cellEditor.isContentEditing()) ? this.createColorOption(mxResources.get('backgroundColor'), function()
 	{
 		return currentBgColor;
 	}, function(color)
@@ -3243,11 +3243,11 @@ TextFormatPanel.prototype.addFont = function(container)
 	});
 	bgPanel.style.fontWeight = 'bold';
 
-	var borderPanel = this.createCellColorOption(mxResources.get('borderColor'), mxConstants.STYLE_LABEL_BORDERCOLOR, '#000000');
+	let borderPanel = this.createCellColorOption(mxResources.get('borderColor'), mxConstants.STYLE_LABEL_BORDERCOLOR, '#000000');
 	borderPanel.style.fontWeight = 'bold';
 	
-	var defs = (ss.vertices.length >= 1) ? graph.stylesheet.getDefaultVertexStyle() : graph.stylesheet.getDefaultEdgeStyle();
-	var panel = (graph.cellEditor.isContentEditing()) ? this.createColorOption(mxResources.get('fontColor'), function()
+	let defs = (ss.vertices.length >= 1) ? graph.stylesheet.getDefaultVertexStyle() : graph.stylesheet.getDefaultEdgeStyle();
+	let panel = (graph.cellEditor.isContentEditing()) ? this.createColorOption(mxResources.get('fontColor'), function()
 	{
 		return currentFontColor;
 	}, function(color)
@@ -3257,10 +3257,10 @@ TextFormatPanel.prototype.addFont = function(container)
 			// Workaround for Firefox that adds the font element around
 			// anchor elements which ignore inherited colors is to move
 			// the font element inside anchor elements
-			var tmp = graph.cellEditor.textarea.getElementsByTagName('font');
-			var oldFonts = [];
+			let tmp = graph.cellEditor.textarea.getElementsByTagName('font');
+			let oldFonts = [];
 
-			for (var i = 0; i < tmp.length; i++)
+			for (let i = 0; i < tmp.length; i++)
 			{
 				oldFonts.push(
 				{
@@ -3273,28 +3273,28 @@ TextFormatPanel.prototype.addFont = function(container)
 				color : 'transparent');
 
 			// Finds the new or changed font element
-			var newFonts = graph.cellEditor.textarea.getElementsByTagName('font');
+			let newFonts = graph.cellEditor.textarea.getElementsByTagName('font');
 
-			for (var i = 0; i < newFonts.length; i++)
+			for (let i = 0; i < newFonts.length; i++)
 			{
 				if (i >= oldFonts.length || newFonts[i] != oldFonts[i].node ||
 					(newFonts[i] == oldFonts[i].node &&
 						newFonts[i].getAttribute('color') != oldFonts[i].color))
 				{
-					var child = newFonts[i].firstChild;
+					let child = newFonts[i].firstChild;
 
 					// Moves the font element to inside the anchor element and adopts all children
 					if (child != null && child.nodeName == 'A' && child.nextSibling ==
 						null &&
 						child.firstChild != null)
 					{
-						var parent = newFonts[i].parentNode;
+						let parent = newFonts[i].parentNode;
 						parent.insertBefore(child, newFonts[i]);
-						var tmp = child.firstChild;
+						let tmp = child.firstChild;
 
 						while (tmp != null)
 						{
-							var next = tmp.nextSibling;
+							let next = tmp.nextSibling;
 							newFonts[i].appendChild(tmp);
 							tmp = next;
 						}
@@ -3359,12 +3359,12 @@ TextFormatPanel.prototype.addFont = function(container)
 	
 	container.appendChild(colorPanel);
 
-	var extraPanel = this.createPanel();
+	let extraPanel = this.createPanel();
 	extraPanel.style.paddingTop = '2px';
 	extraPanel.style.paddingBottom = '4px';
 	
 	// LATER: Fix toggle using '' instead of 'null'
-	var wwOpt = this.createCellOption(mxResources.get('wordWrap'), mxConstants.STYLE_WHITE_SPACE, null, 'wrap', 'null', null, null, true);
+	let wwOpt = this.createCellOption(mxResources.get('wordWrap'), mxConstants.STYLE_WHITE_SPACE, null, 'wrap', 'null', null, null, true);
 	wwOpt.style.fontWeight = 'bold';
 	
 	// Word wrap in edge labels only supported via labelWidth style
@@ -3374,17 +3374,17 @@ TextFormatPanel.prototype.addFont = function(container)
 	}
 	
 	// Delegates switch of style to formattedText action as it also convertes newlines
-	var htmlOpt = this.createCellOption(mxResources.get('formattedText'), 'html', '0',
+	let htmlOpt = this.createCellOption(mxResources.get('formattedText'), 'html', '0',
 		null, null, null, ui.actions.get('formattedText'));
 	htmlOpt.style.fontWeight = 'bold';
 	extraPanel.appendChild(htmlOpt);
 	
-	var spacingPanel = this.createPanel();
+	let spacingPanel = this.createPanel();
 	spacingPanel.style.paddingTop = '10px';
 	spacingPanel.style.paddingBottom = '28px';
 	spacingPanel.style.fontWeight = 'normal';
 	
-	var span = document.createElement('div');
+	let span = document.createElement('div');
 	span.style.position = 'absolute';
 	span.style.width = '70px';
 	span.style.marginTop = '0px';
@@ -3393,11 +3393,11 @@ TextFormatPanel.prototype.addFont = function(container)
 	spacingPanel.appendChild(span);
 
 	var topUpdate, globalUpdate, leftUpdate, bottomUpdate, rightUpdate;
-	var topSpacing = this.addUnitInput(spacingPanel, 'pt', 91, 44, function()
+	let topSpacing = this.addUnitInput(spacingPanel, 'pt', 91, 44, function()
 	{
 		topUpdate.apply(this, arguments);
 	});
-	var globalSpacing = this.addUnitInput(spacingPanel, 'pt', 20, 44, function()
+	let globalSpacing = this.addUnitInput(spacingPanel, 'pt', 20, 44, function()
 	{
 		globalUpdate.apply(this, arguments);
 	});
@@ -3408,15 +3408,15 @@ TextFormatPanel.prototype.addFont = function(container)
 	mxUtils.br(spacingPanel);
 	mxUtils.br(spacingPanel);
 
-	var leftSpacing = this.addUnitInput(spacingPanel, 'pt', 162, 44, function()
+	let leftSpacing = this.addUnitInput(spacingPanel, 'pt', 162, 44, function()
 	{
 		leftUpdate.apply(this, arguments);
 	});
-	var bottomSpacing = this.addUnitInput(spacingPanel, 'pt', 91, 44, function()
+	let bottomSpacing = this.addUnitInput(spacingPanel, 'pt', 91, 44, function()
 	{
 		bottomUpdate.apply(this, arguments);
 	});
-	var rightSpacing = this.addUnitInput(spacingPanel, 'pt', 20, 44, function()
+	let rightSpacing = this.addUnitInput(spacingPanel, 'pt', 20, 44, function()
 	{
 		rightUpdate.apply(this, arguments);
 	});
@@ -3434,12 +3434,12 @@ TextFormatPanel.prototype.addFont = function(container)
 	}
 	else
 	{
-		var selState = null;
-		var lineHeightInput = null;
+		let selState = null;
+		let lineHeightInput = null;
 		
 		container.appendChild(this.createRelativeOption(mxResources.get('lineheight'), null, null, function(input)
 		{
-			var value = (input.value == '') ? 120 : parseInt(input.value);
+			let value = (input.value == '') ? 120 : parseInt(input.value);
 			value = Math.max(0, (isNaN(value)) ? 120 : value);
 
 			if (selState != null)
@@ -3448,8 +3448,8 @@ TextFormatPanel.prototype.addFont = function(container)
 				selState = null;
 			}
 			
-			var selectedElement = graph.getSelectedElement();
-			var node = selectedElement;
+			let selectedElement = graph.getSelectedElement();
+			let node = selectedElement;
 			
 			while (node != null && node.nodeType != mxConstants.NODETYPE_ELEMENT)
 			{
@@ -3499,11 +3499,11 @@ TextFormatPanel.prototype.addFont = function(container)
 			input.value = '120 %';
 		}));
 		
-		var insertPanel = stylePanel.cloneNode(false);
+		let insertPanel = stylePanel.cloneNode(false);
 		insertPanel.style.paddingLeft = '0px';
-		var insertBtns = this.editorUi.toolbar.addItems(['link', 'image'], insertPanel, true);
+		let insertBtns = this.editorUi.toolbar.addItems(['link', 'image'], insertPanel, true);
 
-		var btns = [
+		let btns = [
 		        this.editorUi.toolbar.addButton('geSprite-horizontalrule', mxResources.get('insertHorizontalRule'),
 				function()
 				{
@@ -3523,10 +3523,10 @@ TextFormatPanel.prototype.addFont = function(container)
 		wrapper2.appendChild(insertPanel);
 		container.appendChild(wrapper2);
 		
-		var tablePanel = stylePanel.cloneNode(false);
+		let tablePanel = stylePanel.cloneNode(false);
 		tablePanel.style.paddingLeft = '0px';
 		
-		var btns = [
+		let btns = [
 		        this.editorUi.toolbar.addButton('geSprite-insertcolumnbefore', mxResources.get('insertColumnBefore'),
 	     		mxUtils.bind(this, function()
 				{
@@ -3629,21 +3629,21 @@ TextFormatPanel.prototype.addFont = function(container)
 		var tablePanel2 = stylePanel.cloneNode(false);
 		tablePanel2.style.paddingLeft = '0px';
 		
-		var btns = [
+		let btns = [
 		        this.editorUi.toolbar.addButton('geSprite-strokecolor', mxResources.get('borderColor'),
 				mxUtils.bind(this, function(evt)
 				{
 					if (currentTable != null)
 					{
 						// Converts rgb(r,g,b) values
-						var color = currentTable.style.borderColor.replace(
+						let color = currentTable.style.borderColor.replace(
 							    /\brgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/g,
 							    function($0, $1, $2, $3) {
 							        return "#" + ("0"+Number($1).toString(16)).substr(-2) + ("0"+Number($2).toString(16)).substr(-2) + ("0"+Number($3).toString(16)).substr(-2);
 							    });
 						this.editorUi.pickColor(color, function(newColor)
 						{
-							var targetElt = (tableCell != null && (evt == null || !mxEvent.isShiftDown(evt))) ? tableCell : currentTable;
+							let targetElt = (tableCell != null && (evt == null || !mxEvent.isShiftDown(evt))) ? tableCell : currentTable;
 							
 							graph.processElements(targetElt, function(elt)
 							{
@@ -3671,14 +3671,14 @@ TextFormatPanel.prototype.addFont = function(container)
 					// Converts rgb(r,g,b) values
 					if (currentTable != null)
 					{
-						var color = currentTable.style.backgroundColor.replace(
+						let color = currentTable.style.backgroundColor.replace(
 							    /\brgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/g,
 							    function($0, $1, $2, $3) {
 							        return "#" + ("0"+Number($1).toString(16)).substr(-2) + ("0"+Number($2).toString(16)).substr(-2) + ("0"+Number($3).toString(16)).substr(-2);
 							    });
 						this.editorUi.pickColor(color, function(newColor)
 						{
-							var targetElt = (tableCell != null && (evt == null || !mxEvent.isShiftDown(evt))) ? tableCell : currentTable;
+							let targetElt = (tableCell != null && (evt == null || !mxEvent.isShiftDown(evt))) ? tableCell : currentTable;
 							
 							graph.processElements(targetElt, function(elt)
 							{
@@ -3701,9 +3701,9 @@ TextFormatPanel.prototype.addFont = function(container)
 				{
 					if (currentTable != null)
 					{
-						var value = currentTable.getAttribute('cellPadding') || 0;
+						let value = currentTable.getAttribute('cellPadding') || 0;
 						
-						var dlg = new FilenameDialog(ui, value, mxResources.get('apply'), mxUtils.bind(this, function(newValue)
+						let dlg = new FilenameDialog(ui, value, mxResources.get('apply'), mxUtils.bind(this, function(newValue)
 						{
 							if (newValue != null && newValue.length > 0)
 							{
@@ -3756,10 +3756,10 @@ TextFormatPanel.prototype.addFont = function(container)
 		elt.style.backgroundImage = (selected) ? 'linear-gradient(#c5ecff 0px,#87d4fb 100%)' : '';
 	};
 	
-	var listener = mxUtils.bind(this, function(sender, evt, force)
+	let listener = mxUtils.bind(this, function(sender, evt, force)
 	{
 		ss = this.format.getSelectionState();
-		var fontStyle = mxUtils.getValue(ss.style, mxConstants.STYLE_FONTSTYLE, 0);
+		let fontStyle = mxUtils.getValue(ss.style, mxConstants.STYLE_FONTSTYLE, 0);
 		setSelected(fontStyleItems[0], (fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD);
 		setSelected(fontStyleItems[1], (fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC);
 		setSelected(fontStyleItems[2], (fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE);
@@ -3769,22 +3769,22 @@ TextFormatPanel.prototype.addFont = function(container)
 		
 		if (force || document.activeElement != input)
 		{
-			var tmp = parseFloat(mxUtils.getValue(ss.style, mxConstants.STYLE_FONTSIZE, Menus.prototype.defaultFontSize));
+			let tmp = parseFloat(mxUtils.getValue(ss.style, mxConstants.STYLE_FONTSIZE, Menus.prototype.defaultFontSize));
 			input.value = (isNaN(tmp)) ? '' : tmp  + ' pt';
 		}
 		
-		var align = mxUtils.getValue(ss.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER);
+		let align = mxUtils.getValue(ss.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER);
 		setSelected(left, align == mxConstants.ALIGN_LEFT);
 		setSelected(center, align == mxConstants.ALIGN_CENTER);
 		setSelected(right, align == mxConstants.ALIGN_RIGHT);
 		
-		var valign = mxUtils.getValue(ss.style, mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE);
+		let valign = mxUtils.getValue(ss.style, mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE);
 		setSelected(top, valign == mxConstants.ALIGN_TOP);
 		setSelected(middle, valign == mxConstants.ALIGN_MIDDLE);
 		setSelected(bottom, valign == mxConstants.ALIGN_BOTTOM);
 		
-		var pos = mxUtils.getValue(ss.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
-		var vpos = mxUtils.getValue(ss.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
+		let pos = mxUtils.getValue(ss.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
+		let vpos = mxUtils.getValue(ss.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
 		
 		if (pos == mxConstants.ALIGN_LEFT && vpos == mxConstants.ALIGN_TOP)
 		{
@@ -3823,7 +3823,7 @@ TextFormatPanel.prototype.addFont = function(container)
 			positionSelect.value = 'center';
 		}
 		
-		var dir = mxUtils.getValue(ss.style, mxConstants.STYLE_TEXT_DIRECTION, mxConstants.DEFAULT_TEXT_DIRECTION);
+		let dir = mxUtils.getValue(ss.style, mxConstants.STYLE_TEXT_DIRECTION, mxConstants.DEFAULT_TEXT_DIRECTION);
 		
 		if (dir == mxConstants.TEXT_DIRECTION_RTL)
 		{
@@ -3840,31 +3840,31 @@ TextFormatPanel.prototype.addFont = function(container)
 		
 		if (force || document.activeElement != globalSpacing)
 		{
-			var tmp = parseFloat(mxUtils.getValue(ss.style, mxConstants.STYLE_SPACING, 2));
+			let tmp = parseFloat(mxUtils.getValue(ss.style, mxConstants.STYLE_SPACING, 2));
 			globalSpacing.value = (isNaN(tmp)) ? '' : tmp  + ' pt';
 		}
 
 		if (force || document.activeElement != topSpacing)
 		{
-			var tmp = parseFloat(mxUtils.getValue(ss.style, mxConstants.STYLE_SPACING_TOP, 0));
+			let tmp = parseFloat(mxUtils.getValue(ss.style, mxConstants.STYLE_SPACING_TOP, 0));
 			topSpacing.value = (isNaN(tmp)) ? '' : tmp  + ' pt';
 		}
 		
 		if (force || document.activeElement != rightSpacing)
 		{
-			var tmp = parseFloat(mxUtils.getValue(ss.style, mxConstants.STYLE_SPACING_RIGHT, 0));
+			let tmp = parseFloat(mxUtils.getValue(ss.style, mxConstants.STYLE_SPACING_RIGHT, 0));
 			rightSpacing.value = (isNaN(tmp)) ? '' : tmp  + ' pt';
 		}
 		
 		if (force || document.activeElement != bottomSpacing)
 		{
-			var tmp = parseFloat(mxUtils.getValue(ss.style, mxConstants.STYLE_SPACING_BOTTOM, 0));
+			let tmp = parseFloat(mxUtils.getValue(ss.style, mxConstants.STYLE_SPACING_BOTTOM, 0));
 			bottomSpacing.value = (isNaN(tmp)) ? '' : tmp  + ' pt';
 		}
 		
 		if (force || document.activeElement != leftSpacing)
 		{
-			var tmp = parseFloat(mxUtils.getValue(ss.style, mxConstants.STYLE_SPACING_LEFT, 0));
+			let tmp = parseFloat(mxUtils.getValue(ss.style, mxConstants.STYLE_SPACING_LEFT, 0));
 			leftSpacing.value = (isNaN(tmp)) ? '' : tmp  + ' pt';
 		}
 	});
@@ -3888,9 +3888,9 @@ TextFormatPanel.prototype.addFont = function(container)
 	
 	if (graph.cellEditor.isContentEditing())
 	{
-		var updating = false;
+		let updating = false;
 		
-		var updateCssHandler = function()
+		let updateCssHandler = function()
 		{
 			if (!updating)
 			{
@@ -3898,7 +3898,7 @@ TextFormatPanel.prototype.addFont = function(container)
 			
 				window.setTimeout(function()
 				{
-					var node = graph.getSelectedEditingElement();
+					let node = graph.getSelectedEditingElement();
 
 					if (node != null)
 					{
@@ -3906,7 +3906,7 @@ TextFormatPanel.prototype.addFont = function(container)
 						{
 							if (elt.style != null && css != null)
 							{
-								var lineHeight = css.lineHeight
+								let lineHeight = css.lineHeight
 								
 								if (elt.style.lineHeight != null && elt.style.lineHeight.substring(elt.style.lineHeight.length - 1) == '%')
 								{
@@ -3926,7 +3926,7 @@ TextFormatPanel.prototype.addFont = function(container)
 						
 						function getAbsoluteFontSize(css)
 						{
-							var fontSize = (css != null) ? css.fontSize : null;
+							let fontSize = (css != null) ? css.fontSize : null;
 								
 							if (fontSize != null && fontSize.substring(fontSize.length - 2) == 'px')
 							{
@@ -3938,25 +3938,25 @@ TextFormatPanel.prototype.addFont = function(container)
 							}
 						};
 						
-						var css = mxUtils.getCurrentStyle(node);
-						var fontSize = getAbsoluteFontSize(css);
-						var lineHeight = getRelativeLineHeight(fontSize, css, node);
+						let css = mxUtils.getCurrentStyle(node);
+						let fontSize = getAbsoluteFontSize(css);
+						let lineHeight = getRelativeLineHeight(fontSize, css, node);
 
 						// Finds common font size
-						var elts = node.getElementsByTagName('*');
+						let elts = node.getElementsByTagName('*');
 
 						// IE does not support containsNode
 						if (elts.length > 0 && window.getSelection)
 						{
-							var selection = window.getSelection();
+							let selection = window.getSelection();
 
-							for (var i = 0; i < elts.length; i++)
+							for (let i = 0; i < elts.length; i++)
 							{
 								if (selection.containsNode(elts[i], true))
 								{
 									temp = mxUtils.getCurrentStyle(elts[i]);
 									fontSize = Math.max(getAbsoluteFontSize(temp), fontSize);
-									var lh = getRelativeLineHeight(fontSize, temp, elts[i]);
+									let lh = getRelativeLineHeight(fontSize, temp, elts[i]);
 									
 									if (lh != lineHeight || isNaN(lh))
 									{
@@ -3974,7 +3974,7 @@ TextFormatPanel.prototype.addFont = function(container)
 							}
 							else
 							{
-								var child = node;
+								let child = node;
 								
 								while (child != null && child.childNodes.length == 1)
 								{
@@ -4020,7 +4020,7 @@ TextFormatPanel.prototype.addFont = function(container)
 							
 							if (!graph.cellEditor.isTableSelected())
 							{
-								var align = graph.cellEditor.align || mxUtils.getValue(ss.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER);
+								let align = graph.cellEditor.align || mxUtils.getValue(ss.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER);
 
 								if (isEqualOrPrefixed(css.textAlign, 'justify'))
 								{
@@ -4064,7 +4064,7 @@ TextFormatPanel.prototype.addFont = function(container)
 									input.value = (isNaN(fontSize)) ? '' : fontSize + ' pt';
 								}
 								
-								var lh = parseFloat(lineHeight);
+								let lh = parseFloat(lineHeight);
 								
 								if (!isNaN(lh))
 								{
@@ -4077,7 +4077,7 @@ TextFormatPanel.prototype.addFont = function(container)
 							}
 							
 							// Converts rgb(r,g,b) values
-							var color = css.color.replace(
+							let color = css.color.replace(
 								    /\brgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/g,
 								    function($0, $1, $2, $3) {
 								        return "#" + ("0"+Number($1).toString(16)).substr(-2) + ("0"+Number($2).toString(16)).substr(-2) + ("0"+Number($3).toString(16)).substr(-2);
@@ -4171,10 +4171,10 @@ StyleFormatPanel.prototype.defaultStrokeColor = 'black';
  */
 StyleFormatPanel.prototype.init = function()
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
-	var ss = this.format.getSelectionState();
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
+	let ss = this.format.getSelectionState();
 	
 	if (!ss.containsLabel)
 	{
@@ -4191,14 +4191,14 @@ StyleFormatPanel.prototype.init = function()
 	
 		this.container.appendChild(this.addStroke(this.createPanel()));
 		this.container.appendChild(this.addLineJumps(this.createPanel()));
-		var opacityPanel = this.createRelativeOption(mxResources.get('opacity'), mxConstants.STYLE_OPACITY, 41);
+		let opacityPanel = this.createRelativeOption(mxResources.get('opacity'), mxConstants.STYLE_OPACITY, 41);
 		opacityPanel.style.paddingTop = '8px';
 		opacityPanel.style.paddingBottom = '8px';
 		this.container.appendChild(opacityPanel);
 		this.container.appendChild(this.addEffects(this.createPanel()));
 	}
 	
-	var opsPanel = this.addEditOps(this.createPanel());
+	let opsPanel = this.addEditOps(this.createPanel());
 	
 	if (opsPanel.firstChild != null)
 	{
@@ -4213,8 +4213,8 @@ StyleFormatPanel.prototype.init = function()
  */
 StyleFormatPanel.prototype.getCssRules = function(css)
 {
-	var doc = document.implementation.createHTMLDocument('');
-	var styleElement = document.createElement('style');
+	let doc = document.implementation.createHTMLDocument('');
+	let styleElement = document.createElement('style');
 	
 	mxUtils.setTextContent(styleElement, css);
 	doc.body.appendChild(styleElement);
@@ -4227,9 +4227,9 @@ StyleFormatPanel.prototype.getCssRules = function(css)
  */
 StyleFormatPanel.prototype.addSvgStyles = function(container)
 {
-	var ui = this.editorUi;
-	var graph = ui.editor.graph;
-	var ss = this.format.getSelectionState();
+	let ui = this.editorUi;
+	let graph = ui.editor.graph;
+	let ss = this.format.getSelectionState();
 	container.style.paddingTop = '6px';
 	container.style.paddingBottom = '6px';
 	container.style.fontWeight = 'bold';
@@ -4237,25 +4237,25 @@ StyleFormatPanel.prototype.addSvgStyles = function(container)
 
 	try
 	{
-		var exp = ss.style.editableCssRules;
+		let exp = ss.style.editableCssRules;
 		
 		if (exp != null)
 		{
-			var regex = new RegExp(exp);
+			let regex = new RegExp(exp);
 			
-			var data = ss.style.image.substring(ss.style.image.indexOf(',') + 1);
-			var xml = (window.atob) ? atob(data) : Base64.decode(data, true);
-			var svg = mxUtils.parseXml(xml);
+			let data = ss.style.image.substring(ss.style.image.indexOf(',') + 1);
+			let xml = (window.atob) ? atob(data) : Base64.decode(data, true);
+			let svg = mxUtils.parseXml(xml);
 			
 			if (svg != null)
 			{
-				var styles = svg.getElementsByTagName('style');
+				let styles = svg.getElementsByTagName('style');
 				
-				for (var i = 0; i < styles.length; i++)
+				for (let i = 0; i < styles.length; i++)
 				{
-					var rules = this.getCssRules(mxUtils.getTextContent(styles[i]));
+					let rules = this.getCssRules(mxUtils.getTextContent(styles[i]));
 					
-					for (var j = 0; j < rules.length; j++)
+					for (let j = 0; j < rules.length; j++)
 					{
 						this.addSvgRule(container, rules[j], svg, styles[i], rules, j, regex);
 					}
@@ -4276,8 +4276,8 @@ StyleFormatPanel.prototype.addSvgStyles = function(container)
  */
 StyleFormatPanel.prototype.addSvgRule = function(container, rule, svg, styleElem, rules, ruleIndex, regex)
 {
-	var ui = this.editorUi;
-	var graph = ui.editor.graph;
+	let ui = this.editorUi;
+	let graph = ui.editor.graph;
 	
 	if (regex.test(rule.selectorText))
 	{
@@ -4291,27 +4291,27 @@ StyleFormatPanel.prototype.addSvgRule = function(container, rule, svg, styleElem
 			  ("0" + parseInt(rgb[3],10).toString(16)).slice(-2) : '';
 		};
 		
-		var addStyleRule = mxUtils.bind(this, function(rule, key, label)
+		let addStyleRule = mxUtils.bind(this, function(rule, key, label)
 		{
-			var value = mxUtils.trim(rule.style[key]);
+			let value = mxUtils.trim(rule.style[key]);
 			
 			if (value != '' && value.substring(0, 4) != 'url(')
 			{
-				var option = this.createColorOption(label + ' ' + rule.selectorText, function()
+				let option = this.createColorOption(label + ' ' + rule.selectorText, function()
 				{
 					return rgb2hex(value);
 				}, function(color)
 				{
 					rules[ruleIndex].style[key] = color;
-					var cssTxt = '';
+					let cssTxt = '';
 					
-					for (var i = 0; i < rules.length; i++) 
+					for (let i = 0; i < rules.length; i++)
 					{
 						cssTxt += rules[i].cssText + ' ';
 					}
 					
 					styleElem.textContent = cssTxt;
-					var xml = mxUtils.getXml(svg.documentElement);
+					let xml = mxUtils.getXml(svg.documentElement);
 					
 					graph.setCellStyles(mxConstants.STYLE_IMAGE, 'data:image/svg+xml,' +
 						((window.btoa) ? btoa(xml) : Base64.encode(xml, true)),
@@ -4346,8 +4346,8 @@ StyleFormatPanel.prototype.addSvgRule = function(container, rule, svg, styleElem
  */
 StyleFormatPanel.prototype.addEditOps = function(div)
 {
-	var ss = this.format.getSelectionState();
-	var btn = null;
+	let ss = this.format.getSelectionState();
+	let btn = null;
 	
 	if (this.editorUi.editor.graph.getSelectionCount() == 1)
 	{
@@ -4395,20 +4395,20 @@ StyleFormatPanel.prototype.addEditOps = function(div)
  */
 StyleFormatPanel.prototype.addFill = function(container)
 {
-	var ui = this.editorUi;
-	var graph = ui.editor.graph;
-	var ss = this.format.getSelectionState();
+	let ui = this.editorUi;
+	let graph = ui.editor.graph;
+	let ss = this.format.getSelectionState();
 	container.style.paddingTop = '6px';
 	container.style.paddingBottom = '6px';
 
 	// Adds gradient direction option
-	var gradientSelect = document.createElement('select');
+	let gradientSelect = document.createElement('select');
 	gradientSelect.style.position = 'absolute';
 	gradientSelect.style.marginTop = '-2px';
 	gradientSelect.style.right = '72px';
 	gradientSelect.style.width = '70px';
 	
-	var fillStyleSelect = gradientSelect.cloneNode(false);
+	let fillStyleSelect = gradientSelect.cloneNode(false);
 	
 	// Stops events from bubbling to color option event handler
 	mxEvent.addListener(gradientSelect, 'click', function(evt)
@@ -4420,8 +4420,8 @@ StyleFormatPanel.prototype.addFill = function(container)
 		mxEvent.consume(evt);
 	});
 	
-	var defs = (ss.vertices.length >= 1) ? graph.stylesheet.getDefaultVertexStyle() : graph.stylesheet.getDefaultEdgeStyle();
-	var gradientPanel = this.createCellColorOption(mxResources.get('gradient'), mxConstants.STYLE_GRADIENTCOLOR,
+	let defs = (ss.vertices.length >= 1) ? graph.stylesheet.getDefaultVertexStyle() : graph.stylesheet.getDefaultEdgeStyle();
+	let gradientPanel = this.createCellColorOption(mxResources.get('gradient'), mxConstants.STYLE_GRADIENTCOLOR,
 		(defs[mxConstants.STYLE_GRADIENTCOLOR] != null) ? defs[mxConstants.STYLE_GRADIENTCOLOR] : '#ffffff', function(color)
 	{
 		if (color == null || color == mxConstants.NONE)
@@ -4437,26 +4437,26 @@ StyleFormatPanel.prototype.addFill = function(container)
 		graph.updateCellStyles(mxConstants.STYLE_GRADIENTCOLOR, color, graph.getSelectionCells());
 	});
 
-	var fillKey = (ss.style.shape == 'image') ? mxConstants.STYLE_IMAGE_BACKGROUND : mxConstants.STYLE_FILLCOLOR;
-	var label = (ss.style.shape == 'image') ? mxResources.get('background') : mxResources.get('fill');
+	let fillKey = (ss.style.shape == 'image') ? mxConstants.STYLE_IMAGE_BACKGROUND : mxConstants.STYLE_FILLCOLOR;
+	let label = (ss.style.shape == 'image') ? mxResources.get('background') : mxResources.get('fill');
 	
-	var defs = (ss.vertices.length >= 1) ? graph.stylesheet.getDefaultVertexStyle() : graph.stylesheet.getDefaultEdgeStyle();
-	var fillPanel = this.createCellColorOption(label, fillKey, (defs[fillKey] != null) ? defs[fillKey] : '#ffffff', null, mxUtils.bind(this, function(color)
+	let defs = (ss.vertices.length >= 1) ? graph.stylesheet.getDefaultVertexStyle() : graph.stylesheet.getDefaultEdgeStyle();
+	let fillPanel = this.createCellColorOption(label, fillKey, (defs[fillKey] != null) ? defs[fillKey] : '#ffffff', null, mxUtils.bind(this, function(color)
 	{
 		graph.updateCellStyles(fillKey, color, graph.getSelectionCells());
 	}));
 	fillPanel.style.fontWeight = 'bold';
 
-	var tmpColor = mxUtils.getValue(ss.style, fillKey, null);
+	let tmpColor = mxUtils.getValue(ss.style, fillKey, null);
 	gradientPanel.style.display = (tmpColor != null && tmpColor != mxConstants.NONE &&
 		ss.fill && ss.style.shape != 'image') ? '' : 'none';
 
-	var directions = [mxConstants.DIRECTION_NORTH, mxConstants.DIRECTION_EAST,
+	let directions = [mxConstants.DIRECTION_NORTH, mxConstants.DIRECTION_EAST,
 	                  mxConstants.DIRECTION_SOUTH, mxConstants.DIRECTION_WEST];
 
-	for (var i = 0; i < directions.length; i++)
+	for (let i = 0; i < directions.length; i++)
 	{
-		var gradientOption = document.createElement('option');
+		let gradientOption = document.createElement('option');
 		gradientOption.setAttribute('value', directions[i]);
 		mxUtils.write(gradientOption, mxResources.get(directions[i]));
 		gradientSelect.appendChild(gradientOption);
@@ -4464,9 +4464,9 @@ StyleFormatPanel.prototype.addFill = function(container)
 	
 	gradientPanel.appendChild(gradientSelect);
 	
-	for (var i = 0; i < Editor.roughFillStyles.length; i++)
+	for (let i = 0; i < Editor.roughFillStyles.length; i++)
 	{
-		var fillStyleOption = document.createElement('option');
+		let fillStyleOption = document.createElement('option');
 		fillStyleOption.setAttribute('value', Editor.roughFillStyles[i].val);
 		mxUtils.write(fillStyleOption, Editor.roughFillStyles[i].dispName);
 		fillStyleSelect.appendChild(fillStyleOption);
@@ -4474,11 +4474,11 @@ StyleFormatPanel.prototype.addFill = function(container)
 	
 	fillPanel.appendChild(fillStyleSelect);
 
-	var listener = mxUtils.bind(this, function()
+	let listener = mxUtils.bind(this, function()
 	{
 		ss = this.format.getSelectionState();
-		var value = mxUtils.getValue(ss.style, mxConstants.STYLE_GRADIENT_DIRECTION, mxConstants.DIRECTION_SOUTH);
-		var fillStyle = mxUtils.getValue(ss.style, 'fillStyle', 'auto');
+		let value = mxUtils.getValue(ss.style, mxConstants.STYLE_GRADIENT_DIRECTION, mxConstants.DIRECTION_SOUTH);
+		let fillStyle = mxUtils.getValue(ss.style, 'fillStyle', 'auto');
 		
 		// Handles empty string which is not allowed as a value
 		if (value == '')
@@ -4490,7 +4490,7 @@ StyleFormatPanel.prototype.addFill = function(container)
 		fillStyleSelect.value = fillStyle;
 		container.style.display = (ss.fill) ? '' : 'none';
 		
-		var fillColor = mxUtils.getValue(ss.style, mxConstants.STYLE_FILLCOLOR, null);
+		let fillColor = mxUtils.getValue(ss.style, mxConstants.STYLE_FILLCOLOR, null);
 			
 		if (!ss.fill || ss.containsImage || fillColor == null || fillColor == mxConstants.NONE || ss.style.shape == 'filledEdge')
 		{
@@ -4524,9 +4524,9 @@ StyleFormatPanel.prototype.addFill = function(container)
 	container.appendChild(gradientPanel);
 	
 	// Adds custom colors
-	var custom = this.getCustomColors();
+	let custom = this.getCustomColors();
 	
-	for (var i = 0; i < custom.length; i++)
+	for (let i = 0; i < custom.length; i++)
 	{
 		container.appendChild(this.createCellColorOption(custom[i].title, custom[i].key, custom[i].defaultValue));
 	}
@@ -4539,8 +4539,8 @@ StyleFormatPanel.prototype.addFill = function(container)
  */
 StyleFormatPanel.prototype.getCustomColors = function()
 {
-	var ss = this.format.getSelectionState();
-	var result = [];
+	let ss = this.format.getSelectionState();
+	let result = [];
 	
 	if (ss.style.shape == 'swimlane' || ss.style.shape == 'table')
 	{
@@ -4555,15 +4555,15 @@ StyleFormatPanel.prototype.getCustomColors = function()
  */
 StyleFormatPanel.prototype.addStroke = function(container)
 {
-	var ui = this.editorUi;
-	var graph = ui.editor.graph;
-	var ss = this.format.getSelectionState();
+	let ui = this.editorUi;
+	let graph = ui.editor.graph;
+	let ss = this.format.getSelectionState();
 	
 	container.style.paddingTop = '4px';
 	container.style.paddingBottom = '4px';
 	container.style.whiteSpace = 'normal';
 	
-	var colorPanel = document.createElement('div');
+	let colorPanel = document.createElement('div');
 	colorPanel.style.fontWeight = 'bold';
 	
 	if (!ss.stroke)
@@ -4572,17 +4572,17 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	}
 	
 	// Adds gradient direction option
-	var styleSelect = document.createElement('select');
+	let styleSelect = document.createElement('select');
 	styleSelect.style.position = 'absolute';
 	styleSelect.style.marginTop = '-2px';
 	styleSelect.style.right = '72px';
 	styleSelect.style.width = '80px';
 
-	var styles = ['sharp', 'rounded', 'curved'];
+	let styles = ['sharp', 'rounded', 'curved'];
 
-	for (var i = 0; i < styles.length; i++)
+	for (let i = 0; i < styles.length; i++)
 	{
-		var styleOption = document.createElement('option');
+		let styleOption = document.createElement('option');
 		styleOption.setAttribute('value', styles[i]);
 		mxUtils.write(styleOption, mxResources.get(styles[i]));
 		styleSelect.appendChild(styleOption);
@@ -4593,9 +4593,9 @@ StyleFormatPanel.prototype.addStroke = function(container)
 		graph.getModel().beginUpdate();
 		try
 		{
-			var keys = [mxConstants.STYLE_ROUNDED, mxConstants.STYLE_CURVED];
+			let keys = [mxConstants.STYLE_ROUNDED, mxConstants.STYLE_CURVED];
 			// Default for rounded is 1
-			var values = ['0', null];
+			let values = ['0', null];
 			
 			if (styleSelect.value == 'rounded')
 			{
@@ -4606,7 +4606,7 @@ StyleFormatPanel.prototype.addStroke = function(container)
 				values = [null, '1'];
 			}
 			
-			for (var i = 0; i < keys.length; i++)
+			for (let i = 0; i < keys.length; i++)
 			{
 				graph.setCellStyles(keys[i], values[i], graph.getSelectionCells());
 			}
@@ -4628,11 +4628,11 @@ StyleFormatPanel.prototype.addStroke = function(container)
 		mxEvent.consume(evt);
 	});
 
-	var strokeKey = (ss.style.shape == 'image') ? mxConstants.STYLE_IMAGE_BORDER : mxConstants.STYLE_STROKECOLOR;
-	var label = (ss.style.shape == 'image') ? mxResources.get('border') : mxResources.get('line');
+	let strokeKey = (ss.style.shape == 'image') ? mxConstants.STYLE_IMAGE_BORDER : mxConstants.STYLE_STROKECOLOR;
+	let label = (ss.style.shape == 'image') ? mxResources.get('border') : mxResources.get('line');
 	
-	var defs = (ss.vertices.length >= 1) ? graph.stylesheet.getDefaultVertexStyle() : graph.stylesheet.getDefaultEdgeStyle();
-	var lineColor = this.createCellColorOption(label, strokeKey, (defs[strokeKey] != null) ? defs[strokeKey] : '#000000', null, mxUtils.bind(this, function(color)
+	let defs = (ss.vertices.length >= 1) ? graph.stylesheet.getDefaultVertexStyle() : graph.stylesheet.getDefaultEdgeStyle();
+	let lineColor = this.createCellColorOption(label, strokeKey, (defs[strokeKey] != null) ? defs[strokeKey] : '#000000', null, mxUtils.bind(this, function(color)
 	{
 		graph.updateCellStyles(strokeKey, color, graph.getSelectionCells());
 	}));
@@ -4641,7 +4641,7 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	colorPanel.appendChild(lineColor);
 	
 	// Used if only edges selected
-	var stylePanel = colorPanel.cloneNode(false);
+	let stylePanel = colorPanel.cloneNode(false);
 	stylePanel.style.fontWeight = 'normal';
 	stylePanel.style.whiteSpace = 'nowrap';
 	stylePanel.style.position = 'relative';
@@ -4650,11 +4650,11 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	stylePanel.style.marginTop = '2px';
 	stylePanel.className = 'geToolbarContainer';
 
-	var addItem = mxUtils.bind(this, function(menu, width, cssName, keys, values)
+	let addItem = mxUtils.bind(this, function(menu, width, cssName, keys, values)
 	{
-		var item = this.editorUi.menus.styleChange(menu, '', keys, values, 'geIcon', null);
+		let item = this.editorUi.menus.styleChange(menu, '', keys, values, 'geIcon', null);
 	
-		var pat = document.createElement('div');
+		let pat = document.createElement('div');
 		pat.style.width = width + 'px';
 		pat.style.height = '1px';
 		pat.style.borderBottom = '1px ' + cssName + ' ' + this.defaultStrokeColor;
@@ -4667,7 +4667,7 @@ StyleFormatPanel.prototype.addStroke = function(container)
 		return item;
 	});
 
-	var pattern = this.editorUi.toolbar.addMenuFunctionInContainer(stylePanel, 'geSprite-orthogonal', mxResources.get('pattern'), false, mxUtils.bind(this, function(menu)
+	let pattern = this.editorUi.toolbar.addMenuFunctionInContainer(stylePanel, 'geSprite-orthogonal', mxResources.get('pattern'), false, mxUtils.bind(this, function(menu)
 	{
 		addItem(menu, 75, 'solid', [mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN], [null, null]).setAttribute('title', mxResources.get('solid'));
 		addItem(menu, 75, 'dashed', [mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN], ['1', null]).setAttribute('title', mxResources.get('dashed'));
@@ -4677,9 +4677,9 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	}));
 	
 	// Used for mixed selection (vertices and edges)
-	var altStylePanel = stylePanel.cloneNode(false);
+	let altStylePanel = stylePanel.cloneNode(false);
 	
-	var edgeShape = this.editorUi.toolbar.addMenuFunctionInContainer(altStylePanel, 'geSprite-connection', mxResources.get('connection'), false, mxUtils.bind(this, function(menu)
+	let edgeShape = this.editorUi.toolbar.addMenuFunctionInContainer(altStylePanel, 'geSprite-connection', mxResources.get('connection'), false, mxUtils.bind(this, function(menu)
 	{
 		this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_SHAPE, mxConstants.STYLE_STARTSIZE, mxConstants.STYLE_ENDSIZE, 'width'], [null, null, null, null], 'geIcon geSprite geSprite-connection', null, true).setAttribute('title', mxResources.get('line'));
 		this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_SHAPE, mxConstants.STYLE_STARTSIZE, mxConstants.STYLE_ENDSIZE, 'width'], ['link', null, null, null], 'geIcon geSprite geSprite-linkedge', null, true).setAttribute('title', mxResources.get('link'));
@@ -4687,7 +4687,7 @@ StyleFormatPanel.prototype.addStroke = function(container)
 		this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_SHAPE, mxConstants.STYLE_STARTSIZE, mxConstants.STYLE_ENDSIZE, 'width'], ['arrow', null, null, null], 'geIcon geSprite geSprite-simplearrow', null, true).setAttribute('title', mxResources.get('simpleArrow')); 
 	}));
 
-	var altPattern = this.editorUi.toolbar.addMenuFunctionInContainer(altStylePanel, 'geSprite-orthogonal', mxResources.get('pattern'), false, mxUtils.bind(this, function(menu)
+	let altPattern = this.editorUi.toolbar.addMenuFunctionInContainer(altStylePanel, 'geSprite-orthogonal', mxResources.get('pattern'), false, mxUtils.bind(this, function(menu)
 	{
 		addItem(menu, 33, 'solid', [mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN], [null, null]).setAttribute('title', mxResources.get('solid'));
 		addItem(menu, 33, 'dashed', [mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN], ['1', null]).setAttribute('title', mxResources.get('dashed'));
@@ -4699,7 +4699,7 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	var stylePanel2 = stylePanel.cloneNode(false);
 
 	// Stroke width
-	var input = document.createElement('input');
+	let input = document.createElement('input');
 	input.style.textAlign = 'right';
 	input.style.marginTop = '2px';
 	input.style.width = '41px';
@@ -4707,13 +4707,13 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	
 	stylePanel.appendChild(input);
 	
-	var altInput = input.cloneNode(true);
+	let altInput = input.cloneNode(true);
 	altStylePanel.appendChild(altInput);
 
 	function update(evt)
 	{
 		// Maximum stroke width is 999
-		var value = parseInt(input.value);
+		let value = parseInt(input.value);
 		value = Math.min(999, Math.max(1, (isNaN(value)) ? 1 : value));
 		
 		if (value != mxUtils.getValue(ss.style, mxConstants.STYLE_STROKEWIDTH, 1))
@@ -4730,7 +4730,7 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	function altUpdate(evt)
 	{
 		// Maximum stroke width is 999
-		var value = parseInt(altInput.value);
+		let value = parseInt(altInput.value);
 		value = Math.min(999, Math.max(1, (isNaN(value)) ? 1 : value));
 		
 		if (value != mxUtils.getValue(ss.style, mxConstants.STYLE_STROKEWIDTH, 1))
@@ -4744,12 +4744,12 @@ StyleFormatPanel.prototype.addStroke = function(container)
 		mxEvent.consume(evt);
 	};
 
-	var stepper = this.createStepper(input, update, 1, 9);
+	let stepper = this.createStepper(input, update, 1, 9);
 	stepper.style.display = input.style.display;
 	stepper.style.marginTop = '2px';
 	stylePanel.appendChild(stepper);
 	
-	var altStepper = this.createStepper(altInput, altUpdate, 1, 9);
+	let altStepper = this.createStepper(altInput, altUpdate, 1, 9);
 	altStepper.style.display = altInput.style.display;
 	altStepper.style.marginTop = '2px';
 	altStylePanel.appendChild(altStepper);
@@ -4770,7 +4770,7 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	mxEvent.addListener(altInput, 'blur', altUpdate);
 	mxEvent.addListener(altInput, 'change', altUpdate);
 
-	var edgeStyle = this.editorUi.toolbar.addMenuFunctionInContainer(stylePanel2, 'geSprite-orthogonal', mxResources.get('waypoints'), false, mxUtils.bind(this, function(menu)
+	let edgeStyle = this.editorUi.toolbar.addMenuFunctionInContainer(stylePanel2, 'geSprite-orthogonal', mxResources.get('waypoints'), false, mxUtils.bind(this, function(menu)
 	{
 		if (ss.style.shape != 'arrow')
 		{
@@ -4790,11 +4790,11 @@ StyleFormatPanel.prototype.addStroke = function(container)
 		}
 	}));
 
-	var lineStart = this.editorUi.toolbar.addMenuFunctionInContainer(stylePanel2, 'geSprite-startclassic', mxResources.get('linestart'), false, mxUtils.bind(this, function(menu)
+	let lineStart = this.editorUi.toolbar.addMenuFunctionInContainer(stylePanel2, 'geSprite-startclassic', mxResources.get('linestart'), false, mxUtils.bind(this, function(menu)
 	{
 		if (ss.style.shape == 'connector' || ss.style.shape == 'flexArrow' || ss.style.shape == 'filledEdge')
 		{
-			var item = this.editorUi.menus.edgeStyleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.NONE, 0], 'geIcon', null, false);
+			let item = this.editorUi.menus.edgeStyleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.NONE, 0], 'geIcon', null, false);
 			item.setAttribute('title', mxResources.get('none'));
 			item.firstChild.firstChild.innerHTML = '<font style="font-size:10px;">' + mxUtils.htmlEntities(mxResources.get('none')) + '</font>';
 
@@ -4839,11 +4839,11 @@ StyleFormatPanel.prototype.addStroke = function(container)
 		}
 	}));
 
-	var lineEnd = this.editorUi.toolbar.addMenuFunctionInContainer(stylePanel2, 'geSprite-endclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu)
+	let lineEnd = this.editorUi.toolbar.addMenuFunctionInContainer(stylePanel2, 'geSprite-endclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu)
 	{
 		if (ss.style.shape == 'connector' || ss.style.shape == 'flexArrow' || ss.style.shape == 'filledEdge')
 		{
-			var item = this.editorUi.menus.edgeStyleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.NONE, 0], 'geIcon', null, false);
+			let item = this.editorUi.menus.edgeStyleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.NONE, 0], 'geIcon', null, false);
 			item.setAttribute('title', mxResources.get('none'));
 			item.firstChild.firstChild.innerHTML = '<font style="font-size:10px;">' + mxUtils.htmlEntities(mxResources.get('none')) + '</font>';
 			
@@ -4893,22 +4893,22 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	this.addArrow(lineStart);
 	this.addArrow(lineEnd);
 	
-	var symbol = this.addArrow(pattern, 9);
+	let symbol = this.addArrow(pattern, 9);
 	symbol.className = 'geIcon';
 	symbol.style.width = 'auto';
 	
-	var altSymbol = this.addArrow(altPattern, 9);
+	let altSymbol = this.addArrow(altPattern, 9);
 	altSymbol.className = 'geIcon';
 	altSymbol.style.width = '22px';
 	
-	var solid = document.createElement('div');
+	let solid = document.createElement('div');
 	solid.style.width = '85px';
 	solid.style.height = '1px';
 	solid.style.borderBottom = '1px solid ' + this.defaultStrokeColor;
 	solid.style.marginBottom = '9px';
 	symbol.appendChild(solid);
 	
-	var altSolid = document.createElement('div');
+	let altSolid = document.createElement('div');
 	altSolid.style.width = '23px';
 	altSolid.style.height = '1px';
 	altSolid.style.borderBottom = '1px solid ' + this.defaultStrokeColor;
@@ -4928,12 +4928,12 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	container.appendChild(altStylePanel);
 	container.appendChild(stylePanel);
 
-	var arrowPanel = stylePanel.cloneNode(false);
+	let arrowPanel = stylePanel.cloneNode(false);
 	arrowPanel.style.paddingBottom = '6px';
 	arrowPanel.style.paddingTop = '4px';
 	arrowPanel.style.fontWeight = 'normal';
 	
-	var span = document.createElement('div');
+	let span = document.createElement('div');
 	span.style.position = 'absolute';
 	span.style.marginLeft = '3px';
 	span.style.marginBottom = '12px';
@@ -4945,18 +4945,18 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	arrowPanel.appendChild(span);
 	
 	var endSpacingUpdate, endSizeUpdate;
-	var endSpacing = this.addUnitInput(arrowPanel, 'pt', 74, 33, function()
+	let endSpacing = this.addUnitInput(arrowPanel, 'pt', 74, 33, function()
 	{
 		endSpacingUpdate.apply(this, arguments);
 	});
-	var endSize = this.addUnitInput(arrowPanel, 'pt', 20, 33, function()
+	let endSize = this.addUnitInput(arrowPanel, 'pt', 20, 33, function()
 	{
 		endSizeUpdate.apply(this, arguments);
 	});
 
 	mxUtils.br(arrowPanel);
 	
-	var spacer = document.createElement('div');
+	let spacer = document.createElement('div');
 	spacer.style.height = '8px';
 	arrowPanel.appendChild(spacer);
 	
@@ -4965,11 +4965,11 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	arrowPanel.appendChild(span);
 	
 	var startSpacingUpdate, startSizeUpdate;
-	var startSpacing = this.addUnitInput(arrowPanel, 'pt', 74, 33, function()
+	let startSpacing = this.addUnitInput(arrowPanel, 'pt', 74, 33, function()
 	{
 		startSpacingUpdate.apply(this, arguments);
 	});
-	var startSize = this.addUnitInput(arrowPanel, 'pt', 20, 33, function()
+	let startSize = this.addUnitInput(arrowPanel, 'pt', 20, 33, function()
 	{
 		startSizeUpdate.apply(this, arguments);
 	});
@@ -4979,7 +4979,7 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	this.addLabel(arrowPanel, mxResources.get('size'), 20, 50);
 	mxUtils.br(arrowPanel);
 	
-	var perimeterPanel = colorPanel.cloneNode(false);
+	let perimeterPanel = colorPanel.cloneNode(false);
 	perimeterPanel.style.fontWeight = 'normal';
 	perimeterPanel.style.position = 'relative';
 	perimeterPanel.style.paddingLeft = '16px'
@@ -4988,7 +4988,7 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	perimeterPanel.style.borderWidth = '0px';
 	perimeterPanel.style.paddingBottom = '18px';
 	
-	var span = document.createElement('div');
+	let span = document.createElement('div');
 	span.style.position = 'absolute';
 	span.style.marginLeft = '3px';
 	span.style.marginBottom = '12px';
@@ -4999,7 +4999,7 @@ StyleFormatPanel.prototype.addStroke = function(container)
 	perimeterPanel.appendChild(span);
 	
 	var perimeterUpdate;
-	var perimeterSpacing = this.addUnitInput(perimeterPanel, 'pt', 20, 41, function()
+	let perimeterSpacing = this.addUnitInput(perimeterPanel, 'pt', 20, 41, function()
 	{
 		perimeterUpdate.apply(this, arguments);
 	});
@@ -5014,20 +5014,20 @@ StyleFormatPanel.prototype.addStroke = function(container)
 		container.appendChild(perimeterPanel);
 	}
 	
-	var listener = mxUtils.bind(this, function(sender, evt, force)
+	let listener = mxUtils.bind(this, function(sender, evt, force)
 	{
 		ss = this.format.getSelectionState();
-		var color = mxUtils.getValue(ss.style, strokeKey, null);
+		let color = mxUtils.getValue(ss.style, strokeKey, null);
 
 		if (force || document.activeElement != input)
 		{
-			var tmp = parseInt(mxUtils.getValue(ss.style, mxConstants.STYLE_STROKEWIDTH, 1));
+			let tmp = parseInt(mxUtils.getValue(ss.style, mxConstants.STYLE_STROKEWIDTH, 1));
 			input.value = (isNaN(tmp)) ? '' : tmp + ' pt';
 		}
 		
 		if (force || document.activeElement != altInput)
 		{
-			var tmp = parseInt(mxUtils.getValue(ss.style, mxConstants.STYLE_STROKEWIDTH, 1));
+			let tmp = parseInt(mxUtils.getValue(ss.style, mxConstants.STYLE_STROKEWIDTH, 1));
 			altInput.value = (isNaN(tmp)) ? '' : tmp + ' pt';
 		}
 		
@@ -5061,11 +5061,11 @@ StyleFormatPanel.prototype.addStroke = function(container)
 		altSolid.style.borderBottom = solid.style.borderBottom;
 		
 		// Updates toolbar icon for edge style
-		var edgeStyleDiv = edgeStyle.getElementsByTagName('div')[0];
+		let edgeStyleDiv = edgeStyle.getElementsByTagName('div')[0];
 		
 		if (edgeStyleDiv != null)
 		{
-			var es = mxUtils.getValue(ss.style, mxConstants.STYLE_EDGE, null);
+			let es = mxUtils.getValue(ss.style, mxConstants.STYLE_EDGE, null);
 			
 			if (mxUtils.getValue(ss.style, mxConstants.STYLE_NOEDGESTYLE, null) == '1')
 			{
@@ -5103,7 +5103,7 @@ StyleFormatPanel.prototype.addStroke = function(container)
 		}
 		
 		// Updates icon for edge shape
-		var edgeShapeDiv = edgeShape.getElementsByTagName('div')[0];
+		let edgeShapeDiv = edgeShape.getElementsByTagName('div')[0];
 		
 		if (edgeShapeDiv != null)
 		{
@@ -5138,7 +5138,7 @@ StyleFormatPanel.prototype.addStroke = function(container)
 		
 		function updateArrow(marker, fill, elt, prefix)
 		{
-			var markerDiv = elt.getElementsByTagName('div')[0];
+			let markerDiv = elt.getElementsByTagName('div')[0];
 			
 			if (markerDiv != null)
 			{
@@ -5160,9 +5160,9 @@ StyleFormatPanel.prototype.addStroke = function(container)
 			return markerDiv;
 		};
 		
-		var sourceDiv = updateArrow(mxUtils.getValue(ss.style, mxConstants.STYLE_STARTARROW, null),
+		let sourceDiv = updateArrow(mxUtils.getValue(ss.style, mxConstants.STYLE_STARTARROW, null),
 				mxUtils.getValue(ss.style, 'startFill', '1'), lineStart, 'start');
-		var targetDiv = updateArrow(mxUtils.getValue(ss.style, mxConstants.STYLE_ENDARROW, null),
+		let targetDiv = updateArrow(mxUtils.getValue(ss.style, mxConstants.STYLE_ENDARROW, null),
 				mxUtils.getValue(ss.style, 'endFill', '1'), lineEnd, 'end');
 
 		// Special cases for markers
@@ -5195,31 +5195,31 @@ StyleFormatPanel.prototype.addStroke = function(container)
 
 		if (force || document.activeElement != startSize)
 		{
-			var tmp = parseInt(mxUtils.getValue(ss.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_MARKERSIZE));
+			let tmp = parseInt(mxUtils.getValue(ss.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_MARKERSIZE));
 			startSize.value = (isNaN(tmp)) ? '' : tmp  + ' pt';
 		}
 		
 		if (force || document.activeElement != startSpacing)
 		{
-			var tmp = parseInt(mxUtils.getValue(ss.style, mxConstants.STYLE_SOURCE_PERIMETER_SPACING, 0));
+			let tmp = parseInt(mxUtils.getValue(ss.style, mxConstants.STYLE_SOURCE_PERIMETER_SPACING, 0));
 			startSpacing.value = (isNaN(tmp)) ? '' : tmp  + ' pt';
 		}
 
 		if (force || document.activeElement != endSize)
 		{
-			var tmp = parseInt(mxUtils.getValue(ss.style, mxConstants.STYLE_ENDSIZE, mxConstants.DEFAULT_MARKERSIZE));
+			let tmp = parseInt(mxUtils.getValue(ss.style, mxConstants.STYLE_ENDSIZE, mxConstants.DEFAULT_MARKERSIZE));
 			endSize.value = (isNaN(tmp)) ? '' : tmp  + ' pt';
 		}
 		
 		if (force || document.activeElement != startSpacing)
 		{
-			var tmp = parseInt(mxUtils.getValue(ss.style, mxConstants.STYLE_TARGET_PERIMETER_SPACING, 0));
+			let tmp = parseInt(mxUtils.getValue(ss.style, mxConstants.STYLE_TARGET_PERIMETER_SPACING, 0));
 			endSpacing.value = (isNaN(tmp)) ? '' : tmp  + ' pt';
 		}
 		
 		if (force || document.activeElement != perimeterSpacing)
 		{
-			var tmp = parseInt(mxUtils.getValue(ss.style, mxConstants.STYLE_PERIMETER_SPACING, 0));
+			let tmp = parseInt(mxUtils.getValue(ss.style, mxConstants.STYLE_PERIMETER_SPACING, 0));
 			perimeterSpacing.value = (isNaN(tmp)) ? '' : tmp  + ' pt';
 		}
 	});
@@ -5249,18 +5249,18 @@ StyleFormatPanel.prototype.addStroke = function(container)
  */
 StyleFormatPanel.prototype.addLineJumps = function(container)
 {
-	var ss = this.format.getSelectionState();
+	let ss = this.format.getSelectionState();
 	
 	if (Graph.lineJumpsEnabled && ss.edges.length > 0 &&
 		ss.vertices.length == 0 && ss.lineJumps)
 	{
 		container.style.padding = '8px 0px 24px 18px';
 		
-		var ui = this.editorUi;
-		var editor = ui.editor;
-		var graph = editor.graph;
+		let ui = this.editorUi;
+		let editor = ui.editor;
+		let graph = editor.graph;
 		
-		var span = document.createElement('div');
+		let span = document.createElement('div');
 		span.style.position = 'absolute';
 		span.style.fontWeight = 'bold';
 		span.style.width = '80px';
@@ -5268,17 +5268,17 @@ StyleFormatPanel.prototype.addLineJumps = function(container)
 		mxUtils.write(span, mxResources.get('lineJumps'));
 		container.appendChild(span);
 		
-		var styleSelect = document.createElement('select');
+		let styleSelect = document.createElement('select');
 		styleSelect.style.position = 'absolute';
 		styleSelect.style.marginTop = '-2px';
 		styleSelect.style.right = '76px';
 		styleSelect.style.width = '62px';
 
-		var styles = ['none', 'arc', 'gap', 'sharp'];
+		let styles = ['none', 'arc', 'gap', 'sharp'];
 
-		for (var i = 0; i < styles.length; i++)
+		for (let i = 0; i < styles.length; i++)
 		{
-			var styleOption = document.createElement('option');
+			let styleOption = document.createElement('option');
 			styleOption.setAttribute('value', styles[i]);
 			mxUtils.write(styleOption, mxResources.get(styles[i]));
 			styleSelect.appendChild(styleOption);
@@ -5311,7 +5311,7 @@ StyleFormatPanel.prototype.addLineJumps = function(container)
 		
 		var jumpSizeUpdate;
 		
-		var jumpSize = this.addUnitInput(container, 'pt', 22, 33, function()
+		let jumpSize = this.addUnitInput(container, 'pt', 22, 33, function()
 		{
 			jumpSizeUpdate.apply(this, arguments);
 		});
@@ -5319,14 +5319,14 @@ StyleFormatPanel.prototype.addLineJumps = function(container)
 		jumpSizeUpdate = this.installInputHandler(jumpSize, 'jumpSize',
 			Graph.defaultJumpSize, 0, 999, ' pt');
 		
-		var listener = mxUtils.bind(this, function(sender, evt, force)
+		let listener = mxUtils.bind(this, function(sender, evt, force)
 		{
 			ss = this.format.getSelectionState();
 			styleSelect.value = mxUtils.getValue(ss.style, 'jumpStyle', 'none');
 
 			if (force || document.activeElement != jumpSize)
 			{
-				var tmp = parseInt(mxUtils.getValue(ss.style, 'jumpSize', Graph.defaultJumpSize));
+				let tmp = parseInt(mxUtils.getValue(ss.style, 'jumpSize', Graph.defaultJumpSize));
 				jumpSize.value = (isNaN(tmp)) ? '' : tmp  + ' pt';
 			}
 		});
@@ -5350,28 +5350,28 @@ StyleFormatPanel.prototype.addLineJumps = function(container)
  */
 StyleFormatPanel.prototype.addEffects = function(div)
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
-	var ss = this.format.getSelectionState();
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
+	let ss = this.format.getSelectionState();
 	
 	div.style.paddingTop = '0px';
 	div.style.paddingBottom = '2px';
 
-	var table = document.createElement('table');
+	let table = document.createElement('table');
 
 	table.style.width = '100%';
 	table.style.fontWeight = 'bold';
 	table.style.paddingRight = '20px';
-	var tbody = document.createElement('tbody');
-	var row = document.createElement('tr');
+	let tbody = document.createElement('tbody');
+	let row = document.createElement('tr');
 	row.style.padding = '0px';
-	var left = document.createElement('td');
+	let left = document.createElement('td');
 	left.style.padding = '0px';
 	left.style.width = '50%';
 	left.setAttribute('valign', 'top');
 	
-	var right = left.cloneNode(true);
+	let right = left.cloneNode(true);
 	right.style.paddingLeft = '8px';
 	row.appendChild(left);
 	row.appendChild(right);
@@ -5379,19 +5379,19 @@ StyleFormatPanel.prototype.addEffects = function(div)
 	table.appendChild(tbody);
 	div.appendChild(table);
 
-	var current = left;
-	var count = 0;
+	let current = left;
+	let count = 0;
 	
-	var addOption = mxUtils.bind(this, function(label, key, defaultValue)
+	let addOption = mxUtils.bind(this, function(label, key, defaultValue)
 	{
-		var opt = this.createCellOption(label, key, defaultValue);
+		let opt = this.createCellOption(label, key, defaultValue);
 		opt.style.width = '100%';
 		current.appendChild(opt);
 		current = (current == left) ? right : left;
 		count++;
 	});
 
-	var listener = mxUtils.bind(this, function(sender, evt, force)
+	let listener = mxUtils.bind(this, function(sender, evt, force)
 	{
 		ss = this.format.getSelectionState();
 		
@@ -5437,7 +5437,7 @@ StyleFormatPanel.prototype.addStyleOps = function(div)
 	div.style.paddingTop = '10px';
 	div.style.paddingBottom = '10px';
 	
-	var btn = mxUtils.button(mxResources.get('setAsDefaultStyle'), mxUtils.bind(this, function(evt)
+	let btn = mxUtils.button(mxResources.get('setAsDefaultStyle'), mxUtils.bind(this, function(evt)
 	{
 		this.editorUi.actions.get('setAsDefaultStyle').funct();
 	}));
@@ -5465,9 +5465,9 @@ mxUtils.extend(DiagramStylePanel, BaseFormatPanel);
  */
 DiagramStylePanel.prototype.init = function()
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
 
 	this.container.appendChild(this.addView(this.createPanel()));
 };
@@ -5477,36 +5477,36 @@ DiagramStylePanel.prototype.init = function()
  */
 DiagramStylePanel.prototype.addView = function(div)
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
-	var model = graph.getModel();
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
+	let model = graph.getModel();
 
 	div.style.whiteSpace = 'normal';
 
-	var sketch = graph.currentVertexStyle['sketch'] == '1' && graph.currentEdgeStyle['sketch'] == '1';
-	var rounded = graph.currentVertexStyle['rounded'] == '1';
-	var curved = graph.currentEdgeStyle['curved'] == '1';
+	let sketch = graph.currentVertexStyle['sketch'] == '1' && graph.currentEdgeStyle['sketch'] == '1';
+	let rounded = graph.currentVertexStyle['rounded'] == '1';
+	let curved = graph.currentEdgeStyle['curved'] == '1';
 
-	var opts = document.createElement('div');
+	let opts = document.createElement('div');
 	opts.style.paddingBottom = '12px';
 	opts.style.marginRight = '16px';
 	div.style.paddingTop = '8px';
 	
-	var table = document.createElement('table');
+	let table = document.createElement('table');
 	table.style.width = '100%';
 	table.style.fontWeight = 'bold';
 	
-	var tbody = document.createElement('tbody');
-	var row = document.createElement('tr');
+	let tbody = document.createElement('tbody');
+	let row = document.createElement('tr');
 	row.style.padding = '0px';
 	
-	var left = document.createElement('td');
+	let left = document.createElement('td');
 	left.style.padding = '0px';
 	left.style.width = '50%';
 	left.setAttribute('valign', 'middle');
 	
-	var right = left.cloneNode(true);
+	let right = left.cloneNode(true);
 	right.style.paddingLeft = '8px';
 	row.appendChild(left);
 	row.appendChild(right);
@@ -5594,18 +5594,18 @@ DiagramStylePanel.prototype.addView = function(div)
 	opts.appendChild(table);
 	div.appendChild(opts);
 
-	var defaultStyles = ['fillColor', 'strokeColor', 'fontColor', 'gradientColor'];
+	let defaultStyles = ['fillColor', 'strokeColor', 'fontColor', 'gradientColor'];
 	
-	var updateCells = mxUtils.bind(this, function(styles, graphStyle)
+	let updateCells = mxUtils.bind(this, function(styles, graphStyle)
 	{
-		var cells = graph.getVerticesAndEdges();
+		let cells = graph.getVerticesAndEdges();
 		
 		model.beginUpdate();
 		try
 		{
-			for (var i = 0; i < cells.length; i++)
+			for (let i = 0; i < cells.length; i++)
 			{
-				var style = graph.getCellStyle(cells[i]);
+				let style = graph.getCellStyle(cells[i]);
 				
 				// Handles special label background color
 				if (style['labelBackgroundColor'] != null)
@@ -5614,11 +5614,11 @@ DiagramStylePanel.prototype.addView = function(div)
 						graphStyle.background : null, [cells[i]]);
 				}
 				
-				var edge = model.isEdge(cells[i]);
-				var newStyle = model.getStyle(cells[i]);
-				var current = (edge) ? graph.currentEdgeStyle : graph.currentVertexStyle;
+				let edge = model.isEdge(cells[i]);
+				let newStyle = model.getStyle(cells[i]);
+				let current = (edge) ? graph.currentEdgeStyle : graph.currentVertexStyle;
 
-				for (var j = 0; j < styles.length; j++)
+				for (let j = 0; j < styles.length; j++)
 				{
 					if ((style[styles[j]] != null && style[styles[j]] != mxConstants.NONE) ||
 						(styles[j] != mxConstants.STYLE_FILLCOLOR &&
@@ -5637,11 +5637,11 @@ DiagramStylePanel.prototype.addView = function(div)
 		}
 	});
 			
-	var removeStyles = mxUtils.bind(this, function(style, styles, defaultStyle)
+	let removeStyles = mxUtils.bind(this, function(style, styles, defaultStyle)
 	{
 		if (style != null)
 		{
-			for (var j = 0; j < styles.length; j++)
+			for (let j = 0; j < styles.length; j++)
 			{
 				if (((style[styles[j]] != null &&
 					style[styles[j]] != mxConstants.NONE) ||
@@ -5654,7 +5654,7 @@ DiagramStylePanel.prototype.addView = function(div)
 		}
 	});
 
-	var applyStyle = mxUtils.bind(this, function(style, result, cell, graphStyle, theGraph)
+	let applyStyle = mxUtils.bind(this, function(style, result, cell, graphStyle, theGraph)
 	{
 		if (style != null)
 		{
@@ -5663,7 +5663,7 @@ DiagramStylePanel.prototype.addView = function(div)
 				// Handles special label background color
 				if (result['labelBackgroundColor'] != null)
 				{
-					var bg = (graphStyle != null) ? graphStyle.background : null;
+					let bg = (graphStyle != null) ? graphStyle.background : null;
 					theGraph = (theGraph != null) ? theGraph : graph;
 					
 					if (bg == null)
@@ -5693,9 +5693,9 @@ DiagramStylePanel.prototype.addView = function(div)
 		}
 	});
 	
-	var btn = mxUtils.button(mxResources.get('reset'), mxUtils.bind(this, function(evt)
+	let btn = mxUtils.button(mxResources.get('reset'), mxUtils.bind(this, function(evt)
 	{
-		var all = graph.getVerticesAndEdges(true, true);
+		let all = graph.getVerticesAndEdges(true, true);
 		
 		if (all.length > 0)
 		{
@@ -5722,10 +5722,10 @@ DiagramStylePanel.prototype.addView = function(div)
 	btn.style.maxWidth = '90px';
 	right.appendChild(btn);
 	
-	var createPreview = mxUtils.bind(this, function(commonStyle, vertexStyle, edgeStyle, graphStyle, container)
+	let createPreview = mxUtils.bind(this, function(commonStyle, vertexStyle, edgeStyle, graphStyle, container)
 	{
 		// Wrapper needed to catch events
-		var div = document.createElement('div');
+		let div = document.createElement('div');
 		div.style.cssText = 'position:absolute;display:inline-block;width:100%;height:100%;overflow:hidden;pointer-events:none;';
 		container.appendChild(div);
 		
@@ -5741,9 +5741,9 @@ DiagramStylePanel.prototype.addView = function(div)
 		
 		graph2.getCellStyle = function(cell)
 		{
-			var result = mxUtils.clone(Graph.prototype.getCellStyle.apply(this, arguments));
-			var defaultStyle = graph.stylesheet.getDefaultVertexStyle();
-			var appliedStyle = vertexStyle;
+			let result = mxUtils.clone(Graph.prototype.getCellStyle.apply(this, arguments));
+			let defaultStyle = graph.stylesheet.getDefaultVertexStyle();
+			let appliedStyle = vertexStyle;
 			
 			if (model.isEdge(cell))
 			{
@@ -5775,7 +5775,7 @@ DiagramStylePanel.prototype.addView = function(div)
 	});
 	
 	// Entries
-	var entries = document.createElement('div');
+	let entries = document.createElement('div');
 	entries.style.position = 'relative';
 	div.appendChild(entries);
 	
@@ -5785,9 +5785,9 @@ DiagramStylePanel.prototype.addView = function(div)
 		this.format.cachedStyleEntries = [];
 	}
 
-	var addEntry = mxUtils.bind(this, function(commonStyle, vertexStyle, edgeStyle, graphStyle, index)
+	let addEntry = mxUtils.bind(this, function(commonStyle, vertexStyle, edgeStyle, graphStyle, index)
 	{
-		var panel = this.format.cachedStyleEntries[index];
+		let panel = this.format.cachedStyleEntries[index];
 		
 		if (panel == null)
 		{
@@ -5853,7 +5853,7 @@ DiagramStylePanel.prototype.addView = function(div)
 				{
 					updateCells(defaultStyles, graphStyle);
 					
-					var change = new ChangePageSetup(ui, (graphStyle != null) ? graphStyle.background : null);
+					let change = new ChangePageSetup(ui, (graphStyle != null) ? graphStyle.background : null);
 					change.ignoreImage = true;
 					model.execute(change);
 						
@@ -5868,9 +5868,9 @@ DiagramStylePanel.prototype.addView = function(div)
 			
 			mxEvent.addListener(panel, 'mouseenter', mxUtils.bind(this, function(evt)
 			{
-				var prev = graph.getCellStyle;
-				var prevBg = graph.background;
-				var prevGrid = graph.view.gridColor;
+				let prev = graph.getCellStyle;
+				let prevBg = graph.background;
+				let prevGrid = graph.view.gridColor;
 	
 				graph.background = (graphStyle != null) ? graphStyle.background : null;
 				graph.view.gridColor = (graphStyle != null && graphStyle.gridColor != null) ?
@@ -5878,10 +5878,10 @@ DiagramStylePanel.prototype.addView = function(div)
 				
 				graph.getCellStyle = function(cell)
 				{
-					var result = mxUtils.clone(prev.apply(this, arguments));
+					let result = mxUtils.clone(prev.apply(this, arguments));
 					
-					var defaultStyle = graph.stylesheet.getDefaultVertexStyle();
-					var appliedStyle = vertexStyle;
+					let defaultStyle = graph.stylesheet.getDefaultVertexStyle();
+					let appliedStyle = vertexStyle;
 					
 					if (model.isEdge(cell))
 					{
@@ -5914,28 +5914,28 @@ DiagramStylePanel.prototype.addView = function(div)
 	});
 		
 	// Maximum palettes to switch the switcher
-	var maxEntries = 10;
-	var pageCount = Math.ceil(Editor.styles.length / maxEntries);
+	let maxEntries = 10;
+	let pageCount = Math.ceil(Editor.styles.length / maxEntries);
 	this.format.currentStylePage = (this.format.currentStylePage != null) ? this.format.currentStylePage : 0;
-	var dots = [];
+	let dots = [];
 	
-	var addEntries = mxUtils.bind(this, function()
+	let addEntries = mxUtils.bind(this, function()
 	{
 		if (dots.length > 0)
 		{
 			dots[this.format.currentStylePage].style.background = '#84d7ff';
 		}
 		
-		for (var i = this.format.currentStylePage * maxEntries;
+		for (let i = this.format.currentStylePage * maxEntries;
 			i < Math.min((this.format.currentStylePage + 1) * maxEntries,
 			Editor.styles.length); i++)
 		{
-			var s = Editor.styles[i];
+			let s = Editor.styles[i];
 			addEntry(s.commonStyle, s.vertexStyle, s.edgeStyle, s.graph, i);
 		}
 	});
 	
-	var selectPage = mxUtils.bind(this, function(index)
+	let selectPage = mxUtils.bind(this, function(index)
 	{
 		if (index >= 0 && index < pageCount)
 		{
@@ -5949,7 +5949,7 @@ DiagramStylePanel.prototype.addView = function(div)
 	if (pageCount > 1)
 	{
 		// Selector
-		var switcher = document.createElement('div');
+		let switcher = document.createElement('div');
 		switcher.style.whiteSpace = 'nowrap';
 		switcher.style.position = 'relative';
 		switcher.style.textAlign = 'center';
@@ -5958,9 +5958,9 @@ DiagramStylePanel.prototype.addView = function(div)
 		
 		div.style.paddingBottom = '8px';
 		
-		for (var i = 0; i < pageCount; i++)
+		for (let i = 0; i < pageCount; i++)
 		{
-			var dot = document.createElement('div');
+			let dot = document.createElement('div');
 			dot.style.display = 'inline-block';
 			dot.style.width = '6px';
 			dot.style.height = '6px';
@@ -5988,7 +5988,7 @@ DiagramStylePanel.prototype.addView = function(div)
 		
 		if (pageCount < 15)
 		{
-			var left = document.createElement('div');
+			let left = document.createElement('div');
 			left.style.cssText = 'position:absolute;left:0px;top:4px;bottom:0px;width:20px;margin:0px;opacity:0.5;' +
 				'background-repeat:no-repeat;background-position:center center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAQBAMAAADQT4M0AAAAIVBMVEUAAAB2dnZ4eHh3d3d1dXVxcXF2dnZ2dnZ2dnZxcXF2dnYmb3w1AAAACnRSTlMAfCTkhhvb7cQSPH2JPgAAADRJREFUCNdjwACMAmBKaiGYs2oJmLPKAZ3DabU8AMRTXpUKopislqFyVzCAuUZgikkBZjoAcMYLnp53P/UAAAAASUVORK5CYII=);';
 			
@@ -5997,7 +5997,7 @@ DiagramStylePanel.prototype.addView = function(div)
 				selectPage(mxUtils.mod(this.format.currentStylePage - 1, pageCount));
 			}));
 			
-			var right = document.createElement('div');
+			let right = document.createElement('div');
 			right.style.cssText = 'position:absolute;right:2px;top:4px;bottom:0px;width:20px;margin:0px;opacity:0.5;' +
 				'background-repeat:no-repeat;background-position:center center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAQBAMAAADQT4M0AAAAIVBMVEUAAAB2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYBuwCcAAAACnRSTlMAfCTkhhvb7cQSPH2JPgAAADZJREFUCNdjQAOMAmBKaiGY8loF5rKswsZlrVo8AUiFrTICcbIWK8A5DF1gDoMymMPApIAwHwCS0Qx/U7qCBQAAAABJRU5ErkJggg==);';
 			switcher.appendChild(left);
@@ -6059,9 +6059,9 @@ DiagramFormatPanel.prototype.showBackgroundImageOption = true;
  */
 DiagramFormatPanel.prototype.init = function()
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
 
 	this.container.appendChild(this.addView(this.createPanel()));
 
@@ -6078,9 +6078,9 @@ DiagramFormatPanel.prototype.init = function()
  */
 DiagramFormatPanel.prototype.addView = function(div)
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
 	
 	div.appendChild(this.createTitle(mxResources.get('view')));
 	
@@ -6117,12 +6117,12 @@ DiagramFormatPanel.prototype.addView = function(div)
 	if (graph.isEnabled())
 	{
 		// Background
-		var bg = this.createColorOption(mxResources.get('background'), function()
+		let bg = this.createColorOption(mxResources.get('background'), function()
 		{
 			return graph.background;
 		}, function(color)
 		{
-			var change = new ChangePageSetup(ui, color);
+			let change = new ChangePageSetup(ui, color);
 			change.ignoreImage = true;
 			
 			graph.model.execute(change);
@@ -6145,7 +6145,7 @@ DiagramFormatPanel.prototype.addView = function(div)
 		
 		if (this.showBackgroundImageOption)
 		{
-			var btn = mxUtils.button(mxResources.get('image'), function(evt)
+			let btn = mxUtils.button(mxResources.get('image'), function(evt)
 			{
 				ui.showBackgroundImageDialog(null, ui.editor.graph.backgroundImage);
 				mxEvent.consume(evt);
@@ -6173,9 +6173,9 @@ DiagramFormatPanel.prototype.addView = function(div)
  */
 DiagramFormatPanel.prototype.addOptions = function(div)
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
 	
 	div.appendChild(this.createTitle(mxResources.get('options')));	
 
@@ -6262,17 +6262,17 @@ DiagramFormatPanel.prototype.addOptions = function(div)
  */
 DiagramFormatPanel.prototype.addGridOption = function(container)
 {
-	var fPanel = this;
-	var ui = this.editorUi;
-	var graph = ui.editor.graph;
+	let fPanel = this;
+	let ui = this.editorUi;
+	let graph = ui.editor.graph;
 	
-	var input = document.createElement('input');
+	let input = document.createElement('input');
 	input.style.position = 'absolute';
 	input.style.textAlign = 'right';
 	input.style.width = '38px';
 	input.value = this.inUnit(graph.getGridSize()) + ' ' + this.getUnit(); 
 	
-	var stepper = this.createStepper(input, update, this.getUnitStep(), null, null, null, this.isFloatUnit());
+	let stepper = this.createStepper(input, update, this.getUnitStep(), null, null, null, this.isFloatUnit());
 	input.style.display = (graph.isGridEnabled()) ? '' : 'none';
 	stepper.style.display = input.style.display;
 
@@ -6293,7 +6293,7 @@ DiagramFormatPanel.prototype.addGridOption = function(container)
 	
 	function update(evt)
 	{
-		var value = fPanel.isFloatUnit()? parseFloat(input.value) : parseInt(input.value);
+		let value = fPanel.isFloatUnit()? parseFloat(input.value) : parseInt(input.value);
 		value = fPanel.fromUnit(Math.max(fPanel.inUnit(1), (isNaN(value)) ? fPanel.inUnit(10) : value));
 		
 		if (value != graph.getGridSize())
@@ -6308,7 +6308,7 @@ DiagramFormatPanel.prototype.addGridOption = function(container)
 	mxEvent.addListener(input, 'blur', update);
 	mxEvent.addListener(input, 'change', update);
 	
-	var unitChangeListener = function(sender, evt)
+	let unitChangeListener = function(sender, evt)
 	{
 		input.value = fPanel.inUnit(graph.getGridSize()) + ' ' + fPanel.getUnit();
 		fPanel.format.refresh();
@@ -6324,14 +6324,14 @@ DiagramFormatPanel.prototype.addGridOption = function(container)
 		stepper.style.marginTop = '-16px';
 		stepper.style.right = '72px';
 	
-		var panel = this.createColorOption(mxResources.get('grid'), function()
+		let panel = this.createColorOption(mxResources.get('grid'), function()
 		{
-			var color = graph.view.gridColor;
+			let color = graph.view.gridColor;
 
 			return (graph.isGridEnabled()) ? color : null;
 		}, function(color)
 		{
-			var enabled = graph.isGridEnabled();
+			let enabled = graph.isGridEnabled();
 			
 			if (color == mxConstants.NONE)
 			{
@@ -6423,9 +6423,9 @@ DiagramFormatPanel.prototype.addGridOption = function(container)
 DiagramFormatPanel.prototype.addDocumentProperties = function(div)
 {
 	// Hook for subclassers
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
 	
 	div.appendChild(this.createTitle(mxResources.get('options')));
 
@@ -6437,18 +6437,18 @@ DiagramFormatPanel.prototype.addDocumentProperties = function(div)
  */
 DiagramFormatPanel.prototype.addPaperSize = function(div)
 {
-	var ui = this.editorUi;
-	var editor = ui.editor;
-	var graph = editor.graph;
+	let ui = this.editorUi;
+	let editor = ui.editor;
+	let graph = editor.graph;
 	
 	div.appendChild(this.createTitle(mxResources.get('paperSize')));
 
-	var accessor = PageSetupDialog.addPageFormatPanel(div, 'formatpanel', graph.pageFormat, function(pageFormat)
+	let accessor = PageSetupDialog.addPageFormatPanel(div, 'formatpanel', graph.pageFormat, function(pageFormat)
 	{
 		if (graph.pageFormat == null || graph.pageFormat.width != pageFormat.width ||
 			graph.pageFormat.height != pageFormat.height)
 		{
-			var change = new ChangePageSetup(ui, null, null, pageFormat);
+			let change = new ChangePageSetup(ui, null, null, pageFormat);
 			change.ignoreColor = true;
 			change.ignoreImage = true;
 			
@@ -6465,7 +6465,7 @@ DiagramFormatPanel.prototype.addPaperSize = function(div)
 		accessor.set(graph.pageFormat);	
 	});
 	
-	var listener = function()
+	let listener = function()
 	{
 		accessor.set(graph.pageFormat);
 	};
@@ -6484,7 +6484,7 @@ DiagramFormatPanel.prototype.addPaperSize = function(div)
  */
 DiagramFormatPanel.prototype.addStyleOps = function(div)
 {
-	var btn = mxUtils.button(mxResources.get('editData'), mxUtils.bind(this, function(evt)
+	let btn = mxUtils.button(mxResources.get('editData'), mxUtils.bind(this, function(evt)
 	{
 		this.editorUi.actions.get('editData').funct();
 	}));
diff --git a/src/examples/grapheditor/www/js/Graph.js b/src/examples/grapheditor/www/js/Graph.js
index 8cf5ced0b..8a7f22075 100644
--- a/src/examples/grapheditor/www/js/Graph.js
+++ b/src/examples/grapheditor/www/js/Graph.js
@@ -17,16 +17,16 @@ if (typeof html4 !== 'undefined')
 // LATER: How to configure DOMParser to just ignore all entities?
 (function()
 {
-	var entities = [
+	let entities = [
 		['nbsp', '160'],
 		['shy', '173']
     ];
 
-	var parseXml = mxUtils.parseXml;
+	let parseXml = mxUtils.parseXml;
 	
 	mxUtils.parseXml = function(text)
 	{
-		for (var i = 0; i < entities.length; i++)
+		for (let i = 0; i < entities.length; i++)
 	    {
 	        text = text.replace(new RegExp(
 	        	'&' + entities[i][0] + ';', 'g'),
@@ -45,7 +45,7 @@ if (!Date.prototype.toISOString)
     {         
         function pad(number)
         {
-            var r = String(number);
+            let r = String(number);
             
             if (r.length === 1) 
             {
@@ -104,7 +104,7 @@ mxGraph.prototype.pageScale = 1;
 	{
 		if (navigator != null && navigator.language != null)
 		{
-			var lang = navigator.language.toLowerCase();
+			let lang = navigator.language.toLowerCase();
 			mxGraph.prototype.pageFormat = (lang === 'en-us' || lang === 'en-ca' || lang === 'es-mx') ?
 				mxConstants.PAGE_FORMAT_LETTER_PORTRAIT : mxConstants.PAGE_FORMAT_A4_PORTRAIT;
 		}
@@ -173,14 +173,14 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 	this.standalone = (standalone != null) ? standalone : false;
 
 	// Sets the base domain URL and domain path URL for relative links.
-	var b = this.baseUrl;
-	var p = b.indexOf('//');
+	let b = this.baseUrl;
+	let p = b.indexOf('//');
 	this.domainUrl = '';
 	this.domainPathUrl = '';
 	
 	if (p > 0)
 	{
-		var d = b.indexOf('/', p + 2);
+		let d = b.indexOf('/', p + 2);
 
 		if (d > 0)
 		{
@@ -201,7 +201,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 	// TODO: Wrap should not affect isHtmlLabel output (should be handled later)
 	this.isHtmlLabel = function(cell)
 	{
-		var style = this.getCurrentCellStyle(cell);
+		let style = this.getCurrentCellStyle(cell);
 		
 		return (style != null) ? (style['html'] == '1' || style[mxConstants.STYLE_WHITE_SPACE] == 'wrap') : false;
 	};
@@ -209,7 +209,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 	// Implements a listener for hover and click handling on edges
 	if (this.edgeMode)
 	{
-		var start = {
+		let start = {
 			point: null,
 			event: null,
 			state: null,
@@ -222,8 +222,8 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		{
 			if (evt.getProperty('eventName') == 'mouseDown' && this.isEnabled())
 			{
-				var me = evt.getProperty('event');
-		    	var state = me.getState();
+				let me = evt.getProperty('event');
+		    	let state = me.getState();
 	
 		    	if (!mxEvent.isAltDown(me.getEvent()) && state != null)
 		    	{
@@ -242,7 +242,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
     					}
     					else
     					{
-			    			var handler = this.selectionCellsHandler.getHandler(state.cell);
+			    			let handler = this.selectionCellsHandler.getHandler(state.cell);
 
 			    			if (handler != null && handler.bends != null && handler.bends.length > 0)
 			    			{
@@ -252,20 +252,20 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		    		}
 		    		else if (!this.panningHandler.isActive() && !mxEvent.isControlDown(me.getEvent()))
 		    		{
-			   			var handler = this.selectionCellsHandler.getHandler(state.cell);
+			   			let handler = this.selectionCellsHandler.getHandler(state.cell);
 
 			   			// Cell handles have precedence over row and col resize
 		    			if (handler == null || handler.getHandleForEvent(me) == null)
 		    			{
-				    		var box = new mxRectangle(me.getGraphX() - 1, me.getGraphY() - 1);
+				    		let box = new mxRectangle(me.getGraphX() - 1, me.getGraphY() - 1);
 			    			box.grow(mxEvent.isTouchEvent(me.getEvent()) ?
 			    				mxShape.prototype.svgStrokeTolerance - 1 :
 			    				(mxShape.prototype.svgStrokeTolerance + 1) / 2);
 			    			
 			    			if (this.isTableCell(state.cell) && !this.isCellSelected(state.cell))
 			    			{
-			    				var row = this.model.getParent(state.cell);
-			    				var table = this.model.getParent(row);
+			    				let row = this.model.getParent(state.cell);
+			    				let table = this.model.getParent(row);
 			    				
 			    				if (!this.isCellSelected(table))
 			    				{
@@ -276,13 +276,13 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 					    				this.model.getChildAt(row, 0) != state.cell) || mxUtils.intersects(box, new mxRectangle(
 				    					state.x + state.width - 2, state.y, 2, state.height)))
 			    					{
-				    					var wasSelected = this.selectionCellsHandler.isHandled(table);
+				    					let wasSelected = this.selectionCellsHandler.isHandled(table);
 				    					this.selectCellForEvent(table, me.getEvent());
 						    			handler = this.selectionCellsHandler.getHandler(table);
 			
 						    			if (handler != null)
 						    			{
-						    				var handle = handler.getHandleForEvent(me);
+						    				let handle = handler.getHandleForEvent(me);
 				    				
 						    				if (handle != null)
 						    				{
@@ -296,15 +296,15 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		    				}
 
 			    			// Hover for swimlane start sizes inside tables
-				    		var current = state;
+				    		let current = state;
 				    		
 				    		while (!me.isConsumed() && current != null && (this.isTableCell(current.cell) ||
 				    			this.isTableRow(current.cell) || this.isTable(current.cell)))
 				    		{
 					    		if (this.isSwimlane(current.cell))
 					    		{
-					    			var offset = this.getActualStartSize(current.cell);
-					    			var s = this.view.scale;
+					    			let offset = this.getActualStartSize(current.cell);
+					    			let s = this.view.scale;
 					    			
 		    						if (((offset.x > 0 || offset.width > 0) && mxUtils.intersects(box, new mxRectangle(
 		    							current.x + (offset.x - offset.width - 1) * s + ((offset.x == 0) ? current.width : 0),
@@ -318,7 +318,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 						    			if (handler != null)
 						    			{
 						    				// Swimlane start size handle is last custom handle
-						    				var handle = mxEvent.CUSTOM_HANDLE - handler.customHandles.length + 1;
+						    				let handle = mxEvent.CUSTOM_HANDLE - handler.customHandles.length + 1;
 					    					handler.start(me.getGraphX(), me.getGraphY(), handle);
 					    					me.consume();
 						    			}
@@ -333,7 +333,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 			}
 		}));
 		
-		var mouseDown = null;
+		let mouseDown = null;
 		
 		this.addMouseListener(
 		{
@@ -341,7 +341,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		    mouseMove: mxUtils.bind(this, function(sender, me)
 		    {
 		    	// Checks if any other handler is active
-		    	var handlerMap = this.selectionCellsHandler.handlers.map;
+		    	let handlerMap = this.selectionCellsHandler.handlers.map;
 		    	
 		    	for (var key in handlerMap)
 		    	{
@@ -353,16 +353,16 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		    	
 		    	if (this.isEnabled() && !this.panningHandler.isActive() && !mxEvent.isAltDown(me.getEvent()))
 		    	{
-		    		var tol = this.tolerance;
+		    		let tol = this.tolerance;
 	
 			    	if (start.point != null && start.state != null && start.event != null)
 			    	{
-			    		var state = start.state;
+			    		let state = start.state;
 			    		
 			    		if (Math.abs(start.point.x - me.getGraphX()) > tol ||
 			    			Math.abs(start.point.y - me.getGraphY()) > tol)
 			    		{
-			    			var handler = this.selectionCellsHandler.getHandler(state.cell);
+			    			let handler = this.selectionCellsHandler.getHandler(state.cell);
 			    			
 			    			if (handler == null && this.model.isEdge(state.cell))
 			    			{
@@ -371,9 +371,9 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 			    			
 			    			if (handler != null && handler.bends != null && handler.bends.length > 0)
 			    			{
-			    				var handle = handler.getHandleForEvent(start.event);
-			    				var edgeStyle = this.view.getEdgeStyle(state);
-			    				var entity = edgeStyle == mxEdgeStyle.EntityRelation;
+			    				let handle = handler.getHandleForEvent(start.event);
+			    				let edgeStyle = this.view.getEdgeStyle(state);
+			    				let entity = edgeStyle == mxEdgeStyle.EntityRelation;
 			    				
 			    				// Handles special case where label was clicked on unselected edge in which
 			    				// case the label will be moved regardless of the handle that is returned
@@ -391,7 +391,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 				    				{
 				    					if (!entity && handle != mxEvent.LABEL_HANDLE)
 				    					{
-					    					var pts = state.absolutePoints;
+					    					let pts = state.absolutePoints;
 				    						
 					    					// Default case where handles are at corner points handles
 					    					// drag of corner as drag of existing point
@@ -403,7 +403,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 
 					    						if (handle == null)
 					    						{
-							    					var box = new mxRectangle(start.point.x, start.point.y);
+							    					let box = new mxRectangle(start.point.x, start.point.y);
 							    					box.grow(mxEdgeHandler.prototype.handleImage.width / 2);
 							    					
 					    							if (mxUtils.contains(box, pts[0].x, pts[0].y))
@@ -419,7 +419,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 					    							else
 					    							{
 							    						// Checks if edge has no bends
-							    						var nobends = edgeStyle != null && (pts.length == 2 || (pts.length == 3 &&
+							    						let nobends = edgeStyle != null && (pts.length == 2 || (pts.length == 3 &&
 						    								((Math.round(pts[0].x - pts[1].x) == 0 && Math.round(pts[1].x - pts[2].x) == 0) ||
 						    								(Math.round(pts[0].y - pts[1].y) == 0 && Math.round(pts[1].y - pts[2].y) == 0))));
 							    						
@@ -499,18 +499,18 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 			    	else
 			    	{
 			    		// Updates cursor for unselected edges under the mouse
-				    	var state = me.getState();
+				    	let state = me.getState();
 				    	
 				    	if (state != null)
 				    	{
-				    		var cursor = null;
+				    		let cursor = null;
 				    		
 				    		// Checks if state was removed in call to stopEditing above
 				    		if (this.model.isEdge(state.cell))
 				    		{
-				    			var box = new mxRectangle(me.getGraphX(), me.getGraphY());
+				    			let box = new mxRectangle(me.getGraphX(), me.getGraphY());
 		    					box.grow(mxEdgeHandler.prototype.handleImage.width / 2);
-			    				var pts = state.absolutePoints;
+			    				let pts = state.absolutePoints;
 			    				
 			    				if (pts != null)
 			    				{
@@ -527,12 +527,12 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 			    					else if (state.visibleSourceState != null || state.visibleTargetState != null)
 			    					{
 		    							// Moving is not allowed for entity relation but still indicate hover state
-			    						var tmp = this.view.getEdgeStyle(state);
+			    						let tmp = this.view.getEdgeStyle(state);
 			    						cursor = 'crosshair';
 			    						
 			    						if (tmp != mxEdgeStyle.EntityRelation && this.isOrthogonal(state))
 						    			{
-						    				var idx = mxUtils.findNearestSegment(state, me.getGraphX(), me.getGraphY());
+						    				let idx = mxUtils.findNearestSegment(state, me.getGraphX(), me.getGraphY());
 						    				
 						    				if (idx < pts.length - 1 && idx >= 0)
 						    				{
@@ -545,13 +545,13 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 				    		}
 				    		else if (!mxEvent.isControlDown(me.getEvent()))
 				    		{
-				    			var box = new mxRectangle(me.getGraphX() - 1, me.getGraphY() - 1);
+				    			let box = new mxRectangle(me.getGraphX() - 1, me.getGraphY() - 1);
 			    				box.grow(mxShape.prototype.svgStrokeTolerance / 2);
 	
 					    		if (this.isTableCell(state.cell))
 					    		{
-				    				var row = this.model.getParent(state.cell);
-			    					var table = this.model.getParent(row);
+				    				let row = this.model.getParent(state.cell);
+			    					let table = this.model.getParent(row);
 			    					
 			    					if (!this.isCellSelected(table))
 			    					{
@@ -571,15 +571,15 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 					    		}
 					    		
 					    		// Hover for swimlane start sizes inside tables
-					    		var current = state;
+					    		let current = state;
 					    		
 					    		while (cursor == null && current != null && (this.isTableCell(current.cell) ||
 					    			this.isTableRow(current.cell) || this.isTable(current.cell)))
 					    		{
 						    		if (this.isSwimlane(current.cell))
 						    		{
-						    			var offset = this.getActualStartSize(current.cell);
-						    			var s = this.view.scale;
+						    			let offset = this.getActualStartSize(current.cell);
+						    			let s = this.view.scale;
 						    			
 			    						if ((offset.x > 0 || offset.width > 0) && mxUtils.intersects(box, new mxRectangle(
 			    							current.x + (offset.x - offset.width - 1) * s + ((offset.x == 0) ? current.width * s : 0),
@@ -620,7 +620,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 	// HTML entities are displayed as plain text in wrapped plain text labels
 	this.cellRenderer.getLabelValue = function(state)
 	{
-		var result = mxCellRenderer.prototype.getLabelValue.apply(this, arguments);
+		let result = mxCellRenderer.prototype.getLabelValue.apply(this, arguments);
 		
 		if (state.view.graph.isHtmlLabel(state.cell))
 		{
@@ -673,32 +673,32 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		}
 
 		// Adds page centers to the guides for moving cells
-		var graphHandlerGetGuideStates = this.graphHandler.getGuideStates;
+		let graphHandlerGetGuideStates = this.graphHandler.getGuideStates;
 		this.graphHandler.getGuideStates = function()
 		{
-			var result = graphHandlerGetGuideStates.apply(this, arguments);
+			let result = graphHandlerGetGuideStates.apply(this, arguments);
 			
 			// Create virtual cell state for page centers
 			if (this.graph.pageVisible)
 			{
-				var guides = [];
+				let guides = [];
 				
-				var pf = this.graph.pageFormat;
-				var ps = this.graph.pageScale;
-				var pw = pf.width * ps;
-				var ph = pf.height * ps;
-				var t = this.graph.view.translate;
-				var s = this.graph.view.scale;
+				let pf = this.graph.pageFormat;
+				let ps = this.graph.pageScale;
+				let pw = pf.width * ps;
+				let ph = pf.height * ps;
+				let t = this.graph.view.translate;
+				let s = this.graph.view.scale;
 
-				var layout = this.graph.getPageLayout();
+				let layout = this.graph.getPageLayout();
 				
-				for (var i = 0; i < layout.width; i++)
+				for (let i = 0; i < layout.width; i++)
 				{
 					guides.push(new mxRectangle(((layout.x + i) * pw + t.x) * s,
 						(layout.y * ph + t.y) * s, pw * s, ph * s));
 				}
 				
-				for (var j = 1; j < layout.height; j++)
+				for (let j = 1; j < layout.height; j++)
 				{
 					guides.push(new mxRectangle((layout.x * pw + t.x) * s,
 						((layout.y + j) * ph + t.y) * s, pw * s, ph * s));
@@ -732,18 +732,18 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		// if the parent is not already in the list of cells. container style is used to disable
 		// step into swimlanes and dropTarget style is used to disable acting as a drop target.
 		// LATER: Handle recursive parts
-		var graphHandlerGetCells = this.graphHandler.getCells;
+		let graphHandlerGetCells = this.graphHandler.getCells;
 		
 		this.graphHandler.getCells = function(initialCell)
 		{
-		    var cells = graphHandlerGetCells.apply(this, arguments);
-		    var lookup = new mxDictionary();
-		    var newCells = [];
+		    let cells = graphHandlerGetCells.apply(this, arguments);
+		    let lookup = new mxDictionary();
+		    let newCells = [];
 
-		    for (var i = 0; i < cells.length; i++)
+		    for (let i = 0; i < cells.length; i++)
 		    {
 		    	// Propagates to composite parents or moves selected table rows
-		    	var cell = (this.graph.isTableCell(initialCell) &&
+		    	let cell = (this.graph.isTableCell(initialCell) &&
 		    		this.graph.isTableCell(cells[i]) &&
 		    		this.graph.isCellSelected(cells[i])) ?
 		    		this.graph.model.getParent(cells[i]) :
@@ -763,12 +763,12 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		};
 
 		// Handles parts and selected rows in tables of cells for drag and drop
-		var graphHandlerStart = this.graphHandler.start;
+		let graphHandlerStart = this.graphHandler.start;
 		
 		this.graphHandler.start = function(cell, x, y, cells)
 		{
 			// Propagates to selected table row to start move
-			var ignoreParent = false;
+			let ignoreParent = false;
 			
 		    if (this.graph.isTableCell(cell))
 		    {
@@ -798,7 +798,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 			return mxConnectionHandler.prototype.createTargetVertex.apply(this, arguments);
 		};
 		
-	    var rubberband = new mxRubberband(this);
+	    let rubberband = new mxRubberband(this);
 	    
 	    this.getRubberband = function()
 	    {
@@ -806,14 +806,14 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 	    };
 	    
 	    // Timer-based activation of outline connect in connection handler
-	    var startTime = new Date().getTime();
-	    var timeOnTarget = 0;
+	    let startTime = new Date().getTime();
+	    let timeOnTarget = 0;
 	    
-	    var connectionHandlerMouseMove = this.connectionHandler.mouseMove;
+	    let connectionHandlerMouseMove = this.connectionHandler.mouseMove;
 	    
 	    this.connectionHandler.mouseMove = function()
 	    {
-	    	var prev = this.currentState;
+	    	let prev = this.currentState;
 	    	connectionHandlerMouseMove.apply(this, arguments);
 	    	
 	    	if (prev != this.currentState)
@@ -831,7 +831,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 	    // outlineConnect=0 is a custom style that means do not connect to strokes inside the shape,
 	    // or in other words, connect to the shape's perimeter if the highlight is under the mouse
 	    // (the name is because the highlight, including all strokes, is called outline in the code)
-	    var connectionHandleIsOutlineConnectEvent = this.connectionHandler.isOutlineConnectEvent;
+	    let connectionHandleIsOutlineConnectEvent = this.connectionHandler.isOutlineConnectEvent;
 	    
 	    this.connectionHandler.isOutlineConnectEvent = function(me)
 	    {
@@ -841,7 +841,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 	    };
 	    
 	    // Adds shift+click to toggle selection state
-	    var isToggleEvent = this.isToggleEvent;
+	    let isToggleEvent = this.isToggleEvent;
 	    this.isToggleEvent = function(evt)
 	    {
 	    	return isToggleEvent.apply(this, arguments) || (!mxClient.IS_CHROMEOS && mxEvent.isShiftDown(evt));
@@ -850,7 +850,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 	    // Workaround for Firefox where first mouse down is received
 	    // after tap and hold if scrollbars are visible, which means
 	    // start rubberband immediately if no cell is under mouse.
-	    var isForceRubberBandEvent = rubberband.isForceRubberbandEvent;
+	    let isForceRubberBandEvent = rubberband.isForceRubberbandEvent;
 	    rubberband.isForceRubberbandEvent = function(me)
 	    {
 	    	return (isForceRubberBandEvent.apply(this, arguments) && !mxEvent.isShiftDown(me.getEvent()) &&
@@ -860,7 +860,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 	    };
 	    
 	    // Shows hand cursor while panning
-	    var prevCursor = null;
+	    let prevCursor = null;
 	    
 		this.panningHandler.addListener(mxEvent.PAN_START, mxUtils.bind(this, function()
 		{
@@ -887,19 +887,19 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		};
 	
 		// Handles links if graph is read-only or cell is locked
-		var click = this.click;
+		let click = this.click;
 		this.click = function(me)
 		{
-			var locked = me.state == null && me.sourceState != null &&
+			let locked = me.state == null && me.sourceState != null &&
 				this.isCellLocked(me.sourceState.cell);
 			
 			if ((!this.isEnabled() || locked) && !me.isConsumed())
 			{
-				var cell = (locked) ? me.sourceState.cell : me.getCell();
+				let cell = (locked) ? me.sourceState.cell : me.getCell();
 				
 				if (cell != null)
 				{
-					var link = this.getClickableLinkForCell(cell);
+					let link = this.getClickableLinkForCell(cell);
 
 					if (link != null)
 					{
@@ -932,16 +932,16 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		};
 		
 		// Opens links in tooltips in new windows
-		var tooltipHandlerShow = this.tooltipHandler.show;
+		let tooltipHandlerShow = this.tooltipHandler.show;
 		this.tooltipHandler.show = function()
 		{
 			tooltipHandlerShow.apply(this, arguments);
 			
 			if (this.div != null)
 			{
-				var links = this.div.getElementsByTagName('a');
+				let links = this.div.getElementsByTagName('a');
 				
-				for (var i = 0; i < links.length; i++)
+				for (let i = 0; i < links.length; i++)
 				{
 					if (links[i].getAttribute('href') != null &&
 						links[i].getAttribute('target') == null)
@@ -959,22 +959,22 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		};
 		
 		// Redirects cursor for locked cells
-		var getCursorForMouseEvent = this.getCursorForMouseEvent; 
+		let getCursorForMouseEvent = this.getCursorForMouseEvent;
 		this.getCursorForMouseEvent = function(me)
 		{
-			var locked = me.state == null && me.sourceState != null && this.isCellLocked(me.sourceState.cell);
+			let locked = me.state == null && me.sourceState != null && this.isCellLocked(me.sourceState.cell);
 			
 			return this.getCursorForCell((locked) ? me.sourceState.cell : me.getCell());
 		};
 		
 		// Shows pointer cursor for clickable cells with links
 		// ie. if the graph is disabled and cells cannot be selected
-		var getCursorForCell = this.getCursorForCell;
+		let getCursorForCell = this.getCursorForCell;
 		this.getCursorForCell = function(cell)
 		{
 			if (!this.isEnabled() || this.isCellLocked(cell))
 			{
-				var link = this.getClickableLinkForCell(cell);
+				let link = this.getClickableLinkForCell(cell);
 				
 				if (link != null)
 				{
@@ -992,7 +992,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		// Changes rubberband selection ignore locked cells
 		this.selectRegion = function(rect, evt)
 		{
-			var cells = this.getCells(rect.x, rect.y, rect.width, rect.height, null, null, null, function(state)
+			let cells = this.getCells(rect.x, rect.y, rect.width, rect.height, null, null, null, function(state)
 			{
 				return mxUtils.getValue(state.style, 'locked', '0') == '1';
 			}, true);
@@ -1003,7 +1003,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		};
 
 		// Never removes cells from parents that are being moved
-		var graphHandlerShouldRemoveCellsFromParent = this.graphHandler.shouldRemoveCellsFromParent;
+		let graphHandlerShouldRemoveCellsFromParent = this.graphHandler.shouldRemoveCellsFromParent;
 		this.graphHandler.shouldRemoveCellsFromParent = function(parent, cells, evt)
 		{
 			if (this.graph.isCellSelected(parent))
@@ -1017,7 +1017,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		// Unlocks all cells
 		this.isCellLocked = function(cell)
 		{
-			var pState = this.view.getState(cell);
+			let pState = this.view.getState(cell);
 			
 			while (pState != null)
 			{
@@ -1032,15 +1032,15 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 			return false;
 		};
 		
-		var tapAndHoldSelection = null;
+		let tapAndHoldSelection = null;
 		
 		// Uses this event to process mouseDown to check the selection state before it is changed
 		this.addListener(mxEvent.FIRE_MOUSE_EVENT, mxUtils.bind(this, function(sender, evt)
 		{
 			if (evt.getProperty('eventName') == 'mouseDown')
 			{
-				var me = evt.getProperty('event');
-				var state = me.getState();
+				let me = evt.getProperty('event');
+				let state = me.getState();
 				
 				if (state != null && !this.isSelectionEmpty() && !this.isCellSelected(state.cell))
 				{
@@ -1059,12 +1059,12 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		{
 			if (!mxEvent.isMultiTouchEvent(evt))
 			{
-				var me = evt.getProperty('event');
-				var cell = evt.getProperty('cell');
+				let me = evt.getProperty('event');
+				let cell = evt.getProperty('cell');
 				
 				if (cell == null)
 				{
-					var pt = mxUtils.convertPoint(this.container,
+					let pt = mxUtils.convertPoint(this.container,
 							mxEvent.getClientX(me), mxEvent.getClientY(me));
 					rubberband.start(pt.x, pt.y);
 				}
@@ -1092,7 +1092,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		// Shows connection points only if cell not selected and parent table not handled
 		this.connectionHandler.constraintHandler.isStateIgnored = function(state, source)
 		{
-			var graph = state.view.graph;
+			let graph = state.view.graph;
 
 			return source && (graph.isCellSelected(state.cell) || (graph.isTableRow(state.cell) &&
 				graph.selectionCellsHandler.isHandled(graph.model.getParent(state.cell))));
@@ -1101,7 +1101,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		// Updates constraint handler if the selection changes
 		this.selectionModel.addListener(mxEvent.CHANGE, mxUtils.bind(this, function()
 		{
-			var ch = this.connectionHandler.constraintHandler;
+			let ch = this.connectionHandler.constraintHandler;
 			
 			if (ch.currentFocus != null && ch.isStateIgnored(ch.currentFocus, true))
 			{
@@ -1122,7 +1122,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		/**
 		 * Adds locking
 		 */
-		var graphUpdateMouseEvent = this.updateMouseEvent;
+		let graphUpdateMouseEvent = this.updateMouseEvent;
 		this.updateMouseEvent = function(me)
 		{
 			me = graphUpdateMouseEvent.apply(this, arguments);
@@ -1208,7 +1208,7 @@ Graph.pasteStyles = ['rounded', 'shadow', 'dashed', 'dashPattern', 'fontFamily',
  */
 Graph.createSvgImage = function(w, h, data, coordWidth, coordHeight)
 {
-	var tmp = unescape(encodeURIComponent(
+	let tmp = unescape(encodeURIComponent(
         '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">' +
         '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="' + w + 'px" height="' + h + 'px" ' +
         ((coordWidth != null && coordHeight != null) ? 'viewBox="0 0 ' + coordWidth + ' ' + coordHeight + '" ' : '') +
@@ -1223,12 +1223,12 @@ Graph.createSvgImage = function(w, h, data, coordWidth, coordHeight)
  */
 Graph.zapGremlins = function(text)
 {
-	var lastIndex = 0;
-	var checked = [];
+	let lastIndex = 0;
+	let checked = [];
 	
-	for (var i = 0; i < text.length; i++)
+	for (let i = 0; i < text.length; i++)
 	{
-		var code = text.charCodeAt(i);
+		let code = text.charCodeAt(i);
 		
 		// Removes all control chars except TAB, LF and CR
 		if (!((code >= 32 || code == 9 || code == 10 || code == 13) &&
@@ -1252,9 +1252,9 @@ Graph.zapGremlins = function(text)
  */
 Graph.stringToBytes = function(str)
 {
-	var arr = new Array(str.length);
+	let arr = new Array(str.length);
 
-    for (var i = 0; i < str.length; i++)
+    for (let i = 0; i < str.length; i++)
     {
         arr[i] = str.charCodeAt(i);
     }
@@ -1267,9 +1267,9 @@ Graph.stringToBytes = function(str)
  */
 Graph.bytesToString = function(arr)
 {
-	var result = new Array(arr.length);
+	let result = new Array(arr.length);
 
-    for (var i = 0; i < arr.length; i++)
+    for (let i = 0; i < arr.length; i++)
     {
     	result[i] = String.fromCharCode(arr[i]);
     }
@@ -1302,7 +1302,7 @@ Graph.base64DecodeUnicode = function(str)
  */
 Graph.compressNode = function(node, checked)
 {
-	var xml = mxUtils.getXml(node);
+	let xml = mxUtils.getXml(node);
 	
 	return Graph.compress((checked) ? xml : Graph.zapGremlins(xml));
 };
@@ -1318,7 +1318,7 @@ Graph.compress = function(data, deflate)
 	}
 	else
 	{
-   		var tmp = (deflate) ? pako.deflate(encodeURIComponent(data), {to: 'string'}) :
+   		let tmp = (deflate) ? pako.deflate(encodeURIComponent(data), {to: 'string'}) :
    			pako.deflateRaw(encodeURIComponent(data), {to: 'string'});
    		
    		return (window.btoa) ? btoa(tmp) : Base64.encode(tmp, true);
@@ -1336,9 +1336,9 @@ Graph.decompress = function(data, inflate, checked)
 	}
 	else
 	{
-		var tmp = (window.atob) ? atob(data) : Base64.decode(data, true);
+		let tmp = (window.atob) ? atob(data) : Base64.decode(data, true);
 		
-		var inflated = decodeURIComponent((inflate) ?
+		let inflated = decodeURIComponent((inflate) ?
 			pako.inflate(tmp, {to: 'string'}) :
 			pako.inflateRaw(tmp, {to: 'string'}));
 
@@ -1598,28 +1598,28 @@ Graph.prototype.init = function(container)
 		mxCellRenderer.prototype.initializeLabel.apply(this, arguments);
 		
 		// Checks tolerance for clicks on links
-		var tol = state.view.graph.tolerance;
-		var handleClick = true;
-		var first = null;
+		let tol = state.view.graph.tolerance;
+		let handleClick = true;
+		let first = null;
 		
-		var down = mxUtils.bind(this, function(evt)
+		let down = mxUtils.bind(this, function(evt)
 		{
 			handleClick = true;
 			first = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt));
 		});
 		
-		var move = mxUtils.bind(this, function(evt)
+		let move = mxUtils.bind(this, function(evt)
 		{
 			handleClick = handleClick && first != null &&
 				Math.abs(first.x - mxEvent.getClientX(evt)) < tol &&
 				Math.abs(first.y - mxEvent.getClientY(evt)) < tol;
 		});
 		
-		var up = mxUtils.bind(this, function(evt)
+		let up = mxUtils.bind(this, function(evt)
 		{
 			if (handleClick)
 			{
-				var elt = mxEvent.getSource(evt)
+				let elt = mxEvent.getSource(evt)
 				
 				while (elt != null && elt != shape.node)
 				{
@@ -1676,7 +1676,7 @@ Graph.prototype.init = function(container)
 	{
 		vertices = (vertices != null) ? vertices : true;
 		edges = (edges != null) ? edges : true;
-		var model = this.model;
+		let model = this.model;
 		
 		return model.filterDescendants(function(cell)
 		{
@@ -1690,8 +1690,8 @@ Graph.prototype.init = function(container)
 	Graph.prototype.getStartEditingCell = function(cell, trigger)
 	{
 		// Redirect editing for tables
-		var style = this.getCellStyle(cell);
-		var size = parseInt(mxUtils.getValue(style, mxConstants.STYLE_STARTSIZE, 0));
+		let style = this.getCellStyle(cell);
+		let size = parseInt(mxUtils.getValue(style, mxConstants.STYLE_STARTSIZE, 0));
 		
 		if (this.isTable(cell) && (!this.isSwimlane(cell) ||
 			size == 0) && this.getLabel(cell) == '' &&
@@ -1708,9 +1708,9 @@ Graph.prototype.init = function(container)
 			size == 0) && this.getLabel(cell) == '' &&
 			this.model.getChildCount(cell) > 0)
 		{
-			for (var i = 0; i < this.model.getChildCount(cell); i++)
+			for (let i = 0; i < this.model.getChildCount(cell); i++)
 			{
-				var temp = this.model.getChildAt(cell, i);
+				let temp = this.model.getChildAt(cell, i);
 				
 				if (this.isCellEditable(temp))
 				{
@@ -1728,25 +1728,25 @@ Graph.prototype.init = function(container)
 	 */
 	Graph.prototype.copyStyle = function(cell)
 	{
-		var style = null;
+		let style = null;
 		
 		if (cell != null)
 		{
 			style = mxUtils.clone(this.getCurrentCellStyle(cell));
 			
 			// Handles special case for value "none"
-			var cellStyle = this.model.getStyle(cell);
-			var tokens = (cellStyle != null) ? cellStyle.split(';') : [];
+			let cellStyle = this.model.getStyle(cell);
+			let tokens = (cellStyle != null) ? cellStyle.split(';') : [];
 			
-			for (var j = 0; j < tokens.length; j++)
+			for (let j = 0; j < tokens.length; j++)
 			{
-				var tmp = tokens[j];
-		 		var pos = tmp.indexOf('=');
+				let tmp = tokens[j];
+		 		let pos = tmp.indexOf('=');
 		 					 		
 		 		if (pos >= 0)
 		 		{
-		 			var key = tmp.substring(0, pos);
-		 			var value = tmp.substring(pos + 1);
+		 			let key = tmp.substring(0, pos);
+		 			let value = tmp.substring(pos + 1);
 		 			
 		 			if (style[key] == null && value == mxConstants.NONE)
 		 			{
@@ -1769,14 +1769,14 @@ Graph.prototype.init = function(container)
 		this.model.beginUpdate();
 		try
 		{
-			for (var i = 0; i < cells.length; i++)
+			for (let i = 0; i < cells.length; i++)
 			{
-				var temp = this.getCurrentCellStyle(cells[i]);
+				let temp = this.getCurrentCellStyle(cells[i]);
 	
-				for (var j = 0; j < keys.length; j++)
+				for (let j = 0; j < keys.length; j++)
 				{
-					var current = temp[keys[j]];
-					var value = style[keys[j]];
+					let current = temp[keys[j]];
+					let value = style[keys[j]];
 					
 					if (current != value && (current != null || value != mxConstants.NONE))
 					{
@@ -1850,12 +1850,12 @@ Graph.prototype.init = function(container)
 
 		if (parent != null)
 		{
-			var childCount = this.model.getChildCount(parent);
+			let childCount = this.model.getChildCount(parent);
 			
-			for (var i = childCount - 1; i >= 0; i--)
+			for (let i = childCount - 1; i >= 0; i--)
 			{
-				var cell = this.model.getChildAt(parent, i);
-				var result = this.getScaledCellAt(x, y, cell, vertices, edges, ignoreFn);
+				let cell = this.model.getChildAt(parent, i);
+				let result = this.getScaledCellAt(x, y, cell, vertices, edges, ignoreFn);
 				
 				if (result != null)
 				{
@@ -1864,7 +1864,7 @@ Graph.prototype.init = function(container)
 				else if (this.isCellVisible(cell) && (edges && this.model.isEdge(cell) ||
 					vertices && this.model.isVertex(cell)))
 				{
-					var state = this.view.getState(cell);
+					let state = this.view.getState(cell);
 
 					if (state != null && (ignoreFn == null || !ignoreFn(state, x, y)) &&
 						this.intersects(state, x, y))
@@ -1904,7 +1904,7 @@ Graph.prototype.init = function(container)
 	{
 		while (this.isPart(cell))
 		{
-			var temp = this.model.getParent(cell);
+			let temp = this.model.getParent(cell);
 			
 			if (!this.model.isVertex(temp))
 			{
@@ -1924,7 +1924,7 @@ Graph.prototype.init = function(container)
 	 */
 	mxCellHighlight.prototype.getStrokeWidth = function(state)
 	{
-		var s = this.strokeWidth;
+		let s = this.strokeWidth;
 		
 		if (this.graph.useCssTransforms)
 		{
@@ -1941,12 +1941,12 @@ Graph.prototype.init = function(container)
 	 */
 	mxGraphView.prototype.getGraphBounds = function()
 	{
-		var b = this.graphBounds;
+		let b = this.graphBounds;
 		
 		if (this.graph.useCssTransforms)
 		{
-			var t = this.graph.currentTranslate;
-			var s = this.graph.currentScale;
+			let t = this.graph.currentTranslate;
+			let s = this.graph.currentScale;
 
 			b = new mxRectangle(
 				(b.x + t.x) * s, (b.y + t.y) * s,
@@ -1978,7 +1978,7 @@ Graph.prototype.init = function(container)
 	 * Overrides validate to normalize validation view state and pass
 	 * current state to CSS transform.
 	 */
-	var graphViewValidate = mxGraphView.prototype.validate;
+	let graphViewValidate = mxGraphView.prototype.validate;
 	mxGraphView.prototype.validate = function(cell)
 	{
 		if (this.graph.useCssTransforms)
@@ -2007,14 +2007,14 @@ Graph.prototype.init = function(container)
 	/**
 	 * Overrides function to exclude table cells and rows from groups.
 	 */
-	var graphGetCellsForGroup = mxGraph.prototype.getCellsForGroup;
+	let graphGetCellsForGroup = mxGraph.prototype.getCellsForGroup;
 	Graph.prototype.getCellsForGroup = function(cells)
 	{
 		cells = graphGetCellsForGroup.apply(this, arguments);
-		var result = [];
+		let result = [];
 		
 		// Filters selection cells with the same parent
-		for (var i = 0; i < cells.length; i++)
+		for (let i = 0; i < cells.length; i++)
 		{
 			if (!this.isTableRow(cells[i]) &&
 				!this.isTableCell(cells[i]))
@@ -2029,14 +2029,14 @@ Graph.prototype.init = function(container)
 	/**
 	 * Overrides function to exclude tables, rows and cells from ungrouping.
 	 */
-	var graphGetCellsForUngroup = mxGraph.prototype.getCellsForUngroup;
+	let graphGetCellsForUngroup = mxGraph.prototype.getCellsForUngroup;
 	Graph.prototype.getCellsForUngroup = function(cells)
 	{
 		cells = graphGetCellsForUngroup.apply(this, arguments);
-		var result = [];
+		let result = [];
 		
 		// Filters selection cells with the same parent
-		for (var i = 0; i < cells.length; i++)
+		for (let i = 0; i < cells.length; i++)
 		{
 			if (!this.isTable(cells[i]) &&
 				!this.isTableRow(cells[i]) &&
@@ -2056,11 +2056,11 @@ Graph.prototype.init = function(container)
 	 */
 	Graph.prototype.updateCssTransform = function()
 	{
-		var temp = this.view.getDrawPane();
+		let temp = this.view.getDrawPane();
 		
 		if (temp != null)
 		{
-			var g = temp.parentNode;
+			let g = temp.parentNode;
 			
 			if (!this.useCssTransforms)
 			{
@@ -2069,11 +2069,11 @@ Graph.prototype.init = function(container)
 			}
 			else
 			{
-				var prev = g.getAttribute('transform');
+				let prev = g.getAttribute('transform');
 				g.setAttribute('transformOrigin', '0 0');
-				var s = Math.round(this.currentScale * 100) / 100;
-				var dx = Math.round(this.currentTranslate.x * 100) / 100;
-				var dy = Math.round(this.currentTranslate.y * 100) / 100;
+				let s = Math.round(this.currentScale * 100) / 100;
+				let dx = Math.round(this.currentTranslate.x * 100) / 100;
+				let dy = Math.round(this.currentTranslate.y * 100) / 100;
 				g.setAttribute('transform', 'scale(' + s + ',' + s + ')' +
 					'translate(' + dx + ',' + dy + ')');
 	
@@ -2086,7 +2086,7 @@ Graph.prototype.init = function(container)
 						// Excluded via isCssTransformsSupported
 	//					if (mxClient.NO_FO)
 	//					{
-	//						var transform = 'scale(' + this.currentScale + ')' + 'translate(' +
+	//						let transform = 'scale(' + this.currentScale + ')' + 'translate(' +
 	//							this.currentTranslate.x + 'px,' + this.currentTranslate.y + 'px)';
 	//							
 	//						this.view.states.visit(mxUtils.bind(this, function(cell, state)
@@ -2108,7 +2108,7 @@ Graph.prototype.init = function(container)
 						{
 							// Recommended workaround is to do this on all
 							// foreignObjects, but this seems to be faster
-							var val = g.style.display;
+							let val = g.style.display;
 							g.style.display = 'none';
 							g.getBBox();
 							g.style.display = val;
@@ -2123,10 +2123,10 @@ Graph.prototype.init = function(container)
 		}
 	};
 	
-	var graphViewValidateBackgroundPage = mxGraphView.prototype.validateBackgroundPage;
+	let graphViewValidateBackgroundPage = mxGraphView.prototype.validateBackgroundPage;
 	mxGraphView.prototype.validateBackgroundPage = function()
 	{
-		var useCssTranforms = this.graph.useCssTransforms, scale = this.scale, 
+		let useCssTranforms = this.graph.useCssTransforms, scale = this.scale,
 			translate = this.translate;
 		
 		if (useCssTranforms)
@@ -2144,10 +2144,10 @@ Graph.prototype.init = function(container)
 		}
 	};
 
-	var graphUpdatePageBreaks = mxGraph.prototype.updatePageBreaks;
+	let graphUpdatePageBreaks = mxGraph.prototype.updatePageBreaks;
 	mxGraph.prototype.updatePageBreaks = function(visible, width, height)
 	{
-		var useCssTranforms = this.useCssTransforms, scale = this.view.scale, 
+		let useCssTranforms = this.useCssTransforms, scale = this.view.scale,
 			translate = this.view.translate;
 	
 		if (useCssTranforms)
@@ -2189,14 +2189,14 @@ Graph.prototype.isViewer = function()
  */
 Graph.prototype.labelLinkClicked = function(state, elt, evt)
 {
-	var href = elt.getAttribute('href');
+	let href = elt.getAttribute('href');
 	
 	if (href != null && !this.isCustomLink(href) && ((mxEvent.isLeftMouseButton(evt) &&
 		!mxEvent.isPopupTrigger(evt)) || mxEvent.isTouchEvent(evt)))
 	{
 		if (!this.isEnabled() || this.isCellLocked(state.cell))
 		{
-			var target = this.isBlankLink(href) ? this.linkTarget : '_top';
+			let target = this.isBlankLink(href) ? this.linkTarget : '_top';
 			this.openLink(this.getAbsoluteUrl(href), target);
 		}
 		
@@ -2209,7 +2209,7 @@ Graph.prototype.labelLinkClicked = function(state, elt, evt)
  */
 Graph.prototype.openLink = function(href, target, allowOpener)
 {
-	var result = window;
+	let result = window;
 	
 	try
 	{
@@ -2225,7 +2225,7 @@ Graph.prototype.openLink = function(href, target, allowOpener)
 				href.charAt(this.baseUrl.length) == '#' &&
 				target == '_top' && window == window.top)
 			{
-				var hash = href.split('#')[1];
+				let hash = href.split('#')[1];
 	
 				// Forces navigation if on same hash
 				if (window.location.hash == '#' + hash)
@@ -2348,18 +2348,18 @@ Graph.prototype.initLayoutManager = function()
 	
 	this.layoutManager.getLayout = function(cell, eventName)
 	{
-		var parent = this.graph.model.getParent(cell);
+		let parent = this.graph.model.getParent(cell);
 		
 		// Executes layouts from top to bottom except for nested layouts where
 		// child layouts are executed before and after the parent layout runs
 		// in case the layout changes the size of the child cell
 		if (eventName != mxEvent.BEGIN_UPDATE || this.hasLayout(parent, eventName))
 		{
-			var style = this.graph.getCellStyle(cell);
+			let style = this.graph.getCellStyle(cell);
 	
 			if (style['childLayout'] == 'stackLayout')
 			{
-				var stackLayout = new mxStackLayout(this.graph, true);
+				let stackLayout = new mxStackLayout(this.graph, true);
 				stackLayout.resizeParentMax = mxUtils.getValue(style, 'resizeParentMax', '1') == '1';
 				stackLayout.horizontal = mxUtils.getValue(style, 'horizontalStack', '1') == '1';
 				stackLayout.resizeParent = mxUtils.getValue(style, 'resizeParent', '1') == '1';
@@ -2382,7 +2382,7 @@ Graph.prototype.initLayoutManager = function()
 			}
 			else if (style['childLayout'] == 'treeLayout')
 			{
-				var treeLayout = new mxCompactTreeLayout(this.graph);
+				let treeLayout = new mxCompactTreeLayout(this.graph);
 				treeLayout.horizontal = mxUtils.getValue(style, 'horizontalTree', '1') == '1';
 				treeLayout.resizeParent = mxUtils.getValue(style, 'resizeParent', '1') == '1';
 				treeLayout.groupPadding = mxUtils.getValue(style, 'parentPadding', 20);
@@ -2395,7 +2395,7 @@ Graph.prototype.initLayoutManager = function()
 			}
 			else if (style['childLayout'] == 'flowLayout')
 			{
-				var flowLayout = new mxHierarchicalLayout(this.graph, mxUtils.getValue(style,
+				let flowLayout = new mxHierarchicalLayout(this.graph, mxUtils.getValue(style,
 					'flowOrientation', mxConstants.DIRECTION_EAST));
 				flowLayout.resizeParent = mxUtils.getValue(style, 'resizeParent', '1') == '1';
 				flowLayout.parentBorder = mxUtils.getValue(style, 'parentPadding', 20);
@@ -2448,8 +2448,8 @@ Graph.prototype.getPageSize = function()
  */
 Graph.prototype.getPageLayout = function()
 {
-	var size = this.getPageSize();
-	var bounds = this.getGraphBounds();
+	let size = this.getPageSize();
+	let bounds = this.getGraphBounds();
 
 	if (bounds.width == 0 || bounds.height == 0)
 	{
@@ -2483,12 +2483,12 @@ Graph.prototype.sanitizeHtml = function(value, editing)
  */
 Graph.prototype.updatePlaceholders = function()
 {
-	var model = this.model;
-	var validate = false;
+	let model = this.model;
+	let validate = false;
 	
 	for (var key in this.model.cells)
 	{
-		var cell = this.model.cells[key];
+		let cell = this.model.cells[key];
 		
 		if (this.isReplacePlaceholders(cell))
 		{
@@ -2562,7 +2562,7 @@ Graph.prototype.isSplitTarget = function(target, cells, evt)
  */
 Graph.prototype.getLabel = function(cell)
 {
-	var result = mxGraph.prototype.getLabel.apply(this, arguments);
+	let result = mxGraph.prototype.getLabel.apply(this, arguments);
 	
 	if (result != null && this.isReplacePlaceholders(cell) && cell.getAttribute('placeholder') == null)
 	{
@@ -2577,7 +2577,7 @@ Graph.prototype.getLabel = function(cell)
  */
 Graph.prototype.isLabelMovable = function(cell)
 {
-	var style = this.getCurrentCellStyle(cell);
+	let style = this.getCurrentCellStyle(cell);
 	
 	return !this.isCellLocked(cell) &&
 		((this.model.isEdge(cell) && this.edgeLabelsMovable) ||
@@ -2616,7 +2616,7 @@ Graph.prototype.getClickableLinkForCell = function(cell)
 {
 	do
 	{
-		var link = this.getLinkForCell(cell);
+		let link = this.getLinkForCell(cell);
 		
 		if (link != null)
 		{
@@ -2634,7 +2634,7 @@ Graph.prototype.getClickableLinkForCell = function(cell)
  */
 Graph.prototype.getGlobalVariable = function(name)
 {
-	var val = null;
+	let val = null;
 	
 	if (name == 'date')
 	{
@@ -2650,7 +2650,7 @@ Graph.prototype.getGlobalVariable = function(name)
 	}
 	else if (name.substring(0, 5) == 'date{')
 	{
-		var fmt = name.substring(5, name.length - 1);
+		let fmt = name.substring(5, name.length - 1);
 		val = this.formatDate(new Date(), fmt);
 	}
 
@@ -2694,8 +2694,8 @@ Graph.prototype.formatDate = function(date, mask, utc)
 		};
 	}
     
-    var dF = this.dateFormatCache;
-	var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
+    let dF = this.dateFormatCache;
+	let token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
     	timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
     	timezoneClip = /[^-+\dA-Z]/g,
     	pad = (val, len) => {
@@ -2723,7 +2723,7 @@ Graph.prototype.formatDate = function(date, mask, utc)
         utc = true;
     }
 
-    var _ = utc ? "getUTC" : "get",
+    let _ = utc ? "getUTC" : "get",
         d = date[_ + "Date"](),
         D = date[_ + "Day"](),
         m = date[_ + "Month"](),
@@ -2774,23 +2774,23 @@ Graph.prototype.formatDate = function(date, mask, utc)
  */
 Graph.prototype.createLayersDialog = function()
 {
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	div.style.position = 'absolute';
 	
-	var model = this.getModel();
-	var childCount = model.getChildCount(model.root);
+	let model = this.getModel();
+	let childCount = model.getChildCount(model.root);
 	
-	for (var i = 0; i < childCount; i++)
+	for (let i = 0; i < childCount; i++)
 	{
 		(mxUtils.bind(this, function(layer)
 		{
-			var span = document.createElement('div');
+			let span = document.createElement('div');
 			span.style.overflow = 'hidden';
 			span.style.textOverflow = 'ellipsis';
 			span.style.padding = '2px';
 			span.style.whiteSpace = 'nowrap';
 
-			var cb = document.createElement('input');
+			let cb = document.createElement('input');
 			cb.style.display = 'inline-block';
 			cb.setAttribute('type', 'checkbox');
 			
@@ -2802,7 +2802,7 @@ Graph.prototype.createLayersDialog = function()
 			
 			span.appendChild(cb);
 			
-			var title = this.convertValueToString(layer) || (mxResources.get('background') || 'Background');
+			let title = this.convertValueToString(layer) || (mxResources.get('background') || 'Background');
 			span.setAttribute('title', title);
 			mxUtils.write(span, title);
 			div.appendChild(span);
@@ -2831,19 +2831,19 @@ Graph.prototype.createLayersDialog = function()
  */
 Graph.prototype.replacePlaceholders = function(cell, str, vars, translate)
 {
-	var result = [];
+	let result = [];
 	
 	if (str != null)
 	{
-		var last = 0;
+		let last = 0;
 		
 		while (match = this.placeholderPattern.exec(str))
 		{
-			var val = match[0];
+			let val = match[0];
 			
 			if (val.length > 2 && val != '%label%' && val != '%tooltip%')
 			{
-				var tmp = null;
+				let tmp = null;
 	
 				if (match.index > last && str.charAt(match.index - 1) == '%')
 				{
@@ -2851,7 +2851,7 @@ Graph.prototype.replacePlaceholders = function(cell, str, vars, translate)
 				}
 				else
 				{
-					var name = val.substring(1, val.length - 1);
+					let name = val.substring(1, val.length - 1);
 					
 					// Workaround for invalid char for getting attribute in older versions of IE
 					if (name == 'id')
@@ -2860,7 +2860,7 @@ Graph.prototype.replacePlaceholders = function(cell, str, vars, translate)
 					}
 					else if (name.indexOf('{') < 0)
 					{
-						var current = cell;
+						let current = cell;
 						
 						while (tmp == null && current != null)
 						{
@@ -2911,11 +2911,11 @@ Graph.prototype.restoreSelection = function(cells)
 {
 	if (cells != null && cells.length > 0)
 	{
-		var temp = [];
+		let temp = [];
 
-		for (var i = 0; i < cells.length; i++)
+		for (let i = 0; i < cells.length; i++)
 		{
-			var newCell = this.model.getCell(cells[i].id);
+			let newCell = this.model.getCell(cells[i].id);
 
 			if (newCell != null)
 			{
@@ -2966,7 +2966,7 @@ Graph.prototype.selectCellsForConnectVertex = function(cells, evt, hoverIcons)
  */
 Graph.prototype.isCloneConnectSource = function(source)
 {
-	var layout = null;
+	let layout = null;
 
 	if (this.layoutManager != null)
 	{
@@ -2997,10 +2997,10 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 	}
 	
 	// Handles clone connect sources
-	var cloneSource = this.isCloneConnectSource(source);
-	var composite = (cloneSource) ? source : this.getCompositeParent(source);
+	let cloneSource = this.isCloneConnectSource(source);
+	let composite = (cloneSource) ? source : this.getCompositeParent(source);
 	
-	var pt = (source.geometry.relative && source.parent.geometry != null) ?
+	let pt = (source.geometry.relative && source.parent.geometry != null) ?
 		new mxPoint(source.parent.geometry.width * source.geometry.x,
 			source.parent.geometry.height * source.geometry.y) :
 		new mxPoint(composite.geometry.x, composite.geometry.y);
@@ -3026,11 +3026,11 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 		pt.y += composite.geometry.height / 2;
 	}
 
-	var parentState = this.view.getState(this.model.getParent(source));
-	var s = this.view.scale;
-	var t = this.view.translate;
-	var dx = t.x * s;
-	var dy = t.y * s;
+	let parentState = this.view.getState(this.model.getParent(source));
+	let s = this.view.scale;
+	let t = this.view.translate;
+	let dx = t.x * s;
+	let dy = t.y * s;
 	
 	if (parentState != null && this.model.isVertex(parentState.cell))
 	{
@@ -3046,10 +3046,10 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 	}
 	
 	// Checks actual end point of edge for target cell
-	var rect = (!ignoreCellAt) ? new mxRectangle(dx + pt.x * s, dy + pt.y * s).grow(40) : null;
-	var tempCells = (rect != null) ? this.getCells(0, 0, 0, 0, null, null, rect) : null;
-	var target = (tempCells != null && tempCells.length > 0) ? tempCells.reverse()[0] : null;
-	var keepParent = false;
+	let rect = (!ignoreCellAt) ? new mxRectangle(dx + pt.x * s, dy + pt.y * s).grow(40) : null;
+	let tempCells = (rect != null) ? this.getCells(0, 0, 0, 0, null, null, rect) : null;
+	let target = (tempCells != null && tempCells.length > 0) ? tempCells.reverse()[0] : null;
+	let keepParent = false;
 	
 	if (target != null && this.model.isAncestor(target, source))
 	{
@@ -3060,7 +3060,7 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 	// Checks for swimlane at drop location
 	if (target == null)
 	{
-		var temp = this.getSwimlaneAt(dx + pt.x * s, dy + pt.y * s);
+		let temp = this.getSwimlaneAt(dx + pt.x * s, dy + pt.y * s);
 		
 		if (temp != null)
 		{
@@ -3070,7 +3070,7 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 	}
 	
 	// Checks if target or ancestor is locked
-	var temp = target;
+	let temp = target;
 	
 	while (temp != null)
 	{
@@ -3086,8 +3086,8 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 	// Checks if source and target intersect
 	if (target != null)
 	{
-		var sourceState = this.view.getState(source);
-		var targetState = this.view.getState(target);
+		let sourceState = this.view.getState(source);
+		let targetState = this.view.getState(target);
 		
 		if (sourceState != null && targetState != null && mxUtils.intersects(sourceState, targetState))
 		{
@@ -3095,7 +3095,7 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 		}
 	}
 	
-	var duplicate = (!mxEvent.isShiftDown(evt) || mxEvent.isControlDown(evt)) || forceClone;
+	let duplicate = (!mxEvent.isShiftDown(evt) || mxEvent.isControlDown(evt)) || forceClone;
 	
 	if (duplicate)
 	{
@@ -3121,7 +3121,7 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 	// TODO: Fix using target as parent for swimlane
 	if (target != null && !this.isCellConnectable(target) && !this.isSwimlane(target))
 	{
-		var parent = this.getModel().getParent(target);
+		let parent = this.getModel().getParent(target);
 		
 		if (this.getModel().isVertex(parent) && this.isCellConnectable(parent))
 		{
@@ -3136,11 +3136,11 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 		target = null;
 	}
 	
-	var result = [];
-	var swimlane = target != null && this.isSwimlane(target);
-	var realTarget = (!swimlane) ? target : null;
+	let result = [];
+	let swimlane = target != null && this.isSwimlane(target);
+	let realTarget = (!swimlane) ? target : null;
 
-	var execute = mxUtils.bind(this, function(targetCell)
+	let execute = mxUtils.bind(this, function(targetCell)
 	{
 		if (createTarget == null || targetCell != null || (target == null && cloneSource))
 		{
@@ -3150,8 +3150,8 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 				if (realTarget == null && duplicate)
 				{
 					// Handles relative children
-					var cellToClone = (targetCell != null) ? targetCell : source;
-					var geo = this.getCellGeometry(cellToClone);
+					let cellToClone = (targetCell != null) ? targetCell : source;
+					let geo = this.getCellGeometry(cellToClone);
 					
 					while (geo != null && geo.relative)
 					{
@@ -3168,7 +3168,7 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 						this.addCells([realTarget], this.model.getParent(source), null, null, null, true);
 					}
 					
-					var geo = this.getCellGeometry(realTarget);
+					let geo = this.getCellGeometry(realTarget);
 	
 					if (geo != null)
 					{
@@ -3187,15 +3187,15 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 					}
 				}
 				
-				var edge = ((mxEvent.isControlDown(evt) && mxEvent.isShiftDown(evt) && duplicate) ||
+				let edge = ((mxEvent.isControlDown(evt) && mxEvent.isShiftDown(evt) && duplicate) ||
 					(target == null && cloneSource)) ? null : this.insertEdge(this.model.getParent(source),
 						null, '', source, realTarget, this.createCurrentEdgeStyle());
 		
 				// Inserts edge before source
 				if (edge != null && this.connectionHandler.insertBeforeSource)
 				{
-					var index = null;
-					var tmp = source;
+					let index = null;
+					let tmp = source;
 					
 					while (tmp.parent != null && tmp.geometry != null &&
 						tmp.geometry.relative && tmp.parent != edge.parent)
@@ -3205,7 +3205,7 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 				
 					if (tmp != null && tmp.parent != null && tmp.parent == edge.parent)
 					{
-						var index = tmp.parent.getIndex(tmp);
+						let index = tmp.parent.getIndex(tmp);
 						this.model.add(tmp.parent, edge, index);
 					}
 				}
@@ -3214,7 +3214,7 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 				if (target == null && realTarget != null && source.parent != null &&
 					cloneSource && direction == mxConstants.DIRECTION_WEST)
 				{
-					var index = source.parent.getIndex(source);
+					let index = source.parent.getIndex(source);
 					this.model.add(source.parent, realTarget, index);
 				}
 				
@@ -3270,13 +3270,13 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
  */
 Graph.prototype.getIndexableText = function()
 {
-	var tmp = document.createElement('div');
-	var labels = [];
-	var label = '';
+	let tmp = document.createElement('div');
+	let labels = [];
+	let label = '';
 	
 	for (var key in this.model.cells)
 	{
-		var cell = this.model.cells[key];
+		let cell = this.model.cells[key];
 		
 		if (this.model.isVertex(cell) || this.model.isEdge(cell))
 		{
@@ -3307,16 +3307,16 @@ Graph.prototype.getIndexableText = function()
  */
 Graph.prototype.convertValueToString = function(cell)
 {
-	var value = this.model.getValue(cell);
+	let value = this.model.getValue(cell);
 	
 	if (value != null && typeof(value) == 'object')
 	{
-		var result = null;
+		let result = null;
 		
 		if (this.isReplacePlaceholders(cell) && cell.getAttribute('placeholder') != null)
 		{
-			var name = cell.getAttribute('placeholder');
-			var current = cell;
+			let name = cell.getAttribute('placeholder');
+			let current = cell;
 					
 			while (result == null && current != null)
 			{
@@ -3331,7 +3331,7 @@ Graph.prototype.convertValueToString = function(cell)
 		}
 		else
 		{
-			var result = null;
+			let result = null;
 			
 			if (Graph.translateDiagram && Graph.diagramLanguage != null)
 			{
@@ -3370,7 +3370,7 @@ Graph.prototype.getLinkForCell = function(cell)
 {
 	if (cell.value != null && typeof(cell.value) == 'object')
 	{
-		var link = cell.value.getAttribute('link');
+		let link = cell.value.getAttribute('link');
 		
 		// Removes links with leading javascript: protocol
 		// TODO: Check more possible attack vectors
@@ -3391,15 +3391,15 @@ Graph.prototype.getLinkForCell = function(cell)
  */
 Graph.prototype.getCellStyle = function(cell)
 {
-	var style = mxGraph.prototype.getCellStyle.apply(this, arguments);
+	let style = mxGraph.prototype.getCellStyle.apply(this, arguments);
 	
 	if (cell != null && this.layoutManager != null)
 	{
-		var parent = this.model.getParent(cell);
+		let parent = this.model.getParent(cell);
 		
 		if (this.model.isVertex(parent) && this.isCellCollapsed(cell))
 		{
-			var layout = this.layoutManager.getLayout(parent);
+			let layout = this.layoutManager.getLayout(parent);
 			
 			if (layout != null && layout.constructor == mxStackLayout)
 			{
@@ -3418,7 +3418,7 @@ Graph.prototype.updateAlternateBounds = function(cell, geo, willCollapse)
 {
 	if (cell != null && geo != null && this.layoutManager != null && geo.alternateBounds != null)
 	{
-		var layout = this.layoutManager.getLayout(this.model.getParent(cell));
+		let layout = this.layoutManager.getLayout(this.model.getParent(cell));
 		
 		if (layout != null && layout.constructor == mxStackLayout)
 		{
@@ -3467,20 +3467,20 @@ Graph.prototype.foldCells = function(collapse, recurse, cells, checkFoldable, ev
 			// Resizes all parent stacks if alt is not pressed
 			if (this.layoutManager != null)
 			{
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
-					var state = this.view.getState(cells[i]);
-					var geo = this.getCellGeometry(cells[i]);
+					let state = this.view.getState(cells[i]);
+					let geo = this.getCellGeometry(cells[i]);
 					
 					if (state != null && geo != null)
 					{
-						var dx = Math.round(geo.width - state.width / this.view.scale);
-						var dy = Math.round(geo.height - state.height / this.view.scale);
+						let dx = Math.round(geo.width - state.width / this.view.scale);
+						let dy = Math.round(geo.height - state.height / this.view.scale);
 						
 						if (dy != 0 || dx != 0)
 						{
-							var parent = this.model.getParent(cells[i]);
-							var layout = this.layoutManager.getLayout(parent);
+							let parent = this.model.getParent(cells[i]);
+							let layout = this.layoutManager.getLayout(parent);
 							
 							if (layout == null)
 							{
@@ -3521,14 +3521,14 @@ Graph.prototype.moveSiblings = function(state, parent, dx, dy)
 	this.model.beginUpdate();
 	try
 	{
-		var cells = this.getCellsBeyond(state.x, state.y, parent, true, true);
+		let cells = this.getCellsBeyond(state.x, state.y, parent, true, true);
 		
-		for (var i = 0; i < cells.length; i++)
+		for (let i = 0; i < cells.length; i++)
 		{
 			if (cells[i] != state.cell)
 			{
-				var tmp = this.view.getState(cells[i]);
-				var geo = this.getCellGeometry(cells[i]);
+				let tmp = this.view.getState(cells[i]);
+				let geo = this.getCellGeometry(cells[i]);
 				
 				if (tmp != null && geo != null)
 				{
@@ -3556,14 +3556,14 @@ Graph.prototype.resizeParentStacks = function(parent, layout, dx, dy)
 		this.model.beginUpdate();
 		try
 		{
-			var dir = layout.horizontal;
+			let dir = layout.horizontal;
 			
 			// Bubble resize up for all parent stack layouts with same orientation
 			while (parent != null && layout != null && layout.constructor == mxStackLayout &&
 				layout.horizontal == dir && !layout.resizeLast)
 			{
-				var pgeo = this.getCellGeometry(parent);
-				var pstate = this.view.getState(parent);
+				let pgeo = this.getCellGeometry(parent);
+				let pstate = this.view.getState(parent);
 				
 				if (pstate != null && pgeo != null)
 				{
@@ -3597,7 +3597,7 @@ Graph.prototype.resizeParentStacks = function(parent, layout, dx, dy)
  */
 Graph.prototype.isContainer = function(cell)
 {
-	var style = this.getCurrentCellStyle(cell);
+	let style = this.getCurrentCellStyle(cell);
 	
 	if (this.isSwimlane(cell))
 	{
@@ -3614,7 +3614,7 @@ Graph.prototype.isContainer = function(cell)
  */
 Graph.prototype.isCellConnectable = function(cell)
 {
-	var style = this.getCurrentCellStyle(cell);
+	let style = this.getCurrentCellStyle(cell);
 	
 	return (style['connectable'] != null) ? style['connectable'] != '0' :
 		mxGraph.prototype.isCellConnectable.apply(this, arguments);
@@ -3625,7 +3625,7 @@ Graph.prototype.isCellConnectable = function(cell)
  */
 Graph.prototype.isLabelMovable = function(cell)
 {
-	var style = this.getCurrentCellStyle(cell);
+	let style = this.getCurrentCellStyle(cell);
 	
 	return (style['movableLabel'] != null) ? style['movableLabel'] != '0' :
 		mxGraph.prototype.isLabelMovable.apply(this, arguments);
@@ -3693,7 +3693,7 @@ Graph.prototype.selectCells = function(vertices, edges, parent)
  */
 Graph.prototype.getSwimlaneAt = (x, y, parent) =>
 {
-	var result = mxGraph.prototype.getSwimlaneAt.apply(this, arguments);
+	let result = mxGraph.prototype.getSwimlaneAt.apply(this, arguments);
 	
 	if (this.isCellLocked(result))
 	{
@@ -3708,7 +3708,7 @@ Graph.prototype.getSwimlaneAt = (x, y, parent) =>
  */
 Graph.prototype.isCellFoldable = function(cell)
 {
-	var style = this.getCurrentCellStyle(cell);
+	let style = this.getCurrentCellStyle(cell);
 	
 	return this.foldingEnabled && (style['treeFolding'] == '1' ||
 		(!this.isCellLocked(cell) &&
@@ -3793,14 +3793,14 @@ Graph.prototype.fitWindow = function(bounds, border)
 {
 	border = (border != null) ? border : 10;
 	
-	var cw = this.container.clientWidth - border;
-	var ch = this.container.clientHeight - border;
-	var scale = Math.floor(20 * Math.min(cw / bounds.width, ch / bounds.height)) / 20;
+	let cw = this.container.clientWidth - border;
+	let ch = this.container.clientHeight - border;
+	let scale = Math.floor(20 * Math.min(cw / bounds.width, ch / bounds.height)) / 20;
 	this.zoomTo(scale);
 
 	if (mxUtils.hasScrollbars(this.container))
 	{
-		var t = this.view.translate;
+		let t = this.view.translate;
 		this.container.scrollTop = (bounds.y + t.y) * scale -
 			Math.max((ch - bounds.height * scale) / 2 + border / 2, 0);
 		this.container.scrollLeft = (bounds.x + t.x) * scale -
@@ -3813,11 +3813,11 @@ Graph.prototype.fitWindow = function(bounds, border)
  */
 Graph.prototype.getTooltipForCell = function(cell)
 {
-	var tip = '';
+	let tip = '';
 	
 	if (mxUtils.isNode(cell.value))
 	{
-		var tmp = null;
+		let tmp = null;
 
 		if (Graph.translateDiagram && Graph.diagramLanguage != null)
 		{
@@ -3840,9 +3840,9 @@ Graph.prototype.getTooltipForCell = function(cell)
 		}
 		else
 		{
-			var ignored = this.builtInProperties;
-			var attrs = cell.value.attributes;
-			var temp = [];
+			let ignored = this.builtInProperties;
+			let attrs = cell.value.attributes;
+			let temp = [];
 
 			// Hides links in edit mode
 			if (this.isEnabled())
@@ -3850,7 +3850,7 @@ Graph.prototype.getTooltipForCell = function(cell)
 				ignored.push('link');
 			}
 			
-			for (var i = 0; i < attrs.length; i++)
+			for (let i = 0; i < attrs.length; i++)
 			{
 				if (mxUtils.indexOf(ignored, attrs[i].nodeName) < 0 && attrs[i].nodeValue.length > 0)
 				{
@@ -3875,7 +3875,7 @@ Graph.prototype.getTooltipForCell = function(cell)
 				}
 			});
 
-			for (var i = 0; i < temp.length; i++)
+			for (let i = 0; i < temp.length; i++)
 			{
 				if (temp[i].name != 'link' || !this.isCustomLink(temp[i].value))
 				{
@@ -4104,7 +4104,7 @@ HoverIcons.prototype.init = function()
 	}));
 	
 	// Resets current state after update of selection state for touch events
-	var graphClick = this.graph.click;
+	let graphClick = this.graph.click;
 	this.graph.click = mxUtils.bind(this, function(me)
 	{
 		graphClick.apply(this.graph, arguments);
@@ -4118,7 +4118,7 @@ HoverIcons.prototype.init = function()
 	
 	// Checks if connection handler was active in mouse move
 	// as workaround for possible double connection inserted
-	var connectionHandlerActive = false;
+	let connectionHandlerActive = false;
 	
 	// Implements a listener for hover and click handling
 	this.graph.addMouseListener(
@@ -4126,7 +4126,7 @@ HoverIcons.prototype.init = function()
 	    mouseDown: mxUtils.bind(this, function(sender, me)
 	    {
 	    	connectionHandlerActive = false;
-	    	var evt = me.getEvent();
+	    	let evt = me.getEvent();
 	    	
 	    	if (this.isResetEvent(evt))
 	    	{
@@ -4134,7 +4134,7 @@ HoverIcons.prototype.init = function()
 	    	}
 	    	else if (!this.isActive())
 	    	{
-	    		var state = this.getState(me.getState());
+	    		let state = this.getState(me.getState());
 	    		
 	    		if (state != null || !mxEvent.isTouchEvent(evt))
 	    		{
@@ -4146,7 +4146,7 @@ HoverIcons.prototype.init = function()
 	    }),
 	    mouseMove: mxUtils.bind(this, function(sender, me)
 	    {
-	    	var evt = me.getEvent();
+	    	let evt = me.getEvent();
 	    	
 	    	if (this.isResetEvent(evt))
 	    	{
@@ -4166,8 +4166,8 @@ HoverIcons.prototype.init = function()
 	    }),
 	    mouseUp: mxUtils.bind(this, function(sender, me)
 	    {
-	    	var evt = me.getEvent();
-	    	var pt = mxUtils.convertPoint(this.graph.container,
+	    	let evt = me.getEvent();
+	    	let pt = mxUtils.convertPoint(this.graph.container,
 				mxEvent.getClientX(evt), mxEvent.getClientY(evt))
 	    	
 	    	if (this.isResetEvent(evt))
@@ -4225,7 +4225,7 @@ HoverIcons.prototype.isResetEvent = function(evt, allowShift)
  */
 HoverIcons.prototype.createArrow = function(img, tooltip)
 {
-	var arrow = null;
+	let arrow = null;
 	arrow = mxUtils.createImage(img.src);
 	arrow.style.width = img.width + 'px';
 	arrow.style.height = img.height + 'px';
@@ -4300,7 +4300,7 @@ HoverIcons.prototype.resetActiveArrow = function()
  */
 HoverIcons.prototype.getDirection = function()
 {
-	var dir = mxConstants.DIRECTION_EAST;
+	let dir = mxConstants.DIRECTION_EAST;
 
 	if (this.activeArrow == this.arrowUp)
 	{
@@ -4323,7 +4323,7 @@ HoverIcons.prototype.getDirection = function()
  */
 HoverIcons.prototype.visitNodes = function(visitor)
 {
-	for (var i = 0; i < this.elts.length; i++)
+	for (let i = 0; i < this.elts.length; i++)
 	{
 		if (this.elts[i] != null)
 		{
@@ -4381,7 +4381,7 @@ HoverIcons.prototype.drag = function(evt, x, y)
 		this.graph.isMouseDown = true;
 		
 		// Hides handles for selection cell
-		var handler = this.graph.selectionCellsHandler.getHandler(this.currentState.cell);
+		let handler = this.graph.selectionCellsHandler.getHandler(this.currentState.cell);
 		
 		if (handler != null)
 		{
@@ -4389,12 +4389,12 @@ HoverIcons.prototype.drag = function(evt, x, y)
 		}
 		
 		// Ctrl+shift drag sets source constraint
-		var es = this.graph.connectionHandler.edgeState;
+		let es = this.graph.connectionHandler.edgeState;
 
 		if (evt != null && mxEvent.isShiftDown(evt) && mxEvent.isControlDown(evt) && es != null &&
 			mxUtils.getValue(es.style, mxConstants.STYLE_EDGE, null) === 'orthogonalEdgeStyle')
 		{
-			var direction = this.getDirection();
+			let direction = this.getDirection();
 			es.cell.style = mxUtils.setStyle(es.cell.style, 'sourcePortConstraint', direction);
 			es.style['sourcePortConstraint'] = direction;
 		}
@@ -4414,11 +4414,11 @@ HoverIcons.prototype.getStateAt = function(state, x, y)
  */
 HoverIcons.prototype.click = function(state, dir, me)
 {
-	var evt = me.getEvent();
-	var x = me.getGraphX();
-	var y = me.getGraphY();
+	let evt = me.getEvent();
+	let x = me.getGraphX();
+	let y = me.getGraphY();
 	
-	var tmp = this.getStateAt(state, x, y);
+	let tmp = this.getStateAt(state, x, y);
 
 	if (tmp != null && this.graph.model.isEdge(tmp.cell) && !this.graph.isCloneEvent(evt) &&
 		(tmp.getVisibleTerminalState(true) == state || tmp.getVisibleTerminalState(false) == state))
@@ -4439,7 +4439,7 @@ HoverIcons.prototype.click = function(state, dir, me)
  */
 HoverIcons.prototype.execute = function(state, dir, me)
 {
-	var evt = me.getEvent();
+	let evt = me.getEvent();
 
 	this.graph.selectCellsForConnectVertex(this.graph.connectVertex(
 		state.cell, dir, this.graph.defaultEdgeLength, evt, this.graph.isCloneEvent(evt),
@@ -4482,7 +4482,7 @@ HoverIcons.prototype.repaint = function()
 			this.graph.model.isVertex(this.currentState.cell) &&
 			this.graph.isCellConnectable(this.currentState.cell))
 		{
-			var bds = mxRectangle.fromRectangle(this.currentState);
+			let bds = mxRectangle.fromRectangle(this.currentState);
 			
 			// Uses outer bounding box to take rotation into account
 			if (this.currentState.shape != null && this.currentState.shape.boundingBox != null)
@@ -4493,7 +4493,7 @@ HoverIcons.prototype.repaint = function()
 			bds.grow(this.graph.tolerance);
 			bds.grow(this.arrowSpacing);
 			
-			var handler = this.graph.selectionCellsHandler.getHandler(this.currentState.cell);
+			let handler = this.graph.selectionCellsHandler.getHandler(this.currentState.cell);
 			
 			if (this.graph.isTableRow(this.currentState.cell))
 			{
@@ -4501,7 +4501,7 @@ HoverIcons.prototype.repaint = function()
 					this.graph.model.getParent(this.currentState.cell));
 			}
 			
-			var rotationBbox = null;
+			let rotationBbox = null;
 			
 			if (handler != null)
 			{
@@ -4521,11 +4521,11 @@ HoverIcons.prototype.repaint = function()
 			}
 			
 			// Positions arrows avoid collisions with rotation handle
-			var positionArrow = mxUtils.bind(this, function(arrow, x, y)
+			let positionArrow = mxUtils.bind(this, function(arrow, x, y)
 			{
 				if (rotationBbox != null)
 				{
-					var bbox = new mxRectangle(x, y, arrow.clientWidth, arrow.clientHeight);
+					let bbox = new mxRectangle(x, y, arrow.clientWidth, arrow.clientHeight);
 					
 					if (mxUtils.intersects(bbox, rotationBbox))
 					{
@@ -4568,11 +4568,11 @@ HoverIcons.prototype.repaint = function()
 			
 			if (this.checkCollisions)
 			{
-				var right = this.graph.getCellAt(bds.x + bds.width +
+				let right = this.graph.getCellAt(bds.x + bds.width +
 						this.triangleRight.width / 2, this.currentState.getCenterY());
-				var left = this.graph.getCellAt(bds.x - this.triangleLeft.width / 2, this.currentState.getCenterY()); 
-				var top = this.graph.getCellAt(this.currentState.getCenterX(), bds.y - this.triangleUp.height / 2); 
-				var bottom = this.graph.getCellAt(this.currentState.getCenterX(), bds.y + bds.height + this.triangleDown.height / 2); 
+				let left = this.graph.getCellAt(bds.x - this.triangleLeft.width / 2, this.currentState.getCenterY());
+				let top = this.graph.getCellAt(this.currentState.getCenterX(), bds.y - this.triangleUp.height / 2);
+				let bottom = this.graph.getCellAt(this.currentState.getCenterX(), bds.y + bds.height + this.triangleDown.height / 2);
 
 				// Shows hover icons large cell is behind all directions of current cell
 				if (right != null && right == left && left == top && top == bottom)
@@ -4583,11 +4583,11 @@ HoverIcons.prototype.repaint = function()
 					bottom = null;
 				}
 
-				var currentGeo = this.graph.getCellGeometry(this.currentState.cell);
+				let currentGeo = this.graph.getCellGeometry(this.currentState.cell);
 				
-				var checkCollision = mxUtils.bind(this, function(cell, arrow)
+				let checkCollision = mxUtils.bind(this, function(cell, arrow)
 				{
-					var geo = this.graph.model.isVertex(cell) && this.graph.getCellGeometry(cell);
+					let geo = this.graph.model.isVertex(cell) && this.graph.getCellGeometry(cell);
 					
 					// Ignores collision if vertex is more than 3 times the size of this vertex
 					if (cell != null && !this.graph.model.isAncestor(cell, this.currentState.cell) &&
@@ -4654,13 +4654,13 @@ HoverIcons.prototype.repaint = function()
  */
 HoverIcons.prototype.computeBoundingBox = function()
 {
-	var bbox = (!this.graph.model.isEdge(this.currentState.cell)) ? mxRectangle.fromRectangle(this.currentState) : null;
+	let bbox = (!this.graph.model.isEdge(this.currentState.cell)) ? mxRectangle.fromRectangle(this.currentState) : null;
 	
 	this.visitNodes(function(elt)
 	{
 		if (elt.parentNode != null)
 		{
-			var tmp = new mxRectangle(elt.offsetLeft, elt.offsetTop, elt.offsetWidth, elt.offsetHeight);
+			let tmp = new mxRectangle(elt.offsetLeft, elt.offsetTop, elt.offsetWidth, elt.offsetHeight);
 			
 			if (bbox == null)
 			{
@@ -4683,7 +4683,7 @@ HoverIcons.prototype.getState = function(state)
 {
 	if (state != null)
 	{
-		var cell = state.cell;
+		let cell = state.cell;
 		
 		if (!this.graph.getModel().contains(cell))
 		{
@@ -4694,7 +4694,7 @@ HoverIcons.prototype.getState = function(state)
 			// Uses connectable parent vertex if child is not connectable
 			if (this.graph.getModel().isVertex(cell) && !this.graph.isCellConnectable(cell))
 			{
-				var parent = this.graph.getModel().getParent(cell);
+				let parent = this.graph.getModel().getParent(cell);
 				
 				if (this.graph.getModel().isVertex(parent) && this.graph.isCellConnectable(parent))
 				{
@@ -4738,7 +4738,7 @@ HoverIcons.prototype.update = function(state, x, y)
 			state = null;
 		}
 		
-		var timeOnTarget = null;
+		let timeOnTarget = null;
 		
 		// Time on target
 		if (this.prev != state || this.isActive())
@@ -4827,10 +4827,10 @@ Graph.prototype.createParent = function(parent, child, childCount, dx, dy)
 {
 	parent = this.cloneCell(parent);
 	
-	for (var i = 0; i < childCount; i++)
+	for (let i = 0; i < childCount; i++)
     {
-		var clone = this.cloneCell(child);
-		var geo = this.getCellGeometry(clone)
+		let clone = this.cloneCell(child);
+		let geo = this.getCellGeometry(clone)
 		
 		if (geo != null)
 		{
@@ -4871,9 +4871,9 @@ Graph.prototype.createTable = function(rowCount, colCount, w, h, title, startSiz
  */
 Graph.prototype.setTableValues = function(table, values, rowValues)
 {
-	var rows = this.model.getChildCells(table, true);
+	let rows = this.model.getChildCells(table, true);
 	
-	for (var i = 0; i < rows.length; i++)
+	for (let i = 0; i < rows.length; i++)
 	{
 		if (rowValues != null)
 		{
@@ -4882,9 +4882,9 @@ Graph.prototype.setTableValues = function(table, values, rowValues)
 		
 		if (values != null)
 		{
-			var cells = this.model.getChildCells(rows[i], true);
+			let cells = this.model.getChildCells(rows[i], true);
 			
-			for (var j = 0; j < cells.length; j++)
+			for (let j = 0; j < cells.length; j++)
 			{
 				if (values[i][j] != null)
 				{
@@ -4906,7 +4906,7 @@ Graph.prototype.createCrossFunctionalSwimlane = function(rowCount, colCount, w,
 	h = (h != null) ? h : 120;
 	startSize = (startSize != null) ? startSize : 40;
 	
-	var s = 'html=1;whiteSpace=wrap;collapsible=0;recursiveResize=0;expand=0;pointerEvents=0;';
+	let s = 'html=1;whiteSpace=wrap;collapsible=0;recursiveResize=0;expand=0;pointerEvents=0;';
 	tableStyle = (tableStyle != null) ? tableStyle : 'shape=table;childLayout=tableLayout;' +
 			'rowLines=0;columnLines=0;startSize=' + startSize + ';' + s;
 	rowStyle = (rowStyle != null) ? rowStyle : 'swimlane;horizontal=0;points=[[0,0.5],[1,0.5]];' +
@@ -4914,14 +4914,14 @@ Graph.prototype.createCrossFunctionalSwimlane = function(rowCount, colCount, w,
 	firstCellStyle = (firstCellStyle != null) ? firstCellStyle : 'swimlane;connectable=0;startSize=40;' + s;
 	cellStyle = (cellStyle != null) ? cellStyle : 'swimlane;connectable=0;startSize=0;' + s;
 	
-	var table = this.createVertex(null, null, '', 0, 0,
+	let table = this.createVertex(null, null, '', 0, 0,
 		colCount * w, rowCount * h, tableStyle);
-	var t = mxUtils.getValue(this.getCellStyle(table), mxConstants.STYLE_STARTSIZE,
+	let t = mxUtils.getValue(this.getCellStyle(table), mxConstants.STYLE_STARTSIZE,
 		mxConstants.DEFAULT_STARTSIZE);
 	table.geometry.width += t;
 	table.geometry.height += t;
 	
-	var row = this.createVertex(null, null, '', 0, t, colCount * w + t, h, rowStyle);
+	let row = this.createVertex(null, null, '', 0, t, colCount * w + t, h, rowStyle);
 	table.insert(this.createParent(row, this.createVertex(null, null,
 		'', t, 0, w, h, firstCellStyle), colCount, w, 0));
 	
@@ -4960,7 +4960,7 @@ Graph.prototype.isTableRow = function(cell)
  */
 Graph.prototype.isTable = function(cell)
 {
-	var style = this.getCellStyle(cell);
+	let style = this.getCellStyle(cell);
 	
 	return style != null && style['childLayout'] == 'tableLayout';
 };
@@ -4971,12 +4971,12 @@ Graph.prototype.isTable = function(cell)
 Graph.prototype.setTableRowHeight = function(row, dy, extend)
 {
 	extend = (extend != null) ? extend : true;
-	var model = this.getModel();
+	let model = this.getModel();
 	
 	model.beginUpdate();
 	try
 	{
-		var rgeo = this.getCellGeometry(row);
+		let rgeo = this.getCellGeometry(row);
 	
 		// Sets height of row
 		if (rgeo != null)
@@ -4985,18 +4985,18 @@ Graph.prototype.setTableRowHeight = function(row, dy, extend)
 			rgeo.height += dy;
 			model.setGeometry(row, rgeo);
 			
-			var table = model.getParent(row);
-			var rows = model.getChildCells(table, true);
+			let table = model.getParent(row);
+			let rows = model.getChildCells(table, true);
 			
 			// Shifts and resizes neighbor row
 			if (!extend)
 			{
-				var index = mxUtils.indexOf(rows, row);
+				let index = mxUtils.indexOf(rows, row);
 	
 				if (index < rows.length - 1)
 				{
-					var nextRow = rows[index + 1];
-					var geo = this.getCellGeometry(nextRow);
+					let nextRow = rows[index + 1];
+					let geo = this.getCellGeometry(nextRow);
 				
 					if (geo != null)
 					{
@@ -5010,7 +5010,7 @@ Graph.prototype.setTableRowHeight = function(row, dy, extend)
 			}
 			
 			// Updates height of table
-			var tgeo = this.getCellGeometry(table);
+			let tgeo = this.getCellGeometry(table);
 			
 			if (tgeo != null)
 			{
@@ -5047,25 +5047,25 @@ Graph.prototype.setTableColumnWidth = function(col, dx, extend)
 {
 	extend = (extend != null) ? extend : false;
 	
-	var model = this.getModel();
-	var row = model.getParent(col);
-	var table = model.getParent(row);
-	var cells = model.getChildCells(row, true);
-	var index = mxUtils.indexOf(cells, col);
-	var lastColumn = index == cells.length - 1;
+	let model = this.getModel();
+	let row = model.getParent(col);
+	let table = model.getParent(row);
+	let cells = model.getChildCells(row, true);
+	let index = mxUtils.indexOf(cells, col);
+	let lastColumn = index == cells.length - 1;
 	
 	model.beginUpdate();
 	try
 	{
 		// Sets width of child cell
-		var rows = model.getChildCells(table, true);
+		let rows = model.getChildCells(table, true);
 		
-		for (var i = 0; i < rows.length; i++)
+		for (let i = 0; i < rows.length; i++)
 		{
 			row = rows[i];
 			cells = model.getChildCells(row, true);
-			var cell = cells[index];
-			var geo = this.getCellGeometry(cell);
+			let cell = cells[index];
+			let geo = this.getCellGeometry(cell);
 		
 			if (geo != null)
 			{
@@ -5078,7 +5078,7 @@ Graph.prototype.setTableColumnWidth = function(col, dx, extend)
 			if (index < cells.length - 1)
 			{
 				cell = cells[index + 1];
-				var geo = this.getCellGeometry(cell);
+				let geo = this.getCellGeometry(cell);
 			
 				if (geo != null)
 				{
@@ -5098,7 +5098,7 @@ Graph.prototype.setTableColumnWidth = function(col, dx, extend)
 		if (lastColumn || extend)
 		{
 			// Updates width of table
-			var tgeo = this.getCellGeometry(table);
+			let tgeo = this.getCellGeometry(table);
 			
 			if (tgeo != null)
 			{
@@ -5161,13 +5161,13 @@ TableLayout.prototype.isVertexIgnored = function(vertex)
  */
 TableLayout.prototype.getSize = function(cells, horizontal)
 {
-	var total = 0;
+	let total = 0;
 	
-	for (var i = 0; i < cells.length; i++)
+	for (let i = 0; i < cells.length; i++)
 	{
 		if (!this.isVertexIgnored(cells[i]))
 		{
-			var geo = this.graph.getCellGeometry(cells[i]);
+			let geo = this.graph.getCellGeometry(cells[i]);
 			
 			if (geo != null)
 			{
@@ -5186,16 +5186,16 @@ TableLayout.prototype.getSize = function(cells, horizontal)
  */
 TableLayout.prototype.getRowLayout = function(row, width)
 {
-	var cells = this.graph.model.getChildCells(row, true);
-	var off = this.graph.getActualStartSize(row, true);
-	var sw = this.getSize(cells, true);
-	var rw = width - off.x - off.width;
-	var result = [];
-	var x = off.x;
+	let cells = this.graph.model.getChildCells(row, true);
+	let off = this.graph.getActualStartSize(row, true);
+	let sw = this.getSize(cells, true);
+	let rw = width - off.x - off.width;
+	let result = [];
+	let x = off.x;
 	
-	for (var i = 0; i < cells.length; i++)
+	for (let i = 0; i < cells.length; i++)
 	{
-		var cell = this.graph.getCellGeometry(cells[i]);
+		let cell = this.graph.getCellGeometry(cells[i]);
 		
 		if (cell != null)
 		{
@@ -5214,11 +5214,11 @@ TableLayout.prototype.getRowLayout = function(row, width)
  */
 TableLayout.prototype.layoutRow = function(row, positions, height, tw)
 {
-	var model = this.graph.getModel();
-	var cells = model.getChildCells(row, true);
-	var off = this.graph.getActualStartSize(row, true);
-	var x = off.x;
-	var sw = 0;
+	let model = this.graph.getModel();
+	let cells = model.getChildCells(row, true);
+	let off = this.graph.getActualStartSize(row, true);
+	let x = off.x;
+	let sw = 0;
 	
 	if (positions != null)
 	{
@@ -5226,9 +5226,9 @@ TableLayout.prototype.layoutRow = function(row, positions, height, tw)
 		positions.splice(0, 0, off.x);
 	}
 
-	for (var i = 0; i < cells.length; i++)
+	for (let i = 0; i < cells.length; i++)
 	{
-		var cell = this.graph.getCellGeometry(cells[i]);
+		let cell = this.graph.getCellGeometry(cells[i]);
 		
 		if (cell != null)
 		{
@@ -5279,31 +5279,31 @@ TableLayout.prototype.execute = function(parent)
 {
 	if (parent != null)
 	{
-		var offset = this.graph.getActualStartSize(parent, true);
-		var table = this.graph.getCellGeometry(parent);
-		var style = this.graph.getCellStyle(parent);
-		var resizeLastRow = mxUtils.getValue(style,
+		let offset = this.graph.getActualStartSize(parent, true);
+		let table = this.graph.getCellGeometry(parent);
+		let style = this.graph.getCellStyle(parent);
+		let resizeLastRow = mxUtils.getValue(style,
 			'resizeLastRow', '0') == '1';
-		var resizeLast = mxUtils.getValue(style,
+		let resizeLast = mxUtils.getValue(style,
 			'resizeLast', '0') == '1';
-		var fixedRows = mxUtils.getValue(style,
+		let fixedRows = mxUtils.getValue(style,
 			'fixedRows', '0') == '1';
-		var model = this.graph.getModel();
-		var sw = 0;
+		let model = this.graph.getModel();
+		let sw = 0;
 		
 		model.beginUpdate();
 		try
 		{
-			var th = table.height - offset.y - offset.height;
-			var tw = table.width - offset.x - offset.width;
-			var rows = model.getChildCells(parent, true);
-			var sh = this.getSize(rows, false);
+			let th = table.height - offset.y - offset.height;
+			let tw = table.width - offset.x - offset.width;
+			let rows = model.getChildCells(parent, true);
+			let sh = this.getSize(rows, false);
 			
 			if (th > 0 && tw > 0 && rows.length > 0 && sh > 0)
 			{
 				if (resizeLastRow)
 				{
-					var row = this.graph.getCellGeometry(rows[rows.length - 1]);
+					let row = this.graph.getCellGeometry(rows[rows.length - 1]);
 					
 					if (row != null)
 					{
@@ -5313,13 +5313,13 @@ TableLayout.prototype.execute = function(parent)
 					}
 				}
 
-				var pos = (resizeLast) ? null : this.getRowLayout(rows[0], tw);
-				var y = offset.y;
+				let pos = (resizeLast) ? null : this.getRowLayout(rows[0], tw);
+				let y = offset.y;
 			
 				// Updates row geometries
-				for (var i = 0; i < rows.length; i++)
+				for (let i = 0; i < rows.length; i++)
 				{
-					var row = this.graph.getCellGeometry(rows[i]);
+					let row = this.graph.getCellGeometry(rows[i]);
 					
 					if (row != null)
 					{
@@ -5372,7 +5372,7 @@ TableLayout.prototype.execute = function(parent)
 	/**
 	 * Reset the list of processed edges.
 	 */
-	var mxGraphViewResetValidationState = mxGraphView.prototype.resetValidationState;
+	let mxGraphViewResetValidationState = mxGraphView.prototype.resetValidationState;
 	mxGraphView.prototype.resetValidationState = function()
 	{
 		mxGraphViewResetValidationState.apply(this, arguments);
@@ -5383,11 +5383,11 @@ TableLayout.prototype.execute = function(parent)
 	/**
 	 * Updates jumps for valid edges and repaints if needed.
 	 */
-	var mxGraphViewValidateCellState = mxGraphView.prototype.validateCellState;
+	let mxGraphViewValidateCellState = mxGraphView.prototype.validateCellState;
 	mxGraphView.prototype.validateCellState = function(cell, recurse)
 	{
 		recurse = (recurse != null) ? recurse : true;
-		var state = this.getState(cell);
+		let state = this.getState(cell);
 		
 		// Forces repaint if jumps change on a valid edge
 		if (state != null && recurse && this.graph.model.isEdge(state.cell) &&
@@ -5413,7 +5413,7 @@ TableLayout.prototype.execute = function(parent)
 	/**
 	 * Forces repaint if routed points have changed.
 	 */
-	var mxCellRendererIsShapeInvalid = mxCellRenderer.prototype.isShapeInvalid;
+	let mxCellRendererIsShapeInvalid = mxCellRenderer.prototype.isShapeInvalid;
 	mxCellRenderer.prototype.isShapeInvalid = function(state, shape)
 	{
 		return mxCellRendererIsShapeInvalid.apply(this, arguments) ||
@@ -5424,7 +5424,7 @@ TableLayout.prototype.execute = function(parent)
 	/**
 	 * Updates jumps for invalid edges.
 	 */
-	var mxGraphViewUpdateCellState = mxGraphView.prototype.updateCellState;
+	let mxGraphViewUpdateCellState = mxGraphView.prototype.updateCellState;
 	mxGraphView.prototype.updateCellState = function(state)
 	{
 		mxGraphViewUpdateCellState.apply(this, arguments);
@@ -5442,40 +5442,40 @@ TableLayout.prototype.execute = function(parent)
 	 */
 	mxGraphView.prototype.updateLineJumps = function(state)
 	{
-		var pts = state.absolutePoints;
+		let pts = state.absolutePoints;
 		
 		if (Graph.lineJumpsEnabled)
 		{
-			var changed = state.routedPoints != null;
-			var actual = null;
+			let changed = state.routedPoints != null;
+			let actual = null;
 			
 			if (pts != null && this.validEdges != null &&
 				mxUtils.getValue(state.style, 'jumpStyle', 'none') !== 'none')
 			{
-				var thresh = 0.5 * this.scale;
+				let thresh = 0.5 * this.scale;
 				changed = false;
 				actual = [];
 				
 				// Type 0 means normal waypoint, 1 means jump
 				function addPoint(type, x, y)
 				{
-					var rpt = new mxPoint(x, y);
+					let rpt = new mxPoint(x, y);
 					rpt.type = type;
 					
 					actual.push(rpt);
-					var curr = (state.routedPoints != null) ? state.routedPoints[actual.length - 1] : null;
+					let curr = (state.routedPoints != null) ? state.routedPoints[actual.length - 1] : null;
 					
 					return curr == null || curr.type != type || curr.x != x || curr.y != y;
 				};
 				
-				for (var i = 0; i < pts.length - 1; i++)
+				for (let i = 0; i < pts.length - 1; i++)
 				{
 					var p1 = pts[i + 1];
 					var p0 = pts[i];
-					var list = [];
+					let list = [];
 					
 					// Ignores waypoints on straight segments
-					var pn = pts[i + 2];
+					let pn = pts[i + 2];
 					
 					while (i < pts.length - 2 &&
 						mxUtils.ptSegDistSq(p0.x, p0.y, pn.x, pn.y,
@@ -5489,7 +5489,7 @@ TableLayout.prototype.execute = function(parent)
 					changed = addPoint(0, p0.x, p0.y) || changed;
 					
 					// Processes all previous edges
-					for (var e = 0; e < this.validEdges.length; e++)
+					for (let e = 0; e < this.validEdges.length; e++)
 					{
 						var state2 = this.validEdges[e];
 						var pts2 = state2.absolutePoints;
@@ -5497,7 +5497,7 @@ TableLayout.prototype.execute = function(parent)
 						if (pts2 != null && mxUtils.intersects(state, state2) && state2.style['noJump'] != '1')
 						{
 							// Compares each segment of the edge with the current segment
-							for (var j = 0; j < pts2.length - 1; j++)
+							for (let j = 0; j < pts2.length - 1; j++)
 							{
 								var p3 = pts2[j + 1];
 								var p2 = pts2[j];
@@ -5514,7 +5514,7 @@ TableLayout.prototype.execute = function(parent)
 									pn = pts2[j + 2];
 								}
 								
-								var pt = mxUtils.intersection(p0.x, p0.y, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y);
+								let pt = mxUtils.intersection(p0.x, p0.y, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y);
 	
 								// Handles intersection between two segments
 								if (pt != null && (Math.abs(pt.x - p0.x) > thresh ||
@@ -5526,12 +5526,12 @@ TableLayout.prototype.execute = function(parent)
 									(Math.abs(pt.x - p3.x) > thresh ||
 									Math.abs(pt.y - p3.y) > thresh))
 								{
-									var dx = pt.x - p0.x;
-									var dy = pt.y - p0.y;
-									var temp = {distSq: dx * dx + dy * dy, x: pt.x, y: pt.y};
+									let dx = pt.x - p0.x;
+									let dy = pt.y - p0.y;
+									let temp = {distSq: dx * dx + dy * dy, x: pt.x, y: pt.y};
 								
 									// Intersections must be ordered by distance from start of segment
-									for (var t = 0; t < list.length; t++)
+									for (let t = 0; t < list.length; t++)
 									{
 										if (list[t].distSq > temp.distSq)
 										{
@@ -5555,13 +5555,13 @@ TableLayout.prototype.execute = function(parent)
 					}
 					
 					// Adds ordered intersections to routed points
-					for (var j = 0; j < list.length; j++)
+					for (let j = 0; j < list.length; j++)
 					{
 						changed = addPoint(1, list[j].x, list[j].y) || changed;
 					}
 				}
 	
-				var pt = pts[pts.length - 1];
+				let pt = pts[pts.length - 1];
 				changed = addPoint(0, pt.x, pt.y) || changed;
 			}
 			
@@ -5578,7 +5578,7 @@ TableLayout.prototype.execute = function(parent)
 	/**
 	 * Overrides painting the actual shape for taking into account jump style.
 	 */
-	var mxConnectorPaintLine = mxConnector.prototype.paintLine;
+	let mxConnectorPaintLine = mxConnector.prototype.paintLine;
 
 	mxConnector.prototype.paintLine = (c, absPts, rounded) =>
 	{
@@ -5592,22 +5592,22 @@ TableLayout.prototype.execute = function(parent)
 		}
 		else
 		{
-			var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
+			let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
 				mxConstants.LINE_ARCSIZE) / 2;
-			var size = (parseInt(mxUtils.getValue(this.style, 'jumpSize',
+			let size = (parseInt(mxUtils.getValue(this.style, 'jumpSize',
 				Graph.defaultJumpSize)) - 2) / 2 + this.strokewidth;
-			var style = mxUtils.getValue(this.style, 'jumpStyle', 'none');
-			var moveTo = true;
-			var last = null;
-			var len = null;
-			var pts = [];
-			var n = null;
+			let style = mxUtils.getValue(this.style, 'jumpStyle', 'none');
+			let moveTo = true;
+			let last = null;
+			let len = null;
+			let pts = [];
+			let n = null;
 			c.begin();
 			
-			for (var i = 0; i < this.state.routedPoints.length; i++)
+			for (let i = 0; i < this.state.routedPoints.length; i++)
 			{
-				var rpt = this.state.routedPoints[i];
-				var pt = new mxPoint(rpt.x / this.scale, rpt.y / this.scale);
+				let rpt = this.state.routedPoints[i];
+				let pt = new mxPoint(rpt.x / this.scale, rpt.y / this.scale);
 				
 				// Takes first and last point from passed-in array
 				if (i == 0)
@@ -5619,16 +5619,16 @@ TableLayout.prototype.execute = function(parent)
 					pt = absPts[absPts.length - 1];
 				}
 				
-				var done = false;
+				let done = false;
 
 				// Type 1 is an intersection
 				if (last != null && rpt.type == 1)
 				{
 					// Checks if next/previous points are too close
-					var next = this.state.routedPoints[i + 1];
-					var dx = next.x / this.scale - pt.x;
-					var dy = next.y / this.scale - pt.y;
-					var dist = dx * dx + dy * dy;
+					let next = this.state.routedPoints[i + 1];
+					let dx = next.x / this.scale - pt.x;
+					let dy = next.y / this.scale - pt.y;
+					let dist = dx * dx + dy * dy;
 
 					if (n == null)
 					{
@@ -5648,9 +5648,9 @@ TableLayout.prototype.execute = function(parent)
 					
 					if (dist > size * size && len > 0)
 					{
-						var dx = last.x - pt.x;
-						var dy = last.y - pt.y;
-						var dist = dx * dx + dy * dy;
+						let dx = last.x - pt.x;
+						let dy = last.y - pt.y;
+						let dist = dx * dx + dy * dy;
 						
 						if (dist > size * size)
 						{
@@ -5660,7 +5660,7 @@ TableLayout.prototype.execute = function(parent)
 							
 							this.addPoints(c, pts, rounded, arcSize, false, null, moveTo);
 							
-							var f = (Math.round(n.x) < 0 || (Math.round(n.x) == 0
+							let f = (Math.round(n.x) < 0 || (Math.round(n.x) == 0
 									&& Math.round(n.y) <= 0)) ? 1 : -1;
 							moveTo = false;
 
@@ -5708,7 +5708,7 @@ TableLayout.prototype.execute = function(parent)
 	/**
 	 * Adds support for snapToPoint style.
 	 */
-	var mxGraphViewUpdateFloatingTerminalPoint = mxGraphView.prototype.updateFloatingTerminalPoint;
+	let mxGraphViewUpdateFloatingTerminalPoint = mxGraphView.prototype.updateFloatingTerminalPoint;
 	
 	mxGraphView.prototype.updateFloatingTerminalPoint = function(edge, start, end, source)
 	{
@@ -5717,29 +5717,29 @@ TableLayout.prototype.execute = function(parent)
 			edge.style['snapToPoint'] == '1'))
 		{
 		    start = this.getTerminalPort(edge, start, source);
-		    var next = this.getNextPoint(edge, end, source);
+		    let next = this.getNextPoint(edge, end, source);
 		    
-		    var orth = this.graph.isOrthogonal(edge);
-		    var alpha = mxUtils.toRadians(Number(start.style[mxConstants.STYLE_ROTATION] || '0'));
-		    var center = new mxPoint(start.getCenterX(), start.getCenterY());
+		    let orth = this.graph.isOrthogonal(edge);
+		    let alpha = mxUtils.toRadians(Number(start.style[mxConstants.STYLE_ROTATION] || '0'));
+		    let center = new mxPoint(start.getCenterX(), start.getCenterY());
 		    
 		    if (alpha != 0)
 		    {
-		        var cos = Math.cos(-alpha);
-		        var sin = Math.sin(-alpha);
+		        let cos = Math.cos(-alpha);
+		        let sin = Math.sin(-alpha);
 		        next = mxUtils.getRotatedPoint(next, cos, sin, center);
 		    }
 		    
-		    var border = parseFloat(edge.style[mxConstants.STYLE_PERIMETER_SPACING] || 0);
+		    let border = parseFloat(edge.style[mxConstants.STYLE_PERIMETER_SPACING] || 0);
 		    border += parseFloat(edge.style[(source) ?
 		        mxConstants.STYLE_SOURCE_PERIMETER_SPACING :
 		        mxConstants.STYLE_TARGET_PERIMETER_SPACING] || 0);
-		    var pt = this.getPerimeterPoint(start, next, alpha == 0 && orth, border);
+		    let pt = this.getPerimeterPoint(start, next, alpha == 0 && orth, border);
 		
 		    if (alpha != 0)
 		    {
-		        var cos = Math.cos(alpha);
-		        var sin = Math.sin(alpha);
+		        let cos = Math.cos(alpha);
+		        let sin = Math.sin(alpha);
 		        pt = mxUtils.getRotatedPoint(pt, cos, sin, center);
 		    }
 		    
@@ -5755,19 +5755,19 @@ TableLayout.prototype.execute = function(parent)
 	{
 		if (start != null && edge != null)
 		{
-	        var constraints = this.graph.getAllConnectionConstraints(start)
-	        var nearest = null;
-	        var dist = null;
+	        let constraints = this.graph.getAllConnectionConstraints(start)
+	        let nearest = null;
+	        let dist = null;
 	    
 	        if (constraints != null)
 	        {
-		        for (var i = 0; i < constraints.length; i++)
+		        for (let i = 0; i < constraints.length; i++)
 		        {
-		            var cp = this.graph.getConnectionPoint(start, constraints[i]);
+		            let cp = this.graph.getConnectionPoint(start, constraints[i]);
 		            
 		            if (cp != null)
 		            {
-		                var tmp = (cp.x - pt.x) * (cp.x - pt.x) + (cp.y - pt.y) * (cp.y - pt.y);
+		                let tmp = (cp.x - pt.x) * (cp.x - pt.x) + (cp.y - pt.y) * (cp.y - pt.y);
 		            
 		                if (dist == null || tmp < dist)
 		                {
@@ -5790,12 +5790,12 @@ TableLayout.prototype.execute = function(parent)
 	/**
 	 * Adds support for placeholders in text elements of shapes.
 	 */
-	var mxStencilEvaluateTextAttribute = mxStencil.prototype.evaluateTextAttribute;
+	let mxStencilEvaluateTextAttribute = mxStencil.prototype.evaluateTextAttribute;
 	
 	mxStencil.prototype.evaluateTextAttribute = function(node, attribute, shape)
 	{
-		var result = mxStencilEvaluateTextAttribute.apply(this, arguments);
-		var placeholders = node.getAttribute('placeholders');
+		let result = mxStencilEvaluateTextAttribute.apply(this, arguments);
+		let placeholders = node.getAttribute('placeholders');
 		
 		if (placeholders == '1' && shape.state != null)
 		{
@@ -5812,20 +5812,20 @@ TableLayout.prototype.execute = function(parent)
 	 * Needs to be in this file to make sure its part of the embed client code. Also the check for ZLib is
 	 * different than for the Editor code.
 	 */
-	var mxCellRendererCreateShape = mxCellRenderer.prototype.createShape;
+	let mxCellRendererCreateShape = mxCellRenderer.prototype.createShape;
 	mxCellRenderer.prototype.createShape = function(state)
 	{
 		if (state.style != null && typeof(pako) !== 'undefined')
 		{
-	    	var shape = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
+	    	let shape = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
 	
 	    	// Extracts and decodes stencil XML if shape has the form shape=stencil(value)
 	    	if (shape != null && typeof shape === 'string' && shape.substring(0, 8) == 'stencil(')
 	    	{
 	    		try
 	    		{
-	    			var stencil = shape.substring(8, shape.length - 1);
-	    			var doc = mxUtils.parseXml(Graph.decompress(stencil));
+	    			let stencil = shape.substring(8, shape.length - 1);
+	    			let doc = mxUtils.parseXml(Graph.decompress(stencil));
 	    			
 	    			return new mxShape(new mxStencil(doc.documentElement));
 	    		}
@@ -5874,24 +5874,24 @@ mxStencilRegistry.packages = [];
 // Extends the default stencil registry to add dynamic loading
 mxStencilRegistry.getStencil = function(name)
 {
-	var result = mxStencilRegistry.stencils[name];
+	let result = mxStencilRegistry.stencils[name];
 	
 	if (result == null && mxCellRenderer.defaultShapes[name] == null && mxStencilRegistry.dynamicLoading)
 	{
-		var basename = mxStencilRegistry.getBasenameForStencil(name);
+		let basename = mxStencilRegistry.getBasenameForStencil(name);
 		
 		// Loads stencil files and tries again
 		if (basename != null)
 		{
-			var libs = mxStencilRegistry.libraries[basename];
+			let libs = mxStencilRegistry.libraries[basename];
 
 			if (libs != null)
 			{
 				if (mxStencilRegistry.packages[basename] == null)
 				{
-					for (var i = 0; i < libs.length; i++)
+					for (let i = 0; i < libs.length; i++)
 					{
-						var fname = libs[i];
+						let fname = libs[i];
 						
 						if (fname.toLowerCase().substring(fname.length - 4, fname.length) == '.xml')
 						{
@@ -5903,7 +5903,7 @@ mxStencilRegistry.getStencil = function(name)
 							{
 								if (mxStencilRegistry.allowEval)
 								{
-									var req = mxUtils.load(fname);
+									let req = mxUtils.load(fname);
 									
 									if (req != null && req.getStatus() >= 200 && req.getStatus() <= 299)
 									{
@@ -5949,17 +5949,17 @@ mxStencilRegistry.getStencil = function(name)
 // loaded to render the given stencil.
 mxStencilRegistry.getBasenameForStencil = function(name)
 {
-	var tmp = null;
+	let tmp = null;
 	
 	if (name != null && typeof name === 'string')
 	{
-		var parts = name.split('.');
+		let parts = name.split('.');
 		
 		if (parts.length > 0 && parts[0] == 'mxgraph')
 		{
 			tmp = parts[1];
 			
-			for (var i = 2; i < parts.length - 1; i++)
+			for (let i = 2; i < parts.length - 1; i++)
 			{
 				tmp += '/' + parts[i];
 			}
@@ -5975,11 +5975,11 @@ mxStencilRegistry.loadStencilSet = function(stencilFile, postStencilLoad, force,
 	force = (force != null) ? force : false;
 	
 	// Uses additional cache for detecting previous load attempts
-	var xmlDoc = mxStencilRegistry.packages[stencilFile];
+	let xmlDoc = mxStencilRegistry.packages[stencilFile];
 	
 	if (force || xmlDoc == null)
 	{
-		var install = false;
+		let install = false;
 		
 		if (xmlDoc == null)
 		{
@@ -6027,7 +6027,7 @@ mxStencilRegistry.loadStencil = function(filename, fn)
 {
 	if (fn != null)
 	{
-		var req = mxUtils.get(filename, mxUtils.bind(this, function(req)
+		let req = mxUtils.get(filename, mxUtils.bind(this, function(req)
 		{
 			fn((req.getStatus() >= 200 && req.getStatus() <= 299) ? req.getXml() : null);
 		}));
@@ -6041,7 +6041,7 @@ mxStencilRegistry.loadStencil = function(filename, fn)
 // Takes array of strings
 mxStencilRegistry.parseStencilSets = function(stencils)
 {
-	for (var i = 0; i < stencils.length; i++)
+	for (let i = 0; i < stencils.length; i++)
 	{
 		mxStencilRegistry.parseStencilSet(mxUtils.parseXml(stencils[i]).documentElement);
 	}
@@ -6052,7 +6052,7 @@ mxStencilRegistry.parseStencilSet = function(root, postStencilLoad, install)
 {
 	if (root.nodeName == 'stencils')
 	{
-		var shapes = root.firstChild;
+		let shapes = root.firstChild;
 		
 		while (shapes != null)
 		{
@@ -6067,9 +6067,9 @@ mxStencilRegistry.parseStencilSet = function(root, postStencilLoad, install)
 	else
 	{
 		install = (install != null) ? install : true;
-		var shape = root.firstChild;
-		var packageName = '';
-		var name = root.getAttribute('name');
+		let shape = root.firstChild;
+		let packageName = '';
+		let name = root.getAttribute('name');
 		
 		if (name != null)
 		{
@@ -6085,7 +6085,7 @@ mxStencilRegistry.parseStencilSet = function(root, postStencilLoad, install)
 				if (name != null)
 				{
 					packageName = packageName.toLowerCase();
-					var stencilName = name.replace(/ /g,"_");
+					let stencilName = name.replace(/ /g,"_");
 						
 					if (install)
 					{
@@ -6094,8 +6094,8 @@ mxStencilRegistry.parseStencilSet = function(root, postStencilLoad, install)
 	
 					if (postStencilLoad != null)
 					{
-						var w = shape.getAttribute('w');
-						var h = shape.getAttribute('h');
+						let w = shape.getAttribute('w');
+						let h = shape.getAttribute('h');
 						
 						w = (w == null) ? 80 : parseInt(w, 10);
 						h = (h == null) ? 80 : parseInt(h, 10);
@@ -6151,7 +6151,7 @@ if (typeof mxVertexHandler != 'undefined')
 		};
 		
 		// Ignores all table cells in layouts
-		var graphLayoutIsVertexIgnored = mxGraphLayout.prototype.isVertexIgnored; 
+		let graphLayoutIsVertexIgnored = mxGraphLayout.prototype.isVertexIgnored;
 		mxGraphLayout.prototype.isVertexIgnored = function(vertex)
 		{
 			return graphLayoutIsVertexIgnored.apply(this, arguments) ||
@@ -6160,7 +6160,7 @@ if (typeof mxVertexHandler != 'undefined')
 		
 		// Extends connection handler to enable ctrl+drag for cloning source cell
 		// since copyOnConnect is now disabled by default
-		var mxConnectionHandlerCreateTarget = mxConnectionHandler.prototype.isCreateTarget;
+		let mxConnectionHandlerCreateTarget = mxConnectionHandler.prototype.isCreateTarget;
 		mxConnectionHandler.prototype.isCreateTarget = function(evt)
 		{
 			return this.graph.isCloneEvent(evt) || mxConnectionHandlerCreateTarget.apply(this, arguments);
@@ -6169,7 +6169,7 @@ if (typeof mxVertexHandler != 'undefined')
 		// Overrides highlight shape for connection points
 		mxConstraintHandler.prototype.createHighlightShape = function()
 		{
-			var hl = new mxEllipse(null, this.highlightColor, this.highlightColor, 0);
+			let hl = new mxEllipse(null, this.highlightColor, this.highlightColor, 0);
 			hl.opacity = mxConstants.HIGHLIGHT_OPACITY;
 			
 			return hl;
@@ -6182,9 +6182,9 @@ if (typeof mxVertexHandler != 'undefined')
 		// Uses current edge style for connect preview
 		mxConnectionHandler.prototype.createEdgeState = function(me)
 		{
-			var style = this.graph.createCurrentEdgeStyle();
-			var edge = this.graph.createEdge(null, null, null, null, null, style);
-			var state = new mxCellState(this.graph.view, edge, this.graph.getCellStyle(edge));
+			let style = this.graph.createCurrentEdgeStyle();
+			let edge = this.graph.createEdge(null, null, null, null, null, style);
+			let state = new mxCellState(this.graph.view, edge, this.graph.getCellStyle(edge));
 			
 			for (var key in this.graph.currentEdgeStyle)
 			{
@@ -6195,10 +6195,10 @@ if (typeof mxVertexHandler != 'undefined')
 		};
 
 		// Overrides dashed state with current edge style
-		var connectionHandlerCreateShape = mxConnectionHandler.prototype.createShape;
+		let connectionHandlerCreateShape = mxConnectionHandler.prototype.createShape;
 		mxConnectionHandler.prototype.createShape = function()
 		{
-			var shape = connectionHandlerCreateShape.apply(this, arguments);
+			let shape = connectionHandlerCreateShape.apply(this, arguments);
 			
 			shape.isDashed = this.graph.currentEdgeStyle[mxConstants.STYLE_DASHED] == '1';
 			
@@ -6212,15 +6212,15 @@ if (typeof mxVertexHandler != 'undefined')
 		};
 		
 		// Overrides connection handler to ignore edges instead of not allowing connections
-		var mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker;
+		let mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker;
 		mxConnectionHandler.prototype.createMarker = function()
 		{
-			var marker = mxConnectionHandlerCreateMarker.apply(this, arguments);
+			let marker = mxConnectionHandlerCreateMarker.apply(this, arguments);
 		
-			var markerGetCell = marker.getCell;
+			let markerGetCell = marker.getCell;
 			marker.getCell = mxUtils.bind(this, function(me)
 			{
-				var result = markerGetCell.apply(this, arguments);
+				let result = markerGetCell.apply(this, arguments);
 			
 				this.error = null;
 				
@@ -6246,12 +6246,12 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.createCurrentEdgeStyle = function()
 		{
-			var style = 'edgeStyle=' + (this.currentEdgeStyle['edgeStyle'] || 'none') + ';';
-			var keys = ['shape', 'curved', 'rounded', 'comic', 'sketch', 'fillWeight', 'hachureGap',
+			let style = 'edgeStyle=' + (this.currentEdgeStyle['edgeStyle'] || 'none') + ';';
+			let keys = ['shape', 'curved', 'rounded', 'comic', 'sketch', 'fillWeight', 'hachureGap',
 				'hachureAngle', 'jiggle', 'disableMultiStroke', 'disableMultiStrokeFill', 'fillStyle',
 				'curveFitting', 'simplification', 'comicStyle', 'jumpStyle', 'jumpSize'];
 			
-			for (var i = 0; i < keys.length; i++)
+			for (let i = 0; i < keys.length; i++)
 			{
 				if (this.currentEdgeStyle[keys[i]] != null)
 				{
@@ -6306,13 +6306,13 @@ if (typeof mxVertexHandler != 'undefined')
 			this.model.beginUpdate();
 			try
 			{
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
 					if (this.model.isVertex(cells[i]) || this.model.isEdge(cells[i]))
 					{
 						this.setCellStyles(key, null, [cells[i]]);
-						var style = this.getCellStyle(cells[i]);
-						var temp = style[key];
+						let style = this.getCellStyle(cells[i]);
+						let temp = style[key];
 						
 						if (value != ((temp == null) ? mxConstants.NONE : temp))
 						{
@@ -6340,13 +6340,13 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.loadStylesheet = function()
 		{
-			var node = (this.themes != null) ? this.themes[this.defaultThemeName] :
+			let node = (this.themes != null) ? this.themes[this.defaultThemeName] :
 				(!mxStyleRegistry.dynamicLoading) ? null :
 				mxUtils.load(STYLE_PATH + '/default.xml').getDocumentElement();
 			
 			if (node != null)
 			{
-				var dec = new mxCodec(node.ownerDocument);
+				let dec = new mxCodec(node.ownerDocument);
 				dec.decode(node, this.getStylesheet());
 			}
 		};
@@ -6358,13 +6358,13 @@ if (typeof mxVertexHandler != 'undefined')
 		{
 			lookup = (lookup != null) ? lookup : {};
 			
-			for (var i = 0; i < cells.length; i++)
+			for (let i = 0; i < cells.length; i++)
 			{
-				var cell = cells[i];
+				let cell = cells[i];
 				lookup[mxObjectIdentity.get(cell)] = cell.getId();
-				var childCount = this.model.getChildCount(cell);
+				let childCount = this.model.getChildCount(cell);
 				
-				for (var j = 0; j < childCount; j++)
+				for (let j = 0; j < childCount; j++)
 				{
 					this.createCellLookup([this.model.getChildAt(cell, j)], lookup);
 				}
@@ -6384,7 +6384,7 @@ if (typeof mxVertexHandler != 'undefined')
 			
 			for (var objectId in mapping)
 			{
-				var cellId = lookup[objectId];
+				let cellId = lookup[objectId];
 				
 				if (cellMapping[cellId] == null)
 				{
@@ -6405,21 +6405,21 @@ if (typeof mxVertexHandler != 'undefined')
 			dx = (dx != null) ? dx : 0;
 			dy = (dy != null) ? dy : 0;
 			
-			var codec = new mxCodec(node.ownerDocument);
-			var tempModel = new mxGraphModel();
+			let codec = new mxCodec(node.ownerDocument);
+			let tempModel = new mxGraphModel();
 			codec.decode(node, tempModel);
-			var cells = []
+			let cells = []
 			
 			// Clones cells to remove invalid edges
-			var cloneMap = {};
-			var cellMapping = {};
-			var layers = tempModel.getChildren(this.cloneCell(tempModel.root,
+			let cloneMap = {};
+			let cellMapping = {};
+			let layers = tempModel.getChildren(this.cloneCell(tempModel.root,
 				this.isCloneInvalidEdges(), cloneMap));
 			
 			if (layers != null)
 			{
 				// Creates lookup from object IDs to cell IDs
-				var lookup = this.createCellLookup([tempModel.root]);
+				let lookup = this.createCellLookup([tempModel.root]);
 				
 				// Uses copy as layers are removed from array inside loop
 				layers = layers.slice();
@@ -6430,7 +6430,7 @@ if (typeof mxVertexHandler != 'undefined')
 					// Merges into unlocked current layer if one layer is pasted
 					if (layers.length == 1 && !this.isCellLocked(this.getDefaultParent()))
 					{
-						var children = tempModel.getChildren(layers[0]);
+						let children = tempModel.getChildren(layers[0]);
 						
 						if (children != null)
 						{
@@ -6444,9 +6444,9 @@ if (typeof mxVertexHandler != 'undefined')
 					}
 					else
 					{
-						for (var i = 0; i < layers.length; i++)
+						for (let i = 0; i < layers.length; i++)
 						{
-							var children = this.model.getChildren(this.moveCells(
+							let children = this.model.getChildren(this.moveCells(
 								[layers[i]], dx, dy, false, this.model.getRoot())[0]);
 							
 							if (children != null)
@@ -6470,7 +6470,7 @@ if (typeof mxVertexHandler != 'undefined')
 								dy = this.snap(dy);
 							}
 							
-							var bounds = this.getBoundingBoxFromGeometry(cells, true);
+							let bounds = this.getBoundingBoxFromGeometry(cells, true);
 							
 							if (bounds != null)
 							{
@@ -6496,31 +6496,31 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.encodeCells = function(cells)
 		{
-			var cloneMap = {};
-			var clones = this.cloneCells(cells, null, cloneMap);
+			let cloneMap = {};
+			let clones = this.cloneCells(cells, null, cloneMap);
 			
 			// Creates a dictionary for fast lookups
-			var dict = new mxDictionary();
+			let dict = new mxDictionary();
 			
-			for (var i = 0; i < cells.length; i++)
+			for (let i = 0; i < cells.length; i++)
 			{
 				dict.put(cells[i], true);
 			}
 			
-			var codec = new mxCodec();
-			var model = new mxGraphModel();
-			var parent = model.getChildAt(model.getRoot(), 0);
+			let codec = new mxCodec();
+			let model = new mxGraphModel();
+			let parent = model.getChildAt(model.getRoot(), 0);
 			
-			for (var i = 0; i < clones.length; i++)
+			for (let i = 0; i < clones.length; i++)
 			{
 				model.add(parent, clones[i]);
 			
 				// Checks for orphaned relative children and makes absolute
-				var state = this.view.getState(cells[i]);
+				let state = this.view.getState(cells[i]);
 				
 				if (state != null)
 				{
-					var geo = this.getCellGeometry(clones[i]);
+					let geo = this.getCellGeometry(clones[i]);
 					
 					if (geo != null && geo.relative && !this.model.isEdge(cells[i]) &&
 						dict.get(this.model.getParent(cells[i])) == null)
@@ -6547,7 +6547,7 @@ if (typeof mxVertexHandler != 'undefined')
 			if (cell != null && this.model.getParent(cell) != this.model.getRoot() &&
 				!this.model.isEdge(cell))
 			{
-				var shape = this.getCurrentCellStyle(cell, ignoreState)
+				let shape = this.getCurrentCellStyle(cell, ignoreState)
 					[mxConstants.STYLE_SHAPE];
 				
 				return shape == mxConstants.SHAPE_SWIMLANE || shape == 'table';
@@ -6559,14 +6559,14 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Overridden to add expand style.
 		 */
-		var graphIsExtendParent = Graph.prototype.isExtendParent;
+		let graphIsExtendParent = Graph.prototype.isExtendParent;
 		Graph.prototype.isExtendParent = function(cell)
 		{
-			var parent = this.model.getParent(cell);
+			let parent = this.model.getParent(cell);
 			
 			if (parent != null)
 			{
-				var style = this.getCurrentCellStyle(parent);
+				let style = this.getCurrentCellStyle(parent);
 				
 				if (style['expand'] != null)
 				{
@@ -6581,7 +6581,7 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Overridden to use table cell instead of table as parent.
 		 */
-		var graphSplitEdge = Graph.prototype.splitEdge;
+		let graphSplitEdge = Graph.prototype.splitEdge;
 		Graph.prototype.splitEdge = function(edge, cells, newEdge, dx, dy, x, y, parent)
 		{
 			if (parent == null)
@@ -6600,7 +6600,7 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Overridden to flatten cell hierarchy for selecting next and previous.
 		 */
-		var graphSelectCell = Graph.prototype.selectCell;
+		let graphSelectCell = Graph.prototype.selectCell;
 		Graph.prototype.selectCell = function(isNext, isParent, isChild)
 		{
 			if (isParent || isChild)
@@ -6609,12 +6609,12 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 			else
 			{
-				var cell = this.getSelectionCell();
-				var index = null;
-				var cells = [];
+				let cell = this.getSelectionCell();
+				let index = null;
+				let cells = [];
 				
 				// LATER: Reverse traverse order for !isNext
-				var flatten = mxUtils.bind(this, function(temp)
+				let flatten = mxUtils.bind(this, function(temp)
 				{
 					if (this.view.getState(temp) != null &&
 						(this.model.isVertex(temp) ||
@@ -6634,7 +6634,7 @@ if (typeof mxVertexHandler != 'undefined')
 						}
 					}
 		
-					for (var i = 0; i < this.model.getChildCount(temp); i++)
+					for (let i = 0; i < this.model.getChildCount(temp); i++)
 					{
 						flatten(this.model.getChildAt(temp, i));
 					}
@@ -6661,7 +6661,7 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Overrides cloning cells in moveCells.
 		 */
-		var graphMoveCells = Graph.prototype.moveCells;
+		let graphMoveCells = Graph.prototype.moveCells;
 		Graph.prototype.moveCells = function(cells, dx, dy, clone, target, evt, mapping)
 		{
 			mapping = (mapping != null) ? mapping : {};
@@ -6669,9 +6669,9 @@ if (typeof mxVertexHandler != 'undefined')
 			// Replaces source tables with rows
 			if (this.isTable(target))
 			{
-				var newCells = [];
+				let newCells = [];
 				
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
 					if (this.isTable(cells[i]))
 					{
@@ -6691,14 +6691,14 @@ if (typeof mxVertexHandler != 'undefined')
 			{
 				// Updates source and target table heights and matches
 				// column count for moving rows between tables
-				var sourceTables = [];
+				let sourceTables = [];
 				
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
 					if (target != null && this.isTableRow(cells[i]))
 					{
-						var parent = this.model.getParent(cells[i]);
-						var row = this.getCellGeometry(cells[i]);
+						let parent = this.model.getParent(cells[i]);
+						let row = this.getCellGeometry(cells[i]);
 						
 						if (this.isTable(parent))
 						{
@@ -6712,7 +6712,7 @@ if (typeof mxVertexHandler != 'undefined')
 						{
 							if (!clone)
 							{
-								var table = this.getCellGeometry(parent);
+								let table = this.getCellGeometry(parent);
 						
 								if (table != null)
 								{
@@ -6722,7 +6722,7 @@ if (typeof mxVertexHandler != 'undefined')
 								}
 							}
 	
-							var table = this.getCellGeometry(target);
+							let table = this.getCellGeometry(target);
 					
 							if (table != null)
 							{
@@ -6732,21 +6732,21 @@ if (typeof mxVertexHandler != 'undefined')
 							}
 							
 							// Matches column count
-							var rows = this.model.getChildCells(target, true);
+							let rows = this.model.getChildCells(target, true);
 							
 							if (rows.length > 0)
 							{
-								var cell = (clone) ? this.cloneCell(cells[i]) : cells[i];
+								let cell = (clone) ? this.cloneCell(cells[i]) : cells[i];
 								
-								var sourceCols = this.model.getChildCells(cell, true);
-								var cols = this.model.getChildCells(rows[0], true);
-								var count = cols.length - sourceCols.length;
+								let sourceCols = this.model.getChildCells(cell, true);
+								let cols = this.model.getChildCells(rows[0], true);
+								let count = cols.length - sourceCols.length;
 								
 								if (count > 0)
 								{
-									for (var j = 0; j < count; j++)
+									for (let j = 0; j < count; j++)
 									{
-										var col = this.cloneCell(sourceCols[sourceCols.length - 1]);
+										let col = this.cloneCell(sourceCols[sourceCols.length - 1]);
 										
 										if (col != null)
 										{
@@ -6758,7 +6758,7 @@ if (typeof mxVertexHandler != 'undefined')
 								}
 								else if (count < 0)
 								{
-									for (var j = 0; j > count; j--)
+									for (let j = 0; j > count; j--)
 									{
 										this.model.remove(sourceCols[sourceCols.length + j - 1]);
 									}
@@ -6767,9 +6767,9 @@ if (typeof mxVertexHandler != 'undefined')
 								// Updates column widths
 								sourceCols = this.model.getChildCells(cell, true);
 								
-								for (var j = 0; j < cols.length; j++)
+								for (let j = 0; j < cols.length; j++)
 								{
-									var geo = this.getCellGeometry(cols[j]);
+									let geo = this.getCellGeometry(cols[j]);
 									var geo2 = this.getCellGeometry(sourceCols[j]);
 									
 									if (geo != null && geo2 != null)
@@ -6785,10 +6785,10 @@ if (typeof mxVertexHandler != 'undefined')
 					}
 				}
 				
-				var result = graphMoveCells.apply(this, arguments);
+				let result = graphMoveCells.apply(this, arguments);
 				
 				// Removes empty tables
-				for (var i = 0; i < sourceTables.length; i++)
+				for (let i = 0; i < sourceTables.length; i++)
 				{
 					if (!clone && this.model.contains(sourceTables[i]) &&
 						this.model.getChildCount(sourceTables[i]) == 0)
@@ -6814,21 +6814,21 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Overriddes to delete label for table cells.
 		 */
-		var graphRemoveCells = Graph.prototype.removeCells;
+		let graphRemoveCells = Graph.prototype.removeCells;
 		Graph.prototype.removeCells = function(cells, includeEdges)
 		{
-			var result = [];
+			let result = [];
 			
 			this.model.beginUpdate();
 			try
 			{
 				// Clears labels on table cells
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
 					if (this.isTableCell(cells[i]))
 					{
-						var row = this.model.getParent(cells[i]);
-						var table = this.model.getParent(row);
+						let row = this.model.getParent(cells[i]);
+						let table = this.model.getParent(row);
 						
 						// Removes table if one cell in one row left
 						if (this.model.getChildCount(row) == 1 &&
@@ -6850,15 +6850,15 @@ if (typeof mxVertexHandler != 'undefined')
 						// Deletes table if all rows are removed
 						if (this.isTableRow(cells[i]))
 						{
-							var table = this.model.getParent(cells[i]);
+							let table = this.model.getParent(cells[i]);
 							
 							if (mxUtils.indexOf(cells, table) < 0 &&
 								mxUtils.indexOf(result, table) < 0)
 							{
-								var rows = this.model.getChildCells(table, true);
-								var deleteCount = 0;
+								let rows = this.model.getChildCells(table, true);
+								let deleteCount = 0;
 								
-								for (var j = 0; j < rows.length; j++)
+								for (let j = 0; j < rows.length; j++)
 								{
 									if (mxUtils.indexOf(cells, rows[j]) >= 0)
 									{
@@ -6892,7 +6892,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.updateCustomLinks = function(mapping, cells)
 		{
-			for (var i = 0; i < cells.length; i++)
+			for (let i = 0; i < cells.length; i++)
 			{
 				if (cells[i] != null)
 				{
@@ -6916,21 +6916,21 @@ if (typeof mxVertexHandler != 'undefined')
 		{
 			if (terminal != null)
 			{
-				var constraints = mxUtils.getValue(terminal.style, 'points', null);
+				let constraints = mxUtils.getValue(terminal.style, 'points', null);
 				
 				if (constraints != null)
 				{
 					// Requires an array of arrays with x, y (0..1), an optional
 					// [perimeter (0 or 1), dx, and dy] eg. points=[[0,0,1,-10,10],[0,1,0],[1,1]]
-					var result = [];
+					let result = [];
 					
 					try
 					{
-						var c = JSON.parse(constraints);
+						let c = JSON.parse(constraints);
 						
-						for (var i = 0; i < c.length; i++)
+						for (let i = 0; i < c.length; i++)
 						{
-							var tmp = c[i];
+							let tmp = c[i];
 							result.push(new mxConnectionConstraint(new mxPoint(tmp[0], tmp[1]), (tmp.length > 2) ? tmp[2] != '0' : true,
 									null, (tmp.length > 3) ? tmp[3] : 0, (tmp.length > 4) ? tmp[4] : 0));
 						}
@@ -6944,15 +6944,15 @@ if (typeof mxVertexHandler != 'undefined')
 				}
 				else if (terminal.shape != null && terminal.shape.bounds != null)
 				{
-					var dir = terminal.shape.direction;
-					var bounds = terminal.shape.bounds;
-					var scale = terminal.shape.scale;
-					var w = bounds.width / scale;
-					var h = bounds.height / scale;
+					let dir = terminal.shape.direction;
+					let bounds = terminal.shape.bounds;
+					let scale = terminal.shape.scale;
+					let w = bounds.width / scale;
+					let h = bounds.height / scale;
 					
 					if (dir == mxConstants.DIRECTION_NORTH || dir == mxConstants.DIRECTION_SOUTH)
 					{
-						var tmp = w;
+						let tmp = w;
 						w = h;
 						h = tmp;
 					}
@@ -6984,10 +6984,10 @@ if (typeof mxVertexHandler != 'undefined')
 		{
 			if (edge != null)
 			{
-				var style = this.getCurrentCellStyle(edge);
-				var elbow = mxUtils.getValue(style, mxConstants.STYLE_ELBOW,
+				let style = this.getCurrentCellStyle(edge);
+				let elbow = mxUtils.getValue(style, mxConstants.STYLE_ELBOW,
 					mxConstants.ELBOW_HORIZONTAL);
-				var value = (elbow == mxConstants.ELBOW_HORIZONTAL) ?
+				let value = (elbow == mxConstants.ELBOW_HORIZONTAL) ?
 					mxConstants.ELBOW_VERTICAL : mxConstants.ELBOW_HORIZONTAL;
 				this.setCellStyles(mxConstants.STYLE_ELBOW, value, [edge]);
 			}
@@ -6999,16 +6999,16 @@ if (typeof mxVertexHandler != 'undefined')
 		Graph.prototype.isValidRoot = function(cell)
 		{
 			// Counts non-relative children
-			var childCount = this.model.getChildCount(cell);
-			var realChildCount = 0;
+			let childCount = this.model.getChildCount(cell);
+			let realChildCount = 0;
 			
-			for (var i = 0; i < childCount; i++)
+			for (let i = 0; i < childCount; i++)
 			{
-				var child = this.model.getChildAt(cell, i);
+				let child = this.model.getChildAt(cell, i);
 				
 				if (this.model.isVertex(child))
 				{
-					var geometry = this.getCellGeometry(child);
+					let geometry = this.getCellGeometry(child);
 					
 					if (geometry != null && !geometry.relative)
 					{
@@ -7025,11 +7025,11 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.isValidDropTarget = function(cell, cells, evt)
 		{
-			var style = this.getCurrentCellStyle(cell);
-			var tables = true;
-			var rows = true;
+			let style = this.getCurrentCellStyle(cell);
+			let tables = true;
+			let rows = true;
 			
-			for (var i = 0; i < cells.length && rows; i++)
+			for (let i = 0; i < cells.length && rows; i++)
 			{
 				tables = tables && this.isTable(cells[i]);
 				rows = rows && this.isTableRow(cells[i]);
@@ -7047,7 +7047,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.createGroupCell = function()
 		{
-			var group = mxGraph.prototype.createGroupCell.apply(this, arguments);
+			let group = mxGraph.prototype.createGroupCell.apply(this, arguments);
 			group.setStyle('group');
 			
 			return group;
@@ -7058,15 +7058,15 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.isExtendParentsOnAdd = function(cell)
 		{
-			var result = mxGraph.prototype.isExtendParentsOnAdd.apply(this, arguments);
+			let result = mxGraph.prototype.isExtendParentsOnAdd.apply(this, arguments);
 			
 			if (result && cell != null && this.layoutManager != null)
 			{
-				var parent = this.model.getParent(cell);
+				let parent = this.model.getParent(cell);
 				
 				if (parent != null)
 				{
-					var layout = this.layoutManager.getLayout(parent);
+					let layout = this.layoutManager.getLayout(parent);
 					
 					if (layout != null && layout.constructor == mxStackLayout)
 					{
@@ -7083,7 +7083,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.getPreferredSizeForCell = function(cell)
 		{
-			var result = mxGraph.prototype.getPreferredSizeForCell.apply(this, arguments);
+			let result = mxGraph.prototype.getPreferredSizeForCell.apply(this, arguments);
 			
 			// Adds buffer
 			if (result != null)
@@ -7106,25 +7106,25 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.turnShapes = function(cells, backwards)
 		{
-			var model = this.getModel();
-			var select = [];
+			let model = this.getModel();
+			let select = [];
 			
 			model.beginUpdate();
 			try
 			{
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
-					var cell = cells[i];
+					let cell = cells[i];
 					
 					if (model.isEdge(cell))
 					{
-						var src = model.getTerminal(cell, true);
-						var trg = model.getTerminal(cell, false);
+						let src = model.getTerminal(cell, true);
+						let trg = model.getTerminal(cell, false);
 						
 						model.setTerminal(cell, trg, true);
 						model.setTerminal(cell, src, false);
 						
-						var geo = model.getGeometry(cell);
+						let geo = model.getGeometry(cell);
 						
 						if (geo != null)
 						{
@@ -7135,22 +7135,22 @@ if (typeof mxVertexHandler != 'undefined')
 								geo.points.reverse();
 							}
 							
-							var sp = geo.getTerminalPoint(true);
-							var tp = geo.getTerminalPoint(false)
+							let sp = geo.getTerminalPoint(true);
+							let tp = geo.getTerminalPoint(false)
 							
 							geo.setTerminalPoint(sp, false);
 							geo.setTerminalPoint(tp, true);
 							model.setGeometry(cell, geo);
 							
 							// Inverts constraints
-							var edgeState = this.view.getState(cell);
-							var sourceState = this.view.getState(src);
-							var targetState = this.view.getState(trg);
+							let edgeState = this.view.getState(cell);
+							let sourceState = this.view.getState(src);
+							let targetState = this.view.getState(trg);
 							
 							if (edgeState != null)
 							{
-								var sc = (sourceState != null) ? this.getConnectionConstraint(edgeState, sourceState, true) : null;
-								var tc = (targetState != null) ? this.getConnectionConstraint(edgeState, targetState, false) : null;
+								let sc = (sourceState != null) ? this.getConnectionConstraint(edgeState, sourceState, true) : null;
+								let tc = (targetState != null) ? this.getConnectionConstraint(edgeState, targetState, false) : null;
 								
 								this.setConnectionConstraint(cell, src, true, tc);
 								this.setConnectionConstraint(cell, trg, false, sc);
@@ -7161,7 +7161,7 @@ if (typeof mxVertexHandler != 'undefined')
 					}
 					else if (model.isVertex(cell))
 					{
-						var geo = this.getCellGeometry(cell);
+						let geo = this.getCellGeometry(cell);
 			
 						if (geo != null)
 						{
@@ -7172,20 +7172,20 @@ if (typeof mxVertexHandler != 'undefined')
 								geo = geo.clone();
 								geo.x += geo.width / 2 - geo.height / 2;
 								geo.y += geo.height / 2 - geo.width / 2;
-								var tmp = geo.width;
+								let tmp = geo.width;
 								geo.width = geo.height;
 								geo.height = tmp;
 								model.setGeometry(cell, geo);
 							}
 							
 							// Reads the current direction and advances by 90 degrees
-							var state = this.view.getState(cell);
+							let state = this.view.getState(cell);
 							
 							if (state != null)
 							{
-								var dirs = [mxConstants.DIRECTION_EAST, mxConstants.DIRECTION_SOUTH,
+								let dirs = [mxConstants.DIRECTION_EAST, mxConstants.DIRECTION_SOUTH,
 									mxConstants.DIRECTION_WEST, mxConstants.DIRECTION_NORTH];
-								var dir = mxUtils.getValue(state.style, mxConstants.STYLE_DIRECTION,
+								let dir = mxUtils.getValue(state.style, mxConstants.STYLE_DIRECTION,
 									mxConstants.DIRECTION_EAST);
 								this.setCellStyles(mxConstants.STYLE_DIRECTION,
 									dirs[mxUtils.mod(mxUtils.indexOf(dirs, dir) +
@@ -7212,7 +7212,7 @@ if (typeof mxVertexHandler != 'undefined')
 		{
 			if (stencil != null && stencil.fgNode != null)
 			{
-				var node = stencil.fgNode.firstChild;
+				let node = stencil.fgNode.firstChild;
 				
 				while (node != null)
 				{
@@ -7232,7 +7232,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 * Updates the child cells with placeholders if metadata of a
 		 * cell has changed and propagates geometry changes in tables.
 		 */
-		var graphProcessChange = Graph.prototype.processChange;
+		let graphProcessChange = Graph.prototype.processChange;
 		Graph.prototype.processChange = function(change)
 		{
 			if (change instanceof mxGeometryChange &&
@@ -7240,7 +7240,7 @@ if (typeof mxVertexHandler != 'undefined')
 				((change.previous == null && change.geometry != null) ||
 				(change.previous != null && !change.previous.equals(change.geometry))))
 			{
-				var cell = change.cell;
+				let cell = change.cell;
 				
 				if (this.isTableCell(cell))
 				{
@@ -7253,7 +7253,7 @@ if (typeof mxVertexHandler != 'undefined')
 				}
 				
 				// Forces repaint of table with unchanged style and geometry
-				var state = this.view.getState(cell);
+				let state = this.view.getState(cell);
 				
 				if (state != null && state.shape != null)
 				{
@@ -7277,14 +7277,14 @@ if (typeof mxVertexHandler != 'undefined')
 		Graph.prototype.invalidateDescendantsWithPlaceholders = function(cell)
 		{
 			// Invalidates all descendants with placeholders
-			var desc = this.model.getDescendants(cell);
+			let desc = this.model.getDescendants(cell);
 			
 			// LATER: Check if only label or tooltip have changed
 			if (desc.length > 0)
 			{
-				for (var i = 0; i < desc.length; i++)
+				for (let i = 0; i < desc.length; i++)
 				{
-					var state = this.view.getState(desc[i]);
+					let state = this.view.getState(desc[i]);
 					
 					if (state != null && state.shape != null && state.shape.stencil != null &&
 						this.stencilHasPlaceholders(state.shape.stencil))
@@ -7304,8 +7304,8 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.replaceElement = function(elt, tagName)
 		{
-			var span = elt.ownerDocument.createElement((tagName != null) ? tagName : 'span');
-			var attributes = Array.prototype.slice.call(elt.attributes);
+			let span = elt.ownerDocument.createElement((tagName != null) ? tagName : 'span');
+			let attributes = Array.prototype.slice.call(elt.attributes);
 			
 			while (attr = attributes.pop())
 			{
@@ -7323,9 +7323,9 @@ if (typeof mxVertexHandler != 'undefined')
 		{
 			if (elt != null)
 			{
-				var elts = elt.getElementsByTagName('*');
+				let elts = elt.getElementsByTagName('*');
 				
-				for (var i = 0; i < elts.length; i++)
+				for (let i = 0; i < elts.length; i++)
 				{
 					fn(elts[i]);
 				}
@@ -7338,21 +7338,21 @@ if (typeof mxVertexHandler != 'undefined')
 		Graph.prototype.updateLabelElements = function(cells, fn, tagName)
 		{
 			cells = (cells != null) ? cells : this.getSelectionCells();
-			var div = document.createElement('div');
+			let div = document.createElement('div');
 			
-			for (var i = 0; i < cells.length; i++)
+			for (let i = 0; i < cells.length; i++)
 			{
 				// Changes font tags inside HTML labels
 				if (this.isHtmlLabel(cells[i]))
 				{
-					var label = this.convertValueToString(cells[i]);
+					let label = this.convertValueToString(cells[i]);
 					
 					if (label != null && label.length > 0)
 					{
 						div.innerHTML = label;
-						var elts = div.getElementsByTagName((tagName != null) ? tagName : '*');
+						let elts = div.getElementsByTagName((tagName != null) ? tagName : '*');
 						
-						for (var j = 0; j < elts.length; j++)
+						for (let j = 0; j < elts.length; j++)
 						{
 							fn(elts[j]);
 						}
@@ -7383,8 +7383,8 @@ if (typeof mxVertexHandler != 'undefined')
 						cell.getAttribute('placeholder') != null)
 					{
 						// LATER: Handle delete, name change
-						var name = cell.getAttribute('placeholder');
-						var current = cell;
+						let name = cell.getAttribute('placeholder');
+						let current = cell;
 								
 						while (current != null)
 						{
@@ -7400,7 +7400,7 @@ if (typeof mxVertexHandler != 'undefined')
 						}
 					}
 					
-					var tmp = cell.value.cloneNode(true);
+					let tmp = cell.value.cloneNode(true);
 					
 					if (Graph.translateDiagram && Graph.diagramLanguage != null &&
 						tmp.hasAttribute('label_' + Graph.diagramLanguage))
@@ -7430,19 +7430,19 @@ if (typeof mxVertexHandler != 'undefined')
 		{
 			if (cells != null)
 			{
-				var dict = new mxDictionary();
+				let dict = new mxDictionary();
 				
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
 					dict.put(cells[i], true);
 				}
 				
 				// LATER: Recurse up the cell hierarchy
-				var parents = [];
+				let parents = [];
 				
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
-					var parent = this.model.getParent(cells[i]);
+					let parent = this.model.getParent(cells[i]);
 
 					if (parent != null && !dict.get(parent))
 					{
@@ -7451,18 +7451,18 @@ if (typeof mxVertexHandler != 'undefined')
 					}
 				}
 				
-				for (var i = 0; i < parents.length; i++)
+				for (let i = 0; i < parents.length; i++)
 				{
-					var state = this.view.getState(parents[i]);
+					let state = this.view.getState(parents[i]);
 					
 					if (state != null && (this.model.isEdge(state.cell) ||
 						this.model.isVertex(state.cell)) &&
 						this.isCellDeletable(state.cell) &&
 						this.isTransparentState(state))
 					{
-						var allChildren = true;
+						let allChildren = true;
 						
-						for (var j = 0; j < this.model.getChildCount(state.cell) && allChildren; j++)
+						for (let j = 0; j < this.model.getChildCount(state.cell) && allChildren; j++)
 						{
 							if (!dict.get(this.model.getChildAt(state.cell, j)))
 							{
@@ -7486,9 +7486,9 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.removeCellsAfterUngroup = function(cells)
 		{
-			var cellsToRemove = [];
+			let cellsToRemove = [];
 			
-			for (var i = 0; i < cells.length; i++)
+			for (let i = 0; i < cells.length; i++)
 			{
 				if (this.isCellDeletable(cells[i]) &&
 					this.isTransparentState(
@@ -7516,7 +7516,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.setTooltipForCell = function(cell, link)
 		{
-			var key = 'tooltip';
+			let key = 'tooltip';
 			
 			if (Graph.translateDiagram && Graph.diagramLanguage != null &&
 				mxUtils.isNode(cell.value) && cell.value.hasAttribute('tooltip_' + Graph.diagramLanguage))
@@ -7533,7 +7533,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.getAttributeForCell = function(cell, attributeName, defaultValue)
 		{
-			var value = (cell.value != null && typeof cell.value === 'object') ?
+			let value = (cell.value != null && typeof cell.value === 'object') ?
 				cell.value.getAttribute(attributeName) : null;
 			
 			return (value != null) ? value : defaultValue;
@@ -7544,7 +7544,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.setAttributeForCell = function(cell, attributeName, attributeValue)
 		{
-			var value = null;
+			let value = null;
 			
 			if (cell.value != null && typeof(cell.value) == 'object')
 			{
@@ -7552,7 +7552,7 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 			else
 			{
-				var doc = mxUtils.createXmlDocument();
+				let doc = mxUtils.createXmlDocument();
 				
 				value = doc.createElement('UserObject');
 				value.setAttribute('label', cell.value || '');
@@ -7573,10 +7573,10 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Overridden to stop moving edge labels between cells.
 		 */
-		var graphGetDropTarget = Graph.prototype.getDropTarget;
+		let graphGetDropTarget = Graph.prototype.getDropTarget;
 		Graph.prototype.getDropTarget = function(cells, evt, cell, clone)
 		{
-			var model = this.getModel();
+			let model = this.getModel();
 			
 			// Disables drop into group if alt is pressed
 			if (mxEvent.isAltDown(evt))
@@ -7585,7 +7585,7 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 			
 			// Disables dragging edge labels out of edges
-			for (var i = 0; i < cells.length; i++)
+			for (let i = 0; i < cells.length; i++)
 			{
 				if (this.model.isEdge(this.model.getParent(cells[i])))
 				{
@@ -7593,12 +7593,12 @@ if (typeof mxVertexHandler != 'undefined')
 				}
 			}
 			
-			var target = graphGetDropTarget.apply(this, arguments);
+			let target = graphGetDropTarget.apply(this, arguments);
 			
 			// Always drops rows to tables
-			var rows = true;
+			let rows = true;
 			
-			for (var i = 0; i < cells.length && rows; i++)
+			for (let i = 0; i < cells.length && rows; i++)
 			{
 				rows = rows && this.isTableRow(cells[i]);
 			}
@@ -7653,13 +7653,13 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.insertTextForEvent = function(evt, cell)
 		{
-			var pt = mxUtils.convertPoint(this.container, mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+			let pt = mxUtils.convertPoint(this.container, mxEvent.getClientX(evt), mxEvent.getClientY(evt));
 	
 			// Automatically adds new child cells to edges on double click
 			if (evt != null && !this.model.isVertex(cell))
 			{
-				var state = (this.model.isEdge(cell)) ? this.view.getState(cell) : null;
-				var src = mxEvent.getSource(evt);
+				let state = (this.model.isEdge(cell)) ? this.view.getState(cell) : null;
+				let src = mxEvent.getSource(evt);
 				
 				if ((this.firstClickState == state && this.firstClickSource == src) &&
 					(state == null || (state.text == null || state.text.node == null ||
@@ -7686,14 +7686,14 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.getInsertPoint = function()
 		{
-			var gs = this.getGridSize();
-			var dx = this.container.scrollLeft / this.view.scale - this.view.translate.x;
-			var dy = this.container.scrollTop / this.view.scale - this.view.translate.y;
+			let gs = this.getGridSize();
+			let dx = this.container.scrollLeft / this.view.scale - this.view.translate.x;
+			let dy = this.container.scrollTop / this.view.scale - this.view.translate.y;
 			
 			if (this.pageVisible)
 			{
-				var layout = this.getPageLayout();
-				var page = this.getPageSize();
+				let layout = this.getPageLayout();
+				let page = this.getPageSize();
 				dx = Math.max(dx, layout.x * page.width);
 				dy = Math.max(dy, layout.y * page.height);
 			}
@@ -7706,14 +7706,14 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.getFreeInsertPoint = function()
 		{
-			var view = this.view;
-			var bds = this.getGraphBounds();
-			var pt = this.getInsertPoint();
+			let view = this.view;
+			let bds = this.getGraphBounds();
+			let pt = this.getInsertPoint();
 			
 			// Places at same x-coord and 2 grid sizes below existing graph
-			var x = this.snap(Math.round(Math.max(pt.x, bds.x / view.scale - view.translate.x +
+			let x = this.snap(Math.round(Math.max(pt.x, bds.x / view.scale - view.translate.x +
 				((bds.width == 0) ? 2 * this.gridSize : 0))));
-			var y = this.snap(Math.round(Math.max(pt.y, (bds.y + bds.height) / view.scale - view.translate.y +
+			let y = this.snap(Math.round(Math.max(pt.y, (bds.y + bds.height) / view.scale - view.translate.y +
 				2 * this.gridSize)));
 			
 			return new mxPoint(x, y);
@@ -7761,11 +7761,11 @@ if (typeof mxVertexHandler != 'undefined')
 		Graph.prototype.addText = function(x, y, state)
 		{
 			// Creates a new edge label with a predefined text
-			var label = new mxCell();
+			let label = new mxCell();
 			label.value = 'Text';
 			label.geometry = new mxGeometry(0, 0, 0, 0);
 			label.vertex = true;
-			var style = 'html=1;align=center;verticalAlign=middle;resizable=0;points=[];';
+			let style = 'html=1;align=center;verticalAlign=middle;resizable=0;points=[];';
 
 			if (state != null && this.model.isEdge(state.cell))
 			{
@@ -7782,12 +7782,12 @@ if (typeof mxVertexHandler != 'undefined')
 				label.geometry.offset = new mxPoint(0, 0);
 				pt2 = this.view.getPoint(state, label.geometry);
 		  
-				var scale = this.view.scale;
+				let scale = this.view.scale;
 				label.geometry.offset = new mxPoint(Math.round((x - pt2.x) / scale), Math.round((y - pt2.y) / scale));
 			}
 			else
 			{
-				var tr = this.view.translate;
+				let tr = this.view.translate;
 				label.style = 'text;' + style;
 				label.geometry.width = 40;
 				label.geometry.height = 20;
@@ -7821,15 +7821,15 @@ if (typeof mxVertexHandler != 'undefined')
 		Graph.prototype.addClickHandler = function(highlight, beforeClick, onClick)
 		{
 			// Replaces links in labels for consistent right-clicks
-			var checkLinks = mxUtils.bind(this, function()
+			let checkLinks = mxUtils.bind(this, function()
 			{
-				var links = this.container.getElementsByTagName('a');
+				let links = this.container.getElementsByTagName('a');
 				
 				if (links != null)
 				{
-					for (var i = 0; i < links.length; i++)
+					for (let i = 0; i < links.length; i++)
 					{
-						var href = this.getAbsoluteUrl(links[i].getAttribute('href'));
+						let href = this.getAbsoluteUrl(links[i].getAttribute('href'));
 						
 						if (href != null)
 						{
@@ -7848,11 +7848,11 @@ if (typeof mxVertexHandler != 'undefined')
 			this.model.addListener(mxEvent.CHANGE, checkLinks);
 			checkLinks();
 			
-			var cursor = this.container.style.cursor;
-			var tol = this.getTolerance();
-			var graph = this;
+			let cursor = this.container.style.cursor;
+			let tol = this.getTolerance();
+			let graph = this;
 
-			var mouseListener =
+			let mouseListener =
 			{
 			    currentState: null,
 			    currentLink: null,
@@ -7864,12 +7864,12 @@ if (typeof mxVertexHandler != 'undefined')
 			    scrollTop: 0,
 			    updateCurrentState: function(me)
 			    {
-			    	var tmp = me.sourceState;
+			    	let tmp = me.sourceState;
 			    	
 			    	// Gets topmost intersecting cell with link
 			    	if (tmp == null || graph.getLinkForCell(tmp.cell) == null)
 			    	{
-			    		var cell = graph.getCellAt(me.getGraphX(), me.getGraphY(), null, null, null, function(state, x, y)
+			    		let cell = graph.getCellAt(me.getGraphX(), me.getGraphY(), null, null, null, function(state, x, y)
 	    				{
 			    			return graph.getLinkForCell(state.cell) == null;
 	    				});
@@ -7912,8 +7912,8 @@ if (typeof mxVertexHandler != 'undefined')
 			    	{
 			    		if (this.currentLink != null)
 			    		{
-					    	var dx = Math.abs(this.startX - me.getGraphX());
-					    	var dy = Math.abs(this.startY - me.getGraphY());
+					    	let dx = Math.abs(this.startX - me.getGraphX());
+					    	let dy = Math.abs(this.startY - me.getGraphY());
 					    	
 					    	if (dx > tol || dy > tol)
 					    	{
@@ -7924,7 +7924,7 @@ if (typeof mxVertexHandler != 'undefined')
 			    	else
 			    	{
 				    	// Checks for parent link
-				    	var linkNode = me.getSource();
+				    	let linkNode = me.getSource();
 				    	
 				    	while (linkNode != null && linkNode.nodeName.toLowerCase() != 'a')
 				    	{
@@ -7954,11 +7954,11 @@ if (typeof mxVertexHandler != 'undefined')
 			    },
 			    mouseUp: function(sender, me)
 			    {
-			    	var source = me.getSource();
-			    	var evt = me.getEvent();
+			    	let source = me.getSource();
+			    	let evt = me.getEvent();
 			    	
 			    	// Checks for parent link
-			    	var linkNode = source;
+			    	let linkNode = source;
 			    	
 			    	while (linkNode != null && linkNode.nodeName.toLowerCase() != 'a')
 			    	{
@@ -7975,7 +7975,7 @@ if (typeof mxVertexHandler != 'undefined')
 			    	{
 				    	if (this.currentLink != null)
 				    	{
-				    		var blank = graph.isBlankLink(this.currentLink);
+				    		let blank = graph.isBlankLink(this.currentLink);
 				    		
 				    		if ((this.currentLink.substring(0, 5) === 'data:' ||
 				    			!blank) && beforeClick != null)
@@ -7985,7 +7985,7 @@ if (typeof mxVertexHandler != 'undefined')
 				    		
 				    		if (!mxEvent.isConsumed(evt))
 				    		{
-					    		var target = (mxEvent.isMiddleMouseButton(evt)) ? '_blank' :
+					    		let target = (mxEvent.isMiddleMouseButton(evt)) ? '_blank' :
 					    			((blank) ? graph.linkTarget : '_top');
 					    		graph.openLink(this.currentLink, target);
 					    		me.consume();
@@ -8058,7 +8058,7 @@ if (typeof mxVertexHandler != 'undefined')
 			append = (append != null) ? append : true;
 			
 			// Duplicates rows for table cells
-			for (var i = 0; i < cells.length; i++)
+			for (let i = 0; i < cells.length; i++)
 			{
 				if (this.isTableCell(cells[i]))
 				{
@@ -8068,19 +8068,19 @@ if (typeof mxVertexHandler != 'undefined')
 			
 			cells = this.model.getTopmostCells(cells);
 			
-			var model = this.getModel();
-			var s = this.gridSize;
-			var select = [];
+			let model = this.getModel();
+			let s = this.gridSize;
+			let select = [];
 			
 			model.beginUpdate();
 			try
 			{
-				var clones = this.cloneCells(cells, false, null, true);
+				let clones = this.cloneCells(cells, false, null, true);
 				
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
-					var parent = model.getParent(cells[i]);
-					var child = this.moveCells([clones[i]], s, s, false)[0];
+					let parent = model.getParent(cells[i]);
+					let child = this.moveCells([clones[i]], s, s, false)[0];
 					select.push(child);
 					
 					if (append)
@@ -8090,15 +8090,15 @@ if (typeof mxVertexHandler != 'undefined')
 					else
 					{
 						// Maintains child index by inserting after clone in parent
-						var index = parent.getIndex(cells[i]);
+						let index = parent.getIndex(cells[i]);
 						model.add(parent, clones[i], index + 1);
 					}
 					
 					// Extends tables	
 					if (this.isTable(parent))
 					{
-						var row = this.getCellGeometry(clones[i]);
-						var table = this.getCellGeometry(parent);
+						let row = this.getCellGeometry(clones[i]);
+						let table = this.getCellGeometry(parent);
 						
 						if (row != null && table != null)
 						{
@@ -8126,10 +8126,10 @@ if (typeof mxVertexHandler != 'undefined')
 			// To find the new image, we create a list of all existing links first
 			if (newValue != null && this.cellEditor.textarea != null)
 			{
-				var tmp = this.cellEditor.textarea.getElementsByTagName('img');
-				var oldImages = [];
+				let tmp = this.cellEditor.textarea.getElementsByTagName('img');
+				let oldImages = [];
 				
-				for (var i = 0; i < tmp.length; i++)
+				for (let i = 0; i < tmp.length; i++)
 				{
 					oldImages.push(tmp[i]);
 				}
@@ -8138,12 +8138,12 @@ if (typeof mxVertexHandler != 'undefined')
 				document.execCommand('insertimage', false, newValue);
 				
 				// Sets size of new image
-				var newImages = this.cellEditor.textarea.getElementsByTagName('img');
+				let newImages = this.cellEditor.textarea.getElementsByTagName('img');
 				
 				if (newImages.length == oldImages.length + 1)
 				{
 					// Inverse order in favor of appended images
-					for (var i = newImages.length - 1; i >= 0; i--)
+					for (let i = newImages.length - 1; i >= 0; i--)
 					{
 						if (i == 0 || newImages[i] != oldImages[i - 1])
 						{
@@ -8175,10 +8175,10 @@ if (typeof mxVertexHandler != 'undefined')
 					// Workaround for Firefox that adds a new link and removes
 					// the href from the inner link if its parent is a span is
 					// to remove all inner links inside the new outer link
-					var tmp = this.cellEditor.textarea.getElementsByTagName('a');
-					var oldLinks = [];
+					let tmp = this.cellEditor.textarea.getElementsByTagName('a');
+					let oldLinks = [];
 					
-					for (var i = 0; i < tmp.length; i++)
+					for (let i = 0; i < tmp.length; i++)
 					{
 						oldLinks.push(tmp[i]);
 					}
@@ -8186,22 +8186,22 @@ if (typeof mxVertexHandler != 'undefined')
 					document.execCommand('createlink', false, mxUtils.trim(value));
 					
 					// Finds the new link element
-					var newLinks = this.cellEditor.textarea.getElementsByTagName('a');
+					let newLinks = this.cellEditor.textarea.getElementsByTagName('a');
 					
 					if (newLinks.length == oldLinks.length + 1)
 					{
 						// Inverse order in favor of appended links
-						for (var i = newLinks.length - 1; i >= 0; i--)
+						for (let i = newLinks.length - 1; i >= 0; i--)
 						{
 							if (newLinks[i] != oldLinks[i - 1])
 							{
 								// Removes all inner links from the new link and
 								// moves the children to the inner link parent
-								var tmp = newLinks[i].getElementsByTagName('a');
+								let tmp = newLinks[i].getElementsByTagName('a');
 								
 								while (tmp.length > 0)
 								{
-									var parent = tmp[0].parentNode;
+									let parent = tmp[0].parentNode;
 									
 									while (tmp[0].firstChild != null)
 									{
@@ -8231,8 +8231,8 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.isCellResizable = function(cell)
 		{
-			var result = mxGraph.prototype.isCellResizable.apply(this, arguments);
-			var style = this.getCurrentCellStyle(cell);
+			let result = mxGraph.prototype.isCellResizable.apply(this, arguments);
+			let style = this.getCurrentCellStyle(cell);
 				
 			return !this.isTableCell(cell) && !this.isTableRow(cell) && (result ||
 				(mxUtils.getValue(style, mxConstants.STYLE_RESIZABLE, '1') != '0' &&
@@ -8259,19 +8259,19 @@ if (typeof mxVertexHandler != 'undefined')
 			
 			if (cells != null && cells.length > 1)
 			{
-				var vertices = [];
-				var max = null;
-				var min = null;
+				let vertices = [];
+				let max = null;
+				let min = null;
 				
-				for (var i = 0; i < cells.length; i++)
+				for (let i = 0; i < cells.length; i++)
 				{
 					if (this.getModel().isVertex(cells[i]))
 					{
-						var state = this.view.getState(cells[i]);
+						let state = this.view.getState(cells[i]);
 						
 						if (state != null)
 						{
-							var tmp = (horizontal) ? state.getCenterX() : state.getCenterY();
+							let tmp = (horizontal) ? state.getCenterX() : state.getCenterY();
 							max = (max != null) ? Math.max(max, tmp) : tmp;
 							min = (min != null) ? Math.min(min, tmp) : tmp;
 							
@@ -8287,8 +8287,8 @@ if (typeof mxVertexHandler != 'undefined')
 						return (horizontal) ? a.x - b.x : a.y - b.y;
 					});
 		
-					var t = this.view.translate;
-					var s = this.view.scale;
+					let t = this.view.translate;
+					let s = this.view.scale;
 					
 					min = min / s - ((horizontal) ? t.x : t.y);
 					max = max / s - ((horizontal) ? t.x : t.y);
@@ -8296,13 +8296,13 @@ if (typeof mxVertexHandler != 'undefined')
 					this.getModel().beginUpdate();
 					try
 					{
-						var dt = (max - min) / (vertices.length - 1);
+						let dt = (max - min) / (vertices.length - 1);
 						var t0 = min;
 						
-						for (var i = 1; i < vertices.length - 1; i++)
+						for (let i = 1; i < vertices.length - 1; i++)
 						{
-							var pstate = this.view.getState(this.model.getParent(vertices[i].cell));
-							var geo = this.getCellGeometry(vertices[i].cell);
+							let pstate = this.view.getState(this.model.getParent(vertices[i].cell));
+							let geo = this.getCellGeometry(vertices[i].cell);
 							t0 += dt;
 							
 							if (geo != null && pstate != null)
@@ -8350,7 +8350,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.createSvgImageExport = function()
 		{
-			var exp = new mxImageExport();
+			let exp = new mxImageExport();
 			
 			// Adds hyperlinks (experimental)
 			exp.getLinkForCellState = mxUtils.bind(this, function(state, canvas)
@@ -8371,7 +8371,7 @@ if (typeof mxVertexHandler != 'undefined')
 			ignoreSelection, showText, imgExport, linkTarget, hasShadow)
 		{
 			//Disable Css Transforms if it is used
-			var origUseCssTrans = this.useCssTransforms;
+			let origUseCssTrans = this.useCssTransforms;
 			
 			if (origUseCssTrans) 
 			{
@@ -8388,7 +8388,7 @@ if (typeof mxVertexHandler != 'undefined')
 				ignoreSelection = (ignoreSelection != null) ? ignoreSelection : true;
 				showText = (showText != null) ? showText : true;
 	
-				var bounds = (ignoreSelection || nocrop) ?
+				let bounds = (ignoreSelection || nocrop) ?
 					this.getGraphBounds() : this.getBoundingBox(
 					this.getSelectionCells());
 	
@@ -8397,11 +8397,11 @@ if (typeof mxVertexHandler != 'undefined')
 					throw Error(mxResources.get('drawingEmpty'));
 				}
 	
-				var vs = this.view.scale;
+				let vs = this.view.scale;
 				
 				// Prepares SVG document that holds the output
-				var svgDoc = mxUtils.createXmlDocument();
-				var root = (svgDoc.createElementNS != null) ?
+				let svgDoc = mxUtils.createXmlDocument();
+				let root = (svgDoc.createElementNS != null) ?
 			    	svgDoc.createElementNS(mxConstants.NS_SVG, 'svg') : svgDoc.createElement('svg');
 			    
 				if (background != null)
@@ -8427,9 +8427,9 @@ if (typeof mxVertexHandler != 'undefined')
 					root.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:xlink', mxConstants.NS_XLINK);
 				}
 				
-				var s = scale / vs;
-				var w = Math.max(1, Math.ceil(bounds.width * s) + 2 * border) + ((hasShadow) ? 5 : 0);
-				var h = Math.max(1, Math.ceil(bounds.height * s) + 2 * border) + ((hasShadow) ? 5 : 0);
+				let s = scale / vs;
+				let w = Math.max(1, Math.ceil(bounds.width * s) + 2 * border) + ((hasShadow) ? 5 : 0);
+				let h = Math.max(1, Math.ceil(bounds.height * s) + 2 * border) + ((hasShadow) ? 5 : 0);
 				
 				root.setAttribute('version', '1.1');
 				root.setAttribute('width', w + 'px');
@@ -8439,11 +8439,11 @@ if (typeof mxVertexHandler != 'undefined')
 			
 			    // Renders graph. Offset will be multiplied with state's scale when painting state.
 				// TextOffset only seems to affect FF output but used everywhere for consistency.
-				var group = (svgDoc.createElementNS != null) ?
+				let group = (svgDoc.createElementNS != null) ?
 			    	svgDoc.createElementNS(mxConstants.NS_SVG, 'g') : svgDoc.createElement('g');
 			    root.appendChild(group);
 
-				var svgCanvas = this.createSvgCanvas(group);
+				let svgCanvas = this.createSvgCanvas(group);
 				svgCanvas.foOffset = (crisp) ? -0.5 : 0;
 				svgCanvas.textOffset = (crisp) ? -0.5 : 0;
 				svgCanvas.imageOffset = (crisp) ? -0.5 : 0;
@@ -8451,10 +8451,10 @@ if (typeof mxVertexHandler != 'undefined')
 					Math.floor((border / scale - bounds.y) / vs));
 				
 				// Convert HTML entities
-				var htmlConverter = document.createElement('div');
+				let htmlConverter = document.createElement('div');
 				
 				// Adds simple text fallback for viewers with no support for foreignObjects
-				var getAlternateText = svgCanvas.getAlternateText;
+				let getAlternateText = svgCanvas.getAlternateText;
 				svgCanvas.getAlternateText = function(fo, x, y, w, h, str, align, valign, wrap, format, overflow, clip, rotation)
 				{
 					// Assumes a max character width of 0.5em
@@ -8473,14 +8473,14 @@ if (typeof mxVertexHandler != 'undefined')
 							}
 							
 							// Workaround for substring breaking double byte UTF
-							var exp = Math.ceil(2 * w / this.state.fontSize);
-							var result = [];
-							var length = 0;
-							var index = 0;
+							let exp = Math.ceil(2 * w / this.state.fontSize);
+							let result = [];
+							let length = 0;
+							let index = 0;
 							
 							while ((exp == 0 || length < exp) && index < str.length)
 							{
-								var char = str.charCodeAt(index);
+								let char = str.charCodeAt(index);
 								
 								if (char == 10 || char == 13)
 								{
@@ -8522,13 +8522,13 @@ if (typeof mxVertexHandler != 'undefined')
 				};
 				
 				// Paints background image
-				var bgImg = this.backgroundImage;
+				let bgImg = this.backgroundImage;
 				
 				if (bgImg != null)
 				{
 					var s2 = vs / scale;
-					var tr = this.view.translate;
-					var tmp = new mxRectangle(tr.x * s2, tr.y * s2, bgImg.width * s2, bgImg.height * s2);
+					let tr = this.view.translate;
+					let tmp = new mxRectangle(tr.x * s2, tr.y * s2, bgImg.width * s2, bgImg.height * s2);
 					
 					// Checks if visible
 					if (mxUtils.intersects(bounds, tmp))
@@ -8541,14 +8541,14 @@ if (typeof mxVertexHandler != 'undefined')
 				svgCanvas.textEnabled = showText;
 				
 				imgExport = (imgExport != null) ? imgExport : this.createSvgImageExport();
-				var imgExportDrawCellState = imgExport.drawCellState;
+				let imgExportDrawCellState = imgExport.drawCellState;
 
 				// Ignores custom links
-				var imgExportGetLinkForCellState = imgExport.getLinkForCellState;
+				let imgExportGetLinkForCellState = imgExport.getLinkForCellState;
 				
 				imgExport.getLinkForCellState = function(state, canvas)
 				{
-					var result = imgExportGetLinkForCellState.apply(this, arguments);
+					let result = imgExportGetLinkForCellState.apply(this, arguments);
 					
 					return (result != null && !state.view.graph.isCustomLink(result)) ? result : null;
 				};
@@ -8556,9 +8556,9 @@ if (typeof mxVertexHandler != 'undefined')
 				// Implements ignoreSelection flag
 				imgExport.drawCellState = function(state, canvas)
 				{
-					var graph = state.view.graph;
-					var selected = graph.isCellSelected(state.cell);
-					var parent = graph.model.getParent(state.cell);
+					let graph = state.view.graph;
+					let selected = graph.isCellSelected(state.cell);
+					let parent = graph.model.getParent(state.cell);
 					
 					// Checks if parent cell is selected
 					while (!ignoreSelection && !selected && parent != null)
@@ -8597,10 +8597,10 @@ if (typeof mxVertexHandler != 'undefined')
 		{
 			if (root.getElementsByTagName('foreignObject').length > 0)
 			{
-				var sw = canvas.createElement('switch');
+				let sw = canvas.createElement('switch');
 				var g1 = canvas.createElement('g');
 				g1.setAttribute('requiredFeatures', 'http://www.w3.org/TR/SVG11/feature#Extensibility');
-				var a = canvas.createElement('a');
+				let a = canvas.createElement('a');
 				a.setAttribute('transform', 'translate(0,-5)');
 				
 				// Workaround for implicit namespace handling in HTML5 export, IE adds NS1 namespace so use code below
@@ -8616,7 +8616,7 @@ if (typeof mxVertexHandler != 'undefined')
 					a.setAttributeNS(mxConstants.NS_XLINK, 'target', '_blank');
 				}
 				
-				var text = canvas.createElement('text');
+				let text = canvas.createElement('text');
 				text.setAttribute('text-anchor', 'middle');
 				text.setAttribute('font-size', '10px');
 				text.setAttribute('x', '50%');
@@ -8635,11 +8635,11 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.updateSvgLinks = function(node, target, removeCustom)
 		{
-			var links = node.getElementsByTagName('a');
+			let links = node.getElementsByTagName('a');
 			
-			for (var i = 0; i < links.length; i++)
+			for (let i = 0; i < links.length; i++)
 			{
-				var href = links[i].getAttribute('href');
+				let href = links[i].getAttribute('href');
 				
 				if (href == null)
 				{
@@ -8665,7 +8665,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.createSvgCanvas = function(node)
 		{
-			var canvas = new mxSvgCanvas2D(node);
+			let canvas = new mxSvgCanvas2D(node);
 			
 			canvas.pointerEvents = true;
 			
@@ -8677,15 +8677,15 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.getSelectedElement = function()
 		{
-			var node = null;
+			let node = null;
 			
 			if (window.getSelection)
 			{
-				var sel = window.getSelection();
+				let sel = window.getSelection();
 				
 			    if (sel.getRangeAt && sel.rangeCount)
 			    {
-			        var range = sel.getRangeAt(0);
+			        let range = sel.getRangeAt(0);
 			        node = range.commonAncestorContainer;
 			    }
 			}
@@ -8702,7 +8702,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.getSelectedEditingElement = function()
 		{
-			var node = this.getSelectedElement();
+			let node = this.getSelectedElement();
 
 			while (node != null && node.nodeType != mxConstants.NODETYPE_ELEMENT)
 			{
@@ -8773,7 +8773,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.selectNode = function(node)
 		{
-			var sel = null;
+			let sel = null;
 			
 		    // IE9 and non-IE
 			if (window.getSelection)
@@ -8782,7 +8782,7 @@ if (typeof mxVertexHandler != 'undefined')
 		    	
 		        if (sel.getRangeAt && sel.rangeCount)
 		        {
-		        	var range = document.createRange();
+		        	let range = document.createRange();
 		            range.selectNode(node);
 		            sel.removeAllRanges();
 		            sel.addRange(range);
@@ -8791,9 +8791,9 @@ if (typeof mxVertexHandler != 'undefined')
 		    // IE < 9
 			else if ((sel = document.selection) && sel.type != 'Control')
 		    {
-		        var originalRange = sel.createRange();
+		        let originalRange = sel.createRange();
 		        originalRange.collapse(true);
-		        var range = sel.createRange();
+		        let range = sel.createRange();
 		        range.setEndPoint('StartToStart', originalRange);
 		        range.select();
 		    }
@@ -8804,7 +8804,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.deleteCells = function(cells, includeEdges)
 		{
-			var select = null;
+			let select = null;
 
 			if (cells != null && cells.length > 0)
 			{
@@ -8812,14 +8812,14 @@ if (typeof mxVertexHandler != 'undefined')
 				try
 				{
 					// Shrinks tables	
-					for (var i = 0; i < cells.length; i++)
+					for (let i = 0; i < cells.length; i++)
 					{
-						var parent = this.model.getParent(cells[i]);
+						let parent = this.model.getParent(cells[i]);
 						
 						if (this.isTable(parent))
 						{
-							var row = this.getCellGeometry(cells[i]);
-							var table = this.getCellGeometry(parent);
+							let row = this.getCellGeometry(cells[i]);
+							let table = this.getCellGeometry(parent);
 							
 							if (row != null && table != null)
 							{
@@ -8830,7 +8830,7 @@ if (typeof mxVertexHandler != 'undefined')
 						}
 					}
 					
-					var parents = (this.selectParentAfterDelete) ? this.model.getParents(cells) : null;
+					let parents = (this.selectParentAfterDelete) ? this.model.getParents(cells) : null;
 					this.removeCells(cells, includeEdges);
 				}
 				finally
@@ -8843,7 +8843,7 @@ if (typeof mxVertexHandler != 'undefined')
 				{
 					select = [];
 					
-					for (var i = 0; i < parents.length; i++)
+					for (let i = 0; i < parents.length; i++)
 					{
 						if (this.model.contains(parents[i]) &&
 							(this.model.isVertex(parents[i]) ||
@@ -8863,17 +8863,17 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.insertTableColumn = function(cell, before)
 		{
-			var model = this.getModel();
+			let model = this.getModel();
 			model.beginUpdate();
 			
 			try
 			{
-				var table = cell;
-				var index = 0;
+				let table = cell;
+				let index = 0;
 				
 				if (this.isTableCell(cell))
 				{
-					var row = model.getParent(cell);
+					let row = model.getParent(cell);
 					table = model.getParent(row);
 					index = mxUtils.indexOf(model.getChildCells(row, true), cell);
 				}
@@ -8894,20 +8894,20 @@ if (typeof mxVertexHandler != 'undefined')
 					}
 				}
 				
-				var rows = model.getChildCells(table, true);
-				var dw = Graph.minTableColumnWidth;
+				let rows = model.getChildCells(table, true);
+				let dw = Graph.minTableColumnWidth;
 				
-				for (var i = 0; i < rows.length; i++)
+				for (let i = 0; i < rows.length; i++)
 				{
-					var child = model.getChildCells(rows[i], true)[index];
-					var clone = model.cloneCell(child, false);
-					var geo = this.getCellGeometry(clone);
+					let child = model.getChildCells(rows[i], true)[index];
+					let clone = model.cloneCell(child, false);
+					let geo = this.getCellGeometry(clone);
 					clone.value = null;
 					
 					if (geo != null)
 					{
 						dw = geo.width;
-						var rowGeo = this.getCellGeometry(rows[i]);
+						let rowGeo = this.getCellGeometry(rows[i]);
 						
 						if (rowGeo != null)
 						{
@@ -8918,7 +8918,7 @@ if (typeof mxVertexHandler != 'undefined')
 					model.add(rows[i], clone, index + ((before) ? 0 : 1));
 				}
 				
-				var tableGeo = this.getCellGeometry(table);
+				let tableGeo = this.getCellGeometry(table);
 				
 				if (tableGeo != null)
 				{
@@ -8939,13 +8939,13 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.insertTableRow = function(cell, before)
 		{
-			var model = this.getModel();
+			let model = this.getModel();
 			model.beginUpdate();
 			
 			try
 			{
-				var table = cell;
-				var row = cell;
+				let table = cell;
+				let row = cell;
 				
 				if (this.isTableCell(cell))
 				{
@@ -8958,26 +8958,26 @@ if (typeof mxVertexHandler != 'undefined')
 				}
 				else
 				{
-					var rows = model.getChildCells(table, true);
+					let rows = model.getChildCells(table, true);
 					row = rows[(before) ? 0 : rows.length - 1];
 				}
 				
-				var cells = model.getChildCells(row, true);
-				var index = table.getIndex(row);
+				let cells = model.getChildCells(row, true);
+				let index = table.getIndex(row);
 				row = model.cloneCell(row, false);
 				row.value = null;
 				
-				var rowGeo = this.getCellGeometry(row);
+				let rowGeo = this.getCellGeometry(row);
 				
 				if (rowGeo != null)
 				{
-					for (var i = 0; i < cells.length; i++)
+					for (let i = 0; i < cells.length; i++)
 					{
-						var cell = model.cloneCell(cells[i], false);
+						let cell = model.cloneCell(cells[i], false);
 						row.insert(cell);
 						cell.value = null;
 						
-						var geo = this.getCellGeometry(cell);
+						let geo = this.getCellGeometry(cell);
 						
 						if (geo != null)
 						{
@@ -8987,7 +8987,7 @@ if (typeof mxVertexHandler != 'undefined')
 
 					model.add(table, row, index + ((before) ? 0 : 1));
 					
-					var tableGeo = this.getCellGeometry(table);
+					let tableGeo = this.getCellGeometry(table);
 					
 					if (tableGeo != null)
 					{
@@ -9009,13 +9009,13 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.deleteTableColumn = function(cell)
 		{
-			var model = this.getModel();
+			let model = this.getModel();
 			model.beginUpdate();
 			
 			try
 			{
-				var table = cell;
-				var row = cell;
+				let table = cell;
+				let row = cell;
 				
 				if (this.isTableCell(cell))
 				{
@@ -9027,7 +9027,7 @@ if (typeof mxVertexHandler != 'undefined')
 					table = model.getParent(row);
 				}
 				
-				var rows = model.getChildCells(table, true);
+				let rows = model.getChildCells(table, true);
 				
 				if (rows.length == 0)
 				{
@@ -9040,7 +9040,7 @@ if (typeof mxVertexHandler != 'undefined')
 						row = rows[0];
 					}
 					
-					var cells = model.getChildCells(row, true);
+					let cells = model.getChildCells(row, true);
 					
 					if (cells.length <= 1)
 					{
@@ -9048,21 +9048,21 @@ if (typeof mxVertexHandler != 'undefined')
 					}
 					else
 					{
-						var index = cells.length - 1;
+						let index = cells.length - 1;
 						
 						if (this.isTableCell(cell))
 						{
 							index = mxUtils.indexOf(cells, cell);
 						}
 
-						var width = 0;
+						let width = 0;
 		
-						for (var i = 0; i < rows.length; i++)
+						for (let i = 0; i < rows.length; i++)
 						{
-							var child = model.getChildCells(rows[i], true)[index];
+							let child = model.getChildCells(rows[i], true)[index];
 							model.remove(child);
 							
-							var geo = this.getCellGeometry(child);
+							let geo = this.getCellGeometry(child);
 							
 							if (geo != null)
 							{
@@ -9070,7 +9070,7 @@ if (typeof mxVertexHandler != 'undefined')
 							}
 						}
 						
-						var tableGeo = this.getCellGeometry(table);
+						let tableGeo = this.getCellGeometry(table);
 						
 						if (tableGeo != null)
 						{
@@ -9093,13 +9093,13 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.deleteTableRow = function(cell)
 		{
-			var model = this.getModel();
+			let model = this.getModel();
 			model.beginUpdate();
 			
 			try
 			{
-				var table = cell;
-				var row = cell;
+				let table = cell;
+				let row = cell;
 				
 				if (this.isTableCell(cell))
 				{
@@ -9112,7 +9112,7 @@ if (typeof mxVertexHandler != 'undefined')
 					table = model.getParent(row);
 				}
 				
-				var rows = model.getChildCells(table, true);
+				let rows = model.getChildCells(table, true);
 				
 				if (rows.length <= 1)
 				{
@@ -9126,16 +9126,16 @@ if (typeof mxVertexHandler != 'undefined')
 					}	
 					
 					model.remove(row);
-					var height = 0;
+					let height = 0;
 					
-					var geo = this.getCellGeometry(row);
+					let geo = this.getCellGeometry(row);
 					
 					if (geo != null)
 					{
 						height = geo.height;
 					}
 					
-					var tableGeo = this.getCellGeometry(table);
+					let tableGeo = this.getCellGeometry(table);
 					
 					if (tableGeo != null)
 					{
@@ -9157,20 +9157,20 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.insertRow = function(table, index)
 		{
-			var bd = table.tBodies[0];
-			var cells = bd.rows[0].cells;
-			var cols = 0;
+			let bd = table.tBodies[0];
+			let cells = bd.rows[0].cells;
+			let cols = 0;
 			
 			// Counts columns including colspans
-			for (var i = 0; i < cells.length; i++)
+			for (let i = 0; i < cells.length; i++)
 			{
-				var colspan = cells[i].getAttribute('colspan');
+				let colspan = cells[i].getAttribute('colspan');
 				cols += (colspan != null) ? parseInt(colspan) : 1;
 			}
 			
-			var row = bd.insertRow(index);
+			let row = bd.insertRow(index);
 			
-			for (var i = 0; i < cols; i++)
+			for (let i = 0; i < cols; i++)
 			{
 				mxUtils.br(row.insertCell(-1));
 			}
@@ -9191,24 +9191,24 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		Graph.prototype.insertColumn = function(table, index)
 		{
-			var hd = table.tHead;
+			let hd = table.tHead;
 			
 			if (hd != null)
 			{
 				// TODO: use colIndex
-				for (var h = 0; h < hd.rows.length; h++)
+				for (let h = 0; h < hd.rows.length; h++)
 				{
-					var th = document.createElement('th');
+					let th = document.createElement('th');
 					hd.rows[h].appendChild(th);
 					mxUtils.br(th);
 				}
 			}
 		
-			var bd = table.tBodies[0];
+			let bd = table.tBodies[0];
 			
-			for (var i = 0; i < bd.rows.length; i++)
+			for (let i = 0; i < bd.rows.length; i++)
 			{
-				var cell = bd.rows[i].insertCell(index);
+				let cell = bd.rows[i].insertCell(index);
 				mxUtils.br(cell);
 			}
 			
@@ -9222,10 +9222,10 @@ if (typeof mxVertexHandler != 'undefined')
 		{
 			if (index >= 0)
 			{
-				var bd = table.tBodies[0];
-				var rows = bd.rows;
+				let bd = table.tBodies[0];
+				let rows = bd.rows;
 				
-				for (var i = 0; i < rows.length; i++)
+				for (let i = 0; i < rows.length; i++)
 				{
 					if (rows[i].cells.length > index)
 					{
@@ -9255,9 +9255,9 @@ if (typeof mxVertexHandler != 'undefined')
 		            // Range.createContextualFragment() would be useful here but is
 		            // only relatively recently standardized and is not supported in
 		            // some browsers (IE9, for one)
-		            var el = document.createElement("div");
+		            let el = document.createElement("div");
 		            el.innerHTML = html;
-		            var frag = document.createDocumentFragment(), node;
+		            let frag = document.createDocumentFragment(), node;
 		            
 		            while ((node = el.firstChild))
 		            {
@@ -9307,7 +9307,7 @@ if (typeof mxVertexHandler != 'undefined')
 				return str;
 			};
 			
-			var a = document.createElement('a');
+			let a = document.createElement('a');
 			a.setAttribute('rel', this.linkRelation);
 			a.setAttribute('href', this.getAbsoluteUrl(link));
 			a.setAttribute('title', short((this.isCustomLink(link)) ?
@@ -9352,14 +9352,14 @@ if (typeof mxVertexHandler != 'undefined')
 			});
 		
 			// Adds custom hit detection if native hit detection found no cell
-			var graphUpdateMouseEvent = this.updateMouseEvent;
+			let graphUpdateMouseEvent = this.updateMouseEvent;
 			this.updateMouseEvent = function(me)
 			{
 				me = graphUpdateMouseEvent.apply(this, arguments);
 	
 				if (mxEvent.isTouchEvent(me.getEvent()) && me.getState() == null)
 				{
-					var cell = this.getCellAt(me.graphX, me.graphY);
+					let cell = this.getCellAt(me.graphX, me.graphY);
 		
 					if (cell != null && this.isSwimlane(cell) && this.hitsSwimlaneContent(cell, me.graphX, me.graphY))
 					{
@@ -9386,11 +9386,11 @@ if (typeof mxVertexHandler != 'undefined')
 		
 			// Context menu trigger implementation depending on current selection state
 			// combined with support for normal popup trigger.
-			var cellSelected = false;
-			var selectionEmpty = false;
-			var menuShowing = false;
+			let cellSelected = false;
+			let selectionEmpty = false;
+			let menuShowing = false;
 			
-			var oldFireMouseEvent = this.fireMouseEvent;
+			let oldFireMouseEvent = this.fireMouseEvent;
 			
 			this.fireMouseEvent = function(evtName, me, sender)
 			{
@@ -9426,7 +9426,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		mxCellEditor.prototype.isContentEditing = function()
 		{
-			var state = this.graph.view.getState(this.editingCell);
+			let state = this.graph.view.getState(this.editingCell);
 			
 			return state != null && state.style['html'] == 1;
 		};
@@ -9451,11 +9451,11 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		mxCellEditor.prototype.alignText = function(align, evt)
 		{
-			var shiftPressed = evt != null && mxEvent.isShiftDown(evt);
+			let shiftPressed = evt != null && mxEvent.isShiftDown(evt);
 			
 			if (shiftPressed || (window.getSelection != null && window.getSelection().containsNode != null))
 			{
-				var allSelected = true;
+				let allSelected = true;
 				
 				this.graph.processElements(this.textarea, function(node)
 				{
@@ -9486,13 +9486,13 @@ if (typeof mxVertexHandler != 'undefined')
 		{
 		    if (window.getSelection)
 		    {
-		        var sel = window.getSelection();
+		        let sel = window.getSelection();
 		        
 		        if (sel.getRangeAt && sel.rangeCount)
 		        {
-		            var ranges = [];
+		            let ranges = [];
 		            
-		            for (var i = 0, len = sel.rangeCount; i < len; ++i)
+		            for (let i = 0, len = sel.rangeCount; i < len; ++i)
 		            {
 		                ranges.push(sel.getRangeAt(i));
 		            }
@@ -9522,7 +9522,7 @@ if (typeof mxVertexHandler != 'undefined')
 						sel = window.getSelection();
 						sel.removeAllRanges();
 		
-						for (var i = 0, len = savedSel.length; i < len; ++i)
+						for (let i = 0, len = savedSel.length; i < len; ++i)
 						{
 							sel.addRange(savedSel[i]);
 						}
@@ -9544,7 +9544,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 * NOTE: Since it's easier to set this when the label is created we assume that it does
 		 * not change during the lifetime of the mxText instance.
 		 */
-		var mxCellRendererInitializeLabel = mxCellRenderer.prototype.initializeLabel;
+		let mxCellRendererInitializeLabel = mxCellRenderer.prototype.initializeLabel;
 		mxCellRenderer.prototype.initializeLabel = function(state)
 		{
 			if (state.text != null)
@@ -9555,7 +9555,7 @@ if (typeof mxVertexHandler != 'undefined')
 			mxCellRendererInitializeLabel.apply(this, arguments);
 		};
 	
-		var mxConstraintHandlerUpdate = mxConstraintHandler.prototype.update;
+		let mxConstraintHandlerUpdate = mxConstraintHandler.prototype.update;
 		mxConstraintHandler.prototype.update = function(me, source)
 		{
 			if (this.isKeepFocusEvent(me) || !mxEvent.isAltDown(me.getEvent()))
@@ -9573,7 +9573,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		mxGuide.prototype.createGuideShape = function(horizontal)
 		{
-			var guide = new mxPolyline([], mxConstants.GUIDE_COLOR, mxConstants.GUIDE_STROKEWIDTH);
+			let guide = new mxPolyline([], mxConstants.GUIDE_COLOR, mxConstants.GUIDE_STROKEWIDTH);
 			
 			return guide;
 		};
@@ -9586,7 +9586,7 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Overridden to set CSS classes.
 		 */
-		var mxCellEditorStartEditing = mxCellEditor.prototype.startEditing;
+		let mxCellEditorStartEditing = mxCellEditor.prototype.startEditing;
 		mxCellEditor.prototype.startEditing = function(cell, trigger)
 		{
 			cell = this.graph.getStartEditingCell(cell, trigger);
@@ -9595,7 +9595,7 @@ if (typeof mxVertexHandler != 'undefined')
 			
 			// Overrides class in case of HTML content to add
 			// dashed borders for divs and table cells
-			var state = this.graph.view.getState(cell);
+			let state = this.graph.view.getState(cell);
 	
 			if (state != null && state.style['html'] == 1)
 			{
@@ -9616,8 +9616,8 @@ if (typeof mxVertexHandler != 'undefined')
 			this.graph.setSelectionCell(cell);
 
 			// Enables focus outline for edges and edge labels
-			var parent = this.graph.getModel().getParent(cell);
-			var geo = this.graph.getCellGeometry(cell);
+			let parent = this.graph.getModel().getParent(cell);
+			let geo = this.graph.getCellGeometry(cell);
 			
 			if ((this.graph.getModel().isEdge(parent) && geo != null && geo.relative) ||
 				this.graph.getModel().isEdge(cell))
@@ -9637,7 +9637,7 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * HTML in-place editor
 		 */
-		var cellEditorInstallListeners = mxCellEditor.prototype.installListeners;
+		let cellEditorInstallListeners = mxCellEditor.prototype.installListeners;
 		mxCellEditor.prototype.installListeners = function(elt)
 		{
 			cellEditorInstallListeners.apply(this, arguments);
@@ -9648,7 +9648,7 @@ if (typeof mxVertexHandler != 'undefined')
 				clone.originalNode = node;
 				
 				node = node.firstChild;
-				var child = clone.firstChild;
+				let child = clone.firstChild;
 				
 				while (node != null && child != null)
 				{
@@ -9676,7 +9676,7 @@ if (typeof mxVertexHandler != 'undefined')
 						
 						while (node != null)
 						{
-							var nextNode = node.nextSibling;
+							let nextNode = node.nextSibling;
 							
 							if (clone == null)
 							{
@@ -9697,11 +9697,11 @@ if (typeof mxVertexHandler != 'undefined')
 			// Removes unused DOM nodes and attributes, recursively
 			function cleanNode(node)
 			{
-				var child = node.firstChild;
+				let child = node.firstChild;
 				
 				while (child != null)
 				{
-					var next = child.nextSibling;
+					let next = child.nextSibling;
 					cleanNode(child);
 					child = next;
 				}
@@ -9736,7 +9736,7 @@ if (typeof mxVertexHandler != 'undefined')
 			// LATER: Fix undo/redo for paste
 			mxEvent.addListener(this.textarea, 'paste', mxUtils.bind(this, function(evt)
 			{
-				var clone = reference(this.textarea, this.textarea.cloneNode(true));
+				let clone = reference(this.textarea, this.textarea.cloneNode(true));
 
 				window.setTimeout(mxUtils.bind(this, function()
 				{
@@ -9759,12 +9759,12 @@ if (typeof mxVertexHandler != 'undefined')
 
 		mxCellEditor.prototype.toggleViewMode = function()
 		{
-			var state = this.graph.view.getState(this.editingCell);
+			let state = this.graph.view.getState(this.editingCell);
 			
 			if (state != null)
 			{
 				var nl2Br = state != null && mxUtils.getValue(state.style, 'nl2Br', '1') != '0';
-				var tmp = this.saveSelection();
+				let tmp = this.saveSelection();
 				
 				if (!this.codeViewMode)
 				{
@@ -9777,7 +9777,7 @@ if (typeof mxVertexHandler != 'undefined')
 					
 					// Removes newlines from HTML and converts breaks to newlines
 					// to match the HTML output in plain text
-					var content = mxUtils.htmlEntities(this.textarea.innerHTML);
+					let content = mxUtils.htmlEntities(this.textarea.innerHTML);
 		
 				    // Workaround for trailing line breaks being ignored in the editor
 					content = mxUtils.replaceTrailingNewlines(content, '<div><br></div>');
@@ -9785,7 +9785,7 @@ if (typeof mxVertexHandler != 'undefined')
 				    content = this.graph.sanitizeHtml((nl2Br) ? content.replace(/\n/g, '').replace(/&lt;br\s*.?&gt;/g, '<br>') : content, true);
 					this.textarea.className = 'mxCellEditor mxPlainTextEditor';
 					
-					var size = mxConstants.DEFAULT_FONTSIZE;
+					let size = mxConstants.DEFAULT_FONTSIZE;
 					
 					this.textarea.style.lineHeight = (mxConstants.ABSOLUTE_LINE_HEIGHT) ? Math.round(size * mxConstants.LINE_HEIGHT) + 'px' : mxConstants.LINE_HEIGHT;
 					this.textarea.style.fontSize = Math.round(size) + 'px';
@@ -9807,7 +9807,7 @@ if (typeof mxVertexHandler != 'undefined')
 				}
 				else
 				{
-					var content = mxUtils.extractTextWithWhitespace(this.textarea.childNodes);
+					let content = mxUtils.extractTextWithWhitespace(this.textarea.childNodes);
 				    
 					// Strips trailing line break
 				    if (content.length > 0 && content.charAt(content.length - 1) == '\n')
@@ -9818,14 +9818,14 @@ if (typeof mxVertexHandler != 'undefined')
 					content = this.graph.sanitizeHtml((nl2Br) ? content.replace(/\n/g, '<br/>') : content, true)
 					this.textarea.className = 'mxCellEditor geContentEditable';
 					
-					var size = mxUtils.getValue(state.style, mxConstants.STYLE_FONTSIZE, mxConstants.DEFAULT_FONTSIZE);
-					var family = mxUtils.getValue(state.style, mxConstants.STYLE_FONTFAMILY, mxConstants.DEFAULT_FONTFAMILY);
-					var align = mxUtils.getValue(state.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_LEFT);
-					var bold = (mxUtils.getValue(state.style, mxConstants.STYLE_FONTSTYLE, 0) &
+					let size = mxUtils.getValue(state.style, mxConstants.STYLE_FONTSIZE, mxConstants.DEFAULT_FONTSIZE);
+					let family = mxUtils.getValue(state.style, mxConstants.STYLE_FONTFAMILY, mxConstants.DEFAULT_FONTFAMILY);
+					let align = mxUtils.getValue(state.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_LEFT);
+					let bold = (mxUtils.getValue(state.style, mxConstants.STYLE_FONTSTYLE, 0) &
 							mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD;
-					var italic = (mxUtils.getValue(state.style, mxConstants.STYLE_FONTSTYLE, 0) &
+					let italic = (mxUtils.getValue(state.style, mxConstants.STYLE_FONTSTYLE, 0) &
 							mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC;
-					var txtDecor = [];
+					let txtDecor = [];
 					
 					if ((mxUtils.getValue(state.style, mxConstants.STYLE_FONTSTYLE, 0) &
 							mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE)
@@ -9874,16 +9874,16 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 		};
 		
-		var mxCellEditorResize = mxCellEditor.prototype.resize;
+		let mxCellEditorResize = mxCellEditor.prototype.resize;
 		mxCellEditor.prototype.resize = function(state, trigger)
 		{
 			if (this.textarea != null)
 			{
-				var state = this.graph.getView().getState(this.editingCell);
+				let state = this.graph.getView().getState(this.editingCell);
 				
 				if (this.codeViewMode && state != null)
 				{
-					var scale = state.view.scale;
+					let scale = state.view.scale;
 					this.bounds = mxRectangle.fromRectangle(state);
 					
 					// General placement of code editor if cell has no size
@@ -9893,7 +9893,7 @@ if (typeof mxVertexHandler != 'undefined')
 						this.bounds.width = 160 * scale;
 						this.bounds.height = 60 * scale;
 						
-						var m = (state.text != null) ? state.text.margin : null;
+						let m = (state.text != null) ? state.text.margin : null;
 						
 						if (m == null)
 						{
@@ -9945,7 +9945,7 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 			else
 			{
-				var result = this.graph.getEditingValue(state.cell, trigger)
+				let result = this.graph.getEditingValue(state.cell, trigger)
 			
 				if (mxUtils.getValue(state.style, 'nl2Br', '1') == '1')
 				{
@@ -9967,7 +9967,7 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 			else
 			{
-				var result = this.graph.sanitizeHtml(this.textarea.innerHTML, true);
+				let result = this.graph.sanitizeHtml(this.textarea.innerHTML, true);
 	
 				if (mxUtils.getValue(state.style, 'nl2Br', '1') == '1')
 				{
@@ -9982,7 +9982,7 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 		};
 	
-		var mxCellEditorStopEditing = mxCellEditor.prototype.stopEditing;
+		let mxCellEditorStopEditing = mxCellEditor.prototype.stopEditing;
 		mxCellEditor.prototype.stopEditing = function(cancel)
 		{
 			// Restores default view mode before applying value
@@ -10009,7 +10009,7 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 		};
 	
-		var mxCellEditorApplyValue = mxCellEditor.prototype.applyValue;
+		let mxCellEditorApplyValue = mxCellEditor.prototype.applyValue;
 		mxCellEditor.prototype.applyValue = function(state, value)
 		{
 			// Removes empty relative child labels in edges
@@ -10038,7 +10038,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		mxCellEditor.prototype.getBackgroundColor = function(state)
 		{
-			var color = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_BACKGROUNDCOLOR, null);
+			let color = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_BACKGROUNDCOLOR, null);
 
 			if ((color == null || color == mxConstants.NONE) &&
 				(state.cell.geometry != null && state.cell.geometry.width > 0) &&
@@ -10058,7 +10058,7 @@ if (typeof mxVertexHandler != 'undefined')
 		
 		mxCellEditor.prototype.getMinimumSize = function(state)
 		{
-			var scale = this.graph.getView().scale;
+			let scale = this.graph.getView().scale;
 			
 			return new mxRectangle(0, 0, (state.text == null) ? 30 :  state.text.size * scale + 20, 30);
 		};
@@ -10078,7 +10078,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		function createHint()
 		{
-			var hint = document.createElement('div');
+			let hint = document.createElement('div');
 			hint.className = 'geHint';
 			hint.style.whiteSpace = 'nowrap';
 			hint.style.position = 'absolute';
@@ -10121,11 +10121,11 @@ if (typeof mxVertexHandler != 'undefined')
 					this.graph.container.appendChild(this.hint);
 				}
 	
-				var t = this.graph.view.translate;
-				var s = this.graph.view.scale;
-				var x = this.roundLength((this.bounds.x + this.currentDx) / s - t.x);
-				var y = this.roundLength((this.bounds.y + this.currentDy) / s - t.y);
-				var unit = this.graph.view.unit;
+				let t = this.graph.view.translate;
+				let s = this.graph.view.scale;
+				let x = this.roundLength((this.bounds.x + this.currentDx) / s - t.x);
+				let y = this.roundLength((this.bounds.y + this.currentDy) / s - t.y);
+				let unit = this.graph.view.unit;
 				
 				this.hint.innerHTML = formatHintText(x, unit) + ', ' + formatHintText(y, unit);
 				
@@ -10151,16 +10151,16 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Overridden to allow for shrinking pools when lanes are resized.
 		 */
-		var stackLayoutResizeCell = mxStackLayout.prototype.resizeCell;
+		let stackLayoutResizeCell = mxStackLayout.prototype.resizeCell;
 		mxStackLayout.prototype.resizeCell = function(cell, bounds)
 		{
 			stackLayoutResizeCell.apply(this, arguments);
-			var style = this.graph.getCellStyle(cell);
+			let style = this.graph.getCellStyle(cell);
 				
 			if (style['childLayout'] == null)
 			{
-				var parent = this.graph.model.getParent(cell);
-				var geo = (parent != null) ? this.graph.getCellGeometry(parent) : null;
+				let parent = this.graph.model.getParent(cell);
+				let geo = (parent != null) ? this.graph.getCellGeometry(parent) : null;
 			
 				if (geo != null)
 				{
@@ -10168,9 +10168,9 @@ if (typeof mxVertexHandler != 'undefined')
 					
 					if (style['childLayout'] == 'stackLayout')
 					{
-						var border = parseFloat(mxUtils.getValue(style, 'stackBorder', mxStackLayout.prototype.border));
-						var horizontal = mxUtils.getValue(style, 'horizontalStack', '1') == '1';
-						var start = this.graph.getActualStartSize(parent);
+						let border = parseFloat(mxUtils.getValue(style, 'stackBorder', mxStackLayout.prototype.border));
+						let horizontal = mxUtils.getValue(style, 'horizontalStack', '1') == '1';
+						let start = this.graph.getActualStartSize(parent);
 						geo = geo.clone();
 						
 						if (horizontal)
@@ -10191,13 +10191,13 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Shows handle for table instead of rows and cells.
 		 */
-		var selectionCellsHandlerGetHandledSelectionCells = mxSelectionCellsHandler.prototype.getHandledSelectionCells;
+		let selectionCellsHandlerGetHandledSelectionCells = mxSelectionCellsHandler.prototype.getHandledSelectionCells;
 		mxSelectionCellsHandler.prototype.getHandledSelectionCells = function()
 		{
-			var cells = selectionCellsHandlerGetHandledSelectionCells.apply(this, arguments);
-			var dict = new mxDictionary();
-			var model = this.graph.model;
-			var result = [];
+			let cells = selectionCellsHandlerGetHandledSelectionCells.apply(this, arguments);
+			let dict = new mxDictionary();
+			let model = this.graph.model;
+			let result = [];
 			
 			function addCell(cell)
 			{
@@ -10208,9 +10208,9 @@ if (typeof mxVertexHandler != 'undefined')
 				}
 			};
 			
-			for (var i = 0; i < cells.length; i++)
+			for (let i = 0; i < cells.length; i++)
 			{
-				var cell = cells[i];
+				let cell = cells[i];
 				
 				if (this.graph.isTableCell(cell))
 				{
@@ -10230,10 +10230,10 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Creates the shape used to draw the selection border.
 		 */
-		var vertexHandlerCreateParentHighlightShape = mxVertexHandler.prototype.createParentHighlightShape;
+		let vertexHandlerCreateParentHighlightShape = mxVertexHandler.prototype.createParentHighlightShape;
 		mxVertexHandler.prototype.createParentHighlightShape = function(bounds)
 		{
-			var shape = vertexHandlerCreateParentHighlightShape.apply(this, arguments);
+			let shape = vertexHandlerCreateParentHighlightShape.apply(this, arguments);
 			
 			shape.stroke = '#C0C0C0';
 			shape.strokewidth = 1;
@@ -10244,10 +10244,10 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Creates the shape used to draw the selection border.
 		 */
-		var edgeHandlerCreateParentHighlightShape = mxEdgeHandler.prototype.createParentHighlightShape;
+		let edgeHandlerCreateParentHighlightShape = mxEdgeHandler.prototype.createParentHighlightShape;
 		mxEdgeHandler.prototype.createParentHighlightShape = function(bounds)
 		{
-			var shape = edgeHandlerCreateParentHighlightShape.apply(this, arguments);
+			let shape = edgeHandlerCreateParentHighlightShape.apply(this, arguments);
 			
 			shape.stroke = '#C0C0C0';
 			shape.strokewidth = 1;
@@ -10261,7 +10261,7 @@ if (typeof mxVertexHandler != 'undefined')
 		mxVertexHandler.prototype.rotationHandleVSpacing = -12;
 		mxVertexHandler.prototype.getRotationHandlePosition = function()
 		{
-			var padding = this.getHandlePadding();
+			let padding = this.getHandlePadding();
 			
 			return new mxPoint(this.bounds.x + this.bounds.width - this.rotationHandleVSpacing + padding.x / 2,
 				this.bounds.y + this.rotationHandleVSpacing - padding.y / 2)
@@ -10292,7 +10292,7 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Hides rotation handle for table cells and rows.
 		 */
-		var vertexHandlerIsRotationHandleVisible = mxVertexHandler.prototype.isRotationHandleVisible;
+		let vertexHandlerIsRotationHandleVisible = mxVertexHandler.prototype.isRotationHandleVisible;
 		mxVertexHandler.prototype.isRotationHandleVisible = function()
 		{
 			return vertexHandlerIsRotationHandleVisible.apply(this, arguments)  &&
@@ -10319,7 +10319,7 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Hides rotation handle for table cells and rows.
 		 */
-		var vertexHandlerIsParentHighlightVisible = mxVertexHandler.prototype.isParentHighlightVisible;
+		let vertexHandlerIsParentHighlightVisible = mxVertexHandler.prototype.isParentHighlightVisible;
 		mxVertexHandler.prototype.isParentHighlightVisible = function()
 		{
 			return vertexHandlerIsParentHighlightVisible.apply(this, arguments) &&
@@ -10330,7 +10330,7 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Hides rotation handle for table cells and rows.
 		 */
-		var vertexHandlerIsCustomHandleVisible = mxVertexHandler.prototype.isCustomHandleVisible;
+		let vertexHandlerIsCustomHandleVisible = mxVertexHandler.prototype.isCustomHandleVisible;
 		mxVertexHandler.prototype.isCustomHandleVisible = function(handle)
 		{
 			return handle.tableHandle ||
@@ -10344,7 +10344,7 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		mxVertexHandler.prototype.getSelectionBorderInset = function()
 		{
-			var result = 0;
+			let result = 0;
 			
 			if (this.graph.isTableRow(this.state.cell))
 			{
@@ -10361,7 +10361,7 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Adds custom handles for table cells.
 		 */
-		var vertexHandlerGetSelectionBorderBounds = mxVertexHandler.prototype.getSelectionBorderBounds;
+		let vertexHandlerGetSelectionBorderBounds = mxVertexHandler.prototype.getSelectionBorderBounds;
 		mxVertexHandler.prototype.getSelectionBorderBounds = function()
 		{
 			return vertexHandlerGetSelectionBorderBounds.apply(this, arguments).grow(
@@ -10371,18 +10371,18 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Adds custom handles for table cells.
 		 */
-		var vertexHandlerCreateCustomHandles = mxVertexHandler.prototype.createCustomHandles;
+		let vertexHandlerCreateCustomHandles = mxVertexHandler.prototype.createCustomHandles;
 		mxVertexHandler.prototype.createCustomHandles = function()
 		{
-			var handles = vertexHandlerCreateCustomHandles.apply(this, arguments);
+			let handles = vertexHandlerCreateCustomHandles.apply(this, arguments);
 			
 			if (this.graph.isTable(this.state.cell))
 			{
-				var graph = this.graph;
-				var model = graph.model;
-				var tableState = this.state;
-				var sel = this.selectionBorder;
-				var self = this;
+				let graph = this.graph;
+				let model = graph.model;
+				let tableState = this.state;
+				let sel = this.selectionBorder;
+				let self = this;
 				
 				if (handles == null)
 				{
@@ -10390,29 +10390,29 @@ if (typeof mxVertexHandler != 'undefined')
 				}
 				
 				// Adds handles for rows and columns
-				var rows = graph.view.getCellStates(model.getChildCells(this.state.cell, true));
+				let rows = graph.view.getCellStates(model.getChildCells(this.state.cell, true));
 				
 				if (rows.length > 0)
 				{
-					var cols = graph.view.getCellStates(model.getChildCells(rows[0].cell, true));
+					let cols = graph.view.getCellStates(model.getChildCells(rows[0].cell, true));
 	
 					// Adds column width handles
-					for (var i = 0; i < cols.length; i++)
+					for (let i = 0; i < cols.length; i++)
 					{
 						(mxUtils.bind(this, function(index)
 						{
-							var colState = cols[index];
-							var nextCol = (index < cols.length - 1) ? cols[index + 1] : null;
+							let colState = cols[index];
+							let nextCol = (index < cols.length - 1) ? cols[index + 1] : null;
 							
-							var shape = new mxLine(new mxRectangle(), mxConstants.NONE, 1, true);
+							let shape = new mxLine(new mxRectangle(), mxConstants.NONE, 1, true);
 							shape.isDashed = sel.isDashed;
 							
 							// Workaround for event handling on overlapping cells with tolerance
 							shape.svgStrokeTolerance++;
 							
-							var handle = new mxHandle(colState, 'col-resize', null, shape);
+							let handle = new mxHandle(colState, 'col-resize', null, shape);
 							handle.tableHandle = true;
-							var dx = 0;
+							let dx = 0;
 							
 							handle.shape.node.parentNode.insertBefore(handle.shape.node,
 								handle.shape.node.parentNode.firstChild);
@@ -10421,7 +10421,7 @@ if (typeof mxVertexHandler != 'undefined')
 							{
 								if (this.shape != null && this.state.shape != null)
 								{
-									var start = graph.getActualStartSize(tableState.cell);
+									let start = graph.getActualStartSize(tableState.cell);
 									this.shape.stroke = (dx == 0) ? mxConstants.NONE : sel.stroke;
 									this.shape.bounds.x = this.state.x + this.state.width +
 										dx * this.graph.view.scale;
@@ -10435,7 +10435,7 @@ if (typeof mxVertexHandler != 'undefined')
 								}
 							};
 							
-							var shiftPressed = false;
+							let shiftPressed = false;
 							
 							handle.setPosition = function(bounds, pt, me)
 							{
@@ -10460,7 +10460,7 @@ if (typeof mxVertexHandler != 'undefined')
 								}
 								else if (!self.blockDelayedSelection)
 								{
-									var temp = graph.getCellAt(me.getGraphX(), me.getGraphY()) || tableState.cell;
+									let temp = graph.getCellAt(me.getGraphX(), me.getGraphY()) || tableState.cell;
 									graph.graphHandler.selectCellForEvent(temp, me);
 								}
 								
@@ -10477,19 +10477,19 @@ if (typeof mxVertexHandler != 'undefined')
 					}
 					
 					// Adds row height handles
-					for (var i = 0; i < rows.length; i++)
+					for (let i = 0; i < rows.length; i++)
 					{
 						(mxUtils.bind(this, function(index)
 						{
-							var rowState = rows[index];
+							let rowState = rows[index];
 	
-							var shape = new mxLine(new mxRectangle(), mxConstants.NONE, 1);
+							let shape = new mxLine(new mxRectangle(), mxConstants.NONE, 1);
 							shape.isDashed = sel.isDashed;
 							shape.svgStrokeTolerance++;
 							
-							var handle = new mxHandle(rowState, 'row-resize', null, shape);
+							let handle = new mxHandle(rowState, 'row-resize', null, shape);
 							handle.tableHandle = true;
-							var dy = 0;
+							let dy = 0;
 	
 							handle.shape.node.parentNode.insertBefore(handle.shape.node,
 								handle.shape.node.parentNode.firstChild);
@@ -10523,7 +10523,7 @@ if (typeof mxVertexHandler != 'undefined')
 								}
 								else if (!self.blockDelayedSelection)
 								{
-									var temp = graph.getCellAt(me.getGraphX(), me.getGraphY()) || tableState.cell; 
+									let temp = graph.getCellAt(me.getGraphX(), me.getGraphY()) || tableState.cell;
 									graph.graphHandler.selectCellForEvent(temp, me);
 								}
 								
@@ -10545,7 +10545,7 @@ if (typeof mxVertexHandler != 'undefined')
 			return (handles != null) ? handles.reverse() : null;
 		};
 
-		var vertexHandlerSetHandlesVisible = mxVertexHandler.prototype.setHandlesVisible;
+		let vertexHandlerSetHandlesVisible = mxVertexHandler.prototype.setHandlesVisible;
 
 		mxVertexHandler.prototype.setHandlesVisible = function(visible)
 		{
@@ -10553,7 +10553,7 @@ if (typeof mxVertexHandler != 'undefined')
 
 			if (this.moveHandles != null)
 			{
-				for (var i = 0; i < this.moveHandles.length; i++)
+				for (let i = 0; i < this.moveHandles.length; i++)
 				{
 					this.moveHandles[i].style.visibility = (visible) ? '' : 'hidden';
 				}
@@ -10561,7 +10561,7 @@ if (typeof mxVertexHandler != 'undefined')
 			
 			if (this.cornerHandles != null)
 			{
-				for (var i = 0; i < this.cornerHandles.length; i++)
+				for (let i = 0; i < this.cornerHandles.length; i++)
 				{
 					this.cornerHandles[i].node.style.visibility = (visible) ? '' : 'hidden';
 				}
@@ -10573,13 +10573,13 @@ if (typeof mxVertexHandler != 'undefined')
 		 */
 		mxVertexHandler.prototype.refreshMoveHandles = function()
 		{
-			var graph = this.graph;
-			var model = graph.model;
+			let graph = this.graph;
+			let model = graph.model;
 			
 			// Destroys existing handles
 			if (this.moveHandles != null)
 			{
-				for (var i = 0; i < this.moveHandles.length; i++)
+				for (let i = 0; i < this.moveHandles.length; i++)
 				{
 					this.moveHandles[i].parentNode.removeChild(this.moveHandles[i]);
 				}
@@ -10590,7 +10590,7 @@ if (typeof mxVertexHandler != 'undefined')
 			// Creates new handles
 			this.moveHandles = [];
 			
-			for (var i = 0; i < model.getChildCount(this.state.cell); i++)
+			for (let i = 0; i < model.getChildCount(this.state.cell); i++)
 			{
 				(mxUtils.bind(this, function(rowState)
 				{
@@ -10598,7 +10598,7 @@ if (typeof mxVertexHandler != 'undefined')
 					{
 						// Adds handle to move row
 						// LATER: Move to overlay pane to hide during zoom but keep padding
-						var moveHandle = mxUtils.createImage(Editor.rowMoveImage);
+						let moveHandle = mxUtils.createImage(Editor.rowMoveImage);
 						moveHandle.style.position = 'absolute';
 						moveHandle.style.cursor = 'pointer';
 						moveHandle.style.width = '7px';
@@ -10653,7 +10653,7 @@ if (typeof mxVertexHandler != 'undefined')
 		{
 			if (this.customHandles != null)
 			{
-				for (var i = 0; i < this.customHandles.length; i++)
+				for (let i = 0; i < this.customHandles.length; i++)
 				{
 					this.customHandles[i].destroy();
 				}
@@ -10670,12 +10670,12 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Adds handle padding for editing cells and exceptions.
 		 */
-		var vertexHandlerGetHandlePadding = mxVertexHandler.prototype.getHandlePadding;
+		let vertexHandlerGetHandlePadding = mxVertexHandler.prototype.getHandlePadding;
 		mxVertexHandler.prototype.getHandlePadding = function()
 		{
-			var result = new mxPoint(0, 0);
-			var tol = this.tolerance;
-			var name = this.state.style['shape'];
+			let result = new mxPoint(0, 0);
+			let tol = this.tolerance;
+			let name = this.state.style['shape'];
 
 			if (mxCellRenderer.defaultShapes[name] == null &&
 				mxStencilRegistry.getStencil(name) == null)
@@ -10684,21 +10684,21 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 			
 			// Checks if custom handles are overlapping with the shape border
-			var handlePadding = this.graph.isTable(this.state.cell) ||
+			let handlePadding = this.graph.isTable(this.state.cell) ||
 				this.graph.cellEditor.getEditingCell() == this.state.cell;
 			
 			if (!handlePadding)
 			{
 				if (this.customHandles != null)
 				{
-					for (var i = 0; i < this.customHandles.length; i++)
+					for (let i = 0; i < this.customHandles.length; i++)
 					{
 						if (this.customHandles[i].shape != null &&
 							this.customHandles[i].shape.bounds != null)
 						{
-							var b = this.customHandles[i].shape.bounds;
-							var px = b.getCenterX();
-							var py = b.getCenterY();
+							let b = this.customHandles[i].shape.bounds;
+							let px = b.getCenterX();
+							let py = b.getCenterY();
 							
 							if ((Math.abs(this.state.x - px) < b.width / 2) ||
 								(Math.abs(this.state.y - py) < b.height / 2) ||
@@ -10754,14 +10754,14 @@ if (typeof mxVertexHandler != 'undefined')
 				}
 				else
 				{
-					var s = this.state.view.scale;
-					var unit = this.state.view.unit;
+					let s = this.state.view.scale;
+					let unit = this.state.view.unit;
 					this.hint.innerHTML = formatHintText(this.roundLength(this.bounds.width / s), unit) + ' x ' + 
 											formatHintText(this.roundLength(this.bounds.height / s), unit);
 				}
 				
-				var rot = (this.currentAlpha != null) ? this.currentAlpha : this.state.style[mxConstants.STYLE_ROTATION] || '0';
-				var bb = mxUtils.getBoundingBox(this.bounds, rot);
+				let rot = (this.currentAlpha != null) ? this.currentAlpha : this.state.style[mxConstants.STYLE_ROTATION] || '0';
+				let bb = mxUtils.getBoundingBox(this.bounds, rot);
 				
 				if (bb == null)
 				{
@@ -10794,7 +10794,7 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Hides link hint while moving cells.
 		 */
-		var edgeHandlerMouseMove = mxEdgeHandler.prototype.mouseMove;
+		let edgeHandlerMouseMove = mxEdgeHandler.prototype.mouseMove;
 		
 		mxEdgeHandler.prototype.mouseMove = function(sender, me)
 		{
@@ -10810,7 +10810,7 @@ if (typeof mxVertexHandler != 'undefined')
 		/**
 		 * Hides link hint while moving cells.
 		 */
-		var edgeHandlerMouseUp = mxEdgeHandler.prototype.mouseUp;
+		let edgeHandlerMouseUp = mxEdgeHandler.prototype.mouseUp;
 		
 		mxEdgeHandler.prototype.mouseUp = function(sender, me)
 		{
@@ -10833,11 +10833,11 @@ if (typeof mxVertexHandler != 'undefined')
 				this.state.view.graph.container.appendChild(this.hint);
 			}
 	
-			var t = this.graph.view.translate;
-			var s = this.graph.view.scale;
-			var x = this.roundLength(point.x / s - t.x);
-			var y = this.roundLength(point.y / s - t.y);
-			var unit = this.graph.view.unit;
+			let t = this.graph.view.translate;
+			let s = this.graph.view.scale;
+			let x = this.roundLength(point.x / s - t.x);
+			let y = this.roundLength(point.y / s - t.y);
+			let unit = this.graph.view.unit;
 			
 			this.hint.innerHTML = formatHintText(x, unit) + ', ' + formatHintText(y, unit);
 			this.hint.style.visibility = 'visible';
@@ -10847,7 +10847,7 @@ if (typeof mxVertexHandler != 'undefined')
 				if (this.constraintHandler.currentConstraint != null &&
 					this.constraintHandler.currentFocus != null)
 				{
-					var pt = this.constraintHandler.currentConstraint.point;
+					let pt = this.constraintHandler.currentConstraint.point;
 					this.hint.innerHTML = '[' + Math.round(pt.x * 100) + '%, '+ Math.round(pt.y * 100) + '%]';
 				}
 				else if (this.marker.hasValidState())
@@ -10989,7 +10989,7 @@ if (typeof mxVertexHandler != 'undefined')
 			// One finger pans (no rubberband selection) must start regardless of mouse button
 			mxPanningHandler.prototype.isPanningTrigger = function(me)
 			{
-				var evt = me.getEvent();
+				let evt = me.getEvent();
 				
 			 	return (me.getState() == null && !mxEvent.isMouseEvent(evt)) ||
 			 		(mxEvent.isPopupTrigger(evt) && (me.getState() == null ||
@@ -10997,7 +10997,7 @@ if (typeof mxVertexHandler != 'undefined')
 			};
 			
 			// Don't clear selection if multiple cells selected
-			var graphHandlerMouseDown = mxGraphHandler.prototype.mouseDown;
+			let graphHandlerMouseDown = mxGraphHandler.prototype.mouseDown;
 			mxGraphHandler.prototype.mouseDown = function(sender, me)
 			{
 				graphHandlerMouseDown.apply(this, arguments);
@@ -11014,7 +11014,7 @@ if (typeof mxVertexHandler != 'undefined')
 			// Removes ctrl+shift as panning trigger for space splitting
 			mxPanningHandler.prototype.isPanningTrigger = function(me)
 			{
-				var evt = me.getEvent();
+				let evt = me.getEvent();
 				
 				return (mxEvent.isLeftMouseButton(evt) && ((this.useLeftButtonForPanning &&
 						me.getState() == null) || (mxEvent.isControlDown(evt) &&
@@ -11053,12 +11053,12 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 			else
 			{
-				var execute = this.div != null && this.div.style.display != 'none';
+				let execute = this.div != null && this.div.style.display != 'none';
 	
 				var x0 = null;
 				var y0 = null;
-				var dx = null;
-				var dy = null;
+				let dx = null;
+				let dy = null;
 	
 				if (this.first != null && this.currentX != null && this.currentY != null)
 				{
@@ -11093,8 +11093,8 @@ if (typeof mxVertexHandler != 'undefined')
 				{
 					if (mxEvent.isAltDown(me.getEvent()) && this.graph.isToggleEvent(me.getEvent()))
 					{
-						var rect = new mxRectangle(this.x, this.y, this.width, this.height);
-						var cells = this.graph.getCells(rect.x, rect.y, rect.width, rect.height);
+						let rect = new mxRectangle(this.x, this.y, this.width, this.height);
+						let cells = this.graph.getCells(rect.x, rect.y, rect.width, rect.height);
 						
 						this.graph.removeSelectionCells(cells);
 					}
@@ -11103,14 +11103,14 @@ if (typeof mxVertexHandler != 'undefined')
 						this.graph.model.beginUpdate();
 						try
 						{
-							var cells = this.graph.getCellsBeyond(x0, y0, this.graph.getDefaultParent(), true, true);
+							let cells = this.graph.getCellsBeyond(x0, y0, this.graph.getDefaultParent(), true, true);
 	
-							for (var i = 0; i < cells.length; i++)
+							for (let i = 0; i < cells.length; i++)
 							{
 								if (this.graph.isCellMovable(cells[i]))
 								{
-									var tmp = this.graph.view.getState(cells[i]);
-									var geo = this.graph.getCellGeometry(cells[i]);
+									let tmp = this.graph.view.getState(cells[i]);
+									let geo = this.graph.getCellGeometry(cells[i]);
 									
 									if (tmp != null && geo != null)
 									{
@@ -11128,7 +11128,7 @@ if (typeof mxVertexHandler != 'undefined')
 					}
 					else
 					{
-						var rect = new mxRectangle(this.x, this.y, this.width, this.height);
+						let rect = new mxRectangle(this.x, this.y, this.width, this.height);
 						this.graph.selectRegion(rect, me.getEvent());
 					}
 					
@@ -11142,15 +11142,15 @@ if (typeof mxVertexHandler != 'undefined')
 		{
 			if (!me.isConsumed() && this.first != null)
 			{
-				var origin = mxUtils.getScrollOrigin(this.graph.container);
-				var offset = mxUtils.getOffset(this.graph.container);
+				let origin = mxUtils.getScrollOrigin(this.graph.container);
+				let offset = mxUtils.getOffset(this.graph.container);
 				origin.x -= offset.x;
 				origin.y -= offset.y;
-				var x = me.getX() + origin.x;
-				var y = me.getY() + origin.y;
-				var dx = this.first.x - x;
-				var dy = this.first.y - y;
-				var tol = this.graph.tolerance;
+				let x = me.getX() + origin.x;
+				let y = me.getY() + origin.y;
+				let dx = this.first.x - x;
+				let dy = this.first.y - y;
+				let tol = this.graph.tolerance;
 				
 				if (this.div != null || Math.abs(dx) > tol ||  Math.abs(dy) > tol)
 				{
@@ -11166,9 +11166,9 @@ if (typeof mxVertexHandler != 'undefined')
 					
 					if (this.isSpaceEvent(me))
 					{
-						var right = this.x + this.width;
-						var bottom = this.y + this.height;
-						var scale = this.graph.view.scale;
+						let right = this.x + this.width;
+						let bottom = this.y + this.height;
+						let scale = this.graph.view.scale;
 						
 						if (!mxEvent.isAltDown(me.getEvent()))
 						{
@@ -11239,7 +11239,7 @@ if (typeof mxVertexHandler != 'undefined')
 		};
 		
 		// Removes preview
-		var mxRubberbandReset = mxRubberband.prototype.reset;
+		let mxRubberbandReset = mxRubberband.prototype.reset;
 		mxRubberband.prototype.reset = function()
 		{
 			if (this.secondDiv != null)
@@ -11252,10 +11252,10 @@ if (typeof mxVertexHandler != 'undefined')
 		};
 		
 	    // Timer-based activation of outline connect in connection handler
-	    var startTime = new Date().getTime();
-	    var timeOnTarget = 0;
+	    let startTime = new Date().getTime();
+	    let timeOnTarget = 0;
 	    
-		var mxEdgeHandlerUpdatePreviewState = mxEdgeHandler.prototype.updatePreviewState;
+		let mxEdgeHandlerUpdatePreviewState = mxEdgeHandler.prototype.updatePreviewState;
 		
 		mxEdgeHandler.prototype.updatePreviewState = function(edge, point, terminalState, me)
 		{
@@ -11275,7 +11275,7 @@ if (typeof mxVertexHandler != 'undefined')
 		};
 	
 		// Timer-based outline connect
-		var mxEdgeHandlerIsOutlineConnectEvent = mxEdgeHandler.prototype.isOutlineConnectEvent;
+		let mxEdgeHandlerIsOutlineConnectEvent = mxEdgeHandler.prototype.isOutlineConnectEvent;
 		
 		mxEdgeHandler.prototype.isOutlineConnectEvent = function(me)
 		{
@@ -11287,18 +11287,18 @@ if (typeof mxVertexHandler != 'undefined')
 		// Shows secondary handle for fixed connection points
 		mxEdgeHandler.prototype.createHandleShape = function(index, virtual)
 		{
-			var source = index != null && index == 0;
-			var terminalState = this.state.getVisibleTerminalState(source);
-			var c = (index != null && (index == 0 || index >= this.state.absolutePoints.length - 1 ||
+			let source = index != null && index == 0;
+			let terminalState = this.state.getVisibleTerminalState(source);
+			let c = (index != null && (index == 0 || index >= this.state.absolutePoints.length - 1 ||
 				(this.constructor == mxElbowEdgeHandler && index == 2))) ?
 				this.graph.getConnectionConstraint(this.state, terminalState, source) : null;
-			var pt = (c != null) ? this.graph.getConnectionPoint(this.state.getVisibleTerminalState(source), c) : null;
-			var img = (pt != null) ? this.fixedHandleImage : ((c != null && terminalState != null) ?
+			let pt = (c != null) ? this.graph.getConnectionPoint(this.state.getVisibleTerminalState(source), c) : null;
+			let img = (pt != null) ? this.fixedHandleImage : ((c != null && terminalState != null) ?
 				this.terminalHandleImage : this.handleImage);
 			
 			if (img != null)
 			{
-				var shape = new mxImageShape(new mxRectangle(0, 0, img.width, img.height), img.src);
+				let shape = new mxImageShape(new mxRectangle(0, 0, img.width, img.height), img.src);
 				
 				// Allows HTML rendering of the images
 				shape.preserveImageAspect = false;
@@ -11307,7 +11307,7 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 			else
 			{
-				var s = mxConstants.HANDLE_SIZE;
+				let s = mxConstants.HANDLE_SIZE;
 				
 				if (this.preferHtml)
 				{
@@ -11318,7 +11318,7 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 		};
 	
-		var vertexHandlerCreateSizerShape = mxVertexHandler.prototype.createSizerShape;
+		let vertexHandlerCreateSizerShape = mxVertexHandler.prototype.createSizerShape;
 		mxVertexHandler.prototype.createSizerShape = function(bounds, index, fillColor)
 		{
 			this.handleImage = (index == mxEvent.ROTATION_HANDLE) ? HoverIcons.prototype.rotationHandle : (index == mxEvent.LABEL_HANDLE) ? this.secondaryHandleImage : this.handleImage;
@@ -11327,18 +11327,18 @@ if (typeof mxVertexHandler != 'undefined')
 		};
 		
 		// Special case for single edge label handle moving in which case the text bounding box is used
-		var mxGraphHandlerGetBoundingBox = mxGraphHandler.prototype.getBoundingBox;
+		let mxGraphHandlerGetBoundingBox = mxGraphHandler.prototype.getBoundingBox;
 		mxGraphHandler.prototype.getBoundingBox = function(cells)
 		{
 			if (cells != null && cells.length == 1)
 			{
-				var model = this.graph.getModel();
-				var parent = model.getParent(cells[0]);
-				var geo = this.graph.getCellGeometry(cells[0]);
+				let model = this.graph.getModel();
+				let parent = model.getParent(cells[0]);
+				let geo = this.graph.getCellGeometry(cells[0]);
 				
 				if (model.isEdge(parent) && geo != null && geo.relative)
 				{
-					var state = this.graph.view.getState(cells[0]);
+					let state = this.graph.view.getState(cells[0]);
 					
 					if (state != null && state.width < 2 && state.height < 2 && state.text != null &&
 						state.text.boundingBox != null)
@@ -11352,15 +11352,15 @@ if (typeof mxVertexHandler != 'undefined')
 		};
 
 		// Ignores child cells with part style as guides
-		var mxGraphHandlerGetGuideStates = mxGraphHandler.prototype.getGuideStates;
+		let mxGraphHandlerGetGuideStates = mxGraphHandler.prototype.getGuideStates;
 		
 		mxGraphHandler.prototype.getGuideStates = function()
 		{
-			var states = mxGraphHandlerGetGuideStates.apply(this, arguments);
-			var result = [];
+			let states = mxGraphHandlerGetGuideStates.apply(this, arguments);
+			let result = [];
 			
 			// NOTE: Could do via isStateIgnored hook
-			for (var i = 0; i < states.length; i++)
+			for (let i = 0; i < states.length; i++)
 			{
 				if (mxUtils.getValue(states[i].style, 'part', '0') != '1')
 				{
@@ -11372,16 +11372,16 @@ if (typeof mxVertexHandler != 'undefined')
 		};
 
 		// Uses text bounding box for edge labels
-		var mxVertexHandlerGetSelectionBounds = mxVertexHandler.prototype.getSelectionBounds;
+		let mxVertexHandlerGetSelectionBounds = mxVertexHandler.prototype.getSelectionBounds;
 		mxVertexHandler.prototype.getSelectionBounds = function(state)
 		{
-			var model = this.graph.getModel();
-			var parent = model.getParent(state.cell);
-			var geo = this.graph.getCellGeometry(state.cell);
+			let model = this.graph.getModel();
+			let parent = model.getParent(state.cell);
+			let geo = this.graph.getCellGeometry(state.cell);
 			
 			if (model.isEdge(parent) && geo != null && geo.relative && state.width < 2 && state.height < 2 && state.text != null && state.text.boundingBox != null)
 			{
-				var bbox = state.text.unrotatedBoundingBox || state.text.boundingBox;
+				let bbox = state.text.unrotatedBoundingBox || state.text.boundingBox;
 				
 				return new mxRectangle(Math.round(bbox.x), Math.round(bbox.y), Math.round(bbox.width), Math.round(bbox.height));
 			}
@@ -11393,15 +11393,15 @@ if (typeof mxVertexHandler != 'undefined')
 	
 		// Redirects moving of edge labels to mxGraphHandler by not starting here.
 		// This will use the move preview of mxGraphHandler (see above).
-		var mxVertexHandlerMouseDown = mxVertexHandler.prototype.mouseDown;
+		let mxVertexHandlerMouseDown = mxVertexHandler.prototype.mouseDown;
 		mxVertexHandler.prototype.mouseDown = function(sender, me)
 		{
-			var model = this.graph.getModel();
-			var parent = model.getParent(this.state.cell);
-			var geo = this.graph.getCellGeometry(this.state.cell);
+			let model = this.graph.getModel();
+			let parent = model.getParent(this.state.cell);
+			let geo = this.graph.getCellGeometry(this.state.cell);
 			
 			// Lets rotation events through
-			var handle = this.getHandleForEvent(me);
+			let handle = this.getHandleForEvent(me);
 			
 			if (handle == mxEvent.ROTATION_HANDLE || !model.isEdge(parent) || geo == null || !geo.relative ||
 				this.state == null || this.state.width >= 2 || this.state.height >= 2)
@@ -11413,13 +11413,13 @@ if (typeof mxVertexHandler != 'undefined')
 		// Invokes turn on single click on rotation handle
 		mxVertexHandler.prototype.rotateClick = function()
 		{
-			var stroke = mxUtils.getValue(this.state.style, mxConstants.STYLE_STROKECOLOR, mxConstants.NONE);
-			var fill = mxUtils.getValue(this.state.style, mxConstants.STYLE_FILLCOLOR, mxConstants.NONE);
+			let stroke = mxUtils.getValue(this.state.style, mxConstants.STYLE_STROKECOLOR, mxConstants.NONE);
+			let fill = mxUtils.getValue(this.state.style, mxConstants.STYLE_FILLCOLOR, mxConstants.NONE);
 			
 			if (this.state.view.graph.model.isVertex(this.state.cell) &&
 				stroke == mxConstants.NONE && fill == mxConstants.NONE)
 			{
-				var angle = mxUtils.mod(mxUtils.getValue(this.state.style, mxConstants.STYLE_ROTATION, 0) + 90, 360);
+				let angle = mxUtils.mod(mxUtils.getValue(this.state.style, mxConstants.STYLE_ROTATION, 0) + 90, 360);
 				this.state.view.graph.setCellStyles(mxConstants.STYLE_ROTATION, angle, [this.state.cell]);
 			}
 			else
@@ -11428,7 +11428,7 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 		};
 
-		var vertexHandlerMouseMove = mxVertexHandler.prototype.mouseMove;
+		let vertexHandlerMouseMove = mxVertexHandler.prototype.mouseMove;
 	
 		// Workaround for "isConsumed not defined" in MS Edge is to use arguments
 		mxVertexHandler.prototype.mouseMove = function(sender, me)
@@ -11449,7 +11449,7 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 		};
 		
-		var vertexHandlerMouseUp = mxVertexHandler.prototype.mouseUp;
+		let vertexHandlerMouseUp = mxVertexHandler.prototype.mouseUp;
 		
 		mxVertexHandler.prototype.mouseUp = function(sender, me)
 		{
@@ -11470,11 +11470,11 @@ if (typeof mxVertexHandler != 'undefined')
 			this.blockDelayedSelection = null;
 		};
 	
-		var vertexHandlerInit = mxVertexHandler.prototype.init;
+		let vertexHandlerInit = mxVertexHandler.prototype.init;
 		mxVertexHandler.prototype.init = function()
 		{
 			vertexHandlerInit.apply(this, arguments);
-			var redraw = false;
+			let redraw = false;
 			
 			if (this.rotationShape != null)
 			{
@@ -11492,9 +11492,9 @@ if (typeof mxVertexHandler != 'undefined')
 			{
 				this.cornerHandles = []; 
 				
-				for (var i = 0; i < 4; i++)
+				for (let i = 0; i < 4; i++)
 				{
-					var shape = new mxRectangleShape(new mxRectangle(0, 0, 6, 6),
+					let shape = new mxRectangleShape(new mxRectangle(0, 0, 6, 6),
 						'#ffffff', mxConstants.HANDLE_STROKECOLOR);
 					shape.dialect = (this.graph.dialect != mxConstants.DIALECT_SVG) ?
 						mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG;
@@ -11503,7 +11503,7 @@ if (typeof mxVertexHandler != 'undefined')
 				}
 			}
 
-			var update = mxUtils.bind(this, function()
+			let update = mxUtils.bind(this, function()
 			{
 				if (this.specialHandle != null)
 				{
@@ -11533,8 +11533,8 @@ if (typeof mxVertexHandler != 'undefined')
 			
 			this.graph.addListener(mxEvent.EDITING_STOPPED, this.editingHandler);
 
-			var link = this.graph.getLinkForCell(this.state.cell);
-			var links = this.graph.getLinksForState(this.state);
+			let link = this.graph.getLinkForCell(this.state.cell);
+			let links = this.graph.getLinksForState(this.state);
 			this.updateLinkHint(link, links);
 			
 			if (link != null || (links != null && links.length > 0))
@@ -11581,7 +11581,7 @@ if (typeof mxVertexHandler != 'undefined')
 						
 						if (this.graph.isEnabled() && typeof this.graph.editLink === 'function')
 						{
-							var changeLink = document.createElement('img');
+							let changeLink = document.createElement('img');
 							changeLink.setAttribute('src', Editor.editImage);
 							changeLink.setAttribute('title', mxResources.get('editLink'));
 							changeLink.setAttribute('width', '11');
@@ -11598,7 +11598,7 @@ if (typeof mxVertexHandler != 'undefined')
 								mxEvent.consume(evt);
 							}));
 							
-							var removeLink = document.createElement('img');
+							let removeLink = document.createElement('img');
 							removeLink.setAttribute('src', Dialog.prototype.clearImage);
 							removeLink.setAttribute('title', mxResources.get('removeIt', [mxResources.get('link')]));
 							removeLink.setAttribute('width', '13');
@@ -11618,9 +11618,9 @@ if (typeof mxVertexHandler != 'undefined')
 	
 					if (links != null)
 					{
-						for (var i = 0; i < links.length; i++)
+						for (let i = 0; i < links.length; i++)
 						{
-							var div = document.createElement('div');
+							let div = document.createElement('div');
 							div.style.marginTop = (link != null || i > 0) ? '6px' : '0px';
 							div.appendChild(this.graph.createLinkForHint(
 								links[i].getAttribute('href'),
@@ -11640,7 +11640,7 @@ if (typeof mxVertexHandler != 'undefined')
 		mxEdgeHandler.prototype.updateLinkHint = mxVertexHandler.prototype.updateLinkHint;
 		
 		// Creates special handles
-		var edgeHandlerInit = mxEdgeHandler.prototype.init;
+		let edgeHandlerInit = mxEdgeHandler.prototype.init;
 		mxEdgeHandler.prototype.init = function()
 		{
 			edgeHandlerInit.apply(this, arguments);
@@ -11651,7 +11651,7 @@ if (typeof mxVertexHandler != 'undefined')
 				return this.state.view.graph.connectionHandler.isEnabled();
 			});
 			
-			var update = mxUtils.bind(this, function()
+			let update = mxUtils.bind(this, function()
 			{
 				if (this.linkHint != null)
 				{
@@ -11677,8 +11677,8 @@ if (typeof mxVertexHandler != 'undefined')
 			this.graph.getSelectionModel().addListener(mxEvent.CHANGE, this.changeHandler);
 			this.graph.getModel().addListener(mxEvent.CHANGE, this.changeHandler);
 	
-			var link = this.graph.getLinkForCell(this.state.cell);
-			var links = this.graph.getLinksForState(this.state);
+			let link = this.graph.getLinkForCell(this.state.cell);
+			let links = this.graph.getLinksForState(this.state);
 									
 			if (link != null || (links != null && links.length > 0))
 			{
@@ -11688,7 +11688,7 @@ if (typeof mxVertexHandler != 'undefined')
 		};
 	
 		// Disables connection points
-		var connectionHandlerInit = mxConnectionHandler.prototype.init;
+		let connectionHandlerInit = mxConnectionHandler.prototype.init;
 		
 		mxConnectionHandler.prototype.init = function()
 		{
@@ -11701,12 +11701,12 @@ if (typeof mxVertexHandler != 'undefined')
 		};
 	
 		// Updates special handles
-		var vertexHandlerRedrawHandles = mxVertexHandler.prototype.redrawHandles;
+		let vertexHandlerRedrawHandles = mxVertexHandler.prototype.redrawHandles;
 		mxVertexHandler.prototype.redrawHandles = function()
 		{
 			if (this.moveHandles != null)
 			{
-				for (var i = 0; i < this.moveHandles.length; i++)
+				for (let i = 0; i < this.moveHandles.length; i++)
 				{
 					this.moveHandles[i].style.left = (this.moveHandles[i].rowState.x +
 						this.moveHandles[i].rowState.width - 5) + 'px';
@@ -11717,10 +11717,10 @@ if (typeof mxVertexHandler != 'undefined')
 			
 			if (this.cornerHandles != null)
 			{
-				var inset = this.getSelectionBorderInset();
-				var ch = this.cornerHandles;
-				var w = ch[0].bounds.width / 2;
-				var h = ch[0].bounds.height / 2;
+				let inset = this.getSelectionBorderInset();
+				let ch = this.cornerHandles;
+				let w = ch[0].bounds.width / 2;
+				let h = ch[0].bounds.height / 2;
 				
 				ch[0].bounds.x = this.state.x - w + inset;
 				ch[0].bounds.y = this.state.y - h + inset;
@@ -11735,7 +11735,7 @@ if (typeof mxVertexHandler != 'undefined')
 				ch[3].bounds.y = ch[2].bounds.y;
 				ch[3].redraw();
 				
-				for (var i = 0; i < this.cornerHandles.length; i++)
+				for (let i = 0; i < this.cornerHandles.length; i++)
 				{
 					this.cornerHandles[i].node.style.display = (this.graph.getSelectionCount() == 1) ? '' : 'none';
 				}
@@ -11753,19 +11753,19 @@ if (typeof mxVertexHandler != 'undefined')
 
 			if (this.state != null && this.linkHint != null)
 			{
-				var c = new mxPoint(this.state.getCenterX(), this.state.getCenterY());
-				var tmp = new mxRectangle(this.state.x, this.state.y - 22, this.state.width + 24, this.state.height + 22);
-				var bb = mxUtils.getBoundingBox(tmp, this.state.style[mxConstants.STYLE_ROTATION] || '0', c);
-				var rs = (bb != null) ? mxUtils.getBoundingBox(this.state,
+				let c = new mxPoint(this.state.getCenterX(), this.state.getCenterY());
+				let tmp = new mxRectangle(this.state.x, this.state.y - 22, this.state.width + 24, this.state.height + 22);
+				let bb = mxUtils.getBoundingBox(tmp, this.state.style[mxConstants.STYLE_ROTATION] || '0', c);
+				let rs = (bb != null) ? mxUtils.getBoundingBox(this.state,
 					this.state.style[mxConstants.STYLE_ROTATION] || '0') : this.state;
-				var tb = (this.state.text != null) ? this.state.text.boundingBox : null;
+				let tb = (this.state.text != null) ? this.state.text.boundingBox : null;
 				
 				if (bb == null)
 				{
 					bb = this.state;
 				}
 				
-				var b = bb.y + bb.height;
+				let b = bb.y + bb.height;
 				
 				if (tb != null)
 				{
@@ -11778,14 +11778,14 @@ if (typeof mxVertexHandler != 'undefined')
 		};
 		
 		// Destroys special handles
-		var vertexHandlerDestroy = mxVertexHandler.prototype.destroy;
+		let vertexHandlerDestroy = mxVertexHandler.prototype.destroy;
 		mxVertexHandler.prototype.destroy = function()
 		{
 			vertexHandlerDestroy.apply(this, arguments);
 			
 			if (this.moveHandles != null)
 			{
-				for (var i = 0; i < this.moveHandles.length; i++)
+				for (let i = 0; i < this.moveHandles.length; i++)
 				{
 					if (this.moveHandles[i] != null && this.moveHandles[i].parentNode != null)
 					{
@@ -11798,7 +11798,7 @@ if (typeof mxVertexHandler != 'undefined')
 			
 			if (this.cornerHandles != null)
 			{
-				for (var i = 0; i < this.cornerHandles.length; i++)
+				for (let i = 0; i < this.cornerHandles.length; i++)
 				{
 					if (this.cornerHandles[i] != null && this.cornerHandles[i].node != null &&
 						this.cornerHandles[i].node.parentNode != null)
@@ -11834,7 +11834,7 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 		};
 		
-		var edgeHandlerRedrawHandles = mxEdgeHandler.prototype.redrawHandles;
+		let edgeHandlerRedrawHandles = mxEdgeHandler.prototype.redrawHandles;
 		mxEdgeHandler.prototype.redrawHandles = function()
 		{
 			// Workaround for special case where handler
@@ -11845,7 +11845,7 @@ if (typeof mxVertexHandler != 'undefined')
 		
 				if (this.state != null && this.linkHint != null)
 				{
-					var b = this.state;
+					let b = this.state;
 					
 					if (this.state.text != null && this.state.text.bounds != null)
 					{
@@ -11859,7 +11859,7 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 		};
 	
-		var edgeHandlerReset = mxEdgeHandler.prototype.reset;
+		let edgeHandlerReset = mxEdgeHandler.prototype.reset;
 		mxEdgeHandler.prototype.reset = function()
 		{
 			edgeHandlerReset.apply(this, arguments);
@@ -11870,7 +11870,7 @@ if (typeof mxVertexHandler != 'undefined')
 			}
 		};
 		
-		var edgeHandlerDestroy = mxEdgeHandler.prototype.destroy;
+		let edgeHandlerDestroy = mxEdgeHandler.prototype.destroy;
 		mxEdgeHandler.prototype.destroy = function()
 		{
 			edgeHandlerDestroy.apply(this, arguments);
diff --git a/src/examples/grapheditor/www/js/Menus.js b/src/examples/grapheditor/www/js/Menus.js
index fbef377ce..9a7fe0dcb 100644
--- a/src/examples/grapheditor/www/js/Menus.js
+++ b/src/examples/grapheditor/www/js/Menus.js
@@ -43,17 +43,17 @@ Menus.prototype.defaultFonts = ['Helvetica', 'Verdana', 'Times New Roman', 'Gara
  */
 Menus.prototype.init = function()
 {
-	var graph = this.editorUi.editor.graph;
-	var isGraphEnabled = mxUtils.bind(graph, graph.isEnabled);
+	let graph = this.editorUi.editor.graph;
+	let isGraphEnabled = mxUtils.bind(graph, graph.isEnabled);
 
 	this.customFonts = [];
 	this.customFontSizes = [];
 
 	this.put('fontFamily', new Menu(mxUtils.bind(this, function(menu, parent)
 	{
-		var addItem = mxUtils.bind(this, function(fontname)
+		let addItem = mxUtils.bind(this, function(fontname)
 		{
-			var tr = this.styleChange(menu, fontname, [mxConstants.STYLE_FONTFAMILY], [fontname], null, parent, function()
+			let tr = this.styleChange(menu, fontname, [mxConstants.STYLE_FONTFAMILY], [fontname], null, parent, function()
 			{
 				document.execCommand('fontname', false, fontname);
 			}, function()
@@ -72,7 +72,7 @@ Menus.prototype.init = function()
 			tr.firstChild.nextSibling.style.fontFamily = fontname;
 		});
 		
-		for (var i = 0; i < this.defaultFonts.length; i++)
+		for (let i = 0; i < this.defaultFonts.length; i++)
 		{
 			addItem(this.defaultFonts[i]);
 		}
@@ -81,7 +81,7 @@ Menus.prototype.init = function()
 		
 		if (this.customFonts.length > 0)
 		{
-			for (var i = 0; i < this.customFonts.length; i++)
+			for (let i = 0; i < this.customFonts.length; i++)
 			{
 				addItem(this.customFonts[i]);
 			}
@@ -135,9 +135,9 @@ Menus.prototype.init = function()
 	})));
 	this.put('fontSize', new Menu(mxUtils.bind(this, function(menu, parent)
 	{
-		var sizes = [6, 8, 9, 10, 11, 12, 14, 18, 24, 36, 48, 72];
+		let sizes = [6, 8, 9, 10, 11, 12, 14, 18, 24, 36, 48, 72];
 		
-		var addItem = mxUtils.bind(this, function(fontsize)
+		let addItem = mxUtils.bind(this, function(fontsize)
 		{
 			this.styleChange(menu, fontsize, [mxConstants.STYLE_FONTSIZE], [fontsize], null, parent, function()
 			{
@@ -149,9 +149,9 @@ Menus.prototype.init = function()
 					// Changes the css font size of the first font element inside the in-place editor with size 3
 					// hopefully the above element that we've just created. LATER: Check for new element using
 					// previous result of getElementsByTagName (see other actions)
-					var elts = graph.cellEditor.textarea.getElementsByTagName('font');
+					let elts = graph.cellEditor.textarea.getElementsByTagName('font');
 					
-					for (var i = 0; i < elts.length; i++)
+					for (let i = 0; i < elts.length; i++)
 					{
 						if (elts[i].getAttribute('size') == '3')
 						{
@@ -165,7 +165,7 @@ Menus.prototype.init = function()
 			});
 		});
 		
-		for (var i = 0; i < sizes.length; i++)
+		for (let i = 0; i < sizes.length; i++)
 		{
 			addItem(sizes[i]);
 		}
@@ -174,7 +174,7 @@ Menus.prototype.init = function()
 		
 		if (this.customFontSizes.length > 0)
 		{
-			for (var i = 0; i < this.customFontSizes.length; i++)
+			for (let i = 0; i < this.customFontSizes.length; i++)
 			{
 				addItem(this.customFontSizes[i]);
 			}
@@ -217,9 +217,9 @@ Menus.prototype.init = function()
 	})));
 	this.put('layout', new Menu(mxUtils.bind(this, function(menu, parent)
 	{
-		var promptSpacing = mxUtils.bind(this, function(defaultValue, fn)
+		let promptSpacing = mxUtils.bind(this, function(defaultValue, fn)
 		{
-			var dlg = new FilenameDialog(this.editorUi, defaultValue, mxResources.get('apply'), function(newValue)
+			let dlg = new FilenameDialog(this.editorUi, defaultValue, mxResources.get('apply'), function(newValue)
 			{
 				fn(parseFloat(newValue));
 			}, mxResources.get('spacing'));
@@ -229,29 +229,29 @@ Menus.prototype.init = function()
 		
 		menu.addItem(mxResources.get('horizontalFlow'), null, mxUtils.bind(this, function()
 		{
-			var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_WEST);
+			let layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_WEST);
 			
     		this.editorUi.executeLayout(function()
     		{
-    			var selectionCells = graph.getSelectionCells();
+    			let selectionCells = graph.getSelectionCells();
     			layout.execute(graph.getDefaultParent(), selectionCells.length == 0 ? null : selectionCells);
     		}, true);
 		}), parent);
 		menu.addItem(mxResources.get('verticalFlow'), null, mxUtils.bind(this, function()
 		{
-			var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_NORTH);
+			let layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_NORTH);
 			
     		this.editorUi.executeLayout(function()
     		{
-    			var selectionCells = graph.getSelectionCells();
+    			let selectionCells = graph.getSelectionCells();
     			layout.execute(graph.getDefaultParent(), selectionCells.length == 0 ? null : selectionCells);
     		}, true);
 		}), parent);
 		menu.addSeparator(parent);
 		menu.addItem(mxResources.get('horizontalTree'), null, mxUtils.bind(this, function()
 		{
-			var tmp = graph.getSelectionCell();
-			var roots = null;
+			let tmp = graph.getSelectionCell();
+			let roots = null;
 			
 			if (tmp == null || graph.getModel().getChildCount(tmp) == 0)
 			{
@@ -272,7 +272,7 @@ Menus.prototype.init = function()
 			
 			if (tmp != null)
 			{
-				var layout = new mxCompactTreeLayout(graph, true);
+				let layout = new mxCompactTreeLayout(graph, true);
 				layout.edgeRouting = false;
 				layout.levelDistance = 30;
 				
@@ -289,8 +289,8 @@ Menus.prototype.init = function()
 		}), parent);
 		menu.addItem(mxResources.get('verticalTree'), null, mxUtils.bind(this, function()
 		{
-			var tmp = graph.getSelectionCell();
-			var roots = null;
+			let tmp = graph.getSelectionCell();
+			let roots = null;
 			
 			if (tmp == null || graph.getModel().getChildCount(tmp) == 0)
 			{
@@ -311,7 +311,7 @@ Menus.prototype.init = function()
 			
 			if (tmp != null)
 			{
-				var layout = new mxCompactTreeLayout(graph, false);
+				let layout = new mxCompactTreeLayout(graph, false);
 				layout.edgeRouting = false;
 				layout.levelDistance = 30;
 				
@@ -328,8 +328,8 @@ Menus.prototype.init = function()
 		}), parent);
 		menu.addItem(mxResources.get('radialTree'), null, mxUtils.bind(this, function()
 		{
-			var tmp = graph.getSelectionCell();
-			var roots = null;
+			let tmp = graph.getSelectionCell();
+			let roots = null;
 			
 			if (tmp == null || graph.getModel().getChildCount(tmp) == 0)
 			{
@@ -350,7 +350,7 @@ Menus.prototype.init = function()
 			
 			if (tmp != null)
 			{
-				var layout = new mxRadialTreeLayout(graph, false);
+				let layout = new mxRadialTreeLayout(graph, false);
 				layout.levelDistance = 80;
 				layout.autoRadius = true;
 				
@@ -378,7 +378,7 @@ Menus.prototype.init = function()
 		menu.addSeparator(parent);
 		menu.addItem(mxResources.get('organic'), null, mxUtils.bind(this, function()
 		{
-			var layout = new mxFastOrganicLayout(graph);
+			let layout = new mxFastOrganicLayout(graph);
 			
 			promptSpacing(layout.forceConstant, mxUtils.bind(this, function(newValue)
 			{
@@ -386,7 +386,7 @@ Menus.prototype.init = function()
 				
 	    		this.editorUi.executeLayout(function()
 	    		{
-	    			var tmp = graph.getSelectionCell();
+	    			let tmp = graph.getSelectionCell();
 	    			
 	    			if (tmp == null || graph.getModel().getChildCount(tmp) == 0)
 	    			{
@@ -404,11 +404,11 @@ Menus.prototype.init = function()
 		}), parent);
 		menu.addItem(mxResources.get('circle'), null, mxUtils.bind(this, function()
 		{
-			var layout = new mxCircleLayout(graph);
+			let layout = new mxCircleLayout(graph);
 			
     		this.editorUi.executeLayout(function()
     		{
-    			var tmp = graph.getSelectionCell();
+    			let tmp = graph.getSelectionCell();
     			
     			if (tmp == null || graph.getModel().getChildCount(tmp) == 0)
     			{
@@ -465,9 +465,9 @@ Menus.prototype.init = function()
 	this.put('viewZoom', new Menu(mxUtils.bind(this, function(menu, parent)
 	{
 		this.addMenuItems(menu, ['resetView', '-'], parent);
-		var scales = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2, 3, 4];
+		let scales = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2, 3, 4];
 		
-		for (var i = 0; i < scales.length; i++)
+		for (let i = 0; i < scales.length; i++)
 		{
 			(function(scale)
 			{
@@ -523,15 +523,15 @@ Menus.prototype.get = function(name)
  */
 Menus.prototype.addSubmenu = function(name, menu, parent, label)
 {
-	var entry = this.get(name);
+	let entry = this.get(name);
 	
 	if (entry != null)
 	{
-		var enabled = entry.isEnabled();
+		let enabled = entry.isEnabled();
 	
 		if (menu.showDisabled || enabled)
 		{
-			var submenu = menu.addItem(label || mxResources.get(name), null, null, parent, null, enabled);
+			let submenu = menu.addItem(label || mxResources.get(name), null, null, parent, null, enabled);
 			this.addMenu(name, menu, submenu);
 		}
 	}
@@ -542,7 +542,7 @@ Menus.prototype.addSubmenu = function(name, menu, parent, label)
  */
 Menus.prototype.addMenu = function(name, popupMenu, parent)
 {
-	var menu = this.get(name);
+	let menu = this.get(name);
 	
 	if (menu != null && (popupMenu.showDisabled || menu.isEnabled()))
 	{
@@ -555,17 +555,17 @@ Menus.prototype.addMenu = function(name, popupMenu, parent)
  */
 Menus.prototype.addInsertTableCellItem = function(menu, parent)
 {
-	var graph = this.editorUi.editor.graph;
+	let graph = this.editorUi.editor.graph;
 	
 	this.addInsertTableItem(menu, mxUtils.bind(this, function(evt, rows, cols)
 	{
-		var table = (mxEvent.isControlDown(evt) || mxEvent.isMetaDown(evt)) ?
+		let table = (mxEvent.isControlDown(evt) || mxEvent.isMetaDown(evt)) ?
 			graph.createCrossFunctionalSwimlane(rows, cols) :
 			graph.createTable(rows, cols, null, null,
 			(mxEvent.isShiftDown(evt)) ? 'Table' : null);
-		var pt = (mxEvent.isAltDown(evt)) ? graph.getFreeInsertPoint() :
+		let pt = (mxEvent.isAltDown(evt)) ? graph.getFreeInsertPoint() :
 			graph.getCenterInsertPoint(graph.getBoundingBoxFromGeometry([table], true));
-		var select = graph.importCells([table], pt.x, pt.y);
+		let select = graph.importCells([table], pt.x, pt.y);
 		
 		if (select != null && select.length > 0)
 		{
@@ -582,8 +582,8 @@ Menus.prototype.addInsertTableItem = function(menu, insertFn, parent)
 {
 	insertFn = (insertFn != null) ? insertFn : mxUtils.bind(this, function(evt, rows, cols)
 	{
-		var graph = this.editorUi.editor.graph;
-		var td = graph.getParentByName(mxEvent.getSource(evt), 'TD');
+		let graph = this.editorUi.editor.graph;
+		let td = graph.getParentByName(mxEvent.getSource(evt), 'TD');
 
 		if (td != null && graph.cellEditor.textarea != null)
 		{
@@ -591,10 +591,10 @@ Menus.prototype.addInsertTableItem = function(menu, insertFn, parent)
 			
 			// To find the new link, we create a list of all existing links first
     		// LATER: Refactor for reuse with code for finding inserted image below
-			var tmp = graph.cellEditor.textarea.getElementsByTagName('table');
-			var oldTables = [];
+			let tmp = graph.cellEditor.textarea.getElementsByTagName('table');
+			let oldTables = [];
 			
-			for (var i = 0; i < tmp.length; i++)
+			for (let i = 0; i < tmp.length; i++)
 			{
 				oldTables.push(tmp[i]);
 			}
@@ -604,12 +604,12 @@ Menus.prototype.addInsertTableItem = function(menu, insertFn, parent)
 			graph.pasteHtmlAtCaret(createTable(rows, cols));
 			
 			// Moves cursor to first table cell
-			var newTables = graph.cellEditor.textarea.getElementsByTagName('table');
+			let newTables = graph.cellEditor.textarea.getElementsByTagName('table');
 			
 			if (newTables.length == oldTables.length + 1)
 			{
 				// Inverse order in favor of appended tables
-				for (var i = newTables.length - 1; i >= 0; i--)
+				for (let i = newTables.length - 1; i >= 0; i--)
 				{
 					if (i == 0 || newTables[i] != oldTables[i - 1])
 					{
@@ -622,19 +622,19 @@ Menus.prototype.addInsertTableItem = function(menu, insertFn, parent)
 	});
 	
 	// KNOWN: Does not work in IE8 standards and quirks
-	var graph = this.editorUi.editor.graph;
+	let graph = this.editorUi.editor.graph;
 	var row2 = null;
-	var td = null;
+	let td = null;
 	
 	function createTable(rows, cols)
 	{
-		var html = ['<table>'];
+		let html = ['<table>'];
 		
-		for (var i = 0; i < rows; i++)
+		for (let i = 0; i < rows; i++)
 		{
 			html.push('<tr>');
 			
-			for (var j = 0; j < cols; j++)
+			for (let j = 0; j < cols; j++)
 			{
 				html.push('<td><br></td>');
 			}
@@ -651,7 +651,7 @@ Menus.prototype.addInsertTableItem = function(menu, insertFn, parent)
 	var elt2 = menu.addItem('', null, null, parent, null, null, null, true);
 	
 	// Quirks mode does not add cell padding if cell is empty, needs good old spacer solution
-	var quirksCellHtml = '<img src="' + mxClient.imageBasePath + '/transparent.gif' + '" width="16" height="16"/>';
+	let quirksCellHtml = '<img src="' + mxClient.imageBasePath + '/transparent.gif' + '" width="16" height="16"/>';
 
 	function createPicker(rows, cols)
 	{
@@ -660,13 +660,13 @@ Menus.prototype.addInsertTableItem = function(menu, insertFn, parent)
 		table2.style.borderCollapse = 'collapse';
 		table2.style.borderStyle = 'solid';
 
-		for (var i = 0; i < rows; i++)
+		for (let i = 0; i < rows; i++)
 		{
-			var row = table2.insertRow(i);
+			let row = table2.insertRow(i);
 			
-			for (var j = 0; j < cols; j++)
+			for (let j = 0; j < cols; j++)
 			{
-				var cell = row.insertCell(-1);
+				let cell = row.insertCell(-1);
 			}
 		}
 		
@@ -675,32 +675,32 @@ Menus.prototype.addInsertTableItem = function(menu, insertFn, parent)
 
 	function extendPicker(picker, rows, cols)
 	{
-		for (var i = picker.rows.length; i < rows; i++)
+		for (let i = picker.rows.length; i < rows; i++)
 		{
-			var row = picker.insertRow(i);
+			let row = picker.insertRow(i);
 			
-			for (var j = 0; j < picker.rows[0].cells.length; j++)
+			for (let j = 0; j < picker.rows[0].cells.length; j++)
 			{
-				var cell = row.insertCell(-1);
+				let cell = row.insertCell(-1);
 			}
 		}
 		
-		for (var i = 0; i < picker.rows.length; i++)
+		for (let i = 0; i < picker.rows.length; i++)
 		{
-			var row = picker.rows[i];
+			let row = picker.rows[i];
 			
-			for (var j = row.cells.length; j < cols; j++)
+			for (let j = row.cells.length; j < cols; j++)
 			{
-				var cell = row.insertCell(-1);
+				let cell = row.insertCell(-1);
 			}
 		}
 	};
 	
 	elt2.firstChild.innerHTML = '';
-	var picker = createPicker(5, 5);
+	let picker = createPicker(5, 5);
 	elt2.firstChild.appendChild(picker);
 	
-	var label = document.createElement('div');
+	let label = document.createElement('div');
 	label.style.padding = '4px';
 	label.style.fontSize = Menus.prototype.defaultFontSize + 'px';
 	label.innerHTML = '1x1';
@@ -709,22 +709,22 @@ Menus.prototype.addInsertTableItem = function(menu, insertFn, parent)
 	function mouseover(e)
 	{
 		td = graph.getParentByName(mxEvent.getSource(e), 'TD');		
-		var selected = false;
+		let selected = false;
 		
 		if (td != null)
 		{
 			row2 = graph.getParentByName(td, 'TR');
-			var ext = (mxEvent.isMouseEvent(e)) ? 2 : 4;
+			let ext = (mxEvent.isMouseEvent(e)) ? 2 : 4;
 			extendPicker(picker, Math.min(20, row2.sectionRowIndex + ext), Math.min(20, td.cellIndex + ext));
 			label.innerHTML = (td.cellIndex + 1) + 'x' + (row2.sectionRowIndex + 1);
 			
-			for (var i = 0; i < picker.rows.length; i++)
+			for (let i = 0; i < picker.rows.length; i++)
 			{
-				var r = picker.rows[i];
+				let r = picker.rows[i];
 				
-				for (var j = 0; j < r.cells.length; j++)
+				for (let j = 0; j < r.cells.length; j++)
 				{
-					var cell = r.cells[j];
+					let cell = r.cells[j];
 					
 					if (i == row2.sectionRowIndex &&
 						j == td.cellIndex)
@@ -751,7 +751,7 @@ Menus.prototype.addInsertTableItem = function(menu, insertFn, parent)
 	
 	mxEvent.addGestureListeners(picker, null, null, mxUtils.bind(this, function (e)
 	{
-		var selected = mouseover(e);
+		let selected = mouseover(e);
 		
 		if (td != null && row2 != null && selected)
 		{
@@ -774,24 +774,24 @@ Menus.prototype.edgeStyleChange = function(menu, label, keys, values, sprite, pa
 {
 	return menu.addItem(label, null, mxUtils.bind(this, function()
 	{
-		var graph = this.editorUi.editor.graph;
+		let graph = this.editorUi.editor.graph;
 		graph.stopEditing(false);
 		
 		graph.getModel().beginUpdate();
 		try
 		{
-			var cells = graph.getSelectionCells();
-			var edges = [];
+			let cells = graph.getSelectionCells();
+			let edges = [];
 			
-			for (var i = 0; i < cells.length; i++)
+			for (let i = 0; i < cells.length; i++)
 			{
-				var cell = cells[i];
+				let cell = cells[i];
 				
 				if (graph.getModel().isEdge(cell))
 				{
 					if (reset)
 					{
-						var geo = graph.getCellGeometry(cell);
+						let geo = graph.getCellGeometry(cell);
 			
 						// Resets all edge points
 						if (geo != null)
@@ -802,7 +802,7 @@ Menus.prototype.edgeStyleChange = function(menu, label, keys, values, sprite, pa
 						}
 					}
 					
-					for (var j = 0; j < keys.length; j++)
+					for (let j = 0; j < keys.length; j++)
 					{
 						graph.setCellStyles(keys[j], values[j], [cell]);
 					}
@@ -826,11 +826,11 @@ Menus.prototype.edgeStyleChange = function(menu, label, keys, values, sprite, pa
  */
 Menus.prototype.styleChange = function(menu, label, keys, values, sprite, parent, fn, post)
 {
-	var apply = this.createStyleChangeFunction(keys, values);
+	let apply = this.createStyleChangeFunction(keys, values);
 	
 	return menu.addItem(label, null, mxUtils.bind(this, function()
 	{
-		var graph = this.editorUi.editor.graph;
+		let graph = this.editorUi.editor.graph;
 		
 		if (fn != null && graph.cellEditor.isContentEditing())
 		{
@@ -850,15 +850,15 @@ Menus.prototype.createStyleChangeFunction = function(keys, values)
 {
 	return mxUtils.bind(this, function(post)
 	{
-		var graph = this.editorUi.editor.graph;
+		let graph = this.editorUi.editor.graph;
 		graph.stopEditing(false);
 		
 		graph.getModel().beginUpdate();
 		try
 		{
-			var cells = graph.getSelectionCells();
+			let cells = graph.getSelectionCells();
 			
-			for (var i = 0; i < keys.length; i++)
+			for (let i = 0; i < keys.length; i++)
 			{
 				graph.setCellStyles(keys[i], values[i], cells);
 
@@ -875,7 +875,7 @@ Menus.prototype.createStyleChangeFunction = function(keys, values)
 				// Updates autosize after font changes
 				if (keys[i] == mxConstants.STYLE_FONTFAMILY)
 				{
-					for (var j = 0; j < cells.length; j++)
+					for (let j = 0; j < cells.length; j++)
 					{
 						if (graph.model.getChildCount(cells[j]) == 0)
 						{
@@ -907,16 +907,16 @@ Menus.prototype.promptChange = function(menu, label, hint, defaultValue, key, pa
 {
 	return menu.addItem(label, null, mxUtils.bind(this, function()
 	{
-		var graph = this.editorUi.editor.graph;
-		var value = defaultValue;
-    	var state = graph.getView().getState(graph.getSelectionCell());
+		let graph = this.editorUi.editor.graph;
+		let value = defaultValue;
+    	let state = graph.getView().getState(graph.getSelectionCell());
     	
     	if (state != null)
     	{
     		value = state.style[key] || value;
     	}
     	
-		var dlg = new FilenameDialog(this.editorUi, value, mxResources.get('apply'), mxUtils.bind(this, function(newValue)
+		let dlg = new FilenameDialog(this.editorUi, value, mxResources.get('apply'), mxUtils.bind(this, function(newValue)
 		{
 			if (newValue != null && newValue.length > 0)
 			{
@@ -947,16 +947,16 @@ Menus.prototype.promptChange = function(menu, label, hint, defaultValue, key, pa
  */
 Menus.prototype.pickColor = function(key, cmd, defaultValue)
 {
-	var graph = this.editorUi.editor.graph;
-	var h = 226 + ((Math.ceil(ColorDialog.prototype.presetColors.length / 12) +
+	let graph = this.editorUi.editor.graph;
+	let h = 226 + ((Math.ceil(ColorDialog.prototype.presetColors.length / 12) +
 			Math.ceil(ColorDialog.prototype.defaultColors.length / 12)) * 17);
 	
 	if (cmd != null && graph.cellEditor.isContentEditing())
 	{
 		// Saves and restores text selection for in-place editor
-		var selState = graph.cellEditor.saveSelection();
+		let selState = graph.cellEditor.saveSelection();
 		
-		var dlg = new ColorDialog(this.editorUi, defaultValue || '000000', mxUtils.bind(this, function(color)
+		let dlg = new ColorDialog(this.editorUi, defaultValue || '000000', mxUtils.bind(this, function(color)
 		{
 			graph.cellEditor.restoreSelection(selState);
 			document.execCommand(cmd, false, (color != mxConstants.NONE) ? color : 'transparent');
@@ -975,8 +975,8 @@ Menus.prototype.pickColor = function(key, cmd, defaultValue)
 		}
 	
 		this.colorDialog.currentColorKey = key;
-		var state = graph.getView().getState(graph.getSelectionCell());
-		var color = 'none';
+		let state = graph.getView().getState(graph.getSelectionCell());
+		let color = 'none';
 		
 		if (state != null)
 		{
@@ -1004,8 +1004,8 @@ Menus.prototype.pickColor = function(key, cmd, defaultValue)
  */
 Menus.prototype.toggleStyle = function(key, defaultValue)
 {
-	var graph = this.editorUi.editor.graph;
-	var value = graph.toggleCellStyles(key, defaultValue);
+	let graph = this.editorUi.editor.graph;
+	let value = graph.toggleCellStyles(key, defaultValue);
 	this.editorUi.fireEvent(new mxEventObject('styleChanged', 'keys', [key], 'values', [value],
 			'cells', graph.getSelectionCells()));
 };
@@ -1015,11 +1015,11 @@ Menus.prototype.toggleStyle = function(key, defaultValue)
  */
 Menus.prototype.addMenuItem = function(menu, key, parent, trigger, sprite, label)
 {
-	var action = this.editorUi.actions.get(key);
+	let action = this.editorUi.actions.get(key);
 
 	if (action != null && (menu.showDisabled || action.isEnabled()) && action.visible)
 	{
-		var item = menu.addItem(label || action.label, null, function()
+		let item = menu.addItem(label || action.label, null, function()
 		{
 			action.funct(trigger);
 		}, parent, sprite, action.isEnabled());
@@ -1045,8 +1045,8 @@ Menus.prototype.addShortcut = function(item, action)
 {
 	if (action.shortcut != null)
 	{
-		var td = item.firstChild.nextSibling.nextSibling;
-		var span = document.createElement('span');
+		let td = item.firstChild.nextSibling.nextSibling;
+		let span = document.createElement('span');
 		span.style.color = 'gray';
 		mxUtils.write(span, action.shortcut);
 		td.appendChild(span);
@@ -1058,7 +1058,7 @@ Menus.prototype.addShortcut = function(item, action)
  */
 Menus.prototype.addMenuItems = function(menu, keys, parent, trigger, sprites)
 {
-	for (var i = 0; i < keys.length; i++)
+	for (let i = 0; i < keys.length; i++)
 	{
 		if (keys[i] == '-')
 		{
@@ -1132,7 +1132,7 @@ Menus.prototype.addPopupMenuStyleItems = function(menu, cell, evt)
  */
 Menus.prototype.addPopupMenuArrangeItems = function(menu, cell, evt)
 {
-	var graph = this.editorUi.editor.graph;
+	let graph = this.editorUi.editor.graph;
 	
 	if (!graph.isSelectionEmpty())
 	{
@@ -1155,28 +1155,28 @@ Menus.prototype.addPopupMenuArrangeItems = function(menu, cell, evt)
  */
 Menus.prototype.addPopupMenuCellItems = function(menu, cell, evt)
 {
-	var graph = this.editorUi.editor.graph;
+	let graph = this.editorUi.editor.graph;
 	cell = graph.getSelectionCell();
-	var state = graph.view.getState(cell);
+	let state = graph.view.getState(cell);
 	menu.addSeparator();
 	
 	if (state != null)
 	{
-		var hasWaypoints = false;
+		let hasWaypoints = false;
 
 		if (graph.getModel().isEdge(cell) && mxUtils.getValue(state.style, mxConstants.STYLE_EDGE, null) != 'entityRelationEdgeStyle' &&
 			mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null) != 'arrow')
 		{
-			var handler = graph.selectionCellsHandler.getHandler(cell);
-			var isWaypoint = false;
+			let handler = graph.selectionCellsHandler.getHandler(cell);
+			let isWaypoint = false;
 			
 			if (handler instanceof mxEdgeHandler && handler.bends != null && handler.bends.length > 2)
 			{
-				var index = handler.getHandleForEvent(graph.updateMouseEvent(new mxMouseEvent(evt)));
+				let index = handler.getHandleForEvent(graph.updateMouseEvent(new mxMouseEvent(evt)));
 				
 				// Configures removeWaypoint action before execution
 				// Using trigger parameter is cleaner but have to find waypoint here anyway.
-				var rmWaypointAction = this.editorUi.actions.get('removeWaypoint');
+				let rmWaypointAction = this.editorUi.actions.get('removeWaypoint');
 				rmWaypointAction.handler = handler;
 				rmWaypointAction.index = index;
 
@@ -1188,7 +1188,7 @@ Menus.prototype.addPopupMenuCellItems = function(menu, cell, evt)
 			this.addMenuItems(menu, [(isWaypoint) ? 'removeWaypoint' : 'addWaypoint'], null, evt);
 			
 			// Adds reset waypoints option if waypoints exist
-			var geo = graph.getModel().getGeometry(cell);
+			let geo = graph.getModel().getGeometry(cell);
 			hasWaypoints = geo != null && geo.points != null && geo.points.length > 0;
 		}
 
@@ -1228,14 +1228,14 @@ Menus.prototype.addPopupMenuSelectionItems = function(menu, cell, evt)
  */
 Menus.prototype.createMenubar = function(container)
 {
-	var menubar = new Menubar(this.editorUi, container);
-	var menus = this.defaultMenuItems;
+	let menubar = new Menubar(this.editorUi, container);
+	let menus = this.defaultMenuItems;
 	
-	for (var i = 0; i < menus.length; i++)
+	for (let i = 0; i < menus.length; i++)
 	{
 		(mxUtils.bind(this, function(menu)
 		{
-			var elt = menubar.addMenu(mxResources.get(menus[i]), mxUtils.bind(this, function()
+			let elt = menubar.addMenu(mxResources.get(menus[i]), mxUtils.bind(this, function()
 			{
 				// Allows extensions of menu.funct
 				menu.funct.apply(this, arguments);
@@ -1295,7 +1295,7 @@ Menubar.prototype.hideMenu = function()
  */
 Menubar.prototype.addMenu = function(label, funct, before)
 {
-	var elt = document.createElement('a');
+	let elt = document.createElement('a');
 	elt.className = 'geItem';
 	mxUtils.write(elt, label);
 	this.addMenuHandler(elt, funct);
@@ -1319,14 +1319,14 @@ Menubar.prototype.addMenuHandler = function(elt, funct)
 {
 	if (funct != null)
 	{
-		var show = true;
+		let show = true;
 		
-		var clickHandler = mxUtils.bind(this, function(evt)
+		let clickHandler = mxUtils.bind(this, function(evt)
 		{
 			if (show && elt.enabled == null || elt.enabled)
 			{
 				this.editorUi.editor.graph.popupMenuHandler.hideMenu();
-				var menu = new mxPopupMenu(funct);
+				let menu = new mxPopupMenu(funct);
 				menu.div.className += ' geMenubarMenu';
 				menu.smartSeparators = true;
 				menu.showDisabled = true;
@@ -1340,7 +1340,7 @@ Menubar.prototype.addMenuHandler = function(elt, funct)
 					menu.destroy();
 				});
 
-				var offset = mxUtils.getOffset(elt);
+				let offset = mxUtils.getOffset(elt);
 				menu.popup(offset.x, offset.y + elt.offsetHeight, null, evt);
 				this.editorUi.setCurrentMenu(menu, elt);
 			}
diff --git a/src/examples/grapheditor/www/js/Shapes.js b/src/examples/grapheditor/www/js/Shapes.js
index 3e9607832..8f40e05af 100644
--- a/src/examples/grapheditor/www/js/Shapes.js
+++ b/src/examples/grapheditor/www/js/Shapes.js
@@ -12,13 +12,13 @@
 	{
 		if (state != null)
 		{
-			var graph = state.view.graph;
-			var start = graph.getActualStartSize(state.cell);
-			var rows = graph.model.getChildCells(state.cell, true);
+			let graph = state.view.graph;
+			let start = graph.getActualStartSize(state.cell);
+			let rows = graph.model.getChildCells(state.cell, true);
 			
 			if (rows.length > 0)
 			{
-				var events = false;
+				let events = false;
 				
 				if (this.style != null)
 				{
@@ -30,21 +30,21 @@
 					c.pointerEvents = false;
 				}
 				
-				var evenRowColor = mxUtils.getValue(state.style,
+				let evenRowColor = mxUtils.getValue(state.style,
 					'evenRowColor', mxConstants.NONE);
-				var oddRowColor = mxUtils.getValue(state.style,
+				let oddRowColor = mxUtils.getValue(state.style,
 					'oddRowColor', mxConstants.NONE);
-				var evenColColor = mxUtils.getValue(state.style,
+				let evenColColor = mxUtils.getValue(state.style,
 					'evenColumnColor', mxConstants.NONE);
-				var oddColColor = mxUtils.getValue(state.style,
+				let oddColColor = mxUtils.getValue(state.style,
 					'oddColumnColor', mxConstants.NONE);
-				var cols = graph.model.getChildCells(rows[0], true);
+				let cols = graph.model.getChildCells(rows[0], true);
 				
 				// Paints column backgrounds
-				for (var i = 0; i < cols.length; i++)
+				for (let i = 0; i < cols.length; i++)
 				{
-					var clr = (mxUtils.mod(i, 2) == 1) ? evenColColor : oddColColor;
-					var geo = graph.getCellGeometry(cols[i]);
+					let clr = (mxUtils.mod(i, 2) == 1) ? evenColColor : oddColColor;
+					let geo = graph.getCellGeometry(cols[i]);
 					
 					if (geo != null && clr != mxConstants.NONE)
 					{
@@ -72,14 +72,14 @@
 				}
 				
 				// Paints row backgrounds
-				for (var i = 0; i < rows.length; i++)
+				for (let i = 0; i < rows.length; i++)
 				{
-					var clr = (mxUtils.mod(i, 2) == 1) ? evenRowColor : oddRowColor;
-					var geo = graph.getCellGeometry(rows[i]);
+					let clr = (mxUtils.mod(i, 2) == 1) ? evenRowColor : oddRowColor;
+					let geo = graph.getCellGeometry(rows[i]);
 	
 					if (geo != null && clr != mxConstants.NONE)
 					{
-						var b = (i == rows.length - 1) ? y + h : y + geo.y + geo.height;
+						let b = (i == rows.length - 1) ? y + h : y + geo.y + geo.height;
 						c.setFillColor(clr);
 						
 						c.begin();
@@ -117,7 +117,7 @@
 
 	TableShape.prototype.getLabelBounds = function(rect)
 	{
-		var start = this.getTitleSize();
+		let start = this.getTitleSize();
 		
 		if (start == 0)
 		{
@@ -134,7 +134,7 @@
 		// LATER: Split background to add striping
 		//paintTableBackground(this.state, c, x, y, w, h);
 		
-		var start = this.getTitleSize();
+		let start = this.getTitleSize();
 		
 		if (start == 0)
 		{
@@ -153,12 +153,12 @@
 	{
 		if (this.state != null)
 		{
-			var flipH = this.flipH;
-			var flipV = this.flipV;
+			let flipH = this.flipH;
+			let flipV = this.flipV;
 			
 			if (this.direction == mxConstants.DIRECTION_NORTH || this.direction == mxConstants.DIRECTION_SOUTH)
 			{
-				var tmp = flipH;
+				let tmp = flipH;
 				flipH = flipV;
 				flipV = tmp;
 			}
@@ -177,23 +177,23 @@
 	
 	TableShape.prototype.paintTableForeground = function(c, x, y, w, h)
 	{
-		var graph = this.state.view.graph;
-		var start = graph.getActualStartSize(this.state.cell);
-		var rows = graph.model.getChildCells(this.state.cell, true);
+		let graph = this.state.view.graph;
+		let start = graph.getActualStartSize(this.state.cell);
+		let rows = graph.model.getChildCells(this.state.cell, true);
 		
 		if (rows.length > 0)
 		{
-			var rowLines = mxUtils.getValue(this.state.style,
+			let rowLines = mxUtils.getValue(this.state.style,
 				'rowLines', '1') != '0';
-			var columnLines = mxUtils.getValue(this.state.style,
+			let columnLines = mxUtils.getValue(this.state.style,
 				'columnLines', '1') != '0';
 			
 			// Paints row lines
 			if (rowLines)
 			{
-				for (var i = 1; i < rows.length; i++)
+				for (let i = 1; i < rows.length; i++)
 				{
-					var geo = graph.getCellGeometry(rows[i]);
+					let geo = graph.getCellGeometry(rows[i]);
 					
 					if (geo != null)
 					{
@@ -208,12 +208,12 @@
 			
 			if (columnLines)
 			{
-				var cols = graph.model.getChildCells(rows[0], true);
+				let cols = graph.model.getChildCells(rows[0], true);
 				
 				// Paints column lines
-				for (var i = 1; i < cols.length; i++)
+				for (let i = 1; i < cols.length; i++)
 				{
-					var geo = graph.getCellGeometry(cols[i]);
+					let geo = graph.getCellGeometry(cols[i]);
 					
 					if (geo != null)
 					{
@@ -242,8 +242,8 @@
 	
 	CubeShape.prototype.paintVertexShape = function(c, x, y, w, h)
 	{
-		var s = Math.max(0, Math.min(w, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size)))));
-		var op = Math.max(-1, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'darkOpacity', this.darkOpacity))));
+		let s = Math.max(0, Math.min(w, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size)))));
+		let op = Math.max(-1, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'darkOpacity', this.darkOpacity))));
 		var op2 = Math.max(-1, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'darkOpacity2', this.darkOpacity2))));
 		c.translate(x, y);
 		
@@ -303,7 +303,7 @@
 	{
 		if (mxUtils.getValue(this.style, 'boundedLbl', false))
 		{
-			var s = parseFloat(mxUtils.getValue(this.style, 'size', this.size)) * this.scale;
+			let s = parseFloat(mxUtils.getValue(this.style, 'size', this.size)) * this.scale;
 			
 			return new mxRectangle(s, s, 0, 0);
 		}
@@ -325,7 +325,7 @@
 	IsoRectangleShape.prototype.size = 20;
 	IsoRectangleShape.prototype.redrawPath = function(path, x, y, w, h)
 	{
-		var m = Math.min(w, h / tan30);
+		let m = Math.min(w, h / tan30);
 
 		path.translate((w - m) / 2, (h - m) / 2 + m / 4);
 		path.moveTo(0, 0.25 * m);
@@ -348,7 +348,7 @@
 	IsoCubeShape.prototype.size = 20;
 	IsoCubeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
 	{
-		var m = Math.min(w, h / (0.5 + tan30));
+		let m = Math.min(w, h / (0.5 + tan30));
 
 		if (isForeground)
 		{
@@ -385,7 +385,7 @@
 
 	DataStoreShape.prototype.redrawPath = function(c, x, y, w, h, isForeground)
 	{
-		var dy = Math.min(h / 2, Math.round(h / 8) + this.strokewidth - 1);
+		let dy = Math.min(h / 2, Math.round(h / 8) + this.strokewidth - 1);
 		
 		if ((isForeground && this.fill != null) || (!isForeground && this.fill == null))
 		{
@@ -452,8 +452,8 @@
 	
 	NoteShape.prototype.paintVertexShape = function(c, x, y, w, h)
 	{
-		var s = Math.max(0, Math.min(w, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size)))));
-		var op = Math.max(-1, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'darkOpacity', this.darkOpacity))));
+		let s = Math.max(0, Math.min(w, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size)))));
+		let op = Math.max(-1, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'darkOpacity', this.darkOpacity))));
 		c.translate(x, y);
 		
 		c.begin();
@@ -513,8 +513,8 @@
 	
 	IsoCubeShape2.prototype.paintVertexShape = function(c, x, y, w, h)
 	{
-		var isoAngle = Math.max(0.01, Math.min(94, parseFloat(mxUtils.getValue(this.style, 'isoAngle', this.isoAngle)))) * Math.PI / 200 ;
-		var isoH = Math.min(w * Math.tan(isoAngle), h * 0.5);
+		let isoAngle = Math.max(0.01, Math.min(94, parseFloat(mxUtils.getValue(this.style, 'isoAngle', this.isoAngle)))) * Math.PI / 200 ;
+		let isoH = Math.min(w * Math.tan(isoAngle), h * 0.5);
 
 		c.translate(x,y);
 		
@@ -553,7 +553,7 @@
 	
 	CylinderShape.prototype.paintVertexShape = function(c, x, y, w, h)
 	{
-		var size = Math.max(0, Math.min(h * 0.5, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let size = Math.max(0, Math.min(h * 0.5, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
 
 		c.translate(x,y);
 
@@ -602,8 +602,8 @@
 	
 	CylinderShape3.prototype.paintVertexShape = function(c, x, y, w, h)
 	{
-		var size = Math.max(0, Math.min(h * 0.5, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var lid = mxUtils.getValue(this.style, 'lid', true);
+		let size = Math.max(0, Math.min(h * 0.5, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let lid = mxUtils.getValue(this.style, 'lid', true);
 
 		c.translate(x,y);
 
@@ -658,7 +658,7 @@
 	mxUtils.extend(SwitchShape, mxActor);
 	SwitchShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var curve = 0.5;
+		let curve = 0.5;
 		c.moveTo(0, 0);
 		c.quadTo(w / 2, h * curve,  w, 0);
 		c.quadTo(w * (1 - curve), h / 2, w, h);
@@ -684,12 +684,12 @@
 	{
 		c.translate(x, y);
 		
-		var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'tabWidth', this.tabWidth))));
-		var dy = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'tabHeight', this.tabHeight))));
-		var tp = mxUtils.getValue(this.style, 'tabPosition', this.tabPosition);
-		var rounded = mxUtils.getValue(this.style, 'rounded', false);
-		var absArcSize = mxUtils.getValue(this.style, 'absoluteArcSize', false);
-		var arcSize = parseFloat(mxUtils.getValue(this.style, 'arcSize', this.arcSize));
+		let dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'tabWidth', this.tabWidth))));
+		let dy = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'tabHeight', this.tabHeight))));
+		let tp = mxUtils.getValue(this.style, 'tabPosition', this.tabPosition);
+		let rounded = mxUtils.getValue(this.style, 'rounded', false);
+		let absArcSize = mxUtils.getValue(this.style, 'absoluteArcSize', false);
+		let arcSize = parseFloat(mxUtils.getValue(this.style, 'arcSize', this.arcSize));
 		
 		if (!absArcSize)
 		{
@@ -748,7 +748,7 @@
 		
 		c.setShadow(false);
 
-		var sym = mxUtils.getValue(this.style, 'folderSymbol', null);
+		let sym = mxUtils.getValue(this.style, 'folderSymbol', null);
 		
 		if (sym == 'triangle')
 		{
@@ -775,13 +775,13 @@
 	{
 		c.translate(x, y);
 		
-//		var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'tabWidth', this.tabWidth))));
-//		var dy = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'tabHeight', this.tabHeight))));
-//		var tp = mxUtils.getValue(this.style, 'tabPosition', this.tabPosition);
-		var rounded = mxUtils.getValue(this.style, 'rounded', false);
-		var absArcSize = mxUtils.getValue(this.style, 'absoluteArcSize', false);
-		var arcSize = parseFloat(mxUtils.getValue(this.style, 'arcSize', this.arcSize));
-		var connPoint = mxUtils.getValue(this.style, 'umlStateConnection', null);
+//		let dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'tabWidth', this.tabWidth))));
+//		let dy = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'tabHeight', this.tabHeight))));
+//		let tp = mxUtils.getValue(this.style, 'tabPosition', this.tabPosition);
+		let rounded = mxUtils.getValue(this.style, 'rounded', false);
+		let absArcSize = mxUtils.getValue(this.style, 'absoluteArcSize', false);
+		let arcSize = parseFloat(mxUtils.getValue(this.style, 'arcSize', this.arcSize));
+		let connPoint = mxUtils.getValue(this.style, 'umlStateConnection', null);
 		
 		
 		if (!absArcSize)
@@ -796,7 +796,7 @@
 			arcSize = 0;
 		}
 		
-		var dx = 0;
+		let dx = 0;
 		
 		if (connPoint != null)
 		{
@@ -817,7 +817,7 @@
 		
 		c.setShadow(false);
 
-		var sym = mxUtils.getValue(this.style, 'umlStateSymbol', null);
+		let sym = mxUtils.getValue(this.style, 'umlStateSymbol', null);
 		
 		if (sym == 'collapseState')
 		{
@@ -865,8 +865,8 @@
 	};
 	CardShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var s = Math.max(0, Math.min(w, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size)))));
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let s = Math.max(0, Math.min(w, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size)))));
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 		this.addPoints(c, [new mxPoint(s, 0), new mxPoint(w, 0), new mxPoint(w, h), new mxPoint(0, h), new mxPoint(0, s)],
 				this.isRounded, arcSize, true);
 		c.end();
@@ -883,8 +883,8 @@
 	TapeShape.prototype.size = 0.4;
 	TapeShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var dy = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var fy = 1.4;
+		let dy = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let fy = 1.4;
 		
 		c.moveTo(0, dy / 2);
 		c.quadTo(w / 4, dy * fy, w / 2, dy / 2);
@@ -901,21 +901,21 @@
 	{
 		if (mxUtils.getValue(this.style, 'boundedLbl', false))
 		{
-			var size = mxUtils.getValue(this.style, 'size', this.size);			
-			var w = rect.width;
-			var h = rect.height;
+			let size = mxUtils.getValue(this.style, 'size', this.size);			
+			let w = rect.width;
+			let h = rect.height;
 			
 			if (this.direction == null ||
 					this.direction == mxConstants.DIRECTION_EAST ||
 					this.direction == mxConstants.DIRECTION_WEST)
 			{
-				var dy = h * size;
+				let dy = h * size;
 				
 				return new mxRectangle(rect.x, rect.y + dy, w, h - 2 * dy);
 			}
 			else
 			{
-				var dx = w * size;
+				let dx = w * size;
 				
 				return new mxRectangle(rect.x + dx, rect.y, w - 2 * dx, h);
 			}
@@ -945,8 +945,8 @@
 	};
 	DocumentShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var dy = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var fy = 1.4;
+		let dy = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let fy = 1.4;
 		
 		c.moveTo(0, 0);
 		c.lineTo(w, 0);
@@ -960,11 +960,11 @@
 
 	mxCellRenderer.registerShape('document', DocumentShape);
 
-	var cylinderGetCylinderSize = mxCylinder.prototype.getCylinderSize;
+	let cylinderGetCylinderSize = mxCylinder.prototype.getCylinderSize;
 	
 	mxCylinder.prototype.getCylinderSize = function(x, y, w, h)
 	{
-		var size = mxUtils.getValue(this.style, 'size');
+		let size = mxUtils.getValue(this.style, 'size');
 		
 		if (size != null)
 		{
@@ -980,7 +980,7 @@
 	{
 		if (mxUtils.getValue(this.style, 'boundedLbl', false))
 		{
-			var size = mxUtils.getValue(this.style, 'size', 0.15) * 2;
+			let size = mxUtils.getValue(this.style, 'size', 0.15) * 2;
 			
 			return new mxRectangle(0, Math.min(this.maxHeight * this.scale, rect.height * size), 0, 0);
 		}
@@ -992,7 +992,7 @@
 	{
 		if (mxUtils.getValue(this.style, 'boundedLbl', false))
 		{
-			var size = mxUtils.getValue(this.style, 'size', 15);
+			let size = mxUtils.getValue(this.style, 'size', 15);
 			
 			if (!mxUtils.getValue(this.style, 'lid', true))
 			{
@@ -1009,15 +1009,15 @@
 	{
 		if (mxUtils.getValue(this.style, 'boundedLbl', false))
 		{
-			var sizeY = mxUtils.getValue(this.style, 'tabHeight', 15) * this.scale;
+			let sizeY = mxUtils.getValue(this.style, 'tabHeight', 15) * this.scale;
 
 			if (mxUtils.getValue(this.style, 'labelInHeader', false))
 			{
-				var sizeX = mxUtils.getValue(this.style, 'tabWidth', 15) * this.scale;
-				var sizeY = mxUtils.getValue(this.style, 'tabHeight', 15) * this.scale;
-				var rounded = mxUtils.getValue(this.style, 'rounded', false);
-				var absArcSize = mxUtils.getValue(this.style, 'absoluteArcSize', false);
-				var arcSize = parseFloat(mxUtils.getValue(this.style, 'arcSize', this.arcSize));
+				let sizeX = mxUtils.getValue(this.style, 'tabWidth', 15) * this.scale;
+				let sizeY = mxUtils.getValue(this.style, 'tabHeight', 15) * this.scale;
+				let rounded = mxUtils.getValue(this.style, 'rounded', false);
+				let absArcSize = mxUtils.getValue(this.style, 'absoluteArcSize', false);
+				let arcSize = parseFloat(mxUtils.getValue(this.style, 'arcSize', this.arcSize));
 				
 				if (!absArcSize)
 				{
@@ -1053,7 +1053,7 @@
 	{
 		if (mxUtils.getValue(this.style, 'boundedLbl', false))
 		{
-			var connPoint = mxUtils.getValue(this.style, 'umlStateConnection', null);
+			let connPoint = mxUtils.getValue(this.style, 'umlStateConnection', null);
 			
 			if (connPoint != null)
 			{
@@ -1068,7 +1068,7 @@
 	{
 		if (mxUtils.getValue(this.style, 'boundedLbl', false))
 		{
-			var size = mxUtils.getValue(this.style, 'size', 15);
+			let size = mxUtils.getValue(this.style, 'size', 15);
 			
 			return new mxRectangle(0, Math.min(rect.height * this.scale, size * this.scale), 0, Math.max(0, size * this.scale));
 		}
@@ -1090,10 +1090,10 @@
 	};
 	ParallelogramShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var fixed = mxUtils.getValue(this.style, 'fixedSize', '0') != '0';
+		let fixed = mxUtils.getValue(this.style, 'fixedSize', '0') != '0';
 
-		var dx = (fixed) ? Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'size', this.fixedSize)))) : w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let dx = (fixed) ? Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'size', this.fixedSize)))) : w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 		this.addPoints(c, [new mxPoint(0, h), new mxPoint(dx, 0), new mxPoint(w, 0), new mxPoint(w - dx, h)],
 				this.isRounded, arcSize, true);
 		c.end();
@@ -1116,10 +1116,10 @@
 	TrapezoidShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
 		
-		var fixed = mxUtils.getValue(this.style, 'fixedSize', '0') != '0';
+		let fixed = mxUtils.getValue(this.style, 'fixedSize', '0') != '0';
 
-		var dx = (fixed) ? Math.max(0, Math.min(w * 0.5, parseFloat(mxUtils.getValue(this.style, 'size', this.fixedSize)))) : w * Math.max(0, Math.min(0.5, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let dx = (fixed) ? Math.max(0, Math.min(w * 0.5, parseFloat(mxUtils.getValue(this.style, 'size', this.fixedSize)))) : w * Math.max(0, Math.min(0.5, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 		this.addPoints(c, [new mxPoint(0, h), new mxPoint(dx, 0), new mxPoint(w - dx, 0), new mxPoint(w, h)],
 				this.isRounded, arcSize, true);
 	};
@@ -1136,8 +1136,8 @@
 	CurlyBracketShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
 		c.setFillColor(null);
-		var s = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let s = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 		this.addPoints(c, [new mxPoint(w, 0), new mxPoint(s, 0), new mxPoint(s, h / 2),
 		                   new mxPoint(0, h / 2), new mxPoint(s, h / 2), new mxPoint(s, h),
 		                   new mxPoint(w, h)], this.isRounded, arcSize, false);
@@ -1245,9 +1245,9 @@
 		// LATER: Check why this.canvas.lastX cannot be used
 		if (this.lastX != null && this.lastY != null)
 		{
-			var dx = Math.abs(endX - this.lastX);
-			var dy = Math.abs(endY - this.lastY);
-			var dist = Math.sqrt(dx * dx + dy * dy);
+			let dx = Math.abs(endX - this.lastX);
+			let dy = Math.abs(endY - this.lastY);
+			let dist = Math.sqrt(dx * dx + dy * dy);
 			
 			if (dist < 2)
 			{
@@ -1258,8 +1258,8 @@
 				return;
 			}
 	
-			var segs = Math.round(dist / 10);
-			var variation = this.defaultVariation;
+			let segs = Math.round(dist / 10);
+			let variation = this.defaultVariation;
 			
 			if (segs < 5)
 			{
@@ -1272,18 +1272,18 @@
 			    return typeof x === 'number' ? x ? x < 0 ? -1 : 1 : x === x ? 0 : NaN : NaN;
 			}
 	
-			var stepX = sign(endX - this.lastX) * dx / segs;
-			var stepY = sign(endY - this.lastY) * dy / segs;
+			let stepX = sign(endX - this.lastX) * dx / segs;
+			let stepY = sign(endY - this.lastY) * dy / segs;
 	
-			var fx = dx / dist;
-			var fy = dy / dist;
+			let fx = dx / dist;
+			let fy = dy / dist;
 	
-			for (var s = 0; s < segs; s++)
+			for (let s = 0; s < segs; s++)
 			{
-				var x = stepX * s + this.lastX;
-				var y = stepY * s + this.lastY;
+				let x = stepX * s + this.lastX;
+				let y = stepY * s + this.lastY;
 	
-				var offset = (Math.random() - 0.5) * variation;
+				let offset = (Math.random() - 0.5) * variation;
 				this.originalLineTo.call(this.canvas, x - offset * fy, y - offset * fx);
 			}
 			
@@ -1312,7 +1312,7 @@
 	// Installs hand jiggle for comic and sketch style
 	mxShape.prototype.defaultJiggle = 1.5;	
 
-	var shapeBeforePaint = mxShape.prototype.beforePaint;
+	let shapeBeforePaint = mxShape.prototype.beforePaint;
 	mxShape.prototype.beforePaint = function(c)
 	{
 		shapeBeforePaint.apply(this, arguments);
@@ -1323,7 +1323,7 @@
 		}
 	};
 	
-	var shapeAfterPaint = mxShape.prototype.afterPaint;
+	let shapeAfterPaint = mxShape.prototype.afterPaint;
 	mxShape.prototype.afterPaint = function(c)
 	{
 		shapeAfterPaint.apply(this, arguments);
@@ -1373,7 +1373,7 @@
 		}
 		else
 		{
-			var events = true;
+			let events = true;
 			
 			if (this.style != null)
 			{
@@ -1392,7 +1392,7 @@
 				
 				if (this.isRounded)
 				{
-					var r = 0;
+					let r = 0;
 					
 					if (mxUtils.getValue(this.style, mxConstants.STYLE_ABSOLUTE_ARCSIZE, 0) == '1')
 					{
@@ -1401,7 +1401,7 @@
 					}
 					else
 					{
-						var f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
+						let f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
 							mxConstants.RECTANGLE_ROUNDING_FACTOR * 100) / 100;
 						r = Math.min(w * f, h * f);
 					}
@@ -1468,15 +1468,15 @@
 			this.direction == mxConstants.DIRECTION_EAST ||
 			this.direction == mxConstants.DIRECTION_WEST))
 		{
-			var w = rect.width;
-			var h = rect.height;
-			var r = new mxRectangle(rect.x, rect.y, w, h);
+			let w = rect.width;
+			let h = rect.height;
+			let r = new mxRectangle(rect.x, rect.y, w, h);
 	
-			var inset = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+			let inset = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
 	
 			if (this.isRounded)
 			{
-				var f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
+				let f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
 					mxConstants.RECTANGLE_ROUNDING_FACTOR * 100) / 100;
 				inset = Math.max(inset, Math.min(w * f, h * f));
 			}
@@ -1491,8 +1491,8 @@
 	};
 	ProcessShape.prototype.paintForeground = function(c, x, y, w, h)
 	{
-		var isFixedSize = mxUtils.getValue(this.style, 'fixedSize', this.fixedSize);
-		var inset = parseFloat(mxUtils.getValue(this.style, 'size', this.size));
+		let isFixedSize = mxUtils.getValue(this.style, 'fixedSize', this.fixedSize);
+		let inset = parseFloat(mxUtils.getValue(this.style, 'size', this.size));
 		
 		if (isFixedSize)
 		{
@@ -1506,7 +1506,7 @@
 
 		if (this.isRounded)
 		{
-			var f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
+			let f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
 				mxConstants.RECTANGLE_ROUNDING_FACTOR * 100) / 100;
 			inset = Math.max(inset, Math.min(w * f, h * f));
 		}
@@ -1563,11 +1563,11 @@
 	};
 	CalloutShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
-		var s = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var dx = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'position', this.position))));
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let s = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let dx = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'position', this.position))));
 		var dx2 = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'position2', this.position2))));
-		var base = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'base', this.base))));
+		let base = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'base', this.base))));
 		
 		this.addPoints(c, [new mxPoint(0, 0), new mxPoint(w, 0), new mxPoint(w, h - s),
 			new mxPoint(Math.min(w, dx + base), h - s), new mxPoint(dx2, h),
@@ -1591,10 +1591,10 @@
 	};
 	StepShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var fixed = mxUtils.getValue(this.style, 'fixedSize', '0') != '0';
-		var s = (fixed) ? Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'size', this.fixedSize)))) :
+		let fixed = mxUtils.getValue(this.style, 'fixedSize', '0') != '0';
+		let s = (fixed) ? Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'size', this.fixedSize)))) :
 			w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 		this.addPoints(c, [new mxPoint(0, 0), new mxPoint(w - s, 0), new mxPoint(w, h / 2), new mxPoint(w - s, h),
 		                   new mxPoint(0, h), new mxPoint(s, h / 2)], this.isRounded, arcSize, true);
 		c.end();
@@ -1616,10 +1616,10 @@
 	};
 	HexagonShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var fixed = mxUtils.getValue(this.style, 'fixedSize', '0') != '0';
-		var s = (fixed) ? Math.max(0, Math.min(w * 0.5, parseFloat(mxUtils.getValue(this.style, 'size', this.fixedSize)))) :
+		let fixed = mxUtils.getValue(this.style, 'fixedSize', '0') != '0';
+		let s = (fixed) ? Math.max(0, Math.min(w * 0.5, parseFloat(mxUtils.getValue(this.style, 'size', this.fixedSize)))) :
 			w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 		this.addPoints(c, [new mxPoint(s, 0), new mxPoint(w - s, 0), new mxPoint(w, 0.5 * h), new mxPoint(w - s, h),
 		                   new mxPoint(s, h), new mxPoint(0, 0.5 * h)], this.isRounded, arcSize, true);
 	};
@@ -1638,7 +1638,7 @@
 	};
 	PlusShape.prototype.paintForeground = function(c, x, y, w, h)
 	{
-		var border = Math.min(w / 5, h / 5) + 1;
+		let border = Math.min(w / 5, h / 5) + 1;
 		
 		c.begin();
 		c.moveTo(x + w / 2, y + border);
@@ -1653,12 +1653,12 @@
 	mxCellRenderer.registerShape('plus', PlusShape);
 	
 	// Overrides painting of rhombus shape to allow for double style
-	var mxRhombusPaintVertexShape = mxRhombus.prototype.paintVertexShape;
+	let mxRhombusPaintVertexShape = mxRhombus.prototype.paintVertexShape;
 	mxRhombus.prototype.getLabelBounds = function(rect)
 	{
 		if (this.style['double'] == 1)
 		{
-			var margin = (Math.max(2, this.strokewidth + 1) * 2 + parseFloat(
+			let margin = (Math.max(2, this.strokewidth + 1) * 2 + parseFloat(
 				this.style[mxConstants.STYLE_MARGIN] || 0)) * this.scale;
 		
 			return new mxRectangle(rect.x + margin, rect.y + margin,
@@ -1673,7 +1673,7 @@
 
 		if (!this.outline && this.style['double'] == 1)
 		{
-			var margin = Math.max(2, this.strokewidth + 1) * 2 +
+			let margin = Math.max(2, this.strokewidth + 1) * 2 +
 				parseFloat(this.style[mxConstants.STYLE_MARGIN] || 0);
 			x += margin;
 			y += margin;
@@ -1705,7 +1705,7 @@
 	{
 		if (this.style['double'] == 1)
 		{
-			var margin = (Math.max(2, this.strokewidth + 1) + parseFloat(
+			let margin = (Math.max(2, this.strokewidth + 1) + parseFloat(
 				this.style[mxConstants.STYLE_MARGIN] || 0)) * this.scale;
 		
 			return new mxRectangle(rect.x + margin, rect.y + margin,
@@ -1721,7 +1721,7 @@
 		{
 			if (!this.outline && this.style['double'] == 1)
 			{
-				var margin = Math.max(2, this.strokewidth + 1) + parseFloat(this.style[mxConstants.STYLE_MARGIN] || 0);
+				let margin = Math.max(2, this.strokewidth + 1) + parseFloat(this.style[mxConstants.STYLE_MARGIN] || 0);
 				x += margin;
 				y += margin;
 				w -= 2 * margin;
@@ -1738,8 +1738,8 @@
 			// Draws the symbols defined in the style. The symbols are
 			// numbered from 1...n. Possible postfixes are align,
 			// verticalAlign, spacing, arcSpacing, width, height
-			var counter = 0;
-			var shape = null;
+			let counter = 0;
+			let shape = null;
 			
 			do
 			{
@@ -1747,17 +1747,17 @@
 				
 				if (shape != null)
 				{
-					var align = this.style['symbol' + counter + 'Align'];
-					var valign = this.style['symbol' + counter + 'VerticalAlign'];
-					var width = this.style['symbol' + counter + 'Width'];
-					var height = this.style['symbol' + counter + 'Height'];
-					var spacing = this.style['symbol' + counter + 'Spacing'] || 0;
-					var vspacing = this.style['symbol' + counter + 'VSpacing'] || spacing;
-					var arcspacing = this.style['symbol' + counter + 'ArcSpacing'];
+					let align = this.style['symbol' + counter + 'Align'];
+					let valign = this.style['symbol' + counter + 'VerticalAlign'];
+					let width = this.style['symbol' + counter + 'Width'];
+					let height = this.style['symbol' + counter + 'Height'];
+					let spacing = this.style['symbol' + counter + 'Spacing'] || 0;
+					let vspacing = this.style['symbol' + counter + 'VSpacing'] || spacing;
+					let arcspacing = this.style['symbol' + counter + 'ArcSpacing'];
 					
 					if (arcspacing != null)
 					{
-						var arcSize = this.getArcSize(w + this.strokewidth, h + this.strokewidth) * arcspacing;
+						let arcSize = this.getArcSize(w + this.strokewidth, h + this.strokewidth) * arcspacing;
 						spacing += arcSize;
 						vspacing += arcSize;
 					}
@@ -1794,7 +1794,7 @@
 					c.save();
 					
 					// Small hack to pass style along into subshape
-					var tmp = new shape();
+					let tmp = new shape();
 					// TODO: Clone style and override settings (eg. strokewidth)
 					tmp.style = this.style;
 					shape.prototype.paintVertexShape.call(tmp, c, x2, y2, width, height);
@@ -2003,15 +2003,15 @@
 	};
 	UmlLifeline.prototype.getLabelBounds = function(rect)
 	{
-		var size = Math.max(0, Math.min(rect.height, parseFloat(
+		let size = Math.max(0, Math.min(rect.height, parseFloat(
 			mxUtils.getValue(this.style, 'size', this.size)) * this.scale));
 		
 		return new mxRectangle(rect.x, rect.y, rect.width, size);
 	};
 	UmlLifeline.prototype.paintBackground = function(c, x, y, w, h)
 	{
-		var size = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var participant = mxUtils.getValue(this.style, 'participant');
+		let size = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let participant = mxUtils.getValue(this.style, 'participant');
 		
 		if (participant == null || this.state == null)
 		{
@@ -2019,11 +2019,11 @@
 		}
 		else
 		{
-			var ctor = this.state.view.graph.cellRenderer.getShape(participant);
+			let ctor = this.state.view.graph.cellRenderer.getShape(participant);
 			
 			if (ctor != null && ctor != UmlLifeline)
 			{
-				var shape = new ctor();
+				let shape = new ctor();
 				shape.apply(this.state);
 				c.save();
 				shape.paintVertexShape(c, x, y, w, size);
@@ -2043,7 +2043,7 @@
 	};
 	UmlLifeline.prototype.paintForeground = function(c, x, y, w, h)
 	{
-		var size = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let size = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
 		mxRectangleShape.prototype.paintForeground.call(this, c, x, y, w, Math.min(h, size));
 	};
 
@@ -2066,10 +2066,10 @@
 	};
 	UmlFrame.prototype.paintBackground = function(c, x, y, w, h)
 	{
-		var co = this.corner;
+		let co = this.corner;
 		var w0 = Math.min(w, Math.max(co, parseFloat(mxUtils.getValue(this.style, 'width', this.width))));
 		var h0 = Math.min(h, Math.max(co * 1.5, parseFloat(mxUtils.getValue(this.style, 'height', this.height))));
-		var bg = mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_FILLCOLOR, mxConstants.NONE);
+		let bg = mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_FILLCOLOR, mxConstants.NONE);
 		
 		if (bg != mxConstants.NONE)
 		{
@@ -2080,7 +2080,7 @@
 		
 		if (this.fill != null && this.fill != mxConstants.NONE && this.gradient && this.gradient != mxConstants.NONE)
 		{
-			var b = this.getGradientBounds(c, x, y, w, h);
+			let b = this.getGradientBounds(c, x, y, w, h);
 			c.setGradient(this.fill, this.gradient, x, y, w, h, this.gradientDirection);
 		}
 		else
@@ -2110,14 +2110,14 @@
 	
 	mxPerimeter.LifelinePerimeter = (bounds, vertex, next, orthogonal) =>
 	{
-		var size = UmlLifeline.prototype.size;
+		let size = UmlLifeline.prototype.size;
 		
 		if (vertex != null)
 		{
 			size = mxUtils.getValue(vertex.style, 'size', size) * vertex.view.scale;
 		}
 		
-		var sw = (parseFloat(vertex.style[mxConstants.STYLE_STROKEWIDTH] || 1) * vertex.view.scale / 2) - 1;
+		let sw = (parseFloat(vertex.style[mxConstants.STYLE_STROKEWIDTH] || 1) * vertex.view.scale / 2) - 1;
 
 		if (next.x < bounds.getCenterX())
 		{
@@ -2142,7 +2142,7 @@
 
 	mxPerimeter.BackbonePerimeter = (bounds, vertex, next, orthogonal) =>
 	{
-		var sw = (parseFloat(vertex.style[mxConstants.STYLE_STROKEWIDTH] || 1) * vertex.view.scale / 2) - 1;
+		let sw = (parseFloat(vertex.style[mxConstants.STYLE_STROKEWIDTH] || 1) * vertex.view.scale / 2) - 1;
 		
 		if (vertex.style['backboneSize'] != null)
 		{
@@ -2190,8 +2190,8 @@
 	// Parallelogram Perimeter
 	mxPerimeter.ParallelogramPerimeter = (bounds, vertex, next, orthogonal) =>
 	{
-		var fixed = mxUtils.getValue(vertex.style, 'fixedSize', '0') != '0';
-		var size = (fixed) ? ParallelogramShape.prototype.fixedSize : ParallelogramShape.prototype.size;
+		let fixed = mxUtils.getValue(vertex.style, 'fixedSize', '0') != '0';
+		let size = (fixed) ? ParallelogramShape.prototype.fixedSize : ParallelogramShape.prototype.size;
 		
 		if (vertex != null)
 		{
@@ -2203,33 +2203,33 @@
 			size *= vertex.view.scale;
 		}
 		
-		var x = bounds.x;
-		var y = bounds.y;
-		var w = bounds.width;
-		var h = bounds.height;
+		let x = bounds.x;
+		let y = bounds.y;
+		let w = bounds.width;
+		let h = bounds.height;
 
-		var direction = (vertex != null) ? mxUtils.getValue(
+		let direction = (vertex != null) ? mxUtils.getValue(
 			vertex.style, mxConstants.STYLE_DIRECTION,
 			mxConstants.DIRECTION_EAST) : mxConstants.DIRECTION_EAST;
-		var vertical = direction == mxConstants.DIRECTION_NORTH ||
+		let vertical = direction == mxConstants.DIRECTION_NORTH ||
 			direction == mxConstants.DIRECTION_SOUTH;
 		var points;
 		
 		if (vertical)
 		{
-			var dy = (fixed) ? Math.max(0, Math.min(h, size)) : h * Math.max(0, Math.min(1, size));
+			let dy = (fixed) ? Math.max(0, Math.min(h, size)) : h * Math.max(0, Math.min(1, size));
 			points = [new mxPoint(x, y), new mxPoint(x + w, y + dy),
 						new mxPoint(x + w, y + h), new mxPoint(x, y + h - dy), new mxPoint(x, y)];
 		}
 		else
 		{
-			var dx = (fixed) ? Math.max(0, Math.min(w * 0.5, size)) : w * Math.max(0, Math.min(1, size));
+			let dx = (fixed) ? Math.max(0, Math.min(w * 0.5, size)) : w * Math.max(0, Math.min(1, size));
 			points = [new mxPoint(x + dx, y), new mxPoint(x + w, y),
 							new mxPoint(x + w - dx, y + h), new mxPoint(x, y + h), new mxPoint(x + dx, y)];
 		}	
 		
-		var cx = bounds.getCenterX();
-		var cy = bounds.getCenterY();
+		let cx = bounds.getCenterX();
+		let cy = bounds.getCenterY();
 		
 		var p1 = new mxPoint(cx, cy);
 		
@@ -2253,8 +2253,8 @@
 	// Trapezoid Perimeter
 	mxPerimeter.TrapezoidPerimeter = (bounds, vertex, next, orthogonal) =>
 	{
-		var fixed = mxUtils.getValue(vertex.style, 'fixedSize', '0') != '0';
-		var size = (fixed) ? TrapezoidShape.prototype.fixedSize : TrapezoidShape.prototype.size;
+		let fixed = mxUtils.getValue(vertex.style, 'fixedSize', '0') != '0';
+		let size = (fixed) ? TrapezoidShape.prototype.fixedSize : TrapezoidShape.prototype.size;
 		
 		if (vertex != null)
 		{
@@ -2266,43 +2266,43 @@
 			size *= vertex.view.scale;
 		}
 		
-		var x = bounds.x;
-		var y = bounds.y;
-		var w = bounds.width;
-		var h = bounds.height;
+		let x = bounds.x;
+		let y = bounds.y;
+		let w = bounds.width;
+		let h = bounds.height;
 
-		var direction = (vertex != null) ? mxUtils.getValue(
+		let direction = (vertex != null) ? mxUtils.getValue(
 				vertex.style, mxConstants.STYLE_DIRECTION,
 				mxConstants.DIRECTION_EAST) : mxConstants.DIRECTION_EAST;
-		var points = [];
+		let points = [];
 		
 		if (direction == mxConstants.DIRECTION_EAST)
 		{
-			var dx = (fixed) ? Math.max(0, Math.min(w * 0.5, size)) : w * Math.max(0, Math.min(1, size));
+			let dx = (fixed) ? Math.max(0, Math.min(w * 0.5, size)) : w * Math.max(0, Math.min(1, size));
 			points = [new mxPoint(x + dx, y), new mxPoint(x + w - dx, y),
 						new mxPoint(x + w, y + h), new mxPoint(x, y + h), new mxPoint(x + dx, y)];
 		}
 		else if (direction == mxConstants.DIRECTION_WEST)
 		{
-			var dx = (fixed) ? Math.max(0, Math.min(w, size)) : w * Math.max(0, Math.min(1, size));
+			let dx = (fixed) ? Math.max(0, Math.min(w, size)) : w * Math.max(0, Math.min(1, size));
 			points = [new mxPoint(x, y), new mxPoint(x + w, y),
 						new mxPoint(x + w - dx, y + h), new mxPoint(x + dx, y + h), new mxPoint(x, y)];
 		}
 		else if (direction == mxConstants.DIRECTION_NORTH)
 		{
-			var dy = (fixed) ? Math.max(0, Math.min(h, size)) : h * Math.max(0, Math.min(1, size));
+			let dy = (fixed) ? Math.max(0, Math.min(h, size)) : h * Math.max(0, Math.min(1, size));
 			points = [new mxPoint(x, y + dy), new mxPoint(x + w, y),
 						new mxPoint(x + w, y + h), new mxPoint(x, y + h - dy), new mxPoint(x, y + dy)];
 		}
 		else
 		{
-			var dy = (fixed) ? Math.max(0, Math.min(h, size)) : h * Math.max(0, Math.min(1, size));
+			let dy = (fixed) ? Math.max(0, Math.min(h, size)) : h * Math.max(0, Math.min(1, size));
 			points = [new mxPoint(x, y), new mxPoint(x + w, y + dy),
 						new mxPoint(x + w, y + h - dy), new mxPoint(x, y + h), new mxPoint(x, y)];
 		}		
 
-		var cx = bounds.getCenterX();
-		var cy = bounds.getCenterY();
+		let cx = bounds.getCenterX();
+		let cy = bounds.getCenterY();
 		
 		var p1 = new mxPoint(cx, cy);
 		
@@ -2326,8 +2326,8 @@
 	// Step Perimeter
 	mxPerimeter.StepPerimeter = (bounds, vertex, next, orthogonal) =>
 	{
-		var fixed = mxUtils.getValue(vertex.style, 'fixedSize', '0') != '0';
-		var size = (fixed) ? StepShape.prototype.fixedSize : StepShape.prototype.size;
+		let fixed = mxUtils.getValue(vertex.style, 'fixedSize', '0') != '0';
+		let size = (fixed) ? StepShape.prototype.fixedSize : StepShape.prototype.size;
 		
 		if (vertex != null)
 		{
@@ -2339,43 +2339,43 @@
 			size *= vertex.view.scale;
 		}
 		
-		var x = bounds.x;
-		var y = bounds.y;
-		var w = bounds.width;
-		var h = bounds.height;
+		let x = bounds.x;
+		let y = bounds.y;
+		let w = bounds.width;
+		let h = bounds.height;
 
-		var cx = bounds.getCenterX();
-		var cy = bounds.getCenterY();
+		let cx = bounds.getCenterX();
+		let cy = bounds.getCenterY();
 		
-		var direction = (vertex != null) ? mxUtils.getValue(
+		let direction = (vertex != null) ? mxUtils.getValue(
 				vertex.style, mxConstants.STYLE_DIRECTION,
 				mxConstants.DIRECTION_EAST) : mxConstants.DIRECTION_EAST;
 		var points;
 		
 		if (direction == mxConstants.DIRECTION_EAST)
 		{
-			var dx = (fixed) ? Math.max(0, Math.min(w, size)) : w * Math.max(0, Math.min(1, size));
+			let dx = (fixed) ? Math.max(0, Math.min(w, size)) : w * Math.max(0, Math.min(1, size));
 			points = [new mxPoint(x, y), new mxPoint(x + w - dx, y), new mxPoint(x + w, cy),
 							new mxPoint(x + w - dx, y + h), new mxPoint(x, y + h),
 							new mxPoint(x + dx, cy), new mxPoint(x, y)];
 		}
 		else if (direction == mxConstants.DIRECTION_WEST)
 		{
-			var dx = (fixed) ? Math.max(0, Math.min(w, size)) : w * Math.max(0, Math.min(1, size));
+			let dx = (fixed) ? Math.max(0, Math.min(w, size)) : w * Math.max(0, Math.min(1, size));
 			points = [new mxPoint(x + dx, y), new mxPoint(x + w, y), new mxPoint(x + w - dx, cy),
 							new mxPoint(x + w, y + h), new mxPoint(x + dx, y + h),
 							new mxPoint(x, cy), new mxPoint(x + dx, y)];
 		}
 		else if (direction == mxConstants.DIRECTION_NORTH)
 		{
-			var dy = (fixed) ? Math.max(0, Math.min(h, size)) : h * Math.max(0, Math.min(1, size));
+			let dy = (fixed) ? Math.max(0, Math.min(h, size)) : h * Math.max(0, Math.min(1, size));
 			points = [new mxPoint(x, y + dy), new mxPoint(cx, y), new mxPoint(x + w, y + dy),
 							new mxPoint(x + w, y + h), new mxPoint(cx, y + h - dy),
 							new mxPoint(x, y + h), new mxPoint(x, y + dy)];
 		}
 		else
 		{
-			var dy = (fixed) ? Math.max(0, Math.min(h, size)) : h * Math.max(0, Math.min(1, size));
+			let dy = (fixed) ? Math.max(0, Math.min(h, size)) : h * Math.max(0, Math.min(1, size));
 			points = [new mxPoint(x, y), new mxPoint(cx, y + dy), new mxPoint(x + w, y),
 							new mxPoint(x + w, y + h - dy), new mxPoint(cx, y + h),
 							new mxPoint(x, y + h - dy), new mxPoint(x, y)];
@@ -2403,8 +2403,8 @@
 	// Hexagon Perimeter 2 (keep existing one)
 	mxPerimeter.HexagonPerimeter2 = (bounds, vertex, next, orthogonal) =>
 	{
-		var fixed = mxUtils.getValue(vertex.style, 'fixedSize', '0') != '0';
-		var size = (fixed) ? HexagonShape.prototype.fixedSize : HexagonShape.prototype.size;
+		let fixed = mxUtils.getValue(vertex.style, 'fixedSize', '0') != '0';
+		let size = (fixed) ? HexagonShape.prototype.fixedSize : HexagonShape.prototype.size;
 		
 		if (vertex != null)
 		{
@@ -2416,31 +2416,31 @@
 			size *= vertex.view.scale;
 		}
 		
-		var x = bounds.x;
-		var y = bounds.y;
-		var w = bounds.width;
-		var h = bounds.height;
+		let x = bounds.x;
+		let y = bounds.y;
+		let w = bounds.width;
+		let h = bounds.height;
 
-		var cx = bounds.getCenterX();
-		var cy = bounds.getCenterY();
+		let cx = bounds.getCenterX();
+		let cy = bounds.getCenterY();
 		
-		var direction = (vertex != null) ? mxUtils.getValue(
+		let direction = (vertex != null) ? mxUtils.getValue(
 			vertex.style, mxConstants.STYLE_DIRECTION,
 			mxConstants.DIRECTION_EAST) : mxConstants.DIRECTION_EAST;
-		var vertical = direction == mxConstants.DIRECTION_NORTH ||
+		let vertical = direction == mxConstants.DIRECTION_NORTH ||
 			direction == mxConstants.DIRECTION_SOUTH;
 		var points;
 		
 		if (vertical)
 		{
-			var dy = (fixed) ? Math.max(0, Math.min(h, size)) : h * Math.max(0, Math.min(1, size));
+			let dy = (fixed) ? Math.max(0, Math.min(h, size)) : h * Math.max(0, Math.min(1, size));
 			points = [new mxPoint(cx, y), new mxPoint(x + w, y + dy), new mxPoint(x + w, y + h - dy),
 							new mxPoint(cx, y + h), new mxPoint(x, y + h - dy),
 							new mxPoint(x, y + dy), new mxPoint(cx, y)];
 		}
 		else
 		{
-			var dx = (fixed) ? Math.max(0, Math.min(w, size)) : w * Math.max(0, Math.min(1, size));
+			let dx = (fixed) ? Math.max(0, Math.min(w, size)) : w * Math.max(0, Math.min(1, size));
 			points = [new mxPoint(x + dx, y), new mxPoint(x + w - dx, y), new mxPoint(x + w, cy),
 						new mxPoint(x + w - dx, y + h), new mxPoint(x + dx, y + h),
 						new mxPoint(x, cy), new mxPoint(x + dx, y)];
@@ -2474,7 +2474,7 @@
 	LollipopShape.prototype.size = 10;
 	LollipopShape.prototype.paintBackground = function(c, x, y, w, h)
 	{
-		var sz = parseFloat(mxUtils.getValue(this.style, 'size', this.size));
+		let sz = parseFloat(mxUtils.getValue(this.style, 'size', this.size));
 		c.translate(x, y);
 		
 		c.ellipse((w - sz) / 2, 0, sz, sz);
@@ -2499,8 +2499,8 @@
 	RequiresShape.prototype.inset = 2;
 	RequiresShape.prototype.paintBackground = function(c, x, y, w, h)
 	{
-		var sz = parseFloat(mxUtils.getValue(this.style, 'size', this.size));
-		var inset = parseFloat(mxUtils.getValue(this.style, 'inset', this.inset)) + this.strokewidth;
+		let sz = parseFloat(mxUtils.getValue(this.style, 'size', this.size));
+		let inset = parseFloat(mxUtils.getValue(this.style, 'inset', this.inset)) + this.strokewidth;
 		c.translate(x, y);
 
 		c.begin();
@@ -2549,7 +2549,7 @@
 	ProvidedRequiredInterfaceShape.prototype.inset = 2;
 	ProvidedRequiredInterfaceShape.prototype.paintBackground = function(c, x, y, w, h)
 	{
-		var inset = parseFloat(mxUtils.getValue(this.style, 'inset', this.inset)) + this.strokewidth;
+		let inset = parseFloat(mxUtils.getValue(this.style, 'inset', this.inset)) + this.strokewidth;
 		c.translate(x, y);
 
 		c.ellipse(0, inset, w - 2 * inset, h - 2 * inset);
@@ -2575,8 +2575,8 @@
 	ModuleShape.prototype.jettyHeight = 10;
 	ModuleShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
 	{
-		var dx = parseFloat(mxUtils.getValue(this.style, 'jettyWidth', this.jettyWidth));
-		var dy = parseFloat(mxUtils.getValue(this.style, 'jettyHeight', this.jettyHeight));
+		let dx = parseFloat(mxUtils.getValue(this.style, 'jettyWidth', this.jettyWidth));
+		let dy = parseFloat(mxUtils.getValue(this.style, 'jettyHeight', this.jettyHeight));
 		var x0 = dx / 2;
 		var x1 = x0 + dx / 2;
 		var y0 = Math.min(dy, h - dy);
@@ -2625,8 +2625,8 @@
 	ComponentShape.prototype.jettyHeight = 12;
 	ComponentShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
 	{
-		var dx = parseFloat(mxUtils.getValue(this.style, 'jettyWidth', this.jettyWidth));
-		var dy = parseFloat(mxUtils.getValue(this.style, 'jettyHeight', this.jettyHeight));
+		let dx = parseFloat(mxUtils.getValue(this.style, 'jettyWidth', this.jettyWidth));
+		let dy = parseFloat(mxUtils.getValue(this.style, 'jettyHeight', this.jettyHeight));
 		var x0 = dx / 2;
 		var x1 = x0 + dx / 2;
 		var y0 = 0.3 * h - dy / 2;
@@ -2673,10 +2673,10 @@
 	mxUtils.extend(AssociativeEntity, mxRectangleShape);
 	AssociativeEntity.prototype.paintForeground = function(c, x, y, w, h)
 	{
-		var hw = w / 2;
-		var hh = h / 2;
+		let hw = w / 2;
+		let hh = h / 2;
 		
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 		c.begin();
 		this.addPoints(c, [new mxPoint(x + hw, y), new mxPoint(x + w, y + hh), new mxPoint(x + hw, y + h),
 		     new mxPoint(x, y + hh)], this.isRounded, arcSize, true);
@@ -2696,7 +2696,7 @@
 	StateShape.prototype.outerStroke = true;
 	StateShape.prototype.paintVertexShape = function(c, x, y, w, h)
 	{
-		var inset = Math.min(4, Math.min(w / 5, h / 5));
+		let inset = Math.min(4, Math.min(w / 5, h / 5));
 		
 		if (w > 0 && h > 0)
 		{
@@ -2792,8 +2792,8 @@
 	};
 	ManualInputShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var s = Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size)));
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let s = Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size)));
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 		this.addPoints(c, [new mxPoint(0, h), new mxPoint(0, s), new mxPoint(w, 0), new mxPoint(w, h)],
 				this.isRounded, arcSize, true);
 		c.end();
@@ -2816,17 +2816,17 @@
 	InternalStorageShape.prototype.paintForeground = function(c, x, y, w, h)
 	{
 		mxRectangleShape.prototype.paintForeground.apply(this, arguments);
-		var inset = 0;
+		let inset = 0;
 		
 		if (this.isRounded)
 		{
-			var f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
+			let f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
 				mxConstants.RECTANGLE_ROUNDING_FACTOR * 100) / 100;
 			inset = Math.max(inset, Math.min(w * f, h * f));
 		}
 		
-		var dx = Math.max(inset, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
-		var dy = Math.max(inset, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'dy', this.dy))));
+		let dx = Math.max(inset, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
+		let dy = Math.max(inset, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'dy', this.dy))));
 		
 		c.begin();
 		c.moveTo(x, y + dy);
@@ -2855,11 +2855,11 @@
 	// Corner
 	CornerShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
-		var dy = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'dy', this.dy))));
+		let dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
+		let dy = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'dy', this.dy))));
 		
-		var s = Math.min(w / 2, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let s = Math.min(w / 2, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 		this.addPoints(c, [new mxPoint(0, 0), new mxPoint(w, 0), new mxPoint(w, dy), new mxPoint(dx, dy),
 		                   new mxPoint(dx, h), new mxPoint(0, h)], this.isRounded, arcSize, true);
 		c.end();
@@ -2903,12 +2903,12 @@
 	// Corner
 	TeeShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
-		var dy = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'dy', this.dy))));
+		let dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
+		let dy = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'dy', this.dy))));
 		var w2 = Math.abs(w - dx) / 2;
 		
-		var s = Math.min(w / 2, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let s = Math.min(w / 2, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 		this.addPoints(c, [new mxPoint(0, 0), new mxPoint(w, 0), new mxPoint(w, dy), new mxPoint((w + dx) / 2, dy),
 		                   new mxPoint((w + dx) / 2, h), new mxPoint((w - dx) / 2, h), new mxPoint((w - dx) / 2, dy),
 		                   new mxPoint(0, dy)], this.isRounded, arcSize, true);
@@ -2927,12 +2927,12 @@
 	SingleArrowShape.prototype.arrowSize = 0.2;
 	SingleArrowShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var aw = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowWidth', this.arrowWidth))));
-		var as = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowSize', this.arrowSize))));
-		var at = (h - aw) / 2;
-		var ab = at + aw;
+		let aw = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowWidth', this.arrowWidth))));
+		let as = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowSize', this.arrowSize))));
+		let at = (h - aw) / 2;
+		let ab = at + aw;
 		
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 		this.addPoints(c, [new mxPoint(0, at), new mxPoint(w - as, at), new mxPoint(w - as, 0), new mxPoint(w, h / 2),
 		                   new mxPoint(w - as, h), new mxPoint(w - as, ab), new mxPoint(0, ab)],
 		                   this.isRounded, arcSize, true);
@@ -2949,12 +2949,12 @@
 	mxUtils.extend(DoubleArrowShape, mxActor);
 	DoubleArrowShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var aw = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowWidth', SingleArrowShape.prototype.arrowWidth))));
-		var as = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowSize', SingleArrowShape.prototype.arrowSize))));
-		var at = (h - aw) / 2;
-		var ab = at + aw;
+		let aw = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowWidth', SingleArrowShape.prototype.arrowWidth))));
+		let as = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowSize', SingleArrowShape.prototype.arrowSize))));
+		let at = (h - aw) / 2;
+		let ab = at + aw;
 		
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 		this.addPoints(c, [new mxPoint(0, h / 2), new mxPoint(as, 0), new mxPoint(as, at), new mxPoint(w - as, at),
 		                   new mxPoint(w - as, 0), new mxPoint(w, h / 2), new mxPoint(w - as, h),
 		                   new mxPoint(w - as, ab), new mxPoint(as, ab), new mxPoint(as, h)],
@@ -2974,8 +2974,8 @@
 	DataStorageShape.prototype.fixedSize = 20;
 	DataStorageShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var fixed = mxUtils.getValue(this.style, 'fixedSize', '0') != '0';
-		var s = (fixed) ? Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'size', this.fixedSize)))) :
+		let fixed = mxUtils.getValue(this.style, 'fixedSize', '0') != '0';
+		let s = (fixed) ? Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'size', this.fixedSize)))) :
 			w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
 		
 		c.moveTo(s, 0);
@@ -3037,8 +3037,8 @@
 	};
 	LoopLimitShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var s = Math.min(w / 2, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let s = Math.min(w / 2, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 		this.addPoints(c, [new mxPoint(s, 0), new mxPoint(w - s, 0), new mxPoint(w, s * 0.8), new mxPoint(w, h),
 		                   new mxPoint(0, h), new mxPoint(0, s * 0.8)], this.isRounded, arcSize, true);
 		c.end();
@@ -3059,8 +3059,8 @@
 	};
 	OffPageConnectorShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var s = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let s = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 		this.addPoints(c, [new mxPoint(0, 0), new mxPoint(w, 0), new mxPoint(w, h - s), new mxPoint(w / 2, h),
 		                   new mxPoint(0, h - s)], this.isRounded, arcSize, true);
 		c.end();
@@ -3194,8 +3194,8 @@
 	DimensionShape.prototype.paintVertexShape = function(c, x, y, w, h)
 	{
 		// Arrow size
-		var al = 10;
-		var cy = y + h - al / 2;
+		let al = 10;
+		let cy = y + h - al / 2;
 		
 		c.begin();
 		c.moveTo(x, y);
@@ -3235,8 +3235,8 @@
 
 		if (this.style != null)
 		{
-			var pointerEvents = c.pointerEvents;
-			var events = mxUtils.getValue(this.style, mxConstants.STYLE_POINTER_EVENTS, '1') == '1';
+			let pointerEvents = c.pointerEvents;
+			let events = mxUtils.getValue(this.style, mxConstants.STYLE_POINTER_EVENTS, '1') == '1';
 			
 			if (!events && (this.fill == null || this.fill == mxConstants.NONE))
 			{
@@ -3328,7 +3328,7 @@
 	mxUtils.extend(DelayShape, mxActor);
 	DelayShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var dx = Math.min(w, h / 2);
+		let dx = Math.min(w, h / 2);
 		c.moveTo(0, 0);
 		c.lineTo(w - dx, 0);
 		c.quadTo(w, 0, w, h / 2);
@@ -3349,12 +3349,12 @@
 	CrossShape.prototype.size = 0.2;
 	CrossShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var m = Math.min(h, w);
-		var size = Math.max(0, Math.min(m, m * parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var t = (h - size) / 2;
-		var b = t + size;
-		var l = (w - size) / 2;
-		var r = l + size;
+		let m = Math.min(h, w);
+		let size = Math.max(0, Math.min(m, m * parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let t = (h - size) / 2;
+		let b = t + size;
+		let l = (w - size) / 2;
+		let r = l + size;
 		
 		c.moveTo(0, t);
 		c.lineTo(l, t);
@@ -3383,8 +3383,8 @@
 	DisplayShape.prototype.size = 0.25;
 	DisplayShape.prototype.redrawPath = function(c, x, y, w, h)
 	{
-		var dx = Math.min(w, h / 2);
-		var s = Math.min(w - dx, Math.max(0, parseFloat(mxUtils.getValue(this.style, 'size', this.size))) * w);
+		let dx = Math.min(w, h / 2);
+		let s = Math.min(w - dx, Math.max(0, parseFloat(mxUtils.getValue(this.style, 'size', this.size))) * w);
 		
 		c.moveTo(0, h / 2);
 		c.lineTo(s, 0);
@@ -3409,21 +3409,21 @@
 	FilledEdge.prototype.paintEdgeShape = function(c, pts, rounded)
 	{
 		// Markers modify incoming points array
-		var temp = [];
+		let temp = [];
 		
-		for (var i = 0; i < pts.length; i++)
+		for (let i = 0; i < pts.length; i++)
 		{
 			temp.push(mxUtils.clone(pts[i]));
 		}
 		
 		// paintEdgeShape resets dashed to false
-		var dashed = c.state.dashed;
-		var fixDash = c.state.fixDash;
+		let dashed = c.state.dashed;
+		let fixDash = c.state.fixDash;
 		FilledEdge.prototype.origPaintEdgeShape.apply(this, [c, temp, rounded]);
 
 		if (c.state.strokeWidth >= 3)
 		{
-			var fillClr = mxUtils.getValue(this.style, 'fillColor', null);
+			let fillClr = mxUtils.getValue(this.style, 'fillColor', null);
 			
 			if (fillClr != null)
 			{
@@ -3444,12 +3444,12 @@
 	{
 		(function()
 		{
-			var styleFormatPanelGetCustomColors = StyleFormatPanel.prototype.getCustomColors;
+			let styleFormatPanelGetCustomColors = StyleFormatPanel.prototype.getCustomColors;
 			
 			StyleFormatPanel.prototype.getCustomColors = function()
 			{
-				var ss = this.format.getSelectionState();
-				var result = styleFormatPanelGetCustomColors.apply(this, arguments);
+				let ss = this.format.getSelectionState();
+				let result = styleFormatPanelGetCustomColors.apply(this, arguments);
 				
 				if (ss.style.shape == 'umlFrame')
 				{
@@ -3464,8 +3464,8 @@
 	// Registers and defines the custom marker
 	mxMarker.addMarker('dash', function(c, shape, type, pe, unitX, unitY, size, source, sw, filled)
 	{
-		var nx = unitX * (size + sw + 1);
-		var ny = unitY * (size + sw + 1);
+		let nx = unitX * (size + sw + 1);
+		let ny = unitY * (size + sw + 1);
 
 		return function()
 		{
@@ -3479,10 +3479,10 @@
 	// Registers and defines the custom marker
 	mxMarker.addMarker('box', function(c, shape, type, pe, unitX, unitY, size, source, sw, filled)
 	{
-		var nx = unitX * (size + sw + 1);
-		var ny = unitY * (size + sw + 1);
-		var px = pe.x + nx / 2;
-		var py = pe.y + ny / 2;
+		let nx = unitX * (size + sw + 1);
+		let ny = unitY * (size + sw + 1);
+		let px = pe.x + nx / 2;
+		let py = pe.y + ny / 2;
 		
 		pe.x -= nx;
 		pe.y -= ny;
@@ -3510,8 +3510,8 @@
 	// Registers and defines the custom marker
 	mxMarker.addMarker('cross', function(c, shape, type, pe, unitX, unitY, size, source, sw, filled)
 	{
-		var nx = unitX * (size + sw + 1);
-		var ny = unitY * (size + sw + 1);
+		let nx = unitX * (size + sw + 1);
+		let ny = unitY * (size + sw + 1);
 
 		return function()
 		{
@@ -3526,10 +3526,10 @@
 	
 	function circleMarker(c, shape, type, pe, unitX, unitY, size, source, sw, filled)
 	{
-		var a = size / 2;
-		var size = size + sw;
+		let a = size / 2;
+		let size = size + sw;
 
-		var pt = pe.clone();
+		let pt = pe.clone();
 		
 		pe.x -= unitX * (2 * size + sw);
 		pe.y -= unitY * (2 * size + sw);
@@ -3555,10 +3555,10 @@
 	mxMarker.addMarker('circle', circleMarker);
 	mxMarker.addMarker('circlePlus', function(c, shape, type, pe, unitX, unitY, size, source, sw, filled)
 	{
-		var pt = pe.clone();
-		var fn = circleMarker.apply(this, arguments);
-		var nx = unitX * (size + 2 * sw); // (size + sw + 1);
-		var ny = unitY * (size + 2 * sw); //(size + sw + 1);
+		let pt = pe.clone();
+		let fn = circleMarker.apply(this, arguments);
+		let nx = unitX * (size + 2 * sw); // (size + sw + 1);
+		let ny = unitY * (size + 2 * sw); //(size + sw + 1);
 
 		return function()
 		{
@@ -3576,9 +3576,9 @@
 	// Registers and defines the custom marker
 	mxMarker.addMarker('halfCircle', function(c, shape, type, pe, unitX, unitY, size, source, sw, filled)
 	{
-		var nx = unitX * (size + sw + 1);
-		var ny = unitY * (size + sw + 1);
-		var pt = pe.clone();
+		let nx = unitX * (size + sw + 1);
+		let ny = unitY * (size + sw + 1);
+		let pt = pe.clone();
 		
 		pe.x -= nx;
 		pe.y -= ny;
@@ -3598,17 +3598,17 @@
 		// The angle of the forward facing arrow sides against the x axis is
 		// 26.565 degrees, 1/sin(26.565) = 2.236 / 2 = 1.118 ( / 2 allows for
 		// only half the strokewidth is processed ).
-		var endOffsetX = unitX * sw * 1.118;
-		var endOffsetY = unitY * sw * 1.118;
+		let endOffsetX = unitX * sw * 1.118;
+		let endOffsetY = unitY * sw * 1.118;
 		
 		unitX = unitX * (size + sw);
 		unitY = unitY * (size + sw);
 
-		var pt = pe.clone();
+		let pt = pe.clone();
 		pt.x -= endOffsetX;
 		pt.y -= endOffsetY;
 		
-		var f = 1;
+		let f = 1;
 		pe.x += -unitX * f - endOffsetX;
 		pe.y += -unitY * f - endOffsetY;
 		
@@ -3649,7 +3649,7 @@
 			unitX = unitX * (size + sw);
 			unitY = unitY * (size + sw);
 			
-			var pt = pe.clone();
+			let pt = pe.clone();
 
 			return function()
 			{
@@ -3677,17 +3677,17 @@
 		// The angle of the forward facing arrow sides against the x axis is
 		// 26.565 degrees, 1/sin(26.565) = 2.236 / 2 = 1.118 ( / 2 allows for
 		// only half the strokewidth is processed ).
-		var endOffsetX = unitX * sw * 1.118;
-		var endOffsetY = unitY * sw * 1.118;
+		let endOffsetX = unitX * sw * 1.118;
+		let endOffsetY = unitY * sw * 1.118;
 		
 		unitX = unitX * (size + sw);
 		unitY = unitY * (size + sw);
 
-		var pt = pe.clone();
+		let pt = pe.clone();
 		pt.x -= endOffsetX;
 		pt.y -= endOffsetY;
 		
-		var f = (type != mxConstants.ARROW_CLASSIC && type != mxConstants.ARROW_CLASSIC_THIN) ? 1 : 3 / 4;
+		let f = (type != mxConstants.ARROW_CLASSIC && type != mxConstants.ARROW_CLASSIC_THIN) ? 1 : 3 / 4;
 		pe.x += -unitX * f - endOffsetX;
 		pe.y += -unitY * f - endOffsetY;
 		
@@ -3721,11 +3721,11 @@
 	{
 		function createHandle(state, keys, getPositionFn, setPositionFn, ignoreGrid, redrawEdges, executeFn)
 		{
-			var handle = new mxHandle(state, null, mxVertexHandler.prototype.secondaryHandleImage);
+			let handle = new mxHandle(state, null, mxVertexHandler.prototype.secondaryHandleImage);
 			
 			handle.execute = function(me)
 			{
-				for (var i = 0; i < keys.length; i++)
+				for (let i = 0; i < keys.length; i++)
 				{	
 					this.copyStyle(keys[i]);
 				}
@@ -3743,7 +3743,7 @@
 			// Overridden to update connected edges
 			if (redrawEdges)
 			{
-				var positionChanged = handle.positionChanged;
+				let positionChanged = handle.positionChanged;
 				
 				handle.positionChanged = function()
 				{
@@ -3762,17 +3762,17 @@
 		{
 			return createHandle(state, [mxConstants.STYLE_ARCSIZE], function(bounds)
 			{
-				var tmp = (yOffset != null) ? yOffset : bounds.height / 8;
+				let tmp = (yOffset != null) ? yOffset : bounds.height / 8;
 				
 				if (mxUtils.getValue(state.style, mxConstants.STYLE_ABSOLUTE_ARCSIZE, 0) == '1')
 				{
-					var arcSize = mxUtils.getValue(state.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+					let arcSize = mxUtils.getValue(state.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
 					
 					return new mxPoint(bounds.x + bounds.width - Math.min(bounds.width / 2, arcSize), bounds.y + tmp);
 				}
 				else
 				{
-					var arcSize = Math.max(0, parseFloat(mxUtils.getValue(state.style,
+					let arcSize = Math.max(0, parseFloat(mxUtils.getValue(state.style,
 						mxConstants.STYLE_ARCSIZE, mxConstants.RECTANGLE_ROUNDING_FACTOR * 100))) / 100;
 					
 					return new mxPoint(bounds.x + bounds.width - Math.min(Math.max(bounds.width / 2, bounds.height / 2),
@@ -3787,7 +3787,7 @@
 				}
 				else
 				{
-					var f = Math.min(50, Math.max(0, (bounds.width - pt.x + bounds.x) * 100 /
+					let f = Math.min(50, Math.max(0, (bounds.width - pt.x + bounds.x) * 100 /
 						Math.min(bounds.width, bounds.height)));
 					this.state.style[mxConstants.STYLE_ARCSIZE] = Math.round(f);
 				}
@@ -3798,7 +3798,7 @@
 		{
 			return function(state)
 			{
-				var handles = [];
+				let handles = [];
 				
 				if (mxUtils.getValue(state.style, mxConstants.STYLE_ROUNDED, false))
 				{
@@ -3815,16 +3815,16 @@
 			
 			return function(state)
 			{
-				var handles = [createHandle(state, ['size'], function(bounds)
+				let handles = [createHandle(state, ['size'], function(bounds)
 				{
-					var fixed = (fixedDefaultValue != null) ? mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0' : null;
-					var size = Math.max(0, parseFloat(mxUtils.getValue(this.state.style, 'size', (fixed) ? fixedDefaultValue : defaultValue)));
+					let fixed = (fixedDefaultValue != null) ? mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0' : null;
+					let size = Math.max(0, parseFloat(mxUtils.getValue(this.state.style, 'size', (fixed) ? fixedDefaultValue : defaultValue)));
 					
 					return new mxPoint(bounds.x + Math.min(bounds.width * 0.75 * max, size * ((fixed) ? 0.75 : bounds.width * 0.75)), bounds.y + bounds.height / 4);
 				}, function(bounds, pt)
 				{
-					var fixed = (fixedDefaultValue != null) ? mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0' : null;
-					var size = (fixed) ? (pt.x - bounds.x) : Math.max(0, Math.min(max, (pt.x - bounds.x) / bounds.width * 0.75));
+					let fixed = (fixedDefaultValue != null) ? mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0' : null;
+					let size = (fixed) ? (pt.x - bounds.x) : Math.max(0, Math.min(max, (pt.x - bounds.x) / bounds.width * 0.75));
 					
 					this.state.style['size'] = size;
 				}, false, true)];
@@ -3844,16 +3844,16 @@
 			
 			return function(state)
 			{
-				var handles = [createHandle(state, ['size'], function(bounds)
+				let handles = [createHandle(state, ['size'], function(bounds)
 				{
-					var fixed = (fixedDefaultValue != null) ? mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0' : null;
-					var size = parseFloat(mxUtils.getValue(this.state.style, 'size', (fixed) ? fixedDefaultValue : defaultValue));
+					let fixed = (fixedDefaultValue != null) ? mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0' : null;
+					let size = parseFloat(mxUtils.getValue(this.state.style, 'size', (fixed) ? fixedDefaultValue : defaultValue));
 	
 					return new mxPoint(bounds.x + Math.max(0, Math.min(bounds.width * 0.5, size * ((fixed) ? 1 : bounds.width))), bounds.getCenterY());
 				}, function(bounds, pt, me)
 				{
-					var fixed = (fixedDefaultValue != null) ? mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0' : null;
-					var size = (fixed) ? (pt.x - bounds.x) : Math.max(0, Math.min(max, (pt.x - bounds.x) / bounds.width));
+					let fixed = (fixedDefaultValue != null) ? mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0' : null;
+					let size = (fixed) ? (pt.x - bounds.x) : Math.max(0, Math.min(max, (pt.x - bounds.x) / bounds.width));
 					
 					this.state.style['size'] = size;
 				}, false, redrawEdges)];
@@ -3871,9 +3871,9 @@
 		{
 			return function(state)
 			{
-				var handles = [createHandle(state, ['size'], function(bounds)
+				let handles = [createHandle(state, ['size'], function(bounds)
 				{
-					var size = Math.max(0, Math.min(bounds.width, Math.min(bounds.height, parseFloat(
+					let size = Math.max(0, Math.min(bounds.width, Math.min(bounds.height, parseFloat(
 						mxUtils.getValue(this.state.style, 'size', defaultValue))))) * factor;
 					
 					return new mxPoint(bounds.x + size, bounds.y + size);
@@ -3898,7 +3898,7 @@
 			{
 				return [createHandle(state, ['size'], function(bounds)
 						{
-							var size = Math.max(0, Math.min(bounds.height * 0.5, parseFloat(mxUtils.getValue(this.state.style, 'size', defaultValue))));
+							let size = Math.max(0, Math.min(bounds.height * 0.5, parseFloat(mxUtils.getValue(this.state.style, 'size', defaultValue))));
 	
 							return new mxPoint(bounds.x, bounds.y + size);
 						}, function(bounds, pt)
@@ -3914,8 +3914,8 @@
 			{
 				return [createHandle(state, ['arrowWidth', 'arrowSize'], function(bounds)
 				{
-					var aw = Math.max(0, Math.min(1, mxUtils.getValue(this.state.style, 'arrowWidth', SingleArrowShape.prototype.arrowWidth)));
-					var as = Math.max(0, Math.min(maxSize, mxUtils.getValue(this.state.style, 'arrowSize', SingleArrowShape.prototype.arrowSize)));
+					let aw = Math.max(0, Math.min(1, mxUtils.getValue(this.state.style, 'arrowWidth', SingleArrowShape.prototype.arrowWidth)));
+					let as = Math.max(0, Math.min(maxSize, mxUtils.getValue(this.state.style, 'arrowSize', SingleArrowShape.prototype.arrowSize)));
 					
 					return new mxPoint(bounds.x + (1 - as) * bounds.width, bounds.y + (1 - aw) * bounds.height / 2);
 				}, function(bounds, pt)
@@ -3930,36 +3930,36 @@
 		{
 			return createHandle(state, keys, function(bounds)
 			{
-				var pts = state.absolutePoints;
-				var n = pts.length - 1;
+				let pts = state.absolutePoints;
+				let n = pts.length - 1;
 				
-				var tr = state.view.translate;
-				var s = state.view.scale;
+				let tr = state.view.translate;
+				let s = state.view.scale;
 				
 				var p0 = (start) ? pts[0] : pts[n];
 				var p1 = (start) ? pts[1] : pts[n - 1];
-				var dx = (start) ? p1.x - p0.x : p1.x - p0.x;
-				var dy = (start) ? p1.y - p0.y : p1.y - p0.y;
+				let dx = (start) ? p1.x - p0.x : p1.x - p0.x;
+				let dy = (start) ? p1.y - p0.y : p1.y - p0.y;
 
-				var dist = Math.sqrt(dx * dx + dy * dy);
+				let dist = Math.sqrt(dx * dx + dy * dy);
 				
-				var pt = getPosition.call(this, dist, dx / dist, dy / dist, p0, p1);
+				let pt = getPosition.call(this, dist, dx / dist, dy / dist, p0, p1);
 				
 				return new mxPoint(pt.x / s - tr.x, pt.y / s - tr.y);
 			}, function(bounds, pt, me)
 			{
-				var pts = state.absolutePoints;
-				var n = pts.length - 1;
+				let pts = state.absolutePoints;
+				let n = pts.length - 1;
 				
-				var tr = state.view.translate;
-				var s = state.view.scale;
+				let tr = state.view.translate;
+				let s = state.view.scale;
 				
 				var p0 = (start) ? pts[0] : pts[n];
 				var p1 = (start) ? pts[1] : pts[n - 1];
-				var dx = (start) ? p1.x - p0.x : p1.x - p0.x;
-				var dy = (start) ? p1.y - p0.y : p1.y - p0.y;
+				let dx = (start) ? p1.x - p0.x : p1.x - p0.x;
+				let dy = (start) ? p1.y - p0.y : p1.y - p0.y;
 
-				var dist = Math.sqrt(dx * dx + dy * dy);
+				let dist = Math.sqrt(dx * dx + dy * dy);
 				pt.x = (pt.x + tr.x) * s;
 				pt.y = (pt.y + tr.y) * s;
 
@@ -3971,12 +3971,12 @@
 		{
 			return createEdgeHandle(state, ['width'], start, function(dist, nx, ny, p0, p1)
 			{
-				var w = state.shape.getEdgeWidth() * state.view.scale + spacing;
+				let w = state.shape.getEdgeWidth() * state.view.scale + spacing;
 
 				return new mxPoint(p0.x + nx * dist / 4 + ny * w / 2, p0.y + ny * dist / 4 - nx * w / 2);
 			}, function(dist, nx, ny, p0, p1, pt)
 			{
-				var w = Math.sqrt(mxUtils.ptSegDistSq(p0.x, p0.y, p1.x, p1.y, pt.x, pt.y));					
+				let w = Math.sqrt(mxUtils.ptSegDistSq(p0.x, p0.y, p1.x, p1.y, pt.x, pt.y));					
 				state.style['width'] = Math.round(w * 2) / state.view.scale - spacing;
 			});
 		};
@@ -3986,32 +3986,32 @@
 			return Math.abs((y2 - y1) * x0 - (x2 - x1) * y0 + x2 * y1 - y2 * x1) / Math.sqrt((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1));
 		}
 
-		var handleFactory = {
+		let handleFactory = {
 			'link': function(state)
 			{
-				var spacing = 10;
+				let spacing = 10;
 
 				return [createEdgeWidthHandle(state, true, spacing), createEdgeWidthHandle(state, false, spacing)];
 			},
 			'flexArrow': function(state)
 			{
 				// Do not use state.shape.startSize/endSize since it is cached
-				var tol = state.view.graph.gridSize / state.view.scale;
-				var handles = [];
+				let tol = state.view.graph.gridSize / state.view.scale;
+				let handles = [];
 				
 				if (mxUtils.getValue(state.style, mxConstants.STYLE_STARTARROW, mxConstants.NONE) != mxConstants.NONE)
 				{
 					handles.push(createEdgeHandle(state, ['width', mxConstants.STYLE_STARTSIZE, mxConstants.STYLE_ENDSIZE], true, function(dist, nx, ny, p0, p1)
 					{
-						var w = (state.shape.getEdgeWidth() - state.shape.strokewidth) * state.view.scale;
-						var l = mxUtils.getNumber(state.style, mxConstants.STYLE_STARTSIZE, mxConstants.ARROW_SIZE / 5) * 3 * state.view.scale;
+						let w = (state.shape.getEdgeWidth() - state.shape.strokewidth) * state.view.scale;
+						let l = mxUtils.getNumber(state.style, mxConstants.STYLE_STARTSIZE, mxConstants.ARROW_SIZE / 5) * 3 * state.view.scale;
 						
 						return new mxPoint(p0.x + nx * (l + state.shape.strokewidth * state.view.scale) + ny * w / 2,
 							p0.y + ny * (l + state.shape.strokewidth * state.view.scale) - nx * w / 2);
 					}, function(dist, nx, ny, p0, p1, pt, me)
 					{
-						var w = Math.sqrt(mxUtils.ptSegDistSq(p0.x, p0.y, p1.x, p1.y, pt.x, pt.y));
-						var l = mxUtils.ptLineDist(p0.x, p0.y, p0.x + ny, p0.y - nx, pt.x, pt.y);
+						let w = Math.sqrt(mxUtils.ptSegDistSq(p0.x, p0.y, p1.x, p1.y, pt.x, pt.y));
+						let l = mxUtils.ptLineDist(p0.x, p0.y, p0.x + ny, p0.y - nx, pt.x, pt.y);
 						
 						state.style[mxConstants.STYLE_STARTSIZE] = Math.round((l - state.shape.strokewidth) * 100 / 3) / 100 / state.view.scale;
 						state.style['width'] = Math.round(w * 2) / state.view.scale;
@@ -4034,15 +4034,15 @@
 					
 					handles.push(createEdgeHandle(state, ['startWidth', 'endWidth', mxConstants.STYLE_STARTSIZE, mxConstants.STYLE_ENDSIZE], true, function(dist, nx, ny, p0, p1)
 					{
-						var w = (state.shape.getStartArrowWidth() - state.shape.strokewidth) * state.view.scale;
-						var l = mxUtils.getNumber(state.style, mxConstants.STYLE_STARTSIZE, mxConstants.ARROW_SIZE / 5) * 3 * state.view.scale;
+						let w = (state.shape.getStartArrowWidth() - state.shape.strokewidth) * state.view.scale;
+						let l = mxUtils.getNumber(state.style, mxConstants.STYLE_STARTSIZE, mxConstants.ARROW_SIZE / 5) * 3 * state.view.scale;
 						
 						return new mxPoint(p0.x + nx * (l + state.shape.strokewidth * state.view.scale) + ny * w / 2,
 							p0.y + ny * (l + state.shape.strokewidth * state.view.scale) - nx * w / 2);
 					}, function(dist, nx, ny, p0, p1, pt, me)
 					{
-						var w = Math.sqrt(mxUtils.ptSegDistSq(p0.x, p0.y, p1.x, p1.y, pt.x, pt.y));
-						var l = mxUtils.ptLineDist(p0.x, p0.y, p0.x + ny, p0.y - nx, pt.x, pt.y);
+						let w = Math.sqrt(mxUtils.ptSegDistSq(p0.x, p0.y, p1.x, p1.y, pt.x, pt.y));
+						let l = mxUtils.ptLineDist(p0.x, p0.y, p0.x + ny, p0.y - nx, pt.x, pt.y);
 						
 						state.style[mxConstants.STYLE_STARTSIZE] = Math.round((l - state.shape.strokewidth) * 100 / 3) / 100 / state.view.scale;
 						state.style['startWidth'] = Math.max(0, Math.round(w * 2) - state.shape.getEdgeWidth()) / state.view.scale;
@@ -4074,15 +4074,15 @@
 				{
 					handles.push(createEdgeHandle(state, ['width', mxConstants.STYLE_STARTSIZE, mxConstants.STYLE_ENDSIZE], false, function(dist, nx, ny, p0, p1)
 					{
-						var w = (state.shape.getEdgeWidth() - state.shape.strokewidth) * state.view.scale;
-						var l = mxUtils.getNumber(state.style, mxConstants.STYLE_ENDSIZE, mxConstants.ARROW_SIZE / 5) * 3 * state.view.scale;
+						let w = (state.shape.getEdgeWidth() - state.shape.strokewidth) * state.view.scale;
+						let l = mxUtils.getNumber(state.style, mxConstants.STYLE_ENDSIZE, mxConstants.ARROW_SIZE / 5) * 3 * state.view.scale;
 						
 						return new mxPoint(p0.x + nx * (l + state.shape.strokewidth * state.view.scale) - ny * w / 2,
 							p0.y + ny * (l + state.shape.strokewidth * state.view.scale) + nx * w / 2);
 					}, function(dist, nx, ny, p0, p1, pt, me)
 					{
-						var w = Math.sqrt(mxUtils.ptSegDistSq(p0.x, p0.y, p1.x, p1.y, pt.x, pt.y));
-						var l = mxUtils.ptLineDist(p0.x, p0.y, p0.x + ny, p0.y - nx, pt.x, pt.y);
+						let w = Math.sqrt(mxUtils.ptSegDistSq(p0.x, p0.y, p1.x, p1.y, pt.x, pt.y));
+						let l = mxUtils.ptLineDist(p0.x, p0.y, p0.x + ny, p0.y - nx, pt.x, pt.y);
 						
 						state.style[mxConstants.STYLE_ENDSIZE] = Math.round((l - state.shape.strokewidth) * 100 / 3) / 100 / state.view.scale;
 						state.style['width'] = Math.round(w * 2) / state.view.scale;
@@ -4105,15 +4105,15 @@
 					
 					handles.push(createEdgeHandle(state, ['startWidth', 'endWidth', mxConstants.STYLE_STARTSIZE, mxConstants.STYLE_ENDSIZE], false, function(dist, nx, ny, p0, p1)
 					{
-						var w = (state.shape.getEndArrowWidth() - state.shape.strokewidth) * state.view.scale;
-						var l = mxUtils.getNumber(state.style, mxConstants.STYLE_ENDSIZE, mxConstants.ARROW_SIZE / 5) * 3 * state.view.scale;
+						let w = (state.shape.getEndArrowWidth() - state.shape.strokewidth) * state.view.scale;
+						let l = mxUtils.getNumber(state.style, mxConstants.STYLE_ENDSIZE, mxConstants.ARROW_SIZE / 5) * 3 * state.view.scale;
 						
 						return new mxPoint(p0.x + nx * (l + state.shape.strokewidth * state.view.scale) - ny * w / 2,
 							p0.y + ny * (l + state.shape.strokewidth * state.view.scale) + nx * w / 2);
 					}, function(dist, nx, ny, p0, p1, pt, me)
 					{
-						var w = Math.sqrt(mxUtils.ptSegDistSq(p0.x, p0.y, p1.x, p1.y, pt.x, pt.y));
-						var l = mxUtils.ptLineDist(p0.x, p0.y, p0.x + ny, p0.y - nx, pt.x, pt.y);
+						let w = Math.sqrt(mxUtils.ptSegDistSq(p0.x, p0.y, p1.x, p1.y, pt.x, pt.y));
+						let l = mxUtils.ptLineDist(p0.x, p0.y, p0.x + ny, p0.y - nx, pt.x, pt.y);
 						
 						state.style[mxConstants.STYLE_ENDSIZE] = Math.round((l - state.shape.strokewidth) * 100 / 3) / 100 / state.view.scale;
 						state.style['endWidth'] = Math.max(0, Math.round(w * 2) - state.shape.getEdgeWidth()) / state.view.scale;
@@ -4145,18 +4145,18 @@
 			},
 			'swimlane': function(state)
 			{
-				var handles = [];
+				let handles = [];
 				
 				if (mxUtils.getValue(state.style, mxConstants.STYLE_ROUNDED))
 				{
-					var size = parseFloat(mxUtils.getValue(state.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE));
+					let size = parseFloat(mxUtils.getValue(state.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE));
 					handles.push(createArcHandle(state, size / 2));
 				}
 				
 				// Start size handle must be last item in handles for hover to work in tables (see mouse event handler in Graph)
 				handles.push(createHandle(state, [mxConstants.STYLE_STARTSIZE], function(bounds)
 				{
-					var size = parseFloat(mxUtils.getValue(state.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE));
+					let size = parseFloat(mxUtils.getValue(state.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE));
 					
 					if (mxUtils.getValue(state.style, mxConstants.STYLE_HORIZONTAL, 1) == 1)
 					{
@@ -4176,16 +4176,16 @@
 				{
 					if (mxEvent.isControlDown(me.getEvent()))
 					{
-						var graph = state.view.graph;
+						let graph = state.view.graph;
 						
 						if (graph.isTableRow(state.cell) || graph.isTableCell(state.cell))
 						{
-							var dir = graph.getSwimlaneDirection(state.style);
-							var parent = graph.model.getParent(state.cell);
-							var cells = graph.model.getChildCells(parent, true);
-							var temp = []; 
+							let dir = graph.getSwimlaneDirection(state.style);
+							let parent = graph.model.getParent(state.cell);
+							let cells = graph.model.getChildCells(parent, true);
+							let temp = []; 
 							
-							for (var i = 0; i < cells.length; i++)
+							for (let i = 0; i < cells.length; i++)
 							{
 								// Finds siblings with the same direction and to set start size
 								if (cells[i] != state.cell && graph.isSwimlane(cells[i]) &&
@@ -4213,7 +4213,7 @@
 			{
 				return [createHandle(state, ['size'], function(bounds)
 				{
-					var size = Math.max(0, Math.min(bounds.height, parseFloat(mxUtils.getValue(this.state.style, 'size', UmlLifeline.prototype.size))));
+					let size = Math.max(0, Math.min(bounds.height, parseFloat(mxUtils.getValue(this.state.style, 'size', UmlLifeline.prototype.size))));
 					
 					return new mxPoint(bounds.getCenterX(), bounds.y + size);
 				}, function(bounds, pt)
@@ -4223,7 +4223,7 @@
 			},
 			'umlFrame': function(state)
 			{
-				var handles = [createHandle(state, ['width', 'height'], function(bounds)
+				let handles = [createHandle(state, ['width', 'height'], function(bounds)
 				{
 					var w0 = Math.max(UmlFrame.prototype.corner, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'width', UmlFrame.prototype.width)));
 					var h0 = Math.max(UmlFrame.prototype.corner * 1.5, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'height', UmlFrame.prototype.height)));
@@ -4239,17 +4239,17 @@
 			},
 			'process': function(state)
 			{
-				var handles = [createHandle(state, ['size'], function(bounds)
+				let handles = [createHandle(state, ['size'], function(bounds)
 				{
 					
-					var fixed = mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0';
-					var size = parseFloat(mxUtils.getValue(this.state.style, 'size', ProcessShape.prototype.size));
+					let fixed = mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0';
+					let size = parseFloat(mxUtils.getValue(this.state.style, 'size', ProcessShape.prototype.size));
 					
 					return (fixed) ? new mxPoint(bounds.x + size, bounds.y + bounds.height / 4) : new mxPoint(bounds.x + bounds.width * size, bounds.y + bounds.height / 4);
 				}, function(bounds, pt)
 				{
-					var fixed = mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0';
-					var size = (fixed) ? Math.max(0, Math.min(bounds.width * 0.5, (pt.x - bounds.x))) : Math.max(0, Math.min(0.5, (pt.x - bounds.x) / bounds.width));
+					let fixed = mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0';
+					let size = (fixed) ? Math.max(0, Math.min(bounds.width * 0.5, (pt.x - bounds.x))) : Math.max(0, Math.min(0.5, (pt.x - bounds.x) / bounds.width));
 					this.state.style['size'] = size;
 				}, false)];
 				
@@ -4264,13 +4264,13 @@
 			{
 				return [createHandle(state, ['size'], function(bounds)
 				{
-					var m = Math.min(bounds.width, bounds.height);
-					var size = Math.max(0, Math.min(1, mxUtils.getValue(this.state.style, 'size', CrossShape.prototype.size))) * m / 2;
+					let m = Math.min(bounds.width, bounds.height);
+					let size = Math.max(0, Math.min(1, mxUtils.getValue(this.state.style, 'size', CrossShape.prototype.size))) * m / 2;
 
 					return new mxPoint(bounds.getCenterX() - size, bounds.getCenterY() - size);
 				}, function(bounds, pt)
 				{
-					var m = Math.min(bounds.width, bounds.height);
+					let m = Math.min(bounds.width, bounds.height);
 					this.state.style['size'] = Math.max(0, Math.min(1, Math.min((Math.max(0, bounds.getCenterY() - pt.y) / m) * 2,
 							(Math.max(0, bounds.getCenterX() - pt.x) / m) * 2)));
 				})];
@@ -4279,7 +4279,7 @@
 			{
 				return [createHandle(state, ['size'], function(bounds)
 				{
-					var size = Math.max(0, Math.min(bounds.width, Math.min(bounds.height, parseFloat(
+					let size = Math.max(0, Math.min(bounds.width, Math.min(bounds.height, parseFloat(
 						mxUtils.getValue(this.state.style, 'size', NoteShape.prototype.size)))));
 					
 					return new mxPoint(bounds.x + bounds.width - size, bounds.y + size);
@@ -4293,7 +4293,7 @@
 			{
 				return [createHandle(state, ['size'], function(bounds)
 				{
-					var size = Math.max(0, Math.min(bounds.width, Math.min(bounds.height, parseFloat(
+					let size = Math.max(0, Math.min(bounds.width, Math.min(bounds.height, parseFloat(
 						mxUtils.getValue(this.state.style, 'size', NoteShape2.prototype.size)))));
 					
 					return new mxPoint(bounds.x + bounds.width - size, bounds.y + size);
@@ -4305,9 +4305,9 @@
 			},
 			'manualInput': function(state)
 			{
-				var handles = [createHandle(state, ['size'], function(bounds)
+				let handles = [createHandle(state, ['size'], function(bounds)
 				{
-					var size = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'size', ManualInputShape.prototype.size)));
+					let size = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'size', ManualInputShape.prototype.size)));
 					
 					return new mxPoint(bounds.x + bounds.width / 4, bounds.y + size * 3 / 4);
 				}, function(bounds, pt)
@@ -4326,30 +4326,30 @@
 			{
 				return [createHandle(state, ['size'], function(bounds)
 				{
-					var fixed = mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0';
-					var size = parseFloat(mxUtils.getValue(this.state.style, 'size', (fixed) ? DataStorageShape.prototype.fixedSize : DataStorageShape.prototype.size));
+					let fixed = mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0';
+					let size = parseFloat(mxUtils.getValue(this.state.style, 'size', (fixed) ? DataStorageShape.prototype.fixedSize : DataStorageShape.prototype.size));
 
 					return new mxPoint(bounds.x + bounds.width - size * ((fixed) ? 1 : bounds.width), bounds.getCenterY());
 				}, function(bounds, pt)
 				{
-					var fixed = mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0';
-					var size = (fixed) ? Math.max(0, Math.min(bounds.width, (bounds.x + bounds.width - pt.x))) : Math.max(0, Math.min(1, (bounds.x + bounds.width - pt.x) / bounds.width));
+					let fixed = mxUtils.getValue(this.state.style, 'fixedSize', '0') != '0';
+					let size = (fixed) ? Math.max(0, Math.min(bounds.width, (bounds.x + bounds.width - pt.x))) : Math.max(0, Math.min(1, (bounds.x + bounds.width - pt.x) / bounds.width));
 					
 					this.state.style['size'] = size;
 				}, false)];
 			},
 			'callout': function(state)
 			{
-				var handles = [createHandle(state, ['size', 'position'], function(bounds)
+				let handles = [createHandle(state, ['size', 'position'], function(bounds)
 				{
-					var size = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'size', CalloutShape.prototype.size)));
-					var position = Math.max(0, Math.min(1, mxUtils.getValue(this.state.style, 'position', CalloutShape.prototype.position)));
-					var base = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'base', CalloutShape.prototype.base)));
+					let size = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'size', CalloutShape.prototype.size)));
+					let position = Math.max(0, Math.min(1, mxUtils.getValue(this.state.style, 'position', CalloutShape.prototype.position)));
+					let base = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'base', CalloutShape.prototype.base)));
 					
 					return new mxPoint(bounds.x + position * bounds.width, bounds.y + bounds.height - size);
 				}, function(bounds, pt)
 				{
-					var base = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'base', CalloutShape.prototype.base)));
+					let base = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'base', CalloutShape.prototype.base)));
 					this.state.style['size'] = Math.round(Math.max(0, Math.min(bounds.height, bounds.y + bounds.height - pt.y)));
 					this.state.style['position'] = Math.round(Math.max(0, Math.min(1, (pt.x - bounds.x) / bounds.width)) * 100) / 100;
 				}, false), createHandle(state, ['position2'], function(bounds)
@@ -4362,14 +4362,14 @@
 					this.state.style['position2'] = Math.round(Math.max(0, Math.min(1, (pt.x - bounds.x) / bounds.width)) * 100) / 100;
 				}, false), createHandle(state, ['base'], function(bounds)
 				{
-					var size = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'size', CalloutShape.prototype.size)));
-					var position = Math.max(0, Math.min(1, mxUtils.getValue(this.state.style, 'position', CalloutShape.prototype.position)));
-					var base = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'base', CalloutShape.prototype.base)));
+					let size = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'size', CalloutShape.prototype.size)));
+					let position = Math.max(0, Math.min(1, mxUtils.getValue(this.state.style, 'position', CalloutShape.prototype.position)));
+					let base = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'base', CalloutShape.prototype.base)));
 					
 					return new mxPoint(bounds.x + Math.min(bounds.width, position * bounds.width + base), bounds.y + bounds.height - size);
 				}, function(bounds, pt)
 				{
-					var position = Math.max(0, Math.min(1, mxUtils.getValue(this.state.style, 'position', CalloutShape.prototype.position)));
+					let position = Math.max(0, Math.min(1, mxUtils.getValue(this.state.style, 'position', CalloutShape.prototype.position)));
 
 					this.state.style['base'] = Math.round(Math.max(0, Math.min(bounds.width, pt.x - bounds.x - position * bounds.width)));
 				}, false)];
@@ -4383,10 +4383,10 @@
 			},
 			'internalStorage': function(state)
 			{
-				var handles = [createHandle(state, ['dx', 'dy'], function(bounds)
+				let handles = [createHandle(state, ['dx', 'dy'], function(bounds)
 				{
-					var dx = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'dx', InternalStorageShape.prototype.dx)));
-					var dy = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'dy', InternalStorageShape.prototype.dy)));
+					let dx = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'dx', InternalStorageShape.prototype.dx)));
+					let dy = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'dy', InternalStorageShape.prototype.dy)));
 
 					return new mxPoint(bounds.x + dx, bounds.y + dy);
 				}, function(bounds, pt)
@@ -4404,10 +4404,10 @@
 			},
 			'module': function(state)
 			{
-				var handles = [createHandle(state, ['jettyWidth', 'jettyHeight'], function(bounds)
+				let handles = [createHandle(state, ['jettyWidth', 'jettyHeight'], function(bounds)
 				{
-					var dx = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'jettyWidth', ModuleShape.prototype.jettyWidth)));
-					var dy = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'jettyHeight', ModuleShape.prototype.jettyHeight)));
+					let dx = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'jettyWidth', ModuleShape.prototype.jettyWidth)));
+					let dy = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'jettyHeight', ModuleShape.prototype.jettyHeight)));
 
 					return new mxPoint(bounds.x + dx / 2, bounds.y + dy * 2);
 				}, function(bounds, pt)
@@ -4422,8 +4422,8 @@
 			{
 				return [createHandle(state, ['dx', 'dy'], function(bounds)
 				{
-					var dx = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'dx', CornerShape.prototype.dx)));
-					var dy = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'dy', CornerShape.prototype.dy)));
+					let dx = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'dx', CornerShape.prototype.dx)));
+					let dy = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'dy', CornerShape.prototype.dy)));
 
 					return new mxPoint(bounds.x + dx, bounds.y + dy);
 				}, function(bounds, pt)
@@ -4436,8 +4436,8 @@
 			{
 				return [createHandle(state, ['dx', 'dy'], function(bounds)
 				{
-					var dx = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'dx', TeeShape.prototype.dx)));
-					var dy = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'dy', TeeShape.prototype.dy)));
+					let dx = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'dx', TeeShape.prototype.dx)));
+					let dy = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'dy', TeeShape.prototype.dy)));
 
 					return new mxPoint(bounds.x + (bounds.width + dx) / 2, bounds.y + dy);
 				}, function(bounds, pt)
@@ -4452,8 +4452,8 @@
 			{
 				return [createHandle(state, ['tabWidth', 'tabHeight'], function(bounds)
 				{
-					var tw = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'tabWidth', FolderShape.prototype.tabWidth)));
-					var th = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'tabHeight', FolderShape.prototype.tabHeight)));
+					let tw = Math.max(0, Math.min(bounds.width, mxUtils.getValue(this.state.style, 'tabWidth', FolderShape.prototype.tabWidth)));
+					let th = Math.max(0, Math.min(bounds.height, mxUtils.getValue(this.state.style, 'tabHeight', FolderShape.prototype.tabHeight)));
 					
 					if (mxUtils.getValue(this.state.style, 'tabPosition', FolderShape.prototype.tabPosition) == mxConstants.ALIGN_RIGHT)
 					{
@@ -4463,7 +4463,7 @@
 					return new mxPoint(bounds.x + tw, bounds.y + th);
 				}, function(bounds, pt)
 				{
-					var tw = Math.max(0, Math.min(bounds.width, pt.x - bounds.x));
+					let tw = Math.max(0, Math.min(bounds.width, pt.x - bounds.x));
 					
 					if (mxUtils.getValue(this.state.style, 'tabPosition', FolderShape.prototype.tabPosition) == mxConstants.ALIGN_RIGHT)
 					{
@@ -4478,7 +4478,7 @@
 			{
 				return [createHandle(state, ['size'], function(bounds)
 				{
-					var size = Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'size', DocumentShape.prototype.size))));
+					let size = Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'size', DocumentShape.prototype.size))));
 
 					return new mxPoint(bounds.x + 3 * bounds.width / 4, bounds.y + (1 - size) * bounds.height);
 				}, function(bounds, pt)
@@ -4490,7 +4490,7 @@
 			{
 				return [createHandle(state, ['size'], function(bounds)
 				{
-					var size = Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'size', TapeShape.prototype.size))));
+					let size = Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'size', TapeShape.prototype.size))));
 
 					return new mxPoint(bounds.getCenterX(), bounds.y + size * bounds.height / 2);
 				}, function(bounds, pt)
@@ -4502,8 +4502,8 @@
 			{
 				return [createHandle(state, ['isoAngle'], function(bounds)
 				{
-					var isoAngle = Math.max(0.01, Math.min(94, parseFloat(mxUtils.getValue(this.state.style, 'isoAngle', IsoCubeShape2.isoAngle)))) * Math.PI / 200 ;
-					var isoH = Math.min(bounds.width * Math.tan(isoAngle), bounds.height * 0.5);
+					let isoAngle = Math.max(0.01, Math.min(94, parseFloat(mxUtils.getValue(this.state.style, 'isoAngle', IsoCubeShape2.isoAngle)))) * Math.PI / 200 ;
+					let isoH = Math.min(bounds.width * Math.tan(isoAngle), bounds.height * 0.5);
 
 					return new mxPoint(bounds.x, bounds.y + isoH);
 				}, function(bounds, pt)
@@ -4517,7 +4517,7 @@
 			{
 				return [createHandle(state, ['size'], function(bounds)
 				{
-					var size = Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'size', OffPageConnectorShape.prototype.size))));
+					let size = Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'size', OffPageConnectorShape.prototype.size))));
 
 					return new mxPoint(bounds.getCenterX(), bounds.y + (1 - size) * bounds.height);
 				}, function(bounds, pt)
@@ -4540,17 +4540,17 @@
 		Graph.createHandle = createHandle;
 		Graph.handleFactory = handleFactory;
 		
-		var vertexHandlerCreateCustomHandles = mxVertexHandler.prototype.createCustomHandles;
+		let vertexHandlerCreateCustomHandles = mxVertexHandler.prototype.createCustomHandles;
 
 		mxVertexHandler.prototype.createCustomHandles = function()
 		{
-			var handles = vertexHandlerCreateCustomHandles.apply(this, arguments);
+			let handles = vertexHandlerCreateCustomHandles.apply(this, arguments);
 			
 			if (this.graph.isCellRotatable(this.state.cell))
 			// LATER: Make locked state independent of rotatable flag, fix toggle if default is false
 			//if (this.graph.isCellResizable(this.state.cell) || this.graph.isCellMovable(this.state.cell))
 			{
-				var name = this.state.style['shape'];
+				let name = this.state.style['shape'];
 
 				if (mxCellRenderer.defaultShapes[name] == null &&
 					mxStencilRegistry.getStencil(name) == null)
@@ -4562,7 +4562,7 @@
 					name = mxConstants.SHAPE_SWIMLANE;
 				}
 				
-				var fn = handleFactory[name];
+				let fn = handleFactory[name];
 				
 				if (fn == null && this.state.shape != null && this.state.shape.isRoundable())
 				{
@@ -4571,7 +4571,7 @@
 			
 				if (fn != null)
 				{
-					var temp = fn(this.state);
+					let temp = fn(this.state);
 					
 					if (temp != null)
 					{
@@ -4592,7 +4592,7 @@
 
 		mxEdgeHandler.prototype.createCustomHandles = function()
 		{
-			var name = this.state.style['shape'];
+			let name = this.state.style['shape'];
 			
 			if (mxCellRenderer.defaultShapes[name] == null &&
 				mxStencilRegistry.getStencil(name) == null)
@@ -4600,7 +4600,7 @@
 				name = mxConstants.SHAPE_CONNECTOR;
 			}
 			
-			var fn = handleFactory[name];
+			let fn = handleFactory[name];
 			
 			if (fn != null)
 			{
@@ -4617,8 +4617,8 @@
 		Graph.handleFactory = {};
 	}
 	 
-	 var isoHVector = new mxPoint(1, 0);
-	 var isoVVector = new mxPoint(1, 0);
+	 let isoHVector = new mxPoint(1, 0);
+	 let isoVVector = new mxPoint(1, 0);
 		
 	 var alpha1 = mxUtils.toRadians(-30);
 		
@@ -4636,11 +4636,11 @@
 	
 	 mxEdgeStyle.IsometricConnector = (state, source, target, points, result) =>
 	 {
-		var view = state.view;
-		var pt = (points != null && points.length > 0) ? points[0] : null;
-		var pts = state.absolutePoints;
+		let view = state.view;
+		let pt = (points != null && points.length > 0) ? points[0] : null;
+		let pts = state.absolutePoints;
 		var p0 = pts[0];
-		var pe = pts[pts.length-1];
+		let pe = pts[pts.length-1];
 		
 		if (pt != null)
 		{
@@ -4669,11 +4669,11 @@
 		var b1 = isoVVector.x;
 		var b2 = isoVVector.y;
 		
-		var elbow = mxUtils.getValue(state.style, 'elbow', 'horizontal') == 'horizontal';
+		let elbow = mxUtils.getValue(state.style, 'elbow', 'horizontal') == 'horizontal';
 		
 		if (pe != null && p0 != null)
 		{
-			var last = p0;
+			let last = p0;
 			
 			function isoLineTo(x, y, ignoreFirst)
 			{
@@ -4681,8 +4681,8 @@
 				var c2 = y - last.y;
 
 				// Solves for isometric base vectors
-				var h = (b2 * c1 - b1 * c2) / (a1 * b2 - a2 * b1);
-				var v = (a2 * c1 - a1 * c2) / (a2 * b1 - a1 * b2);
+				let h = (b2 * c1 - b1 * c2) / (a1 * b2 - a2 * b1);
+				let v = (a2 * c1 - a1 * c2) / (a2 * b1 - a1 * b2);
 				
 				if (elbow)
 				{
@@ -4720,12 +4720,12 @@
 
 	 mxStyleRegistry.putValue('isometricEdgeStyle', mxEdgeStyle.IsometricConnector);
 	
-	 var graphCreateEdgeHandler = Graph.prototype.createEdgeHandler;
+	 let graphCreateEdgeHandler = Graph.prototype.createEdgeHandler;
 	 Graph.prototype.createEdgeHandler = function(state, edgeStyle)
 	 {
 	 	if (edgeStyle == mxEdgeStyle.IsometricConnector)
 	 	{
-	 		var handler = new mxElbowEdgeHandler(state);
+	 		let handler = new mxElbowEdgeHandler(state);
 	 		handler.snapToTerminals = false;
 	 		
 	 		return handler;
@@ -4739,12 +4739,12 @@
 	
 	IsoCubeShape.prototype.getConstraints = function(style, w, h)
 	{
-		var constr = [];
+		let constr = [];
 		var tan30 = Math.tan(mxUtils.toRadians(30));
 		var tan30Dx = (0.5 - tan30) / 2;
-		var m = Math.min(w, h / (0.5 + tan30));
-		var dx = (w - m) / 2;
-		var dy = (h - m) / 2;
+		let m = Math.min(w, h / (0.5 + tan30));
+		let dx = (w - m) / 2;
+		let dy = (h - m) / 2;
 
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false, null, dx, dy + 0.25 * m));
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false, null, dx + 0.5 * m, dy + m * tan30Dx));
@@ -4758,9 +4758,9 @@
 
 	IsoCubeShape2.prototype.getConstraints = function(style, w, h)
 	{
-		var constr = [];
-		var isoAngle = Math.max(0.01, Math.min(94, parseFloat(mxUtils.getValue(this.style, 'isoAngle', this.isoAngle)))) * Math.PI / 200 ;
-		var isoH = Math.min(w * Math.tan(isoAngle), h * 0.5);
+		let constr = [];
+		let isoAngle = Math.max(0.01, Math.min(94, parseFloat(mxUtils.getValue(this.style, 'isoAngle', this.isoAngle)))) * Math.PI / 200 ;
+		let isoH = Math.min(w * Math.tan(isoAngle), h * 0.5);
 		
 		constr.push(new mxConnectionConstraint(new mxPoint(0.5, 0), false));
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false, null, w, isoH));
@@ -4776,12 +4776,12 @@
 	
 	CalloutShape.prototype.getConstraints = function(style, w, h)
 	{
-		var constr = [];
-		var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
-		var s = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var dx = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'position', this.position))));
+		let constr = [];
+		let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+		let s = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let dx = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'position', this.position))));
 		var dx2 = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'position2', this.position2))));
-		var base = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'base', this.base))));
+		let base = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'base', this.base))));
 		
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false));
 		constr.push(new mxConnectionConstraint(new mxPoint(0.25, 0), false));
@@ -4830,8 +4830,8 @@
 	
 	NoteShape.prototype.getConstraints = function(style, w, h)
 	{
-		var constr = [];
-		var s = Math.max(0, Math.min(w, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size)))));
+		let constr = [];
+		let s = Math.max(0, Math.min(w, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size)))));
 		
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false));
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false, null, (w - s) * 0.5, 0));
@@ -4854,8 +4854,8 @@
 	
 	CardShape.prototype.getConstraints = function(style, w, h)
 	{
-		var constr = [];
-		var s = Math.max(0, Math.min(w, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size)))));
+		let constr = [];
+		let s = Math.max(0, Math.min(w, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size)))));
 		
 		constr.push(new mxConnectionConstraint(new mxPoint(1, 0), false));
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false, null, (w + s) * 0.5, 0));
@@ -4878,8 +4878,8 @@
 	
 	CubeShape.prototype.getConstraints = function(style, w, h)
 	{
-		var constr = [];
-		var s = Math.max(0, Math.min(w, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size)))));
+		let constr = [];
+		let s = Math.max(0, Math.min(w, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size)))));
 		
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false));
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false, null, (w - s) * 0.5, 0));
@@ -4899,8 +4899,8 @@
 	
 	CylinderShape3.prototype.getConstraints = function(style, w, h)
 	{
-		var constr = [];
-		var s = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let constr = [];
+		let s = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
 		
 		constr.push(new mxConnectionConstraint(new mxPoint(0.5, 0), false));
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0.5), false));
@@ -4927,10 +4927,10 @@
 	
 	FolderShape.prototype.getConstraints = function(style, w, h)
 	{
-		var constr = [];
-		var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'tabWidth', this.tabWidth))));
-		var dy = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'tabHeight', this.tabHeight))));
-		var tp = mxUtils.getValue(this.style, 'tabPosition', this.tabPosition);
+		let constr = [];
+		let dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'tabWidth', this.tabWidth))));
+		let dy = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'tabHeight', this.tabHeight))));
+		let tp = mxUtils.getValue(this.style, 'tabPosition', this.tabPosition);
 
 		if (tp == 'left')
 		{
@@ -4977,9 +4977,9 @@
 
 	DisplayShape.prototype.getConstraints = function(style, w, h)
 	{
-		var constr = [];
-		var dx = Math.min(w, h / 2);
-		var s = Math.min(w - dx, Math.max(0, parseFloat(mxUtils.getValue(this.style, 'size', this.size))) * w);
+		let constr = [];
+		let dx = Math.min(w, h / 2);
+		let s = Math.min(w - dx, Math.max(0, parseFloat(mxUtils.getValue(this.style, 'size', this.size))) * w);
 		
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0.5), false, null));
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false, null, s, 0));
@@ -4996,8 +4996,8 @@
 	ModuleShape.prototype.getConstraints = function(style, w, h)
 	{
 		var x0 = parseFloat(mxUtils.getValue(style, 'jettyWidth', ModuleShape.prototype.jettyWidth)) / 2;
-		var dy = parseFloat(mxUtils.getValue(style, 'jettyHeight', ModuleShape.prototype.jettyHeight));
-		var constr = [new mxConnectionConstraint(new mxPoint(0, 0), false, null, x0),
+		let dy = parseFloat(mxUtils.getValue(style, 'jettyHeight', ModuleShape.prototype.jettyHeight));
+		let constr = [new mxConnectionConstraint(new mxPoint(0, 0), false, null, x0),
 			new mxConnectionConstraint(new mxPoint(0.25, 0), true),
 			new mxConnectionConstraint(new mxPoint(0.5, 0), true),
 			new mxConnectionConstraint(new mxPoint(0.75, 0), true),
@@ -5155,9 +5155,9 @@
 
 	TeeShape.prototype.getConstraints = function(style, w, h)
 	{
-		var constr = [];
-		var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
-		var dy = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'dy', this.dy))));
+		let constr = [];
+		let dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
+		let dy = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'dy', this.dy))));
 		var w2 = Math.abs(w - dx) / 2;
 		
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false));
@@ -5182,9 +5182,9 @@
 
 	CornerShape.prototype.getConstraints = function(style, w, h)
 	{
-		var constr = [];
-		var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
-		var dy = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'dy', this.dy))));
+		let constr = [];
+		let dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
+		let dy = Math.max(0, Math.min(h, parseFloat(mxUtils.getValue(this.style, 'dy', this.dy))));
 		
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false));
 		constr.push(new mxConnectionConstraint(new mxPoint(0.5, 0), false));
@@ -5214,11 +5214,11 @@
 
 	SingleArrowShape.prototype.getConstraints = function(style, w, h)
 	{
-		var constr = [];
-		var aw = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowWidth', this.arrowWidth))));
-		var as = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowSize', this.arrowSize))));
-		var at = (h - aw) / 2;
-		var ab = at + aw;
+		let constr = [];
+		let aw = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowWidth', this.arrowWidth))));
+		let as = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowSize', this.arrowSize))));
+		let at = (h - aw) / 2;
+		let ab = at + aw;
 		
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0.5), false));
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false, null, 0, at));
@@ -5234,11 +5234,11 @@
 	
 	DoubleArrowShape.prototype.getConstraints = function(style, w, h)
 	{
-		var constr = [];
-		var aw = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowWidth', SingleArrowShape.prototype.arrowWidth))));
-		var as = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowSize', SingleArrowShape.prototype.arrowSize))));
-		var at = (h - aw) / 2;
-		var ab = at + aw;
+		let constr = [];
+		let aw = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowWidth', SingleArrowShape.prototype.arrowWidth))));
+		let as = w * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arrowSize', SingleArrowShape.prototype.arrowSize))));
+		let at = (h - aw) / 2;
+		let ab = at + aw;
 		
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0.5), false));
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false, null, as, 0));
@@ -5254,13 +5254,13 @@
 	
 	CrossShape.prototype.getConstraints = function(style, w, h)
 	{
-		var constr = [];
-		var m = Math.min(h, w);
-		var size = Math.max(0, Math.min(m, m * parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
-		var t = (h - size) / 2;
-		var b = t + size;
-		var l = (w - size) / 2;
-		var r = l + size;
+		let constr = [];
+		let m = Math.min(h, w);
+		let size = Math.max(0, Math.min(m, m * parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+		let t = (h - size) / 2;
+		let b = t + size;
+		let l = (w - size) / 2;
+		let r = l + size;
 		
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false, null, l, t * 0.5));
 		constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false, null, l, 0));
diff --git a/src/examples/grapheditor/www/js/Sidebar.js b/src/examples/grapheditor/www/js/Sidebar.js
index acf921166..16b34420c 100644
--- a/src/examples/grapheditor/www/js/Sidebar.js
+++ b/src/examples/grapheditor/www/js/Sidebar.js
@@ -36,7 +36,7 @@ function Sidebar(editorUi, container)
 	
 	this.pointerMoveHandler = mxUtils.bind(this, function(evt)
 	{
-		var src = mxEvent.getSource(evt);
+		let src = mxEvent.getSource(evt);
 		
 		while (src != null)
 		{
@@ -79,7 +79,7 @@ function Sidebar(editorUi, container)
  */
 Sidebar.prototype.init = function()
 {
-	var dir = STENCIL_PATH;
+	let dir = STENCIL_PATH;
 	
 	this.addSearchPalette(true);
 	this.addGeneralPalette(true);
@@ -265,7 +265,7 @@ Sidebar.prototype.showTooltip = function(elt, cells, w, h, title, showLabel)
 				this.thread = null;
 			}
 			
-			var show = mxUtils.bind(this, function()
+			let show = mxUtils.bind(this, function()
 			{
 				// Lazy creation of the DOM nodes and graph instance
 				if (this.tooltip == null)
@@ -304,19 +304,19 @@ Sidebar.prototype.showTooltip = function(elt, cells, w, h, title, showLabel)
 				
 				this.tooltip.style.display = 'block';
 				this.graph2.labelsVisible = (showLabel == null || showLabel);
-				var fo = mxClient.NO_FO;
+				let fo = mxClient.NO_FO;
 				mxClient.NO_FO = Editor.prototype.originalNoForeignObject;
 				
 				// Applies current style for preview
-				var temp = this.graph2.cloneCells(cells);
+				let temp = this.graph2.cloneCells(cells);
 				this.editorUi.insertHandler(temp, null, this.graph2.model);
 				this.graph2.addCells(temp);
 				
 				mxClient.NO_FO = fo;
 				
-				var bounds = this.graph2.getGraphBounds();
-				var width = bounds.width + 2 * this.tooltipBorder + 4;
-				var height = bounds.height + 2 * this.tooltipBorder;
+				let bounds = this.graph2.getGraphBounds();
+				let width = bounds.width + 2 * this.tooltipBorder + 4;
+				let height = bounds.height + 2 * this.tooltipBorder;
 				
 				this.tooltip.style.overflow = 'visible';
 				this.tooltip.style.width = width + 'px';
@@ -348,7 +348,7 @@ Sidebar.prototype.showTooltip = function(elt, cells, w, h, title, showLabel)
 					
 					// Allows for wider labels
 					w2 = Math.min(this.maxTooltipWidth, Math.max(width, this.tooltipTitle.scrollWidth + 4));
-					var ddy = this.tooltipTitle.offsetHeight + 10;
+					let ddy = this.tooltipTitle.offsetHeight + 10;
 					height += ddy;
 					
 					if (mxClient.IS_SVG)
@@ -377,12 +377,12 @@ Sidebar.prototype.showTooltip = function(elt, cells, w, h, title, showLabel)
 					((w2 > width) ? (w2 - width) / 2 : 0);
 				var y0 = -Math.round(bounds.y - this.tooltipBorder);
 				
-				var b = document.body;
-				var d = document.documentElement;
-				var off = this.getTooltipOffset();
-				var bottom = Math.max(b.clientHeight || 0, d.clientHeight);
-				var left = this.container.clientWidth + this.editorUi.splitSize + 3 + this.editorUi.container.offsetLeft + off.x;
-				var top = Math.min(bottom - height - 20 /*status bar*/, Math.max(0, (this.editorUi.container.offsetTop +
+				let b = document.body;
+				let d = document.documentElement;
+				let off = this.getTooltipOffset();
+				let bottom = Math.max(b.clientHeight || 0, d.clientHeight);
+				let left = this.container.clientWidth + this.editorUi.splitSize + 3 + this.editorUi.container.offsetLeft + off.x;
+				let top = Math.min(bottom - height - 20 /*status bar*/, Math.max(0, (this.editorUi.container.offsetTop +
 					this.container.offsetTop + elt.offsetTop - this.container.scrollTop - height / 2 + 16))) + off.y;
 
 				if (mxClient.IS_SVG)
@@ -457,12 +457,12 @@ Sidebar.prototype.addDataEntry = function(tags, width, height, title, data)
  */
 Sidebar.prototype.addEntries = function(images)
 {
-	for (var i = 0; i < images.length; i++)
+	for (let i = 0; i < images.length; i++)
 	{
 		(mxUtils.bind(this, function(img)
 		{
-			var data = img.data;
-			var tags = (img.title != null) ? img.title : '';
+			let data = img.data;
+			let tags = (img.title != null) ? img.title : '';
 			
 			if (img.tags != null)
 			{
@@ -474,7 +474,7 @@ Sidebar.prototype.addEntries = function(images)
 				this.addEntry(tags, mxUtils.bind(this, function()
 				{
 					data = this.editorUi.convertDataUri(data);
-					var s = 'shape=image;verticalLabelPosition=bottom;verticalAlign=top;imageAspect=0;';
+					let s = 'shape=image;verticalLabelPosition=bottom;verticalAlign=top;imageAspect=0;';
 					
 					if (img.aspect == 'fixed')
 					{
@@ -489,7 +489,7 @@ Sidebar.prototype.addEntries = function(images)
 			{
 				this.addEntry(tags, mxUtils.bind(this, function()
 				{
-					var cells = this.editorUi.stringToCells(Graph.decompress(img.xml));
+					let cells = this.editorUi.stringToCells(Graph.decompress(img.xml));
 
 					return this.createVertexTemplateFromCells(
 						cells, img.w, img.h, img.title || '', true, false, true);
@@ -520,12 +520,12 @@ Sidebar.prototype.addEntry = function(tags, fn)
 		}
 		
 		// Replaces special characters
-		var tmp = tags.toLowerCase().replace(/[\/\,\(\)]/g, ' ').split(' ');
-		var tagList = [];
-		var hash = {};
+		let tmp = tags.toLowerCase().replace(/[\/\,\(\)]/g, ' ').split(' ');
+		let tagList = [];
+		let hash = {};
 
 		// Finds unique tags
-		for (var i = 0; i < tmp.length; i++)
+		for (let i = 0; i < tmp.length; i++)
 		{
 			if (hash[tmp[i]] == null)
 			{
@@ -534,7 +534,7 @@ Sidebar.prototype.addEntry = function(tags, fn)
 			}
 			
 			// Adds additional entry with removed trailing numbers
-			var normalized = tmp[i].replace(/\.*\d*$/, '');
+			let normalized = tmp[i].replace(/\.*\d*$/, '');
 			
 			if (normalized != tmp[i])
 			{
@@ -546,7 +546,7 @@ Sidebar.prototype.addEntry = function(tags, fn)
 			}
 		}
 		
-		for (var i = 0; i < tagList.length; i++)
+		for (let i = 0; i < tagList.length; i++)
 		{
 			this.addEntryForTag(tagList[i], fn);
 		}
@@ -562,7 +562,7 @@ Sidebar.prototype.addEntryForTag = function(tag, fn)
 {
 	if (tag != null && tag.length > 1)
 	{
-		var entry = this.taglist[tag];
+		let entry = this.taglist[tag];
 		
 		if (typeof entry !== 'object')
 		{
@@ -581,27 +581,27 @@ Sidebar.prototype.searchEntries = function(searchTerms, count, page, success, er
 {
 	if (this.taglist != null && searchTerms != null)
 	{
-		var tmp = searchTerms.toLowerCase().split(' ');
-		var dict = new mxDictionary();
-		var max = (page + 1) * count;
-		var results = [];
-		var index = 0;
+		let tmp = searchTerms.toLowerCase().split(' ');
+		let dict = new mxDictionary();
+		let max = (page + 1) * count;
+		let results = [];
+		let index = 0;
 		
-		for (var i = 0; i < tmp.length; i++)
+		for (let i = 0; i < tmp.length; i++)
 		{
 			if (tmp[i].length > 0)
 			{
-				var entry = this.taglist[tmp[i]];
-				var tmpDict = new mxDictionary();
+				let entry = this.taglist[tmp[i]];
+				let tmpDict = new mxDictionary();
 				
 				if (entry != null)
 				{
-					var arr = entry.entries;
+					let arr = entry.entries;
 					results = [];
 
-					for (var j = 0; j < arr.length; j++)
+					for (let j = 0; j < arr.length; j++)
 					{
-						var entry = arr[j];
+						let entry = arr[j];
 	
 						// NOTE Array does not contain duplicates
 						if ((index == 0) == (dict.get(entry) == null))
@@ -628,7 +628,7 @@ Sidebar.prototype.searchEntries = function(searchTerms, count, page, success, er
 			}
 		}
 		
-		var len = results.length;
+		let len = results.length;
 		success(results.slice(page * count, (page + 1) * count), len, false, tmp);
 	}
 	else
@@ -644,12 +644,12 @@ Sidebar.prototype.filterTags = function(tags)
 {
 	if (tags != null)
 	{
-		var arr = tags.split(' ');
-		var result = [];
-		var hash = {};
+		let arr = tags.split(' ');
+		let result = [];
+		let hash = {};
 		
 		// Ignores tags with leading numbers, strips trailing numbers
-		for (var i = 0; i < arr.length; i++)
+		for (let i = 0; i < arr.length; i++)
 		{
 			// Removes duplicates
 			if (hash[arr[i]] == null)
@@ -670,7 +670,7 @@ Sidebar.prototype.filterTags = function(tags)
  */
 Sidebar.prototype.cloneCell = function(cell, value)
 {
-	var clone = cell.clone();
+	let clone = cell.clone();
 	
 	if (value != null)
 	{
@@ -693,11 +693,11 @@ Sidebar.prototype.showPopupMenuForEntry = function(elt, libs, evt)
  */
 Sidebar.prototype.addSearchPalette = function(expand)
 {
-	var elt = document.createElement('div');
+	let elt = document.createElement('div');
 	elt.style.visibility = 'hidden';
 	this.container.appendChild(elt);
 		
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	div.className = 'geSidebar';
 	div.style.boxSizing = 'border-box';
 	div.style.overflow = 'hidden';
@@ -711,13 +711,13 @@ Sidebar.prototype.addSearchPalette = function(expand)
 		div.style.display = 'none';
 	}
 	
-	var inner = document.createElement('div');
+	let inner = document.createElement('div');
 	inner.style.whiteSpace = 'nowrap';
 	inner.style.textOverflow = 'clip';
 	inner.style.paddingBottom = '8px';
 	inner.style.cursor = 'default';
 
-	var input = document.createElement('input');
+	let input = document.createElement('input');
 	input.setAttribute('placeholder', mxResources.get('searchShapes'));
 	input.setAttribute('type', 'text');
 	input.style.fontSize = '12px';
@@ -731,7 +731,7 @@ Sidebar.prototype.addSearchPalette = function(expand)
 	input.style.paddingRight = '20px';
 	inner.appendChild(input);
 
-	var cross = document.createElement('img');
+	let cross = document.createElement('img');
 	cross.setAttribute('src', Sidebar.prototype.searchImage);
 	cross.setAttribute('title', mxResources.get('search'));
 	cross.style.position = 'relative';
@@ -746,8 +746,8 @@ Sidebar.prototype.addSearchPalette = function(expand)
 	inner.appendChild(cross);
 	div.appendChild(inner);
 
-	var center = document.createElement('center');
-	var button = mxUtils.button(mxResources.get('moreResults'), function()
+	let center = document.createElement('center');
+	let button = mxUtils.button(mxResources.get('moreResults'), function()
 	{
 		find();
 	});
@@ -765,24 +765,24 @@ Sidebar.prototype.addSearchPalette = function(expand)
 	center.appendChild(button);
 	div.appendChild(center);
 	
-	var searchTerm = '';
-	var active = false;
-	var complete = false;
-	var page = 0;
-	var hash = {};
+	let searchTerm = '';
+	let active = false;
+	let complete = false;
+	let page = 0;
+	let hash = {};
 
 	// Count is dynamically updated below
-	var count = 12;
+	let count = 12;
 	
-	var clearDiv = mxUtils.bind(this, function()
+	let clearDiv = mxUtils.bind(this, function()
 	{
 		active = false;
 		this.currentSearch = null;
-		var child = div.firstChild;
+		let child = div.firstChild;
 		
 		while (child != null)
 		{
-			var next = child.nextSibling;
+			let next = child.nextSibling;
 			
 			if (child != inner && child != center)
 			{
@@ -836,7 +836,7 @@ Sidebar.prototype.addSearchPalette = function(expand)
 					active = true;
 					
 					// Ignores old results
-					var current = {};
+					let current = {};
 					this.currentSearch = current;
 					
 					this.searchEntries(searchTerm, count, page, mxUtils.bind(this, function(results, len, more, terms)
@@ -859,13 +859,13 @@ Sidebar.prototype.addSearchPalette = function(expand)
 								center.parentNode.removeChild(center);
 							}
 							
-							for (var i = 0; i < results.length; i++)
+							for (let i = 0; i < results.length; i++)
 							{
 								(mxUtils.bind(this, function(result)
 								{
 									try
 									{
-										var elt = result();
+										let elt = result();
 										
 										// Avoids duplicates in results
 										if (hash[elt.innerHTML] == null)
@@ -880,7 +880,7 @@ Sidebar.prototype.addSearchPalette = function(expand)
 
 										mxEvent.addGestureListeners(elt, null, null, mxUtils.bind(this, function(evt)
 										{
-											var libs = hash[elt.innerHTML];
+											let libs = hash[elt.innerHTML];
 	
 											if (mxEvent.isPopupTrigger(evt))
 											{
@@ -1000,7 +1000,7 @@ Sidebar.prototype.addSearchPalette = function(expand)
     	evt.cancelBubble = true;
     });
 
-	var outer = document.createElement('div');
+	let outer = document.createElement('div');
     outer.appendChild(div);
     this.container.appendChild(outer);
 	
@@ -1015,7 +1015,7 @@ Sidebar.prototype.insertSearchHint = function(div, searchTerm, count, page, resu
 {
 	if (results.length == 0 && page == 1)
 	{
-		var err = document.createElement('div');
+		let err = document.createElement('div');
 		err.className = 'geTitle';
 		err.style.cssText = 'background-color:transparent;border-color:transparent;' +
 			'color:gray;padding:6px 0px 0px 0px !important;margin:4px 8px 4px 8px;' +
@@ -1031,10 +1031,10 @@ Sidebar.prototype.insertSearchHint = function(div, searchTerm, count, page, resu
  */
 Sidebar.prototype.addGeneralPalette = function(expand)
 {
-	var lineTags = 'line lines connector connectors connection connections arrow arrows ';
+	let lineTags = 'line lines connector connectors connection connections arrow arrows ';
 	this.setCurrentSearchEntryLibrary('general', 'general');
 
-	var fns = [
+	let fns = [
 	 	this.createVertexTemplateEntry('rounded=0;whiteSpace=wrap;html=1;', 120, 60, '', 'Rectangle', null, null, 'rect rectangle box'),
 	 	this.createVertexTemplateEntry('rounded=1;whiteSpace=wrap;html=1;', 120, 60, '', 'Rounded Rectangle', null, null, 'rounded rect rectangle box'),
 	 	// Explicit strokecolor/fillcolor=none is a workaround to maintain transparent background regardless of current style
@@ -1068,7 +1068,7 @@ Sidebar.prototype.addGeneralPalette = function(expand)
 	 	this.createVertexTemplateEntry('shape=dataStorage;whiteSpace=wrap;html=1;fixedSize=1;', 100, 80, '', 'Data Storage'),    
 	 	this.addEntry('curve', mxUtils.bind(this, function()
 	 	{
-			var cell = new mxCell('', new mxGeometry(0, 0, 50, 50), 'curved=1;endArrow=classic;html=1;');
+			let cell = new mxCell('', new mxGeometry(0, 0, 50, 50), 'curved=1;endArrow=classic;html=1;');
 			cell.geometry.setTerminalPoint(new mxPoint(0, 50), true);
 			cell.geometry.setTerminalPoint(new mxPoint(50, 0), false);
 			cell.geometry.points = [new mxPoint(50, 50), new mxPoint(0, 0)];
@@ -1087,7 +1087,7 @@ Sidebar.prototype.addGeneralPalette = function(expand)
 	 	this.createEdgeTemplateEntry('shape=link;html=1;', 100, 0, '', 'Link', null, lineTags + 'link'),
 	 	this.addEntry(lineTags + 'edge title', mxUtils.bind(this, function()
 		{
-			var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=classic;html=1;');
+			let edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=classic;html=1;');
 			edge.geometry.setTerminalPoint(new mxPoint(0, 0), true);
 			edge.geometry.setTerminalPoint(new mxPoint(100, 0), false);
 			edge.geometry.relative = true;
@@ -1103,7 +1103,7 @@ Sidebar.prototype.addGeneralPalette = function(expand)
 		})),
 		this.addEntry(lineTags + 'edge title multiplicity', mxUtils.bind(this, function()
 		{
-			var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=classic;html=1;');
+			let edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=classic;html=1;');
 			edge.geometry.setTerminalPoint(new mxPoint(0, 0), true);
 			edge.geometry.setTerminalPoint(new mxPoint(160, 0), false);
 			edge.geometry.relative = true;
@@ -1125,7 +1125,7 @@ Sidebar.prototype.addGeneralPalette = function(expand)
 		})),
 		this.addEntry(lineTags + 'edge title multiplicity', mxUtils.bind(this, function()
 		{
-			var edge = new mxCell('Label', new mxGeometry(0, 0, 0, 0), 'endArrow=classic;html=1;');
+			let edge = new mxCell('Label', new mxGeometry(0, 0, 0, 0), 'endArrow=classic;html=1;');
 			edge.geometry.setTerminalPoint(new mxPoint(0, 0), true);
 			edge.geometry.setTerminalPoint(new mxPoint(160, 0), false);
 			edge.geometry.relative = true;
@@ -1153,13 +1153,13 @@ Sidebar.prototype.addGeneralPalette = function(expand)
 		})),
 	 	this.addEntry(lineTags + 'edge shape symbol message mail email', mxUtils.bind(this, function()
 		{
-			var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=classic;html=1;');
+			let edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=classic;html=1;');
 			edge.geometry.setTerminalPoint(new mxPoint(0, 0), true);
 			edge.geometry.setTerminalPoint(new mxPoint(100, 0), false);
 			edge.geometry.relative = true;
 			edge.edge = true;
 			
-	    	var cell = new mxCell('', new mxGeometry(0, 0, 20, 14), 'shape=message;html=1;outlineConnect=0;');
+	    	let cell = new mxCell('', new mxGeometry(0, 0, 20, 14), 'shape=message;html=1;outlineConnect=0;');
 	    	cell.geometry.relative = true;
 	    	cell.vertex = true;
 	    	cell.geometry.offset = new mxPoint(-10, -7);
@@ -1178,11 +1178,11 @@ Sidebar.prototype.addGeneralPalette = function(expand)
  */
 Sidebar.prototype.addMiscPalette = function(expand)
 {
-	var sb = this;
-	var lineTags = 'line lines connector connectors connection connections arrow arrows '
+	let sb = this;
+	let lineTags = 'line lines connector connectors connection connections arrow arrows '
 	this.setCurrentSearchEntryLibrary('general', 'misc');
 
-	var fns = [
+	let fns = [
    	 	this.createVertexTemplateEntry('text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;', 100, 40, 'Title', 'Title', null, null, 'text heading title'),
 	 	this.createVertexTemplateEntry('text;strokeColor=none;fillColor=none;html=1;whiteSpace=wrap;verticalAlign=middle;overflow=hidden;', 100, 80,
  			'<ul><li>Value 1</li><li>Value 2</li><li>Value 3</li></ul>', 'Unordered List'),
@@ -1217,7 +1217,7 @@ Sidebar.prototype.addMiscPalette = function(expand)
  			'<tr><td align="center">Section 2.1\nSection 2.2\nSection 2.3</td></tr></table>', 'HTML Table 4'),
 	 	this.addEntry('link hyperlink', mxUtils.bind(this, function()
 	 	{
-	 		var cell = new mxCell('Link', new mxGeometry(0, 0, 60, 40), 'text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;align=center;verticalAlign=middle;fontColor=#0000EE;fontStyle=4;');
+	 		let cell = new mxCell('Link', new mxGeometry(0, 0, 60, 40), 'text;html=1;strokeColor=none;fillColor=none;whiteSpace=wrap;align=center;verticalAlign=middle;fontColor=#0000EE;fontStyle=4;');
 	 		cell.vertex = true;
 	 		this.graph.setLinkForCell(cell, 'https://www.draw.io');
 
@@ -1225,7 +1225,7 @@ Sidebar.prototype.addMiscPalette = function(expand)
 	 	})),
 	 	this.addEntry('timestamp date time text label', mxUtils.bind(this, function()
 	 	{
-	 		var cell = new mxCell('%date{ddd mmm dd yyyy HH:MM:ss}%', new mxGeometry(0, 0, 160, 20), 'text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;');
+	 		let cell = new mxCell('%date{ddd mmm dd yyyy HH:MM:ss}%', new mxGeometry(0, 0, 160, 20), 'text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;');
 	 		cell.vertex = true;
 	 		this.graph.setAttributeForCell(cell, 'placeholders', '1');
 
@@ -1233,7 +1233,7 @@ Sidebar.prototype.addMiscPalette = function(expand)
 	 	})),
 	 	this.addEntry('variable placeholder metadata hello world text label', mxUtils.bind(this, function()
 	 	{
-	 		var cell = new mxCell('%name% Text', new mxGeometry(0, 0, 80, 20), 'text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;');
+	 		let cell = new mxCell('%name% Text', new mxGeometry(0, 0, 80, 20), 'text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;');
 	 		cell.vertex = true;
 	 		this.graph.setAttributeForCell(cell, 'placeholders', '1');
 	 		this.graph.setAttributeForCell(cell, 'name', 'Variable');
@@ -1265,11 +1265,11 @@ Sidebar.prototype.addMiscPalette = function(expand)
 	 	this.createVertexTemplateEntry('label;whiteSpace=wrap;html=1;align=center;verticalAlign=bottom;spacingLeft=0;spacingBottom=4;imageAlign=center;imageVerticalAlign=top;image=' + this.gearImage, 120, 80, 'Label', 'Label 2', null, null, 'label image icon symbol'),
 		this.addEntry('shape group container', function()
 		{
-		    var cell = new mxCell('Label', new mxGeometry(0, 0, 160, 70),
+		    let cell = new mxCell('Label', new mxGeometry(0, 0, 160, 70),
 				'html=1;whiteSpace=wrap;container=1;recursiveResize=0;collapsible=0;');
 		    cell.vertex = true;
 		    
-			var symbol = new mxCell('', new mxGeometry(20, 20, 20, 30), 'triangle;html=1;whiteSpace=wrap;');
+			let symbol = new mxCell('', new mxGeometry(20, 20, 20, 30), 'triangle;html=1;whiteSpace=wrap;');
 			symbol.vertex = true;
 			cell.insert(symbol);
 	    	
@@ -1319,10 +1319,10 @@ Sidebar.prototype.addBasicPalette = function(dir)
 Sidebar.prototype.createAdvancedShapes = function()
 {
 	// Avoids having to bind all functions to "this"
-	var sb = this;
+	let sb = this;
 
 	// Reusable cells
-	var field = new mxCell('List Item', new mxGeometry(0, 0, 60, 26), 'text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;');
+	let field = new mxCell('List Item', new mxGeometry(0, 0, 60, 26), 'text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;');
 	field.vertex = true;
 
 	return [
@@ -1357,7 +1357,7 @@ Sidebar.prototype.createAdvancedShapes = function()
 	 	this.createVertexTemplateEntry('swimlane;', 200, 200, 'Container', 'Container', null, null, 'container swimlane lane pool group'),
 		this.addEntry('list group erd table', function()
 		{
-			var cell = new mxCell('List', new mxGeometry(0, 0, 140, 110),
+			let cell = new mxCell('List', new mxGeometry(0, 0, 140, 110),
 		    	'swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;' +
 		    	'resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;');
 			cell.vertex = true;
@@ -1380,25 +1380,25 @@ Sidebar.prototype.createAdvancedShapes = function()
 Sidebar.prototype.addUmlPalette = function(expand)
 {
 	// Avoids having to bind all functions to "this"
-	var sb = this;
+	let sb = this;
 
 	// Reusable cells
-	var field = new mxCell('+ field: type', new mxGeometry(0, 0, 100, 26), 'text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;');
+	let field = new mxCell('+ field: type', new mxGeometry(0, 0, 100, 26), 'text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;');
 	field.vertex = true;
 
-	var divider = new mxCell('', new mxGeometry(0, 0, 40, 8), 'line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;');
+	let divider = new mxCell('', new mxGeometry(0, 0, 40, 8), 'line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;');
 	divider.vertex = true;
 	
 	// Default tags
-	var dt = 'uml static class ';
+	let dt = 'uml static class ';
 	this.setCurrentSearchEntryLibrary('uml');
 	
-	var fns = [
+	let fns = [
    		this.createVertexTemplateEntry('html=1;', 110, 50, 'Object', 'Object', null, null, dt + 'object instance'),
    		this.createVertexTemplateEntry('html=1;', 110, 50, '&laquo;interface&raquo;<br><b>Name</b>', 'Interface', null, null, dt + 'interface object instance annotated annotation'),
 	 	this.addEntry(dt + 'object instance', function()
 		{
-			var cell = new mxCell('Classname', new mxGeometry(0, 0, 160, 90),
+			let cell = new mxCell('Classname', new mxGeometry(0, 0, 160, 90),
 		    	'swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;');
 			cell.vertex = true;
 			cell.insert(field.clone());
@@ -1409,7 +1409,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry(dt + 'section subsection', function()
 		{
-			var cell = new mxCell('Classname', new mxGeometry(0, 0, 140, 110),
+			let cell = new mxCell('Classname', new mxGeometry(0, 0, 140, 110),
 		    	'swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;');
 			cell.vertex = true;
 			cell.insert(field.clone());
@@ -1424,7 +1424,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
    		this.addEntry(dt + 'item member method function variable field attribute label', function()
 		{
-   			var cell = new mxCell('item: attribute', new mxGeometry(0, 0, 120, field.geometry.height), 'label;fontStyle=0;strokeColor=none;fillColor=none;align=left;verticalAlign=top;overflow=hidden;' +
+   			let cell = new mxCell('item: attribute', new mxGeometry(0, 0, 120, field.geometry.height), 'label;fontStyle=0;strokeColor=none;fillColor=none;align=left;verticalAlign=top;overflow=hidden;' +
    				'spacingLeft=28;spacingRight=4;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;imageWidth=16;imageHeight=16;image=' + sb.gearImage);
    			cell.vertex = true;
    			
@@ -1436,7 +1436,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry(dt + 'spacer space gap separator', function()
 		{
-			var cell = new mxCell('', new mxGeometry(0, 0, 20, 14), 'text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=4;spacingRight=4;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;');
+			let cell = new mxCell('', new mxGeometry(0, 0, 20, 14), 'text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=4;spacingRight=4;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;');
 			cell.vertex = true;
 			
 			return sb.createVertexTemplateFromCells([cell.clone()], cell.geometry.width, cell.geometry.height, 'Spacer');
@@ -1445,10 +1445,10 @@ Sidebar.prototype.addUmlPalette = function(expand)
 			80, 26, 'Title', 'Title', null, null, dt + 'title label'),
 		this.addEntry(dt + 'component', function()
 		{
-		    var cell = new mxCell('&laquo;Annotation&raquo;<br/><b>Component</b>', new mxGeometry(0, 0, 180, 90), 'html=1;dropTarget=0;');
+		    let cell = new mxCell('&laquo;Annotation&raquo;<br/><b>Component</b>', new mxGeometry(0, 0, 180, 90), 'html=1;dropTarget=0;');
 		    cell.vertex = true;
 		    
-			var symbol = new mxCell('', new mxGeometry(1, 0, 20, 20), 'shape=module;jettyWidth=8;jettyHeight=4;');
+			let symbol = new mxCell('', new mxGeometry(1, 0, 20, 20), 'shape=module;jettyWidth=8;jettyHeight=4;');
 			symbol.vertex = true;
 			symbol.geometry.relative = true;
 			symbol.geometry.offset = new mxPoint(-27, 7);
@@ -1458,12 +1458,12 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry(dt + 'component', function()
 		{
-		    var cell = new mxCell('<p style="margin:0px;margin-top:6px;text-align:center;"><b>Component</b></p>' +
+		    let cell = new mxCell('<p style="margin:0px;margin-top:6px;text-align:center;"><b>Component</b></p>' +
 				'<hr/><p style="margin:0px;margin-left:8px;">+ Attribute1: Type<br/>+ Attribute2: Type</p>', new mxGeometry(0, 0, 180, 90),
 				'align=left;overflow=fill;html=1;dropTarget=0;');
 		    cell.vertex = true;
 		    
-			var symbol = new mxCell('', new mxGeometry(1, 0, 20, 20), 'shape=component;jettyWidth=8;jettyHeight=4;');
+			let symbol = new mxCell('', new mxGeometry(1, 0, 20, 20), 'shape=component;jettyWidth=8;jettyHeight=4;');
 			symbol.vertex = true;
 			symbol.geometry.relative = true;
 			symbol.geometry.offset = new mxPoint(-24, 4);
@@ -1487,7 +1487,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 			'foreignKey</td></tr><tr><td></td><td>fieldname</td></tr></table>', 'Entity', null, null, 'er entity table'),
 		this.addEntry(dt + 'object instance', function()
 		{
-		    var cell = new mxCell('<p style="margin:0px;margin-top:4px;text-align:center;">' +
+		    let cell = new mxCell('<p style="margin:0px;margin-top:4px;text-align:center;">' +
 	    			'<b>Class</b></p>' +
 					'<hr size="1"/><div style="height:2px;"></div>', new mxGeometry(0, 0, 140, 60),
 					'verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;');
@@ -1497,7 +1497,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry(dt + 'object instance', function()
 		{
-		    var cell = new mxCell('<p style="margin:0px;margin-top:4px;text-align:center;">' +
+		    let cell = new mxCell('<p style="margin:0px;margin-top:4px;text-align:center;">' +
 	    			'<b>Class</b></p>' +
 					'<hr size="1"/><div style="height:2px;"></div><hr size="1"/><div style="height:2px;"></div>', new mxGeometry(0, 0, 140, 60),
 					'verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;');
@@ -1507,7 +1507,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry(dt + 'object instance', function()
 		{
-		    var cell = new mxCell('<p style="margin:0px;margin-top:4px;text-align:center;">' +
+		    let cell = new mxCell('<p style="margin:0px;margin-top:4px;text-align:center;">' +
 	    			'<b>Class</b></p>' +
 					'<hr size="1"/><p style="margin:0px;margin-left:4px;">+ field: Type</p><hr size="1"/>' +
 					'<p style="margin:0px;margin-left:4px;">+ method(): Type</p>', new mxGeometry(0, 0, 160, 90),
@@ -1518,7 +1518,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry(dt + 'object instance', function()
 		{
-		    var cell = new mxCell('<p style="margin:0px;margin-top:4px;text-align:center;">' +
+		    let cell = new mxCell('<p style="margin:0px;margin-top:4px;text-align:center;">' +
 	    			'<i>&lt;&lt;Interface&gt;&gt;</i><br/><b>Interface</b></p>' +
 					'<hr size="1"/><p style="margin:0px;margin-left:4px;">+ field1: Type<br/>' +
 					'+ field2: Type</p>' +
@@ -1544,11 +1544,11 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		this.createVertexTemplateEntry('ellipse;whiteSpace=wrap;html=1;', 140, 70, 'Use Case', 'Use Case', null, null, 'uml use case usecase'),
 		this.addEntry('uml activity state start', function()
 		{
-	    	var cell = new mxCell('', new mxGeometry(0, 0, 30, 30),
+	    	let cell = new mxCell('', new mxGeometry(0, 0, 30, 30),
 	    		'ellipse;html=1;shape=startState;fillColor=#000000;strokeColor=#ff0000;');
 	    	cell.vertex = true;
 	    	
-			var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;');
+			let edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;');
 			edge.geometry.setTerminalPoint(new mxPoint(15, 90), false);
 			edge.geometry.relative = true;
 			edge.edge = true;
@@ -1559,11 +1559,11 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry('uml activity state', function()
 		{
-			var cell = new mxCell('Activity', new mxGeometry(0, 0, 120, 40),
+			let cell = new mxCell('Activity', new mxGeometry(0, 0, 120, 40),
 				'rounded=1;whiteSpace=wrap;html=1;arcSize=40;fontColor=#000000;fillColor=#ffffc0;strokeColor=#ff0000;');
 			cell.vertex = true;
 			
-			var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;');
+			let edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;');
 			edge.geometry.setTerminalPoint(new mxPoint(60, 100), false);
 			edge.geometry.relative = true;
 			edge.edge = true;
@@ -1574,7 +1574,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry('uml activity composite state', function()
 		{
-			var cell = new mxCell('Composite State', new mxGeometry(0, 0, 160, 60),
+			let cell = new mxCell('Composite State', new mxGeometry(0, 0, 160, 60),
 					'swimlane;html=1;fontStyle=1;align=center;verticalAlign=middle;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=0;resizeLast=1;container=0;fontColor=#000000;collapsible=0;rounded=1;arcSize=30;strokeColor=#ff0000;fillColor=#ffffc0;swimlaneFillColor=#ffffc0;dropTarget=0;');
 			cell.vertex = true;
 			
@@ -1582,7 +1582,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 			cell1.vertex = true;
 			cell.insert(cell1);
 			
-			var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;');
+			let edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;');
 			edge.geometry.setTerminalPoint(new mxPoint(80, 120), false);
 			edge.geometry.relative = true;
 			edge.edge = true;
@@ -1593,7 +1593,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry('uml activity condition', function()
 		{
-	    	var cell = new mxCell('Condition', new mxGeometry(0, 0, 80, 40), 'rhombus;whiteSpace=wrap;html=1;fillColor=#ffffc0;strokeColor=#ff0000;');
+	    	let cell = new mxCell('Condition', new mxGeometry(0, 0, 80, 40), 'rhombus;whiteSpace=wrap;html=1;fillColor=#ffffc0;strokeColor=#ff0000;');
 	    	cell.vertex = true;
 	    	
 			var edge1 = new mxCell('no', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;html=1;align=left;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;');
@@ -1616,10 +1616,10 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry('uml activity fork join', function()
 		{
-	    	var cell = new mxCell('', new mxGeometry(0, 0, 200, 10), 'shape=line;html=1;strokeWidth=6;strokeColor=#ff0000;');
+	    	let cell = new mxCell('', new mxGeometry(0, 0, 200, 10), 'shape=line;html=1;strokeWidth=6;strokeColor=#ff0000;');
 	    	cell.vertex = true;
 			
-			var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;');
+			let edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;html=1;verticalAlign=bottom;endArrow=open;endSize=8;strokeColor=#ff0000;');
 			edge.geometry.setTerminalPoint(new mxPoint(100, 80), false);
 			edge.geometry.relative = true;
 			edge.edge = true;
@@ -1642,10 +1642,10 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		this.createVertexTemplateEntry('shape=umlDestroy;whiteSpace=wrap;html=1;strokeWidth=3;', 30, 30, '', 'Destruction', null, null, 'uml sequence destruction destroy'),
 		this.addEntry('uml sequence invoke invocation call activation', function()
 		{
-	    	var cell = new mxCell('', new mxGeometry(0, 0, 10, 80), 'html=1;points=[];perimeter=orthogonalPerimeter;');
+	    	let cell = new mxCell('', new mxGeometry(0, 0, 10, 80), 'html=1;points=[];perimeter=orthogonalPerimeter;');
 	    	cell.vertex = true;
 	    	
-			var edge = new mxCell('dispatch', new mxGeometry(0, 0, 0, 0), 'html=1;verticalAlign=bottom;startArrow=oval;endArrow=block;startSize=8;');
+			let edge = new mxCell('dispatch', new mxGeometry(0, 0, 0, 0), 'html=1;verticalAlign=bottom;startArrow=oval;endArrow=block;startSize=8;');
 			edge.geometry.setTerminalPoint(new mxPoint(-60, 0), true);
 			edge.geometry.relative = true;
 			edge.edge = true;
@@ -1656,7 +1656,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry('uml sequence invoke call delegation synchronous invocation activation', function()
 		{
-	    	var cell = new mxCell('', new mxGeometry(0, 0, 10, 80), 'html=1;points=[];perimeter=orthogonalPerimeter;');
+	    	let cell = new mxCell('', new mxGeometry(0, 0, 10, 80), 'html=1;points=[];perimeter=orthogonalPerimeter;');
 	    	cell.vertex = true;
 	    	
 			var edge1 = new mxCell('dispatch', new mxGeometry(0, 0, 0, 0), 'html=1;verticalAlign=bottom;endArrow=block;entryX=0;entryY=0;');
@@ -1677,10 +1677,10 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry('uml sequence self call recursion delegation activation', function()
 		{
-	    	var cell = new mxCell('', new mxGeometry(0, 20, 10, 40), 'html=1;points=[];perimeter=orthogonalPerimeter;');
+	    	let cell = new mxCell('', new mxGeometry(0, 20, 10, 40), 'html=1;points=[];perimeter=orthogonalPerimeter;');
 	    	cell.vertex = true;
 	
-			var edge = new mxCell('self call', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;html=1;align=left;spacingLeft=2;endArrow=block;rounded=0;entryX=1;entryY=0;');
+			let edge = new mxCell('self call', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;html=1;align=left;spacingLeft=2;endArrow=block;rounded=0;entryX=1;entryY=0;');
 			edge.geometry.setTerminalPoint(new mxPoint(5, 0), true);
 			edge.geometry.points = [new mxPoint(30, 0)];
 			edge.geometry.relative = true;
@@ -1706,9 +1706,9 @@ Sidebar.prototype.addUmlPalette = function(expand)
 
 		this.addEntry('uml sequence self call recursion delegation activation', function()
 		{
-	    	var cell = new mxCell('Constraint1 specification', new mxGeometry(0, 0, 160, 60), 'shape=note2;boundedLbl=1;whiteSpace=wrap;html=1;size=25;verticalAlign=top;align=center;');
+	    	let cell = new mxCell('Constraint1 specification', new mxGeometry(0, 0, 160, 60), 'shape=note2;boundedLbl=1;whiteSpace=wrap;html=1;size=25;verticalAlign=top;align=center;');
 	    	cell.vertex = true;
-	    	var label = new mxCell('<<keyword>>', new mxGeometry(0, 0, cell.geometry.width, 25), 'resizeWidth=1;part=1;strokeColor=none;fillColor=none;align=left;spacingLeft=5;');
+	    	let label = new mxCell('<<keyword>>', new mxGeometry(0, 0, cell.geometry.width, 25), 'resizeWidth=1;part=1;strokeColor=none;fillColor=none;align=left;spacingLeft=5;');
 	    	label.geometry.relative = true;
 	    	label.vertex = true;
 	    	cell.insert(label);
@@ -1868,7 +1868,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		    cell2.vertex = true;
 		    cell1.insert(cell2);
 		    
-			var symbol = new mxCell('', new mxGeometry(1, 0, 16, 20), 'shape=module;jettyWidth=10;jettyHeight=4;');
+			let symbol = new mxCell('', new mxGeometry(1, 0, 16, 20), 'shape=module;jettyWidth=10;jettyHeight=4;');
 			symbol.vertex = true;
 			symbol.geometry.relative = true;
 			symbol.geometry.offset = new mxPoint(-25, 9);
@@ -2157,7 +2157,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 	 	this.createEdgeTemplateEntry('html=1;verticalAlign=bottom;endArrow=block;', 80, 0, 'dispatch', 'Message', null, 'uml sequence message call invoke dispatch'),
 		this.addEntry('uml sequence return message', function()
 		{
-			var edge = new mxCell('return', new mxGeometry(0, 0, 0, 0), 'html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;');
+			let edge = new mxCell('return', new mxGeometry(0, 0, 0, 0), 'html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;');
 			edge.geometry.setTerminalPoint(new mxPoint(80, 0), true);
 			edge.geometry.setTerminalPoint(new mxPoint(0, 0), false);
 			edge.geometry.relative = true;
@@ -2167,14 +2167,14 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry('uml relation', function()
 		{
-			var edge = new mxCell('name', new mxGeometry(0, 0, 0, 0), 'endArrow=block;endFill=1;html=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=top;');
+			let edge = new mxCell('name', new mxGeometry(0, 0, 0, 0), 'endArrow=block;endFill=1;html=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=top;');
 			edge.geometry.setTerminalPoint(new mxPoint(0, 0), true);
 			edge.geometry.setTerminalPoint(new mxPoint(160, 0), false);
 			edge.geometry.relative = true;
 			edge.geometry.x = -1;
 			edge.edge = true;
 			
-	    	var cell = new mxCell('1', new mxGeometry(-1, 0, 0, 0), 'edgeLabel;resizable=0;html=1;align=left;verticalAlign=bottom;');
+	    	let cell = new mxCell('1', new mxGeometry(-1, 0, 0, 0), 'edgeLabel;resizable=0;html=1;align=left;verticalAlign=bottom;');
 	    	cell.geometry.relative = true;
 	    	cell.setConnectable(false);
 	    	cell.vertex = true;
@@ -2184,7 +2184,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry('uml association', function()
 		{
-			var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;');
+			let edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=none;html=1;edgeStyle=orthogonalEdgeStyle;');
 			edge.geometry.setTerminalPoint(new mxPoint(0, 0), true);
 			edge.geometry.setTerminalPoint(new mxPoint(160, 0), false);
 			edge.geometry.relative = true;
@@ -2206,7 +2206,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry('uml aggregation', function()
 		{
-			var edge = new mxCell('1', new mxGeometry(0, 0, 0, 0), 'endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;');
+			let edge = new mxCell('1', new mxGeometry(0, 0, 0, 0), 'endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;');
 			edge.geometry.setTerminalPoint(new mxPoint(0, 0), true);
 			edge.geometry.setTerminalPoint(new mxPoint(160, 0), false);
 			edge.geometry.relative = true;
@@ -2218,7 +2218,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry('uml composition', function()
 		{
-			var edge = new mxCell('1', new mxGeometry(0, 0, 0, 0), 'endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;');
+			let edge = new mxCell('1', new mxGeometry(0, 0, 0, 0), 'endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;');
 			edge.geometry.setTerminalPoint(new mxPoint(0, 0), true);
 			edge.geometry.setTerminalPoint(new mxPoint(160, 0), false);
 			edge.geometry.relative = true;
@@ -2230,7 +2230,7 @@ Sidebar.prototype.addUmlPalette = function(expand)
 		}),
 		this.addEntry('uml relation', function()
 		{
-			var edge = new mxCell('Relation', new mxGeometry(0, 0, 0, 0), 'endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;');
+			let edge = new mxCell('Relation', new mxGeometry(0, 0, 0, 0), 'endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;');
 			edge.geometry.setTerminalPoint(new mxPoint(0, 0), true);
 			edge.geometry.setTerminalPoint(new mxPoint(160, 0), false);
 			edge.geometry.relative = true;
@@ -2271,10 +2271,10 @@ Sidebar.prototype.addUmlPalette = function(expand)
 Sidebar.prototype.addBpmnPalette = function(dir, expand)
 {
 	// Avoids having to bind all functions to "this"
-	var sb = this;
+	let sb = this;
 	this.setCurrentSearchEntryLibrary('bpmn');
 
-	var fns =
+	let fns =
 	[
 	 	this.createVertexTemplateEntry('shape=ext;rounded=1;html=1;whiteSpace=wrap;', 120, 80, 'Task', 'Process', null, null, 'bpmn task process'),
 	 	this.createVertexTemplateEntry('shape=ext;rounded=1;html=1;whiteSpace=wrap;double=1;', 120, 80, 'Transaction', 'Transaction', null, null, 'bpmn transaction'),
@@ -2282,7 +2282,7 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 	 	this.createVertexTemplateEntry('shape=ext;rounded=1;html=1;whiteSpace=wrap;strokeWidth=3;', 120, 80, 'Call Activity', 'Call Activity', null, null, 'bpmn call activity'),
 		this.addEntry('bpmn subprocess sub process sub-process', function()
 		{
-			var cell = new mxCell('Sub-Process', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;dropTarget=0;');
+			let cell = new mxCell('Sub-Process', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;dropTarget=0;');
 			cell.vertex = true;
 			
 			var cell1 = new mxCell('', new mxGeometry(0.5, 1, 14, 14), 'html=1;shape=plus;outlineConnect=0;');
@@ -2295,7 +2295,7 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 		}),
 		this.addEntry(this.getTagsForStencil('mxgraph.bpmn', 'loop', 'subprocess sub process sub-process looped').join(' '), function()
 		{
-			var cell = new mxCell('Looped\nSub-Process', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;dropTarget=0;');
+			let cell = new mxCell('Looped\nSub-Process', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;dropTarget=0;');
 			cell.vertex = true;
 			
 			var cell1 = new mxCell('', new mxGeometry(0.5, 1, 14, 14), 'html=1;shape=mxgraph.bpmn.loop;outlineConnect=0;');
@@ -2314,7 +2314,7 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 		}),
 		this.addEntry('bpmn receive task', function()
 		{
-			var cell = new mxCell('Receive', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;dropTarget=0;');
+			let cell = new mxCell('Receive', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;dropTarget=0;');
 			cell.vertex = true;
 			
 			var cell1 = new mxCell('', new mxGeometry(0, 0, 20, 14), 'html=1;shape=message;outlineConnect=0;');
@@ -2327,7 +2327,7 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 		}),
 		this.addEntry(this.getTagsForStencil('mxgraph.bpmn', 'user_task').join(' '), function()
 		{
-			var cell = new mxCell('User', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;dropTarget=0;');
+			let cell = new mxCell('User', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;dropTarget=0;');
 			cell.vertex = true;
 			
 			var cell1 = new mxCell('', new mxGeometry(0, 0, 14, 14), 'html=1;shape=mxgraph.bpmn.user_task;outlineConnect=0;');
@@ -2346,7 +2346,7 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 		}),
 		this.addEntry(this.getTagsForStencil('mxgraph.bpmn', 'timer_start', 'attached').join(' '), function()
 		{
-			var cell = new mxCell('Process', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;dropTarget=0;');
+			let cell = new mxCell('Process', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;dropTarget=0;');
 			cell.vertex = true;
 
 			var cell1 = new mxCell('', new mxGeometry(1, 1, 30, 30), 'shape=mxgraph.bpmn.timer_start;perimeter=ellipsePerimeter;html=1;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;');
@@ -2359,7 +2359,7 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 		}),
 		this.addEntry(this.getTagsForStencil('mxgraph.bpmn', 'timer_start', 'attached').join(' '), function()
 		{
-			var cell = new mxCell('Process', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;dropTarget=0;');
+			let cell = new mxCell('Process', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;dropTarget=0;');
 			cell.vertex = true;
 
 			var cell1 = new mxCell('', new mxGeometry(1, 0, 30, 30), 'shape=mxgraph.bpmn.timer_start;perimeter=ellipsePerimeter;html=1;labelPosition=right;align=left;outlineConnect=0;');
@@ -2376,7 +2376,7 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 	 	this.createVertexTemplateEntry('shape=hexagon;html=1;whiteSpace=wrap;perimeter=hexagonPerimeter;strokeWidth=4;rounded=0;', 60, 50, '', 'Call Conversation', null, null, 'bpmn call conversation'),
 		this.addEntry('bpmn subconversation sub conversation sub-conversation', function()
 		{
-			var cell = new mxCell('', new mxGeometry(0, 0, 60, 50), 'shape=hexagon;whiteSpace=wrap;html=1;perimeter=hexagonPerimeter;rounded=0;dropTarget=0;');
+			let cell = new mxCell('', new mxGeometry(0, 0, 60, 50), 'shape=hexagon;whiteSpace=wrap;html=1;perimeter=hexagonPerimeter;rounded=0;dropTarget=0;');
 			cell.vertex = true;
 			
 			var cell1 = new mxCell('', new mxGeometry(0.5, 1, 14, 14), 'html=1;shape=plus;');
@@ -2389,7 +2389,7 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 		}),
 		this.addEntry('bpmn data object', function()
 		{
-			var cell = new mxCell('', new mxGeometry(0, 0, 40, 60), 'shape=note;whiteSpace=wrap;size=16;html=1;dropTarget=0;');
+			let cell = new mxCell('', new mxGeometry(0, 0, 40, 60), 'shape=note;whiteSpace=wrap;size=16;html=1;dropTarget=0;');
 			cell.vertex = true;
 			
 			var cell1 = new mxCell('', new mxGeometry(0, 0, 14, 14), 'html=1;shape=singleArrow;arrowWidth=0.4;arrowSize=0.4;outlineConnect=0;');
@@ -2440,13 +2440,13 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 	 	this.createEdgeTemplateEntry('startArrow=oval;startFill=0;startSize=7;endArrow=block;endFill=0;endSize=10;dashed=1;html=1;', 100, 0, '', 'Message Flow 1', null, 'bpmn message flow'),
 		this.addEntry('bpmn message flow', function()
 		{
-			var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'startArrow=oval;startFill=0;startSize=7;endArrow=block;endFill=0;endSize=10;dashed=1;html=1;');
+			let edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'startArrow=oval;startFill=0;startSize=7;endArrow=block;endFill=0;endSize=10;dashed=1;html=1;');
 			edge.geometry.setTerminalPoint(new mxPoint(0, 0), true);
 			edge.geometry.setTerminalPoint(new mxPoint(100, 0), false);
 			edge.geometry.relative = true;
 			edge.edge = true;
 			
-	    	var cell = new mxCell('', new mxGeometry(0, 0, 20, 14), 'shape=message;html=1;outlineConnect=0;');
+	    	let cell = new mxCell('', new mxGeometry(0, 0, 20, 14), 'shape=message;html=1;outlineConnect=0;');
 	    	cell.geometry.relative = true;
 	    	cell.vertex = true;
 	    	cell.geometry.offset = new mxPoint(-10, -7);
@@ -2466,7 +2466,7 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
  */
 Sidebar.prototype.createTitle = function(label)
 {
-	var elt = document.createElement('a');
+	let elt = document.createElement('a');
 	elt.setAttribute('title', mxResources.get('sidebarTooltip'));
 	elt.className = 'geTitle';
 	mxUtils.write(elt, label);
@@ -2480,16 +2480,16 @@ Sidebar.prototype.createTitle = function(label)
 Sidebar.prototype.createThumb = function(cells, width, height, parent, title, showLabel, showTitle, realWidth, realHeight)
 {
 	this.graph.labelsVisible = (showLabel == null || showLabel);
-	var fo = mxClient.NO_FO;
+	let fo = mxClient.NO_FO;
 	mxClient.NO_FO = Editor.prototype.originalNoForeignObject;
 	this.graph.view.scaleAndTranslate(1, 0, 0);
 	this.graph.addCells(cells);
-	var bounds = this.graph.getGraphBounds();
-	var s = Math.floor(Math.min((width - 2 * this.thumbBorder) / bounds.width,
+	let bounds = this.graph.getGraphBounds();
+	let s = Math.floor(Math.min((width - 2 * this.thumbBorder) / bounds.width,
 		(height - 2 * this.thumbBorder) / bounds.height) * 100) / 100;
 	this.graph.view.scaleAndTranslate(s, Math.floor((width - bounds.width * s) / 2 / s - bounds.x),
 		Math.floor((height - bounds.height * s) / 2 / s - bounds.y));
-	var node = null;
+	let node = null;
 	
 	// For supporting HTML labels in IE9 standards mode the container is cloned instead
 	if (this.graph.dialect == mxConstants.DIALECT_SVG && !mxClient.NO_FO &&
@@ -2522,10 +2522,10 @@ Sidebar.prototype.createThumb = function(cells, width, height, parent, title, sh
 	// Adds title for sidebar entries
 	if (this.sidebarTitles && title != null && showTitle != false)
 	{
-		var border = 0;
+		let border = 0;
 		parent.style.height = (this.thumbHeight + border + this.sidebarTitleSize + 8) + 'px';
 		
-		var div = document.createElement('div');
+		let div = document.createElement('div');
 		div.style.fontSize = this.sidebarTitleSize + 'px';
 		div.style.color = '#303030';
 		div.style.textAlign = 'center';
@@ -2544,10 +2544,10 @@ Sidebar.prototype.createThumb = function(cells, width, height, parent, title, sh
  */
 Sidebar.prototype.createItem = function(cells, title, showLabel, showTitle, width, height, allowCellsInserted)
 {
-	var elt = document.createElement('a');
+	let elt = document.createElement('a');
 	elt.className = 'geItem';
 	elt.style.overflow = 'hidden';
-	var border = 2 * this.thumbBorder;
+	let border = 2 * this.thumbBorder;
 	elt.style.width = (this.thumbWidth + border) + 'px';
 	elt.style.height = (this.thumbHeight + border) + 'px';
 	elt.style.padding = this.thumbPadding + 'px';
@@ -2559,11 +2559,11 @@ Sidebar.prototype.createItem = function(cells, title, showLabel, showTitle, widt
 	});
 
 	this.createThumb(cells, this.thumbWidth, this.thumbHeight, elt, title, showLabel, showTitle, width, height);
-	var bounds = new mxRectangle(0, 0, width, height);
+	let bounds = new mxRectangle(0, 0, width, height);
 	
 	if (cells.length > 1 || cells[0].vertex)
 	{
-		var ds = this.createDragSource(elt, this.createDropHandler(cells, true, allowCellsInserted,
+		let ds = this.createDragSource(elt, this.createDropHandler(cells, true, allowCellsInserted,
 			bounds), this.createDragPreview(width, height), cells, bounds);
 		this.addClickHandler(elt, ds, cells);
 	
@@ -2575,7 +2575,7 @@ Sidebar.prototype.createItem = function(cells, title, showLabel, showTitle, widt
 	}
 	else if (cells[0] != null && cells[0].edge)
 	{
-		var ds = this.createDragSource(elt, this.createDropHandler(cells, false, allowCellsInserted,
+		let ds = this.createDragSource(elt, this.createDropHandler(cells, false, allowCellsInserted,
 			bounds), this.createDragPreview(width, height), cells, bounds);
 		this.addClickHandler(elt, ds, cells);
 	}
@@ -2600,39 +2600,39 @@ Sidebar.prototype.createItem = function(cells, title, showLabel, showTitle, widt
  */
 Sidebar.prototype.updateShapes = function(source, targets)
 {
-	var graph = this.editorUi.editor.graph;
-	var sourceCellStyle = graph.getCellStyle(source);
-	var result = [];
+	let graph = this.editorUi.editor.graph;
+	let sourceCellStyle = graph.getCellStyle(source);
+	let result = [];
 	
 	graph.model.beginUpdate();
 	try
 	{
-		var cellStyle = graph.getModel().getStyle(source);
+		let cellStyle = graph.getModel().getStyle(source);
 
 		// Lists the styles to carry over from the existing shape
-		var styles = ['shadow', 'dashed', 'dashPattern', 'fontFamily', 'fontSize', 'fontColor', 'align', 'startFill',
+		let styles = ['shadow', 'dashed', 'dashPattern', 'fontFamily', 'fontSize', 'fontColor', 'align', 'startFill',
 		              'startSize', 'endFill', 'endSize', 'strokeColor', 'strokeWidth', 'fillColor', 'gradientColor',
 		              'html', 'part', 'noEdgeStyle', 'edgeStyle', 'elbow', 'childLayout', 'recursiveResize',
 		              'container', 'collapsible', 'connectable', 'comic', 'sketch', 'fillWeight', 'hachureGap',
 		              'hachureAngle', 'jiggle', 'disableMultiStroke', 'disableMultiStrokeFill',
 		              'fillStyle', 'curveFitting', 'simplification', 'sketchStyle'];
 		
-		for (var i = 0; i < targets.length; i++)
+		for (let i = 0; i < targets.length; i++)
 		{
-			var targetCell = targets[i];
+			let targetCell = targets[i];
 			
 			if ((graph.getModel().isVertex(targetCell) == graph.getModel().isVertex(source)) ||
 				(graph.getModel().isEdge(targetCell) == graph.getModel().isEdge(source)))
 			{
-				var style = graph.getCurrentCellStyle(targets[i]);
+				let style = graph.getCurrentCellStyle(targets[i]);
 				graph.getModel().setStyle(targetCell, cellStyle);
 				
 				// Removes all children of composite cells
 				if (mxUtils.getValue(style, 'composite', '0') == '1')
 				{
-					var childCount = graph.model.getChildCount(targetCell);
+					let childCount = graph.model.getChildCount(targetCell);
 					
-					for (var j = childCount; j >= 0; j--)
+					for (let j = childCount; j >= 0; j--)
 					{
 						graph.model.remove(graph.model.getChildAt(targetCell, j));
 					}
@@ -2646,9 +2646,9 @@ Sidebar.prototype.updateShapes = function(source, targets)
 					graph.setCellStyles('participant', sourceCellStyle[mxConstants.STYLE_SHAPE], [targetCell]);
 				}
 				
-				for (var j = 0; j < styles.length; j++)
+				for (let j = 0; j < styles.length; j++)
 				{
-					var value = style[styles[j]];
+					let value = style[styles[j]];
 					
 					if (value != null)
 					{
@@ -2677,7 +2677,7 @@ Sidebar.prototype.createDropHandler = function(cells, allowSplit, allowCellsInse
 	
 	return mxUtils.bind(this, function(graph, evt, target, x, y, force)
 	{
-		var elt = (force) ? null : ((mxEvent.isTouchEvent(evt) || mxEvent.isPenEvent(evt)) ?
+		let elt = (force) ? null : ((mxEvent.isTouchEvent(evt) || mxEvent.isPenEvent(evt)) ?
 			document.elementFromPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt)) :
 			mxEvent.getSource(evt));
 		
@@ -2695,10 +2695,10 @@ Sidebar.prototype.createDropHandler = function(cells, allowSplit, allowCellsInse
 				graph.stopEditing();
 				
 				// Holding alt while mouse is released ignores drop target
-				var validDropTarget = (target != null && !mxEvent.isAltDown(evt)) ?
+				let validDropTarget = (target != null && !mxEvent.isAltDown(evt)) ?
 					graph.isValidDropTarget(target, cells, evt) : false;
 					
-				var select = null;
+				let select = null;
 
 				if (target != null && !validDropTarget)
 				{
@@ -2716,12 +2716,12 @@ Sidebar.prototype.createDropHandler = function(cells, allowSplit, allowCellsInse
 						// Splits the target edge or inserts into target group
 						if (allowSplit && graph.isSplitTarget(target, cells, evt))
 						{
-							var s = graph.view.scale;
-							var tr = graph.view.translate;
-							var tx = (x + tr.x) * s;
-							var ty = (y + tr.y) * s;
+							let s = graph.view.scale;
+							let tr = graph.view.translate;
+							let tx = (x + tr.x) * s;
+							let ty = (y + tr.y) * s;
 							
-							var clones = graph.cloneCells(cells);
+							let clones = graph.cloneCells(cells);
 							graph.splitEdge(target, clones, null,
 								x - bounds.width / 2, y - bounds.height / 2,
 								tx, ty);
@@ -2735,16 +2735,16 @@ Sidebar.prototype.createDropHandler = function(cells, allowSplit, allowCellsInse
 						// Executes parent layout hooks for position/order
 						if (graph.layoutManager != null)
 						{
-							var layout = graph.layoutManager.getLayout(target);
+							let layout = graph.layoutManager.getLayout(target);
 							
 							if (layout != null)
 							{
-								var s = graph.view.scale;
-								var tr = graph.view.translate;
-								var tx = (x + tr.x) * s;
-								var ty = (y + tr.y) * s;
+								let s = graph.view.scale;
+								let tr = graph.view.translate;
+								let tx = (x + tr.x) * s;
+								let ty = (y + tr.y) * s;
 								
-								for (var i = 0; i < select.length; i++)
+								for (let i = 0; i < select.length; i++)
 								{
 									layout.moveCell(select[i], tx, ty);
 								}
@@ -2792,7 +2792,7 @@ Sidebar.prototype.createDropHandler = function(cells, allowSplit, allowCellsInse
  */
 Sidebar.prototype.createDragPreview = function(width, height)
 {
-	var elt = document.createElement('div');
+	let elt = document.createElement('div');
 	elt.style.border = this.dragPreviewBorder;
 	elt.style.width = width + 'px';
 	elt.style.height = height + 'px';
@@ -2805,30 +2805,30 @@ Sidebar.prototype.createDragPreview = function(width, height)
  */
 Sidebar.prototype.dropAndConnect = function(source, targets, direction, dropCellIndex, evt)
 {
-	var geo = this.getDropAndConnectGeometry(source, targets[dropCellIndex], direction, targets);
+	let geo = this.getDropAndConnectGeometry(source, targets[dropCellIndex], direction, targets);
 	
 	// Targets without the new edge for selection
-	var tmp = [];
+	let tmp = [];
 	
 	if (geo != null)
 	{
-		var graph = this.editorUi.editor.graph;
-		var editingCell = null;
+		let graph = this.editorUi.editor.graph;
+		let editingCell = null;
 
 		graph.model.beginUpdate();
 		try
 		{
-			var sourceGeo = graph.getCellGeometry(source);
+			let sourceGeo = graph.getCellGeometry(source);
 			var geo2 = graph.getCellGeometry(targets[dropCellIndex]);
 
 			// Handles special case where target should be ignored for stack layouts
-			var targetParent = graph.model.getParent(source);
-			var validLayout = true;
+			let targetParent = graph.model.getParent(source);
+			let validLayout = true;
 			
 			// Ignores parent if it has a stack layout or if it is a table or row
 			if (graph.layoutManager != null)
 			{
-				var layout = graph.layoutManager.getLayout(targetParent);
+				let layout = graph.layoutManager.getLayout(targetParent);
 			
 				// LATER: Use parent of parent if valid layout
 				if (layout != null && layout.constructor == mxStackLayout)
@@ -2838,18 +2838,18 @@ Sidebar.prototype.dropAndConnect = function(source, targets, direction, dropCell
 			}
 			
 			// Checks if another container is at the drop location
-			var tmp = (graph.model.isEdge(source)) ? null : graph.view.getState(targetParent);
-			var dx = 0;
-			var dy = 0;
+			let tmp = (graph.model.isEdge(source)) ? null : graph.view.getState(targetParent);
+			let dx = 0;
+			let dy = 0;
 			
 			// Offsets by parent position
 			if (tmp != null)
 			{
-				var offset = tmp.origin;
+				let offset = tmp.origin;
 				dx = offset.x;
 				dy = offset.y;
 
-				var pt = geo.getTerminalPoint(false);
+				let pt = geo.getTerminalPoint(false);
 				
 				if (pt != null)
 				{
@@ -2858,11 +2858,11 @@ Sidebar.prototype.dropAndConnect = function(source, targets, direction, dropCell
 				}
 			}
 			
-			var useParent = !graph.isTableRow(source) && !graph.isTableCell(source) &&
+			let useParent = !graph.isTableRow(source) && !graph.isTableCell(source) &&
 				(graph.model.isEdge(source) || (sourceGeo != null &&
 				!sourceGeo.relative && validLayout));
 			
-			var tempTarget = graph.getCellAt((geo.x + dx + graph.view.translate.x) * graph.view.scale,
+			let tempTarget = graph.getCellAt((geo.x + dx + graph.view.translate.x) * graph.view.scale,
 				(geo.y + dy + graph.view.translate.y) * graph.view.scale, null, null, null, function(state, x, y)
 				{
 					return !graph.isContainer(state.cell);
@@ -2875,7 +2875,7 @@ Sidebar.prototype.dropAndConnect = function(source, targets, direction, dropCell
 				// Offsets by new parent position
 				if (tmp != null)
 				{
-					var offset = tmp.origin;
+					let offset = tmp.origin;
 					targetParent = tempTarget;
 					useParent = true;
 					
@@ -2927,8 +2927,8 @@ Sidebar.prototype.dropAndConnect = function(source, targets, direction, dropCell
 				else if (useParent && graph.model.isVertex(targetParent))
 				{
 					// Adds parent offset to other nodes
-					var tmpState = graph.view.getState(targetParent);
-					var offset = (tmpState.cell != graph.view.currentRoot) ?
+					let tmpState = graph.view.getState(targetParent);
+					let offset = (tmpState.cell != graph.view.currentRoot) ?
 						tmpState.origin : new mxPoint(0, 0);
 
 					graph.cellsMoved(targets, offset.x, offset.y, null, null, true);
@@ -2981,10 +2981,10 @@ Sidebar.prototype.dropAndConnect = function(source, targets, direction, dropCell
  */
 Sidebar.prototype.getDropAndConnectGeometry = function(source, target, direction, targets)
 {
-	var graph = this.editorUi.editor.graph;
-	var view = graph.view;
-	var keepSize = targets.length > 1;
-	var geo = graph.getCellGeometry(source);
+	let graph = this.editorUi.editor.graph;
+	let view = graph.view;
+	let keepSize = targets.length > 1;
+	let geo = graph.getCellGeometry(source);
 	var geo2 = graph.getCellGeometry(target);
 	
 	if (geo != null && geo2 != null)
@@ -2993,10 +2993,10 @@ Sidebar.prototype.getDropAndConnectGeometry = function(source, target, direction
 
 		if (graph.model.isEdge(source))
 		{
-			var state = graph.view.getState(source);
-			var pts = state.absolutePoints;
+			let state = graph.view.getState(source);
+			let pts = state.absolutePoints;
 			var p0 = pts[0];
-			var pe = pts[pts.length - 1];
+			let pe = pts[pts.length - 1];
 			
 			if (direction == mxConstants.DIRECTION_NORTH)
 			{
@@ -3013,22 +3013,22 @@ Sidebar.prototype.getDropAndConnectGeometry = function(source, target, direction
 		{
 			if (geo.relative)
 			{
-				var state = graph.view.getState(source);
+				let state = graph.view.getState(source);
 				geo = geo.clone();
 				geo.x = (state.x - view.translate.x) / view.scale;
 				geo.y = (state.y - view.translate.y) / view.scale;
 			}
 			
-			var length = graph.defaultEdgeLength;
+			let length = graph.defaultEdgeLength;
 			
 			// Maintains edge length
 			if (graph.model.isEdge(target) && geo2.getTerminalPoint(true) != null &&
 				geo2.getTerminalPoint(false) != null)
 			{
 				var p0 = geo2.getTerminalPoint(true);
-				var pe = geo2.getTerminalPoint(false);
-				var dx = pe.x - p0.x;
-				var dy = pe.y - p0.y;
+				let pe = geo2.getTerminalPoint(false);
+				let dx = pe.x - p0.x;
+				let dy = pe.y - p0.y;
 				
 				length = Math.sqrt(dx * dx + dy * dy);
 				
@@ -3097,7 +3097,7 @@ Sidebar.prototype.getDropAndConnectGeometry = function(source, target, direction
 				if (graph.model.isEdge(target) && geo2.getTerminalPoint(true) != null &&
 					target.getTerminal(false) != null)
 				{
-					var targetGeo = graph.getCellGeometry(target.getTerminal(false));
+					let targetGeo = graph.getCellGeometry(target.getTerminal(false));
 					
 					if (targetGeo != null)
 					{
@@ -3135,11 +3135,11 @@ Sidebar.prototype.getDropAndConnectGeometry = function(source, target, direction
  */
 Sidebar.prototype.isDropStyleEnabled = function(cells, firstVertex)
 {
-	var result = true;
+	let result = true;
 	
 	if (firstVertex != null && cells.length == 1)
 	{
-		var vstyle = this.graph.getCellStyle(cells[firstVertex]);
+		let vstyle = this.graph.getCellStyle(cells[firstVertex]);
 		
 		if (vstyle != null)
 		{
@@ -3166,13 +3166,13 @@ Sidebar.prototype.isDropStyleTargetIgnored = function(state)
 Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells, bounds)
 {
 	// Checks if the cells contain any vertices
-	var ui = this.editorUi;
-	var graph = ui.editor.graph;
-	var freeSourceEdge = null;
-	var firstVertex = null;
-	var sidebar = this;
+	let ui = this.editorUi;
+	let graph = ui.editor.graph;
+	let freeSourceEdge = null;
+	let firstVertex = null;
+	let sidebar = this;
 	
-	for (var i = 0; i < cells.length; i++)
+	for (let i = 0; i < cells.length; i++)
 	{
 		if (firstVertex == null && graph.model.isVertex(cells[i]))
 		{
@@ -3190,9 +3190,9 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 		}
 	}
 	
-	var dropStyleEnabled = this.isDropStyleEnabled(cells, firstVertex);
+	let dropStyleEnabled = this.isDropStyleEnabled(cells, firstVertex);
 	
-	var dragSource = mxUtils.makeDraggable(elt, graph, mxUtils.bind(this, function(graph, evt, target, x, y)
+	let dragSource = mxUtils.makeDraggable(elt, graph, mxUtils.bind(this, function(graph, evt, target, x, y)
 	{
 		if (this.updateThread != null)
 		{
@@ -3201,13 +3201,13 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 		
 		if (cells != null && currentStyleTarget != null && activeArrow == styleTarget)
 		{
-			var tmp = graph.isCellSelected(currentStyleTarget.cell) ? graph.getSelectionCells() : [currentStyleTarget.cell];
-			var updatedCells = this.updateShapes((graph.model.isEdge(currentStyleTarget.cell)) ? cells[0] : cells[firstVertex], tmp);
+			let tmp = graph.isCellSelected(currentStyleTarget.cell) ? graph.getSelectionCells() : [currentStyleTarget.cell];
+			let updatedCells = this.updateShapes((graph.model.isEdge(currentStyleTarget.cell)) ? cells[0] : cells[firstVertex], tmp);
 			graph.setSelectionCells(updatedCells);
 		}
 		else if (cells != null && activeArrow != null && currentTargetState != null && activeArrow != styleTarget)
 		{
-			var index = (graph.model.isEdge(currentTargetState.cell) || freeSourceEdge == null) ? firstVertex : freeSourceEdge;
+			let index = (graph.model.isEdge(currentTargetState.cell) || freeSourceEdge == null) ? firstVertex : freeSourceEdge;
 			graph.setSelectionCells(this.dropAndConnect(currentTargetState.cell, cells, direction, index, evt));
 		}
 		else
@@ -3231,7 +3231,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 	});
 
 	// Overrides mouseDown to ignore popup triggers
-	var mouseDown = dragSource.mouseDown;
+	let mouseDown = dragSource.mouseDown;
 	
 	dragSource.mouseDown = function(evt)
 	{
@@ -3245,7 +3245,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 	// Workaround for event redirection via image tag in quirks and IE8
 	function createArrow(img, tooltip)
 	{
-		var arrow = null;
+		let arrow = null;
 		arrow = mxUtils.createImage(img.src);
 		arrow.style.width = img.width + 'px';
 		arrow.style.height = img.height + 'px';
@@ -3262,22 +3262,22 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 		return arrow;
 	};
 
-	var currentTargetState = null;
-	var currentStateHandle = null;
-	var currentStyleTarget = null;
-	var activeTarget = false;
+	let currentTargetState = null;
+	let currentStateHandle = null;
+	let currentStyleTarget = null;
+	let activeTarget = false;
 	
-	var arrowUp = createArrow(this.triangleUp, mxResources.get('connect'));
-	var arrowRight = createArrow(this.triangleRight, mxResources.get('connect'));
-	var arrowDown = createArrow(this.triangleDown, mxResources.get('connect'));
-	var arrowLeft = createArrow(this.triangleLeft, mxResources.get('connect'));
-	var styleTarget = createArrow(this.refreshTarget, mxResources.get('replace'));
+	let arrowUp = createArrow(this.triangleUp, mxResources.get('connect'));
+	let arrowRight = createArrow(this.triangleRight, mxResources.get('connect'));
+	let arrowDown = createArrow(this.triangleDown, mxResources.get('connect'));
+	let arrowLeft = createArrow(this.triangleLeft, mxResources.get('connect'));
+	let styleTarget = createArrow(this.refreshTarget, mxResources.get('replace'));
 	// Workaround for actual parentNode not being updated in old IE
-	var styleTargetParent = null;
-	var roundSource = createArrow(this.roundDrop);
-	var roundTarget = createArrow(this.roundDrop);
-	var direction = mxConstants.DIRECTION_NORTH;
-	var activeArrow = null;
+	let styleTargetParent = null;
+	let roundSource = createArrow(this.roundDrop);
+	let roundTarget = createArrow(this.roundDrop);
+	let direction = mxConstants.DIRECTION_NORTH;
+	let activeArrow = null;
 	
 	function checkArrow(x, y, bounds, arrow)
 	{
@@ -3298,12 +3298,12 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 	};
 	
 	// Hides guides and preview if target is active
-	var dsCreatePreviewElement = dragSource.createPreviewElement;
+	let dsCreatePreviewElement = dragSource.createPreviewElement;
 	
 	// Stores initial size of preview element
 	dragSource.createPreviewElement = function(graph)
 	{
-		var elt = dsCreatePreviewElement.apply(this, arguments);
+		let elt = dsCreatePreviewElement.apply(this, arguments);
 		
 		// Pass-through events required to tooltip on replace shape
 		if (mxClient.IS_SVG)
@@ -3318,7 +3318,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 	};
 	
 	// Shows/hides hover icons
-	var dragEnter = dragSource.dragEnter;
+	let dragEnter = dragSource.dragEnter;
 	dragSource.dragEnter = function(graph, evt)
 	{
 		if (ui.hoverIcons != null)
@@ -3329,7 +3329,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 		dragEnter.apply(this, arguments);
 	};
 	
-	var dragExit = dragSource.dragExit;
+	let dragExit = dragSource.dragExit;
 	dragSource.dragExit = function(graph, evt)
 	{
 		if (ui.hoverIcons != null)
@@ -3351,7 +3351,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 
 		if (this.previewElement != null)
 		{
-			var view = graph.view;
+			let view = graph.view;
 			
 			if (currentStyleTarget != null && activeArrow == styleTarget)
 			{
@@ -3369,17 +3369,17 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 					dragSource.currentHighlight.hide();
 				}
 				
-				var index = (graph.model.isEdge(currentTargetState.cell) || freeSourceEdge == null) ? firstVertex : freeSourceEdge;
-				var geo = sidebar.getDropAndConnectGeometry(currentTargetState.cell, cells[index], direction, cells);
+				let index = (graph.model.isEdge(currentTargetState.cell) || freeSourceEdge == null) ? firstVertex : freeSourceEdge;
+				let geo = sidebar.getDropAndConnectGeometry(currentTargetState.cell, cells[index], direction, cells);
 				var geo2 = (!graph.model.isEdge(currentTargetState.cell)) ? graph.getCellGeometry(currentTargetState.cell) : null;
 				var geo3 = graph.getCellGeometry(cells[index]);
-				var parent = graph.model.getParent(currentTargetState.cell);
-				var dx = view.translate.x * view.scale;
-				var dy = view.translate.y * view.scale;
+				let parent = graph.model.getParent(currentTargetState.cell);
+				let dx = view.translate.x * view.scale;
+				let dy = view.translate.y * view.scale;
 				
 				if (geo2 != null && !geo2.relative && graph.model.isVertex(parent) && parent != view.currentRoot)
 				{
-					var pState = view.getState(parent);
+					let pState = view.getState(parent);
 					
 					dx = pState.x;
 					dy = pState.y;
@@ -3425,19 +3425,19 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 		}
 	};
 	
-	var startTime = new Date().getTime();
-	var timeOnTarget = 0;
-	var prev = null;
+	let startTime = new Date().getTime();
+	let timeOnTarget = 0;
+	let prev = null;
 	
 	// Gets source cell style to compare shape below
-	var sourceCellStyle = this.editorUi.editor.graph.getCellStyle(cells[0]);
+	let sourceCellStyle = this.editorUi.editor.graph.getCellStyle(cells[0]);
 	
 	// Allows drop into cell only if target is a valid root
 	dragSource.getDropTarget = mxUtils.bind(this, function(graph, x, y, evt)
 	{
 		// Alt means no targets at all
 		// LATER: Show preview where result will go
-		var cell = (!mxEvent.isAltDown(evt) && cells != null) ?
+		let cell = (!mxEvent.isAltDown(evt) && cells != null) ?
 			graph.getCellAt(x, y, null, null, null, function(state, x, y)
 			{
 				return graph.isContainer(state.cell);
@@ -3447,7 +3447,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 		if (cell != null && !this.graph.isCellConnectable(cell) &&
 			!this.graph.model.isEdge(cell))
 		{
-			var parent = this.graph.getModel().getParent(cell);
+			let parent = this.graph.getModel().getParent(cell);
 			
 			if (this.graph.getModel().isVertex(parent) &&
 				this.graph.isCellConnectable(parent))
@@ -3462,9 +3462,9 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 			cell = null;
 		}
 		
-		var state = graph.view.getState(cell);
+		let state = graph.view.getState(cell);
 		activeArrow = null;
-		var bbox = null;
+		let bbox = null;
 
 		// Time on target
 		if (prev != state)
@@ -3508,7 +3508,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 			(graph.model.isEdge(state.cell) && graph.model.isEdge(cells[0]))))
 		{
 			currentStyleTarget = state;
-			var tmp = (graph.model.isEdge(state.cell)) ? graph.view.getPoint(state) :
+			let tmp = (graph.model.isEdge(state.cell)) ? graph.view.getPoint(state) :
 				new mxPoint(state.getCenterX(), state.getCenterY());
 			tmp = new mxRectangle(tmp.x - this.refreshTarget.width / 2, tmp.y - this.refreshTarget.height / 2,
 				this.refreshTarget.width, this.refreshTarget.height);
@@ -3539,7 +3539,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 		else if (currentStyleTarget != null && styleTargetParent != null)
 		{
 			// Sets active Arrow as side effect
-			var tmp = (graph.model.isEdge(currentStyleTarget.cell)) ? graph.view.getPoint(currentStyleTarget) : new mxPoint(currentStyleTarget.getCenterX(), currentStyleTarget.getCenterY());
+			let tmp = (graph.model.isEdge(currentStyleTarget.cell)) ? graph.view.getPoint(currentStyleTarget) : new mxPoint(currentStyleTarget.getCenterX(), currentStyleTarget.getCenterY());
 			tmp = new mxRectangle(tmp.x - this.refreshTarget.width / 2, tmp.y - this.refreshTarget.height / 2,
 				this.refreshTarget.width, this.refreshTarget.height);
 			checkArrow(x, y, tmp, styleTarget);
@@ -3553,7 +3553,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 			
 			if (graph.model.isEdge(currentTargetState.cell))
 			{
-				var pts = currentTargetState.absolutePoints;
+				let pts = currentTargetState.absolutePoints;
 				
 				if (roundSource.parentNode != null)
 				{
@@ -3564,7 +3564,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 				
 				if (roundTarget.parentNode != null)
 				{
-					var pe = pts[pts.length - 1];
+					let pe = pts[pts.length - 1];
 					bbox.add(checkArrow(x, y, new mxRectangle(pe.x - this.roundDrop.width / 2,
 						pe.y - this.roundDrop.height / 2,
 						this.roundDrop.width, this.roundDrop.height), roundTarget));
@@ -3572,7 +3572,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 			}
 			else
 			{
-				var bds = mxRectangle.fromRectangle(currentTargetState);
+				let bds = mxRectangle.fromRectangle(currentTargetState);
 				
 				// Uses outer bounding box to take rotation into account
 				if (currentTargetState.shape != null && currentTargetState.shape.boundingBox != null)
@@ -3583,7 +3583,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 				bds.grow(this.graph.tolerance);
 				bds.grow(HoverIcons.prototype.arrowSpacing);
 				
-				var handler = this.graph.selectionCellsHandler.getHandler(currentTargetState.cell);
+				let handler = this.graph.selectionCellsHandler.getHandler(currentTargetState.cell);
 				
 				if (handler != null)
 				{
@@ -3641,7 +3641,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 			state = currentStyleTarget;
 		}
 
-		var validTarget = (firstVertex == null || graph.isCellConnectable(cells[firstVertex])) &&
+		let validTarget = (firstVertex == null || graph.isCellConnectable(cells[firstVertex])) &&
 			((graph.model.isEdge(cell) && firstVertex != null) ||
 			(graph.model.isVertex(cell) && graph.isCellConnectable(cell)));
 		
@@ -3657,9 +3657,9 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 
 			if (currentTargetState != null && validTarget)
 			{
-				var elts = [roundSource, roundTarget, arrowUp, arrowRight, arrowDown, arrowLeft];
+				let elts = [roundSource, roundTarget, arrowUp, arrowRight, arrowDown, arrowLeft];
 				
-				for (var i = 0; i < elts.length; i++)
+				for (let i = 0; i < elts.length; i++)
 				{
 					if (elts[i].parentNode != null)
 					{
@@ -3669,14 +3669,14 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 				
 				if (graph.model.isEdge(cell))
 				{
-					var pts = state.absolutePoints;
+					let pts = state.absolutePoints;
 					
 					if (pts != null)
 					{
 						var p0 = pts[0];
-						var pe = pts[pts.length - 1];
-						var tol = graph.tolerance;
-						var box = new mxRectangle(x - tol, y - tol, 2 * tol, 2 * tol);
+						let pe = pts[pts.length - 1];
+						let tol = graph.tolerance;
+						let box = new mxRectangle(x - tol, y - tol, 2 * tol, 2 * tol);
 						
 						roundSource.style.left = Math.floor(p0.x - this.roundDrop.width / 2) + 'px';
 						roundSource.style.top = Math.floor(p0.y - this.roundDrop.height / 2) + 'px';
@@ -3697,7 +3697,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 				}
 				else
 				{
-					var bds = mxRectangle.fromRectangle(state);
+					let bds = mxRectangle.fromRectangle(state);
 					
 					// Uses outer bounding box to take rotation into account
 					if (state.shape != null && state.shape.boundingBox != null)
@@ -3708,7 +3708,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 					bds.grow(this.graph.tolerance);
 					bds.grow(HoverIcons.prototype.arrowSpacing);
 					
-					var handler = this.graph.selectionCellsHandler.getHandler(state.cell);
+					let handler = this.graph.selectionCellsHandler.getHandler(state.cell);
 					
 					if (handler != null)
 					{
@@ -3764,9 +3764,9 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 			}
 			else
 			{
-				var elts = [roundSource, roundTarget, arrowUp, arrowRight, arrowDown, arrowLeft];
+				let elts = [roundSource, roundTarget, arrowUp, arrowRight, arrowDown, arrowLeft];
 				
-				for (var i = 0; i < elts.length; i++)
+				for (let i = 0; i < elts.length; i++)
 				{
 					if (elts[i].parentNode != null)
 					{
@@ -3782,10 +3782,10 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 		}
 		
 		// Handles drop target
-		var target = ((!mxEvent.isAltDown(evt) || mxEvent.isShiftDown(evt)) &&
+		let target = ((!mxEvent.isAltDown(evt) || mxEvent.isShiftDown(evt)) &&
 			!(currentStyleTarget != null && activeArrow == styleTarget)) ?
 			mxDragSource.prototype.getDropTarget.apply(this, arguments) : null;
-		var model = graph.getModel();
+		let model = graph.getModel();
 		
 		if (target != null)
 		{
@@ -3816,9 +3816,9 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 	{
 		mxDragSource.prototype.stopDrag.apply(this, arguments);
 		
-		var elts = [roundSource, roundTarget, styleTarget, arrowUp, arrowRight, arrowDown, arrowLeft];
+		let elts = [roundSource, roundTarget, styleTarget, arrowUp, arrowRight, arrowDown, arrowLeft];
 		
-		for (var i = 0; i < elts.length; i++)
+		for (let i = 0; i < elts.length; i++)
 		{
 			if (elts[i].parentNode != null)
 			{
@@ -3846,16 +3846,16 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
  */
 Sidebar.prototype.itemClicked = function(cells, ds, evt, elt)
 {
-	var graph = this.editorUi.editor.graph;
+	let graph = this.editorUi.editor.graph;
 	graph.container.focus();
 	
 	// Alt+Click inserts and connects
 	if (mxEvent.isAltDown(evt) && graph.getSelectionCount() == 1 &&
 		graph.model.isVertex(graph.getSelectionCell()))
 	{
-		var firstVertex = null;
+		let firstVertex = null;
 		
-		for (var i = 0; i < cells.length && firstVertex == null; i++)
+		for (let i = 0; i < cells.length && firstVertex == null; i++)
 		{
 			if (graph.model.isVertex(cells[i]))
 			{
@@ -3881,7 +3881,7 @@ Sidebar.prototype.itemClicked = function(cells, ds, evt, elt)
 	}
 	else
 	{
-		var pt = (mxEvent.isAltDown(evt)) ? graph.getFreeInsertPoint() :
+		let pt = (mxEvent.isAltDown(evt)) ? graph.getFreeInsertPoint() :
 			graph.getCenterInsertPoint(graph.getBoundingBoxFromGeometry(cells, true));
 		ds.drop(graph, evt, null, pt.x, pt.y, true);
 	}
@@ -3892,13 +3892,13 @@ Sidebar.prototype.itemClicked = function(cells, ds, evt, elt)
  */
 Sidebar.prototype.addClickHandler = function(elt, ds, cells)
 {
-	var graph = this.editorUi.editor.graph;
-	var oldMouseDown = ds.mouseDown;
-	var oldMouseMove = ds.mouseMove;
-	var oldMouseUp = ds.mouseUp;
-	var tol = graph.tolerance;
-	var first = null;
-	var sb = this;
+	let graph = this.editorUi.editor.graph;
+	let oldMouseDown = ds.mouseDown;
+	let oldMouseMove = ds.mouseMove;
+	let oldMouseUp = ds.mouseUp;
+	let tol = graph.tolerance;
+	let first = null;
+	let sb = this;
 	
 	ds.mouseDown =function(evt)
 	{
@@ -3968,7 +3968,7 @@ Sidebar.prototype.createVertexTemplateEntry = function(style, width, height, val
  */
 Sidebar.prototype.createVertexTemplate = function(style, width, height, value, title, showLabel, showTitle, allowCellsInserted)
 {
-	var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0, width, height), style)];
+	let cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0, width, height), style)];
 	cells[0].vertex = true;
 	
 	return this.createVertexTemplateFromCells(cells, width, height, title, showLabel, showTitle, allowCellsInserted);
@@ -3979,13 +3979,13 @@ Sidebar.prototype.createVertexTemplate = function(style, width, height, value, t
  */
 Sidebar.prototype.createVertexTemplateFromData = function(data, width, height, title, showLabel, showTitle, allowCellsInserted)
 {
-	var doc = mxUtils.parseXml(Graph.decompress(data));
-	var codec = new mxCodec(doc);
+	let doc = mxUtils.parseXml(Graph.decompress(data));
+	let codec = new mxCodec(doc);
 
-	var model = new mxGraphModel();
+	let model = new mxGraphModel();
 	codec.decode(doc.documentElement, model);
 	
-	var cells = this.graph.cloneCells(model.root.getChildAt(0).children);
+	let cells = this.graph.cloneCells(model.root.getChildAt(0).children);
 
 	return this.createVertexTemplateFromCells(cells, width, height, title, showLabel, showTitle, allowCellsInserted);
 };
@@ -4018,7 +4018,7 @@ Sidebar.prototype.createEdgeTemplateEntry = function(style, width, height, value
  */
 Sidebar.prototype.createEdgeTemplate = function(style, width, height, value, title, showLabel, allowCellsInserted)
 {
-	var cell = new mxCell((value != null) ? value : '', new mxGeometry(0, 0, width, height), style);
+	let cell = new mxCell((value != null) ? value : '', new mxGeometry(0, 0, width, height), style);
 	cell.geometry.setTerminalPoint(new mxPoint(0, height), true);
 	cell.geometry.setTerminalPoint(new mxPoint(width, 0), false);
 	cell.geometry.relative = true;
@@ -4042,7 +4042,7 @@ Sidebar.prototype.addPaletteFunctions = function(id, title, expanded, fns)
 {
 	this.addPalette(id, title, expanded, mxUtils.bind(this, function(content)
 	{
-		for (var i = 0; i < fns.length; i++)
+		for (let i = 0; i < fns.length; i++)
 		{
 			content.appendChild(fns[i](content));
 		}
@@ -4054,10 +4054,10 @@ Sidebar.prototype.addPaletteFunctions = function(id, title, expanded, fns)
  */
 Sidebar.prototype.addPalette = function(id, title, expanded, onInit)
 {
-	var elt = this.createTitle(title);
+	let elt = this.createTitle(title);
 	this.container.appendChild(elt);
 	
-	var div = document.createElement('div');
+	let div = document.createElement('div');
 	div.className = 'geSidebar';
 	
 	// Disables built-in pan and zoom in IE10 and later
@@ -4078,7 +4078,7 @@ Sidebar.prototype.addPalette = function(id, title, expanded, onInit)
 	
     this.addFoldingHandler(elt, div, onInit);
 	
-	var outer = document.createElement('div');
+	let outer = document.createElement('div');
     outer.appendChild(div);
     this.container.appendChild(outer);
     
@@ -4096,7 +4096,7 @@ Sidebar.prototype.addPalette = function(id, title, expanded, onInit)
  */
 Sidebar.prototype.addFoldingHandler = function(title, content, funct)
 {
-	var initialized = false;
+	let initialized = false;
 
 	title.style.backgroundImage = (content.style.display == 'none') ?
 		'url(\'' + this.collapsedImage + '\')' : 'url(\'' + this.expandedImage + '\')';
@@ -4115,7 +4115,7 @@ Sidebar.prototype.addFoldingHandler = function(title, content, funct)
 				{
 					// Wait cursor does not show up on Mac
 					title.style.cursor = 'wait';
-					var prev = title.innerHTML;
+					let prev = title.innerHTML;
 					title.innerHTML = mxResources.get('loading') + '...';
 					
 					window.setTimeout(function()
@@ -4124,7 +4124,7 @@ Sidebar.prototype.addFoldingHandler = function(title, content, funct)
 						title.style.cursor = '';
 						title.innerHTML = prev;
 
-						var fo = mxClient.NO_FO;
+						let fo = mxClient.NO_FO;
 						mxClient.NO_FO = Editor.prototype.originalNoForeignObject;
 						funct(content, title);
 						mxClient.NO_FO = fo;
@@ -4164,13 +4164,13 @@ Sidebar.prototype.addFoldingHandler = function(title, content, funct)
  */
 Sidebar.prototype.removePalette = function(id)
 {
-	var elts = this.palettes[id];
+	let elts = this.palettes[id];
 	
 	if (elts != null)
 	{
 		this.palettes[id] = null;
 		
-		for (var i = 0; i < elts.length; i++)
+		for (let i = 0; i < elts.length; i++)
 		{
 			this.container.removeChild(elts[i]);
 		}
@@ -4186,17 +4186,17 @@ Sidebar.prototype.removePalette = function(id)
  */
 Sidebar.prototype.addImagePalette = function(id, title, prefix, postfix, items, titles, tags)
 {
-	var showTitles = titles != null;
-	var fns = [];
+	let showTitles = titles != null;
+	let fns = [];
 	
-	for (var i = 0; i < items.length; i++)
+	for (let i = 0; i < items.length; i++)
 	{
 		(mxUtils.bind(this, function(item, title, tmpTags)
 		{
 			if (tmpTags == null)
 			{
-				var slash = item.lastIndexOf('/');
-				var dot = item.lastIndexOf('.');
+				let slash = item.lastIndexOf('/');
+				let dot = item.lastIndexOf('.');
 				tmpTags = item.substring((slash >= 0) ? slash + 1 : 0, (dot >= 0) ? dot : item.length).replace(/[-_]/g, ' ');
 			}
 			
@@ -4213,9 +4213,9 @@ Sidebar.prototype.addImagePalette = function(id, title, prefix, postfix, items,
  */
 Sidebar.prototype.getTagsForStencil = function(packageName, stencilName, moreTags)
 {
-	var tags = packageName.split('.');
+	let tags = packageName.split('.');
 	
-	for (var i = 1; i < tags.length; i++)
+	for (let i = 1; i < tags.length; i++)
 	{
 		tags[i] = tags[i].replace(/_/g, ' ')
 	}
@@ -4240,11 +4240,11 @@ Sidebar.prototype.addStencilPalette = function(id, title, stencilFile, style, ig
 	if (this.addStencilsToIndex)
 	{
 		// LATER: Handle asynchronous loading dependency
-		var fns = [];
+		let fns = [];
 		
 		if (customFns != null)
 		{
-			for (var i = 0; i < customFns.length; i++)
+			for (let i = 0; i < customFns.length; i++)
 			{
 				fns.push(customFns[i]);
 			}
@@ -4254,8 +4254,8 @@ Sidebar.prototype.addStencilPalette = function(id, title, stencilFile, style, ig
 		{
 			if (ignore == null || mxUtils.indexOf(ignore, stencilName) < 0)
 			{
-				var tmp = this.getTagsForStencil(packageName, stencilName);
-				var tmpTags = (tags != null) ? tags[stencilName] : null;
+				let tmp = this.getTagsForStencil(packageName, stencilName);
+				let tmpTags = (tags != null) ? tags[stencilName] : null;
 
 				if (tmpTags != null)
 				{
@@ -4286,7 +4286,7 @@ Sidebar.prototype.addStencilPalette = function(id, title, stencilFile, style, ig
 			
 			if (customFns != null)
 			{
-				for (var i = 0; i < customFns.length; i++)
+				for (let i = 0; i < customFns.length; i++)
 				{
 					customFns[i](content);
 				}
diff --git a/src/examples/grapheditor/www/js/Toolbar.js b/src/examples/grapheditor/www/js/Toolbar.js
index 1e69f5258..5e7423f9c 100644
--- a/src/examples/grapheditor/www/js/Toolbar.js
+++ b/src/examples/grapheditor/www/js/Toolbar.js
@@ -54,19 +54,19 @@ Toolbar.prototype.staticElements = null;
  */
 Toolbar.prototype.init = function()
 {
-	var sw = screen.width;
+	let sw = screen.width;
 	
 	// Takes into account initial compact mode
 	sw -= (screen.height > 740) ? 56 : 0;
 	
 	if (sw >= 700)
 	{
-		var formatMenu = this.addMenu('', mxResources.get('view') + ' (' + mxResources.get('panTooltip') + ')', true, 'viewPanels', null, true);
+		let formatMenu = this.addMenu('', mxResources.get('view') + ' (' + mxResources.get('panTooltip') + ')', true, 'viewPanels', null, true);
 		this.addDropDownArrow(formatMenu, 'geSprite-formatpanel', 38, 50, -4, -3, 36, -8);
 		this.addSeparator();
 	}
 	
-	var viewMenu = this.addMenu('', mxResources.get('zoom') + ' (Alt+Mousewheel)', true, 'viewZoom', null, true);
+	let viewMenu = this.addMenu('', mxResources.get('zoom') + ' (Alt+Mousewheel)', true, 'viewZoom', null, true);
 	viewMenu.showDisabled = true;
 	viewMenu.style.whiteSpace = 'nowrap';
 	viewMenu.style.position = 'relative';
@@ -84,7 +84,7 @@ Toolbar.prototype.init = function()
 	if (sw >= 420)
 	{
 		this.addSeparator();
-		var elts = this.addItems(['zoomIn', 'zoomOut']);
+		let elts = this.addItems(['zoomIn', 'zoomOut']);
 		elts[0].setAttribute('title', mxResources.get('zoomIn') + ' (' + this.editorUi.actions.get('zoomIn').shortcut + ')');
 		elts[1].setAttribute('title', mxResources.get('zoomOut') + ' (' + this.editorUi.actions.get('zoomOut').shortcut + ')');
 	}
@@ -105,13 +105,13 @@ Toolbar.prototype.init = function()
 	this.editorUi.editor.graph.view.addListener(mxEvent.EVENT_SCALE, this.updateZoom);
 	this.editorUi.editor.addListener('resetGraphView', this.updateZoom);
 
-	var elts = this.addItems(['-', 'undo', 'redo']);
+	let elts = this.addItems(['-', 'undo', 'redo']);
 	elts[1].setAttribute('title', mxResources.get('undo') + ' (' + this.editorUi.actions.get('undo').shortcut + ')');
 	elts[2].setAttribute('title', mxResources.get('redo') + ' (' + this.editorUi.actions.get('redo').shortcut + ')');
 	
 	if (sw >= 320)
 	{
-		var elts = this.addItems(['-', 'delete']);
+		let elts = this.addItems(['-', 'delete']);
 		elts[1].setAttribute('title', mxResources.get('delete') + ' (' + this.editorUi.actions.get('delete').shortcut + ')');
 	}
 	
@@ -168,7 +168,7 @@ Toolbar.prototype.init = function()
 	}
 
 	this.addSeparator();
-	var insertMenu = this.addMenu('', mxResources.get('insert') + ' (' + mxResources.get('doubleClickTooltip') + ')', true, 'insert', null, true);
+	let insertMenu = this.addMenu('', mxResources.get('insert') + ' (' + mxResources.get('doubleClickTooltip') + ')', true, 'insert', null, true);
 	this.addDropDownArrow(insertMenu, 'geSprite-plus', 38, 48, -4, -3, 36, -8);
 	this.addTableDropDown();
 };
@@ -183,10 +183,10 @@ Toolbar.prototype.addTableDropDown = function()
 	// KNOWN: All table stuff does not work with undo/redo
 	// KNOWN: Lost focus after click on submenu with text (not icon) in quirks and IE8. This is because the TD seems
 	// to catch the focus on click in these browsers. NOTE: Workaround in mxPopupMenu for icon items (without text).
-	var menuElt = this.addMenuFunction('geIcon geSprite geSprite-table', mxResources.get('table'), false, mxUtils.bind(this, function(menu)
+	let menuElt = this.addMenuFunction('geIcon geSprite geSprite-table', mxResources.get('table'), false, mxUtils.bind(this, function(menu)
 	{
-		var graph = this.editorUi.editor.graph;
-		var cell = graph.getSelectionCell();
+		let graph = this.editorUi.editor.graph;
+		let cell = graph.getSelectionCell();
 
 		if (!graph.isTableCell(cell) && !graph.isTableRow(cell) && !graph.isTable(cell))
 		{
@@ -194,7 +194,7 @@ Toolbar.prototype.addTableDropDown = function()
     	}
 		else
     	{
-			var elt = menu.addItem('', null, mxUtils.bind(this, function()
+			let elt = menu.addItem('', null, mxUtils.bind(this, function()
 			{
 				try
 				{
@@ -291,7 +291,7 @@ Toolbar.prototype.addTableDropDown = function()
 	}
 	
 	// Connects to insert menu enabled state
-	var menu = this.editorUi.menus.get('insert');
+	let menu = this.editorUi.menus.get('insert');
 	
 	// Workaround for possible not a function
 	// when extending HTML objects
@@ -359,9 +359,9 @@ Toolbar.prototype.setFontSize = function(value)
  */
 Toolbar.prototype.createTextToolbar = function()
 {
-	var graph = this.editorUi.editor.graph;
+	let graph = this.editorUi.editor.graph;
 
-	var styleElt = this.addMenu('', mxResources.get('style'), true, 'formatBlock');
+	let styleElt = this.addMenu('', mxResources.get('style'), true, 'formatBlock');
 	styleElt.style.position = 'relative';
 	styleElt.style.whiteSpace = 'nowrap';
 	styleElt.style.overflow = 'hidden';
@@ -408,7 +408,7 @@ Toolbar.prototype.createTextToolbar = function()
 		this.sizeMenu.getElementsByTagName('img')[0].style.top = '5px';
 	}
 	
-	var elts = this.addItems(['-', 'undo', 'redo','-', 'bold', 'italic', 'underline']);
+	let elts = this.addItems(['-', 'undo', 'redo','-', 'bold', 'italic', 'underline']);
 	elts[1].setAttribute('title', mxResources.get('undo') + ' (' + this.editorUi.actions.get('undo').shortcut + ')');
 	elts[2].setAttribute('title', mxResources.get('redo') + ' (' + this.editorUi.actions.get('redo').shortcut + ')');
 	elts[4].setAttribute('title', mxResources.get('bold') + ' (' + this.editorUi.actions.get('bold').shortcut + ')');
@@ -417,7 +417,7 @@ Toolbar.prototype.createTextToolbar = function()
 
 	// KNOWN: Lost focus after click on submenu with text (not icon) in quirks and IE8. This is because the TD seems
 	// to catch the focus on click in these browsers. NOTE: Workaround in mxPopupMenu for icon items (without text).
-	var alignMenu = this.addMenuFunction('', mxResources.get('align'), false, mxUtils.bind(this, function(menu)
+	let alignMenu = this.addMenuFunction('', mxResources.get('align'), false, mxUtils.bind(this, function(menu)
 	{
 		elt = menu.addItem('', null, mxUtils.bind(this, function(evt)
 		{
@@ -480,7 +480,7 @@ Toolbar.prototype.createTextToolbar = function()
 		alignMenu.getElementsByTagName('img')[0].style.top = '5px';
 	}
 	
-	var formatMenu = this.addMenuFunction('', mxResources.get('format'), false, mxUtils.bind(this, function(menu)
+	let formatMenu = this.addMenuFunction('', mxResources.get('format'), false, mxUtils.bind(this, function(menu)
 	{
 		elt = menu.addItem('', null, this.editorUi.actions.get('subscript').funct,
 			null, 'geIcon geSprite geSprite-subscript');
@@ -536,7 +536,7 @@ Toolbar.prototype.createTextToolbar = function()
 	
 	this.addSeparator();
 	
-	var insertMenu = this.addMenuFunction('', mxResources.get('insert'), true, mxUtils.bind(this, function(menu)
+	let insertMenu = this.addMenuFunction('', mxResources.get('insert'), true, mxUtils.bind(this, function(menu)
 	{
 		menu.addItem(mxResources.get('insertLink'), null, mxUtils.bind(this, function()
 		{
@@ -574,23 +574,23 @@ Toolbar.prototype.createTextToolbar = function()
 	// KNOWN: All table stuff does not work with undo/redo
 	// KNOWN: Lost focus after click on submenu with text (not icon) in quirks and IE8. This is because the TD seems
 	// to catch the focus on click in these browsers. NOTE: Workaround in mxPopupMenu for icon items (without text).
-	var elt = this.addMenuFunction('geIcon geSprite geSprite-table', mxResources.get('table'), false, mxUtils.bind(this, function(menu)
+	let elt = this.addMenuFunction('geIcon geSprite geSprite-table', mxResources.get('table'), false, mxUtils.bind(this, function(menu)
 	{
-		var elt = graph.getSelectedElement();
-		var cell = graph.getParentByNames(elt, ['TD', 'TH'], graph.cellEditor.text2);
-		var row = graph.getParentByName(elt, 'TR', graph.cellEditor.text2);
+		let elt = graph.getSelectedElement();
+		let cell = graph.getParentByNames(elt, ['TD', 'TH'], graph.cellEditor.text2);
+		let row = graph.getParentByName(elt, 'TR', graph.cellEditor.text2);
 
 		if (row == null)
     	{
 			function createTable(rows, cols)
 			{
-				var html = ['<table>'];
+				let html = ['<table>'];
 				
-				for (var i = 0; i < rows; i++)
+				for (let i = 0; i < rows; i++)
 				{
 					html.push('<tr>');
 					
-					for (var j = 0; j < cols; j++)
+					for (let j = 0; j < cols; j++)
 					{
 						html.push('<td><br></td>');
 					}
@@ -607,7 +607,7 @@ Toolbar.prototype.createTextToolbar = function()
     	}
 		else
     	{
-			var table = graph.getParentByName(row, 'TABLE', graph.cellEditor.text2);
+			let table = graph.getParentByName(row, 'TABLE', graph.cellEditor.text2);
 
 			elt = menu.addItem('', null, mxUtils.bind(this, function()
 			{
@@ -693,7 +693,7 @@ Toolbar.prototype.createTextToolbar = function()
 			elt = menu.addItem('', null, mxUtils.bind(this, function()
 			{
 				// Converts rgb(r,g,b) values
-				var color = table.style.borderColor.replace(
+				let color = table.style.borderColor.replace(
 					    /\brgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/g,
 					    function($0, $1, $2, $3) {
 					        return "#" + ("0"+Number($1).toString(16)).substr(-2) + ("0"+Number($2).toString(16)).substr(-2) + ("0"+Number($3).toString(16)).substr(-2);
@@ -719,7 +719,7 @@ Toolbar.prototype.createTextToolbar = function()
 			elt = menu.addItem('', null, mxUtils.bind(this, function()
 			{
 				// Converts rgb(r,g,b) values
-				var color = table.style.backgroundColor.replace(
+				let color = table.style.backgroundColor.replace(
 					    /\brgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/g,
 					    function($0, $1, $2, $3) {
 					        return "#" + ("0"+Number($1).toString(16)).substr(-2) + ("0"+Number($2).toString(16)).substr(-2) + ("0"+Number($3).toString(16)).substr(-2);
@@ -740,9 +740,9 @@ Toolbar.prototype.createTextToolbar = function()
 			
 			elt = menu.addItem('', null, mxUtils.bind(this, function()
 			{
-				var value = table.getAttribute('cellPadding') || 0;
+				let value = table.getAttribute('cellPadding') || 0;
 				
-				var dlg = new FilenameDialog(this.editorUi, value, mxResources.get('apply'), mxUtils.bind(this, function(newValue)
+				let dlg = new FilenameDialog(this.editorUi, value, mxResources.get('apply'), mxUtils.bind(this, function(newValue)
 				{
 					if (newValue != null && newValue.length > 0)
 					{
@@ -805,8 +805,8 @@ Toolbar.prototype.hideMenu = function()
  */
 Toolbar.prototype.addMenu = function(label, tooltip, showLabels, name, c, showAll, ignoreState)
 {
-	var menu = this.editorUi.menus.get(name);
-	var elt = this.addMenuFunction(label, tooltip, showLabels, function()
+	let menu = this.editorUi.menus.get(name);
+	let elt = this.addMenuFunction(label, tooltip, showLabels, function()
 	{
 		menu.funct.apply(menu, arguments);
 	}, c, showAll);
@@ -837,7 +837,7 @@ Toolbar.prototype.addMenuFunction = function(label, tooltip, showLabels, funct,
  */
 Toolbar.prototype.addMenuFunctionInContainer = function(container, label, tooltip, showLabels, funct, showAll)
 {
-	var elt = (showLabels) ? this.createLabel(label) : this.createButton(label);
+	let elt = (showLabels) ? this.createLabel(label) : this.createButton(label);
 	this.initElement(elt, tooltip);
 	this.addMenuHandler(elt, showLabels, funct, showAll);
 	container.appendChild(elt);
@@ -851,7 +851,7 @@ Toolbar.prototype.addMenuFunctionInContainer = function(container, label, toolti
 Toolbar.prototype.addSeparator = function(c)
 {
 	c = (c != null) ? c : this.container;
-	var elt = document.createElement('div');
+	let elt = document.createElement('div');
 	elt.className = 'geSeparator';
 	c.appendChild(elt);
 	
@@ -863,11 +863,11 @@ Toolbar.prototype.addSeparator = function(c)
  */
 Toolbar.prototype.addItems = function(keys, c, ignoreDisabled)
 {
-	var items = [];
+	let items = [];
 	
-	for (var i = 0; i < keys.length; i++)
+	for (let i = 0; i < keys.length; i++)
 	{
-		var key = keys[i];
+		let key = keys[i];
 		
 		if (key == '-')
 		{
@@ -887,12 +887,12 @@ Toolbar.prototype.addItems = function(keys, c, ignoreDisabled)
  */
 Toolbar.prototype.addItem = function(sprite, key, c, ignoreDisabled)
 {
-	var action = this.editorUi.actions.get(key);
-	var elt = null;
+	let action = this.editorUi.actions.get(key);
+	let elt = null;
 	
 	if (action != null)
 	{
-		var tooltip = action.label;
+		let tooltip = action.label;
 		
 		if (action.shortcut != null)
 		{
@@ -922,7 +922,7 @@ Toolbar.prototype.addItem = function(sprite, key, c, ignoreDisabled)
  */
 Toolbar.prototype.addButton = function(classname, tooltip, funct, c)
 {
-	var elt = this.createButton(classname);
+	let elt = this.createButton(classname);
 	c = (c != null) ? c : this.container;
 	
 	this.initElement(elt, tooltip);
@@ -951,7 +951,7 @@ Toolbar.prototype.initElement = function(elt, tooltip)
  */
 Toolbar.prototype.addEnabledState = function(elt)
 {
-	var classname = elt.className;
+	let classname = elt.className;
 	
 	elt.setEnabled = function(value)
 	{
@@ -1001,10 +1001,10 @@ Toolbar.prototype.addClickHandler = function(elt, funct)
  */
 Toolbar.prototype.createButton = function(classname)
 {
-	var elt = document.createElement('a');
+	let elt = document.createElement('a');
 	elt.className = 'geButton';
 
-	var inner = document.createElement('div');
+	let inner = document.createElement('div');
 	
 	if (classname != null)
 	{
@@ -1021,7 +1021,7 @@ Toolbar.prototype.createButton = function(classname)
  */
 Toolbar.prototype.createLabel = function(label, tooltip)
 {
-	var elt = document.createElement('a');
+	let elt = document.createElement('a');
 	elt.className = 'geLabel';
 	mxUtils.write(elt, label);
 	
@@ -1035,9 +1035,9 @@ Toolbar.prototype.addMenuHandler = function(elt, showLabels, funct, showAll)
 {
 	if (funct != null)
 	{
-		var graph = this.editorUi.editor.graph;
-		var menu = null;
-		var show = true;
+		let graph = this.editorUi.editor.graph;
+		let menu = null;
+		let show = true;
 
 		mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt)
 		{
@@ -1050,7 +1050,7 @@ Toolbar.prototype.addMenuHandler = function(elt, showLabels, funct, showAll)
 				menu.labels = showLabels;
 				menu.autoExpand = true;
 				
-				var offset = mxUtils.getOffset(elt);
+				let offset = mxUtils.getOffset(elt);
 				menu.popup(offset.x, offset.y + elt.offsetHeight, null, evt);
 				this.editorUi.setCurrentMenu(menu, elt);
 				
diff --git a/src/examples/grapheditor/www/jscolor/jscolor.js b/src/examples/grapheditor/www/jscolor/jscolor.js
index 0703f8121..025829d78 100644
--- a/src/examples/grapheditor/www/jscolor/jscolor.js
+++ b/src/examples/grapheditor/www/jscolor/jscolor.js
@@ -10,7 +10,7 @@
  */
 
 
-var mxJSColor = {
+let mxJSColor = {
 
 	dir : '', // location of jscolor directory (leave empty to autodetect)
 	bindClass : 'color', // class name
@@ -32,7 +32,7 @@ var mxJSColor = {
 
 	getDir : function() {
 		if(!mxJSColor.dir) {
-			var detected = mxJSColor.detectDir();
+			let detected = mxJSColor.detectDir();
 			mxJSColor.dir = detected!==false ? detected : 'jscolor/';
 		}
 		return mxJSColor.dir;
@@ -40,18 +40,18 @@ var mxJSColor = {
 
 
 	detectDir : function() {
-		var base = location.href;
+		let base = location.href;
 
-		var e = document.getElementsByTagName('base');
+		let e = document.getElementsByTagName('base');
 		for(var i=0; i<e.length; i+=1) {
 			if(e[i].href) { base = e[i].href; }
 		}
 
-		var e = document.getElementsByTagName('script');
+		let e = document.getElementsByTagName('script');
 		for(var i=0; i<e.length; i+=1) {
 			if(e[i].src && /(^|\/)jscolor\.js([?#].*)?$/i.test(e[i].src)) {
-				var src = new mxJSColor.URI(e[i].src);
-				var srcAbs = src.toAbsolute(base);
+				let src = new mxJSColor.URI(e[i].src);
+				let srcAbs = src.toAbsolute(base);
 				srcAbs.path = srcAbs.path.replace(/[^\/]+$/, ''); // remove filename
 				srcAbs.query = null;
 				srcAbs.fragment = null;
@@ -114,11 +114,11 @@ var mxJSColor = {
 			return;
 		}
 		if(document.createEvent) {
-			var ev = document.createEvent('HTMLEvents');
+			let ev = document.createEvent('HTMLEvents');
 			ev.initEvent(evnt, true, true);
 			el.dispatchEvent(ev);
 		} else if(document.createEventObject) {
-			var ev = document.createEventObject();
+			let ev = document.createEventObject();
 			el.fireEvent('on'+evnt, ev);
 		} else if(el['on'+evnt]) { // alternatively use the traditional event model (IE5)
 			el['on'+evnt]();
@@ -149,7 +149,7 @@ var mxJSColor = {
 
 
 	getRelMousePos : function(e) {
-		var x = 0, y = 0;
+		let x = 0, y = 0;
 		if (!e) { e = window.event; }
 		if (typeof e.offsetX === 'number') {
 			x = e.offsetX;
@@ -197,7 +197,7 @@ var mxJSColor = {
 		this.fragment = null;
 
 		this.parse = function(uri) {
-			var m = uri.match(/^(([A-Za-z][0-9A-Za-z+.-]*)(:))?((\/\/)([^\/?#]*))?([^?#]*)((\?)([^#]*))?((#)(.*))?/);
+			let m = uri.match(/^(([A-Za-z][0-9A-Za-z+.-]*)(:))?((\/\/)([^\/?#]*))?([^?#]*)((\?)([^#]*))?((#)(.*))?/);
 			this.scheme = m[3] ? m[2] : null;
 			this.authority = m[5] ? m[6] : null;
 			this.path = m[7];
@@ -207,7 +207,7 @@ var mxJSColor = {
 		};
 
 		this.toString = function() {
-			var result = '';
+			let result = '';
 			if(this.scheme !== null) { result = result + this.scheme + ':'; }
 			if(this.authority !== null) { result = result + '//' + this.authority; }
 			if(this.path !== null) { result = result + this.path; }
@@ -217,9 +217,9 @@ var mxJSColor = {
 		};
 
 		this.toAbsolute = function(base) {
-			var base = new mxJSColor.URI(base);
-			var r = this;
-			var t = new mxJSColor.URI;
+			let base = new mxJSColor.URI(base);
+			let r = this;
+			let t = new mxJSColor.URI;
 
 			if(base.scheme === null) { return false; }
 
@@ -268,7 +268,7 @@ var mxJSColor = {
 		};
 
 		function removeDotSegments(path) {
-			var out = '';
+			let out = '';
 			while(path) {
 				if(path.substr(0,3)==='../' || path.substr(0,2)==='./') {
 					path = path.replace(/^\.+/,'').substr(1);
@@ -280,7 +280,7 @@ var mxJSColor = {
 				} else if(path==='.' || path==='..') {
 					path = '';
 				} else {
-					var rm = path.match(/^\/?[^\/]*/)[0];
+					let rm = path.match(/^\/?[^\/]*/)[0];
 					path = path.substr(rm.length);
 					out = out + rm;
 				}
@@ -297,7 +297,7 @@ var mxJSColor = {
 
 	/*
 	 * Usage example:
-	 * var myColor = new mxJSColor.color(myInputElement)
+	 * let myColor = new mxJSColor.color(myInputElement)
 	 */
 
 	color : function(target, prop) {
@@ -347,11 +347,11 @@ var mxJSColor = {
 
 		this.showPicker = function() {
 			if(!isPickerOwner()) {
-				var tp = mxJSColor.getElementPos(target); // target pos
-				var ts = mxJSColor.getElementSize(target); // target size
-				var vp = mxJSColor.getViewPos(); // view pos
-				var vs = mxJSColor.getViewSize(); // view size
-				var ps = getPickerDims(this); // picker size
+				let tp = mxJSColor.getElementPos(target); // target pos
+				let ts = mxJSColor.getElementSize(target); // target size
+				let vp = mxJSColor.getViewPos(); // view pos
+				let vs = mxJSColor.getViewSize(); // view size
+				let ps = getPickerDims(this); // picker size
 				var a, b, c;
 				switch(this.pickerPosition.toLowerCase()) {
 					case 'left': a=1; b=0; c=-1; break;
@@ -359,16 +359,16 @@ var mxJSColor = {
 					case 'top':  a=0; b=1; c=-1; break;
 					default:     a=0; b=1; c=1; break;
 				}
-				var l = (ts[b]+ps[b])/2;
+				let l = (ts[b]+ps[b])/2;
 
 				// picker pos
 				if (!this.pickerSmartPosition) {
-					var pp = [
+					let pp = [
 						tp[a],
 						tp[b]+ts[b]-l+l*c
 					];
 				} else {
-					var pp = [
+					let pp = [
 						-vp[a]+tp[a]+ps[a] > vs[a] ?
 							(-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) :
 							tp[a],
@@ -411,7 +411,7 @@ var mxJSColor = {
 
 		this.exportColor = function(flags) {
 			if(!(flags & leaveValue) && valueElement) {
-				var value = this.toString();
+				let value = this.toString();
 				if(this.caps) { value = value.toUpperCase(); }
 				if(this.hash) { value = '#'+value; }
 				valueElement.value = value;
@@ -452,7 +452,7 @@ var mxJSColor = {
 			r<0 && (r=0) || r>1 && (r=1);
 			g<0 && (g=0) || g>1 && (g=1);
 			b<0 && (b=0) || b>1 && (b=1);
-			var hsv = RGB_HSV(
+			let hsv = RGB_HSV(
 				r===null ? this.rgb[0] : (this.rgb[0]=r),
 				g===null ? this.rgb[1] : (this.rgb[1]=g),
 				b===null ? this.rgb[2] : (this.rgb[2]=b)
@@ -469,7 +469,7 @@ var mxJSColor = {
 
 
 		this.fromString = function(hex, flags) {
-			var m = hex.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i);
+			let m = hex.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i);
 			if(!m) {
 				return false;
 			} else {
@@ -503,21 +503,21 @@ var mxJSColor = {
 
 
 		function RGB_HSV(r, g, b) {
-			var n = Math.min(Math.min(r,g),b);
-			var v = Math.max(Math.max(r,g),b);
-			var m = v - n;
+			let n = Math.min(Math.min(r,g),b);
+			let v = Math.max(Math.max(r,g),b);
+			let m = v - n;
 			if(m === 0) { return [ null, 0, v ]; }
-			var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m);
+			let h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m);
 			return [ h===6?0:h, m/v, v ];
 		}
 
 
 		function HSV_RGB(h, s, v) {
 			if(h === null) { return [ v, v, v ]; }
-			var i = Math.floor(h);
-			var f = i%2 ? h-i : 1-(h-i);
-			var m = v * (1 - s);
-			var n = v * (1 - s*f);
+			let i = Math.floor(h);
+			let f = i%2 ? h-i : 1-(h-i);
+			let m = v * (1 - s);
+			let n = v * (1 - s*f);
 			switch(i) {
 				case 6:
 				case 0: return [v,n,m];
@@ -552,7 +552,7 @@ var mxJSColor = {
 					btnT : document.createTextNode(THIS.pickerCloseText)
 				};
 				for(var i=0,segSize=4; i<mxJSColor.images.sld[1]; i+=segSize) {
-					var seg = document.createElement('div');
+					let seg = document.createElement('div');
 					seg.style.height = segSize+'px';
 					seg.style.fontSize = '1px';
 					seg.style.lineHeight = '0';
@@ -570,7 +570,7 @@ var mxJSColor = {
 				mxJSColor.picker.boxB.appendChild(mxJSColor.picker.box);
 			}
 
-			var p = mxJSColor.picker;
+			let p = mxJSColor.picker;
 
 			// controls interaction
 			p.box.onmouseup =
@@ -609,7 +609,7 @@ var mxJSColor = {
 			};
 
 			// picker
-			var dims = getPickerDims(THIS);
+			let dims = getPickerDims(THIS);
 			p.box.style.width = dims[0] + 'px';
 			p.box.style.height = dims[1] + 'px';
 
@@ -670,8 +670,8 @@ var mxJSColor = {
 
 			// "close" button
 			function setBtnBorder() {
-				var insetColors = THIS.pickerInsetColor.split(/\s+/);
-				var pickerOutsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];
+				let insetColors = THIS.pickerInsetColor.split(/\s+/);
+				let pickerOutsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];
 				p.btn.style.borderColor = pickerOutsetColor;
 			}
 			p.btn.style.display = THIS.pickerClosable ? 'block' : 'none';
@@ -697,8 +697,8 @@ var mxJSColor = {
 
 			// load images in optimal order
 			switch(modeID) {
-				case 0: var padImg = 'hs.png'; break;
-				case 1: var padImg = 'hv.png'; break;
+				case 0: let padImg = 'hs.png'; break;
+				case 1: let padImg = 'hv.png'; break;
 			}
 			p.padM.style.backgroundImage = "url('"+mxJSColor.getDir()+"cross.gif')";
 			p.padM.style.backgroundRepeat = "no-repeat";
@@ -718,7 +718,7 @@ var mxJSColor = {
 
 
 		function getPickerDims(o) {
-			var dims = [
+			let dims = [
 				2*o.pickerInset + 2*o.pickerFace + mxJSColor.images.pad[0] +
 					(o.slider ? 2*o.pickerInset + 2*mxJSColor.images.arrow[0] + mxJSColor.images.sld[0] : 0),
 				o.pickerClosable ?
@@ -732,21 +732,21 @@ var mxJSColor = {
 		function redrawPad() {
 			// redraw the pad pointer
 			switch(modeID) {
-				case 0: var yComponent = 1; break;
-				case 1: var yComponent = 2; break;
+				case 0: let yComponent = 1; break;
+				case 1: let yComponent = 2; break;
 			}
-			var x = Math.round((THIS.hsv[0]/6) * (mxJSColor.images.pad[0]-1));
-			var y = Math.round((1-THIS.hsv[yComponent]) * (mxJSColor.images.pad[1]-1));
+			let x = Math.round((THIS.hsv[0]/6) * (mxJSColor.images.pad[0]-1));
+			let y = Math.round((1-THIS.hsv[yComponent]) * (mxJSColor.images.pad[1]-1));
 			mxJSColor.picker.padM.style.backgroundPosition =
 				(THIS.pickerFace+THIS.pickerInset+x - Math.floor(mxJSColor.images.cross[0]/2)) + 'px ' +
 				(THIS.pickerFace+THIS.pickerInset+y - Math.floor(mxJSColor.images.cross[1]/2)) + 'px';
 
 			// redraw the slider image
-			var seg = mxJSColor.picker.sld.childNodes;
+			let seg = mxJSColor.picker.sld.childNodes;
 
 			switch(modeID) {
 				case 0:
-					var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 1);
+					let rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 1);
 					for(var i=0; i<seg.length; i+=1) {
 						seg[i].style.backgroundColor = 'rgb('+
 							(rgb[0]*(1-i/seg.length)*100)+'%,'+
@@ -756,8 +756,8 @@ var mxJSColor = {
 					break;
 				case 1:
 					var rgb, s, c = [ THIS.hsv[2], 0, 0 ];
-					var i = Math.floor(THIS.hsv[0]);
-					var f = i%2 ? THIS.hsv[0]-i : 1-(THIS.hsv[0]-i);
+					let i = Math.floor(THIS.hsv[0]);
+					let f = i%2 ? THIS.hsv[0]-i : 1-(THIS.hsv[0]-i);
 					switch(i) {
 						case 6:
 						case 0: rgb=[0,1,2]; break;
@@ -784,10 +784,10 @@ var mxJSColor = {
 		function redrawSld() {
 			// redraw the slider pointer
 			switch(modeID) {
-				case 0: var yComponent = 2; break;
-				case 1: var yComponent = 1; break;
+				case 0: let yComponent = 2; break;
+				case 1: let yComponent = 1; break;
 			}
-			var y = Math.round((1-THIS.hsv[yComponent]) * (mxJSColor.images.sld[1]-1));
+			let y = Math.round((1-THIS.hsv[yComponent]) * (mxJSColor.images.sld[1]-1));
 			mxJSColor.picker.sldM.style.backgroundPosition =
 				'0 ' + (THIS.pickerFace+THIS.pickerInset+y - Math.floor(mxJSColor.images.arrow[1]/2)) + 'px';
 		}
@@ -816,9 +816,9 @@ var mxJSColor = {
 
 
 		function setPad(e) {
-			var mpos = mxJSColor.getRelMousePos(e);
-			var x = mpos.x - THIS.pickerFace - THIS.pickerInset;
-			var y = mpos.y - THIS.pickerFace - THIS.pickerInset;
+			let mpos = mxJSColor.getRelMousePos(e);
+			let x = mpos.x - THIS.pickerFace - THIS.pickerInset;
+			let y = mpos.y - THIS.pickerFace - THIS.pickerInset;
 			switch(modeID) {
 				case 0: THIS.fromHSV(x*(6/(mxJSColor.images.pad[0]-1)), 1 - y/(mxJSColor.images.pad[1]-1), null, leaveSld); break;
 				case 1: THIS.fromHSV(x*(6/(mxJSColor.images.pad[0]-1)), null, 1 - y/(mxJSColor.images.pad[1]-1), leaveSld); break;
@@ -827,8 +827,8 @@ var mxJSColor = {
 
 
 		function setSld(e) {
-			var mpos = mxJSColor.getRelMousePos(e);
-			var y = mpos.y - THIS.pickerFace - THIS.pickerInset;
+			let mpos = mxJSColor.getRelMousePos(e);
+			let y = mpos.y - THIS.pickerFace - THIS.pickerInset;
 			switch(modeID) {
 				case 0: THIS.fromHSV(null, null, 1 - y/(mxJSColor.images.sld[1]-1), leavePad); break;
 				case 1: THIS.fromHSV(null, 1 - y/(mxJSColor.images.sld[1]-1), null, leavePad); break;
@@ -847,9 +847,9 @@ var mxJSColor = {
 		}
 
 
-		var THIS = this;
-		var modeID = this.pickerMode.toLowerCase()==='hvs' ? 1 : 0;
-		var abortBlur = false;
+		let THIS = this;
+		let modeID = this.pickerMode.toLowerCase()==='hvs' ? 1 : 0;
+		let abortBlur = false;
 		var
 			valueElement = mxJSColor.fetchElement(this.valueElement),
 			styleElement = mxJSColor.fetchElement(this.styleElement);
@@ -876,7 +876,7 @@ var mxJSColor = {
 
 		// valueElement
 		if(valueElement) {
-			var updateField = function() {
+			let updateField = function() {
 				THIS.fromString(valueElement.value, leaveValue);
 				dispatchImmediateChange();
 			};
diff --git a/src/examples/grapheditor/www/open.html b/src/examples/grapheditor/www/open.html
index ac5f4e462..9bb452e8c 100644
--- a/src/examples/grapheditor/www/open.html
+++ b/src/examples/grapheditor/www/open.html
@@ -9,7 +9,7 @@
 	// Reads files locally
 	function handleFiles(files)
 	{
-		for (var i = 0; i < files.length; i++)
+		for (let i = 0; i < files.length; i++)
 		{
 			(function(file)
 			{
@@ -19,7 +19,7 @@
 					window.parent.open(window.parent.location.href);
 				}
 				
-				var reader = new FileReader();
+				let reader = new FileReader();
 				reader.onload = function(e)
 				{
 					window.parent.openFile.setData(e.target.result, file.name);
@@ -36,7 +36,7 @@
 	// Handles form-submit by preparing to process response
 	function handleSubmit()
 	{
-		var form = window.openForm || document.getElementById('openForm');
+		let form = window.openForm || document.getElementById('openForm');
 		
 		// Checks for support of the File API for local file access
 		// except for files where the parse is on the server
@@ -79,8 +79,8 @@
 	
 	function fileChanged()
 	{
-		var form = window.openForm || document.getElementById('openForm');
-		var openButton = document.getElementById('openButton');
+		let form = window.openForm || document.getElementById('openForm');
+		let openButton = document.getElementById('openButton');
 		
 		if (form.upfile.value.length > 0)
 		{
@@ -97,7 +97,7 @@
 		if (window.parent.Editor.useLocalStorage)
 		{
 			document.body.innerHTML = '';
-			var div = document.createElement('div');
+			let div = document.createElement('div');
 			div.style.fontFamily = 'Arial';
 			
 			if (localStorage.length == 0)
@@ -106,9 +106,9 @@
 			}
 			else
 			{
-				var keys = [];
+				let keys = [];
 				
-				for (var i = 0; i < localStorage.length; i++)
+				for (let i = 0; i < localStorage.length; i++)
 				{
 					keys.push(localStorage.key(i));
 				}
@@ -119,17 +119,17 @@
 				    return a.toLowerCase().localeCompare(b.toLowerCase());
 				});
 				
-				for (var i = 0; i < keys.length; i++)
+				for (let i = 0; i < keys.length; i++)
 				{
-					var link = document.createElement('a');
+					let link = document.createElement('a');
 					link.style.fontDecoration = 'none';
 					link.style.fontSize = '14pt';
-					var key = keys[i];
+					let key = keys[i];
 					window.parent.mxUtils.write(link, key);
 					link.style.cursor = 'pointer';
 					div.appendChild(link);
 					
-					var img = document.createElement('span');
+					let img = document.createElement('span');
 					img.className = 'geSprite geSprite-delete';
 					img.style.position = 'relative';
 					img.style.cursor = 'pointer';
@@ -171,7 +171,7 @@
 			window.parent.mxUtils.br(div);
 			window.parent.mxUtils.br(div);
 			
-			var cancelBtn = window.parent.mxUtils.button(window.parent.mxResources.get('cancel'), function()
+			let cancelBtn = window.parent.mxUtils.button(window.parent.mxResources.get('cancel'), function()
 			{
 				hideWindow(true);
 			});
@@ -182,14 +182,14 @@
 		}
 		else
 		{
-			var editLink = document.getElementById('editLink');
-			var openButton = document.getElementById('openButton');
+			let editLink = document.getElementById('editLink');
+			let openButton = document.getElementById('openButton');
 			openButton.value = window.parent.mxResources.get(window.parent.openKey || 'open');
-			var cancelButton = document.getElementById('cancelButton');
+			let cancelButton = document.getElementById('cancelButton');
 			cancelButton.value = window.parent.mxResources.get('cancel');
-			var supportedText = document.getElementById('openSupported');
+			let supportedText = document.getElementById('openSupported');
 			supportedText.innerHTML = window.parent.mxResources.get('openSupported');
-			var form = window.openForm || document.getElementById('openForm');
+			let form = window.openForm || document.getElementById('openForm');
 
 			form.setAttribute('action', window.parent.OPEN_URL);
 		}
diff --git a/src/examples/grapheditor/www/viewer.html b/src/examples/grapheditor/www/viewer.html
index ceaad0dd2..cb7f19b98 100644
--- a/src/examples/grapheditor/www/viewer.html
+++ b/src/examples/grapheditor/www/viewer.html
@@ -6,20 +6,20 @@
 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
 	<script type="text/javascript">
-		var STENCIL_PATH = 'stencils';
-		var IMAGE_PATH = 'images';
-		var STYLE_PATH = 'styles';
+		let STENCIL_PATH = 'stencils';
+		let IMAGE_PATH = 'images';
+		let STYLE_PATH = 'styles';
 	
-		var urlParams = (function(url)
+		let urlParams = (function(url)
 		{
-			var result = {};
-			var idx = url.lastIndexOf('?');
+			let result = {};
+			let idx = url.lastIndexOf('?');
 	
 			if (idx > 0)
 			{
-				var params = url.substring(idx + 1).split('&');
+				let params = url.substring(idx + 1).split('&');
 				
-				for (var i = 0; i < params.length; i++)
+				for (let i = 0; i < params.length; i++)
 				{
 					idx = params[i].indexOf('=');
 					
@@ -40,8 +40,8 @@
 		// files (the special bundle and the default bundle) is disabled to
 		// save a GET request. This requires that all resources be present in
 		// each properties file since only one file is loaded.
-		var mxLoadResources = false;
-		var mxBasePath = '../../../src';
+		let mxLoadResources = false;
+		let mxBasePath = '../../../src';
 	</script>
 	<script type="text/javascript" src="sanitizer/sanitizer.min.js"></script>
 	<script type="text/javascript" src="../../../src/js/mxClient.js"></script>
@@ -56,14 +56,14 @@
 	<button onclick="show(document.getElementById('textarea').value);return false;">Show</button>
 	<div id="graph"></div>
 	<script type="text/javascript">
-		var graph = new Graph(document.getElementById('graph'));
+		let graph = new Graph(document.getElementById('graph'));
 		graph.resizeContainer = true;
 		graph.setEnabled(false);
 
 		function show(data)
 		{
-			var xmlDoc = mxUtils.parseXml(data);
-			var codec = new mxCodec(xmlDoc);
+			let xmlDoc = mxUtils.parseXml(data);
+			let codec = new mxCodec(xmlDoc);
 			codec.decode(xmlDoc.documentElement, graph.getModel());
 		};
 	</script>
diff --git a/src/examples/graphlayout.html b/src/examples/graphlayout.html
index 85d587333..d820a42df 100644
--- a/src/examples/graphlayout.html
+++ b/src/examples/graphlayout.html
@@ -35,13 +35,13 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Disables basic selection and cell handling
 				graph.setEnabled(false);
 				
 				// Changes the default vertex style in-place
-				var style = graph.getStylesheet().getDefaultVertexStyle();
+				let style = graph.getStylesheet().getDefaultVertexStyle();
 				style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_ELLIPSE;
 				style[mxConstants.STYLE_PERIMETER] = mxPerimeter.EllipsePerimeter;
 				style[mxConstants.STYLE_GRADIENTCOLOR] = 'white';
@@ -63,17 +63,17 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 
 				// Creates a layout algorithm to be used
 				// with the graph
-				var layout = new mxFastOrganicLayout(graph);
+				let layout = new mxFastOrganicLayout(graph);
 
 				// Moves stuff wider apart than usual
 				layout.forceConstant = 80;
 
 				// Reference to the transition checkbox
-				var animate = document.getElementById('animate');
+				let animate = document.getElementById('animate');
 				
 				// Adds a button to execute the layout
 				document.body.insertBefore(mxUtils.button('Circle Layout',
@@ -84,7 +84,7 @@
 						{
 							// Creates a layout algorithm to be used
 							// with the graph
-							var circleLayout = new mxCircleLayout(graph);
+							let circleLayout = new mxCircleLayout(graph);
 							circleLayout.execute(parent);
 						}
 						catch (e)
@@ -95,7 +95,7 @@
 						{
 							if (animate.checked)
 							{
-								var morph = new mxMorphing(graph);
+								let morph = new mxMorphing(graph);
 								morph.addListener(mxEvent.DONE, function()
 								{
 									graph.getModel().endUpdate();
@@ -129,7 +129,7 @@
 							if (animate.checked)
 							{
 								// Default values are 6, 1.5, 20
-								var morph = new mxMorphing(graph, 10, 1.7, 20);
+								let morph = new mxMorphing(graph, 10, 1.7, 20);
 								morph.addListener(mxEvent.DONE, function()
 								{
 									graph.getModel().endUpdate();
@@ -146,8 +146,8 @@
 
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
-				var w = 30;
-				var h = 30;
+				let w = 30;
+				let h = 30;
 				try
 				{
 					var v1 = graph.insertVertex(parent, null, 'A', 0, 0, w, h);
diff --git a/src/examples/grid.html b/src/examples/grid.html
index fe94d49b5..e59deebd0 100644
--- a/src/examples/grid.html
+++ b/src/examples/grid.html
@@ -36,7 +36,7 @@
 				mxEvent.disableContextMenu(document.body);
 
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.graphHandler.scaleGrid = true;
 				graph.setPanning(true);
 
@@ -48,37 +48,37 @@
 				{
 					try
 					{
-						var canvas = document.createElement('canvas');
+						let canvas = document.createElement('canvas');
 						canvas.style.position = 'absolute';
 						canvas.style.top = '0px';
 						canvas.style.left = '0px';
 						canvas.style.zIndex = -1;
 						graph.container.appendChild(canvas);
 						
-						var ctx = canvas.getContext('2d');
+						let ctx = canvas.getContext('2d');
 						
 						// Modify event filtering to accept canvas as container
-						var mxGraphViewIsContainerEvent = mxGraphView.prototype.isContainerEvent;
+						let mxGraphViewIsContainerEvent = mxGraphView.prototype.isContainerEvent;
 						mxGraphView.prototype.isContainerEvent = function(evt)
 						{
 							return mxGraphViewIsContainerEvent.apply(this, arguments) ||
 								mxEvent.getSource(evt) == canvas;
 						};
 						
-						var s = 0;
-						var gs = 0;
-						var tr = new mxPoint();
-						var w = 0;
-						var h = 0;
+						let s = 0;
+						let gs = 0;
+						let tr = new mxPoint();
+						let w = 0;
+						let h = 0;
 
 						function repaintGrid()
 						{
 							if (ctx != null)
 							{
-								var bounds = graph.getGraphBounds();
-								var width = Math.max(bounds.x + bounds.width, graph.container.clientWidth);
-								var height = Math.max(bounds.y + bounds.height, graph.container.clientHeight);
-								var sizeChanged = width != w || height != h;
+								let bounds = graph.getGraphBounds();
+								let width = Math.max(bounds.x + bounds.width, graph.container.clientWidth);
+								let height = Math.max(bounds.y + bounds.height, graph.container.clientHeight);
+								let sizeChanged = width != w || height != h;
 								
 								if (graph.view.scale != s || graph.view.translate.x != tr.x || graph.view.translate.y != tr.y ||
 									gs != graph.gridSize || sizeChanged)
@@ -100,49 +100,49 @@
 										canvas.setAttribute('height', h);
 									}
 	
-									var tx = tr.x * s;
-									var ty = tr.y * s;
+									let tx = tr.x * s;
+									let ty = tr.y * s;
 	
 									// Sets the distance of the grid lines in pixels
-									var minStepping = graph.gridSize;
-									var stepping = minStepping * s;
+									let minStepping = graph.gridSize;
+									let stepping = minStepping * s;
 	
 									if (stepping < minStepping)
 									{
-										var count = Math.round(Math.ceil(minStepping / stepping) / 2) * 2;
+										let count = Math.round(Math.ceil(minStepping / stepping) / 2) * 2;
 										stepping = count * stepping;
 									}
 	
-									var xs = Math.floor((0 - tx) / stepping) * stepping + tx;
-									var xe = Math.ceil(w / stepping) * stepping;
-									var ys = Math.floor((0 - ty) / stepping) * stepping + ty;
-									var ye = Math.ceil(h / stepping) * stepping;
+									let xs = Math.floor((0 - tx) / stepping) * stepping + tx;
+									let xe = Math.ceil(w / stepping) * stepping;
+									let ys = Math.floor((0 - ty) / stepping) * stepping + ty;
+									let ye = Math.ceil(h / stepping) * stepping;
 	
 									xe += Math.ceil(stepping);
 									ye += Math.ceil(stepping);
 	
-									var ixs = Math.round(xs);
-									var ixe = Math.round(xe);
-									var iys = Math.round(ys);
-									var iye = Math.round(ye);
+									let ixs = Math.round(xs);
+									let ixe = Math.round(xe);
+									let iys = Math.round(ys);
+									let iye = Math.round(ye);
 	
 									// Draws the actual grid
 									ctx.strokeStyle = '#f6f6f6';
 									ctx.beginPath();
 									
-									for (var x = xs; x <= xe; x += stepping)
+									for (let x = xs; x <= xe; x += stepping)
 									{
 										x = Math.round((x - tx) / stepping) * stepping + tx;
-										var ix = Math.round(x);
+										let ix = Math.round(x);
 										
 										ctx.moveTo(ix + 0.5, iys + 0.5);
 										ctx.lineTo(ix + 0.5, iye + 0.5);
 									}
 	
-									for (var y = ys; y <= ye; y += stepping)
+									for (let y = ys; y <= ye; y += stepping)
 									{
 										y = Math.round((y - ty) / stepping) * stepping + ty;
-										var iy = Math.round(y);
+										let iy = Math.round(y);
 										
 										ctx.moveTo(ixs + 0.5, iy + 0.5);
 										ctx.lineTo(ixe + 0.5, iy + 0.5);
@@ -162,7 +162,7 @@
 						container.style.backgroundImage = 'url(\'editors/images/grid.gif\')';
 					}
 					
-					var mxGraphViewValidateBackground = mxGraphView.prototype.validateBackground;
+					let mxGraphViewValidateBackground = mxGraphView.prototype.validateBackground;
 					mxGraphView.prototype.validateBackground = function()
 					{
 						mxGraphViewValidateBackground.apply(this, arguments);
@@ -173,7 +173,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/groups.html b/src/examples/groups.html
index 1100027df..060b92755 100644
--- a/src/examples/groups.html
+++ b/src/examples/groups.html
@@ -25,7 +25,7 @@
 		};
 		
 		// Don't clear selection if multiple cells selected
-		var graphHandlerMouseDown = mxGraphHandler.prototype.mouseDown;
+		let graphHandlerMouseDown = mxGraphHandler.prototype.mouseDown;
 		mxGraphHandler.prototype.mouseDown = function(sender, me)
 		{
 			graphHandlerMouseDown.apply(this, arguments);
@@ -37,13 +37,13 @@
 		};
 		
 		// Selects descendants before children selection mode
-		var graphHandlerGetInitialCellForEvent = mxGraphHandler.prototype.getInitialCellForEvent;
+		let graphHandlerGetInitialCellForEvent = mxGraphHandler.prototype.getInitialCellForEvent;
 		mxGraphHandler.prototype.getInitialCellForEvent = function(me)
 		{
-			var model = this.graph.getModel();
-			var psel = model.getParent(this.graph.getSelectionCell());
-			var cell = graphHandlerGetInitialCellForEvent.apply(this, arguments);
-			var parent = model.getParent(cell);
+			let model = this.graph.getModel();
+			let psel = model.getParent(this.graph.getSelectionCell());
+			let cell = graphHandlerGetInitialCellForEvent.apply(this, arguments);
+			let parent = model.getParent(cell);
 			
 			if (psel == null || (psel != cell && psel != parent))
 			{
@@ -59,13 +59,13 @@
 		};
 		
 		// Selection is delayed to mouseup if child selected
-		var graphHandlerIsDelayedSelection = mxGraphHandler.prototype.isDelayedSelection;
+		let graphHandlerIsDelayedSelection = mxGraphHandler.prototype.isDelayedSelection;
 		mxGraphHandler.prototype.isDelayedSelection = function(cell)
 		{
-			var result = graphHandlerIsDelayedSelection.apply(this, arguments);
-			var model = this.graph.getModel();
-			var psel = model.getParent(this.graph.getSelectionCell());
-			var parent = model.getParent(cell);
+			let result = graphHandlerIsDelayedSelection.apply(this, arguments);
+			let model = this.graph.getModel();
+			let psel = model.getParent(this.graph.getSelectionCell());
+			let parent = model.getParent(cell);
 			
 			if (psel == null || (psel != cell && psel != parent))
 			{
@@ -81,15 +81,15 @@
 		// Delayed selection of parent group
 		mxGraphHandler.prototype.selectDelayed = function(me)
 		{
-			var cell = me.getCell();
+			let cell = me.getCell();
 			
 			if (cell == null)
 			{
 				cell = this.cell;
 			}
 			
-			var model = this.graph.getModel();
-			var parent = model.getParent(cell);
+			let model = this.graph.getModel();
+			let parent = model.getParent(cell);
 			
 			while (this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent))
 			{
@@ -103,9 +103,9 @@
 		// Returns last selected ancestor
 		mxPopupMenuHandler.prototype.getCellForPopupEvent = function(me)
 		{
-			var cell = me.getCell();
-			var model = this.graph.getModel();
-			var parent = model.getParent(cell);
+			let cell = me.getCell();
+			let model = this.graph.getModel();
+			let parent = model.getParent(cell);
 			
 			while (model.isVertex(parent) && !this.graph.isValidRoot(parent))
 			{
@@ -134,7 +134,7 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.constrainChildren = false;
 				graph.extendParents = false;
 				graph.extendParentsOnAdd = false;
@@ -148,7 +148,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/guides.html b/src/examples/guides.html
index af3863a1a..c74cc8264 100644
--- a/src/examples/guides.html
+++ b/src/examples/guides.html
@@ -53,7 +53,7 @@
 				mxEdgeHandler.prototype.snapToTerminals = true;
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setConnectable(true);
 				graph.gridSize = 30;
 				
@@ -62,7 +62,7 @@
 				// when the user double clicks on the adjustment control point
 				// of the edge. The ElbowConnector edge style switches to TopToBottom
 				// if the horizontal style is true.
-				var style = graph.getStylesheet().getDefaultEdgeStyle();
+				let style = graph.getStylesheet().getDefaultEdgeStyle();
 				style[mxConstants.STYLE_ROUNDED] = true;
 				style[mxConstants.STYLE_EDGE] = mxEdgeStyle.ElbowConnector;
 				graph.alternateEdgeStyle = 'elbow=vertical';
@@ -72,7 +72,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -90,12 +90,12 @@
 				}
 
 			    // Handles cursor keys
-			    var nudge = function(keyCode)
+			    let nudge = function(keyCode)
 			    {
 			    	if (!graph.isSelectionEmpty())
 					{
-			    		var dx = 0;
-			    		var dy = 0;
+			    		let dx = 0;
+			    		let dy = 0;
 			    		
 			    		if (keyCode == 37)
 						{
@@ -122,7 +122,7 @@
 				graph.container.focus();
 				    
 			    // Handles keystroke events
-			    var keyHandler = new mxKeyHandler(graph);
+			    let keyHandler = new mxKeyHandler(graph);
 			    
 			    // Ignores enter keystroke. Remove this line if you want the
 			    // enter keystroke to stop editing
diff --git a/src/examples/handles.html b/src/examples/handles.html
index 68be673d5..e3816c2df 100644
--- a/src/examples/handles.html
+++ b/src/examples/handles.html
@@ -67,7 +67,7 @@
 			if (this.state.style['shape'] == 'myShape')
 			{
 				// Implements the handle for the first divider
-				var firstHandle = new mxHandle(this.state);
+				let firstHandle = new mxHandle(this.state);
 				
 				firstHandle.getPosition = function(bounds)
 				{
@@ -92,7 +92,7 @@
 				firstHandle.ignoreGrid = true;
 				
 				// Implements the handle for the second divider
-				var secondHandle = new mxHandle(this.state);
+				let secondHandle = new mxHandle(this.state);
 				
 				secondHandle.getPosition = function(bounds)
 				{
@@ -142,7 +142,7 @@
 				mxEvent.disableContextMenu(container);
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setCellsCloneable(true);
 				graph.setHtmlLabels(true);
 				graph.setPanning(true);
@@ -153,7 +153,7 @@
 
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/helloport.html b/src/examples/helloport.html
index 55a5bff02..0fcb28e10 100644
--- a/src/examples/helloport.html
+++ b/src/examples/helloport.html
@@ -32,19 +32,19 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setConnectable(true);
 				graph.setTooltips(true);
 
 				// Sets the default edge style
-				var style = graph.getStylesheet().getDefaultEdgeStyle();
+				let style = graph.getStylesheet().getDefaultEdgeStyle();
 				style[mxConstants.STYLE_EDGE] = mxEdgeStyle.ElbowConnector;
 
 				// Ports are not used as terminals for edges, they are
 				// only used to compute the graphical connection point
 				graph.isPort = function(cell)
 				{
-					var geo = this.getCellGeometry(cell);
+					let geo = this.getCellGeometry(cell);
 
 					return (geo != null) ? geo.relative : false;
 				};
@@ -73,7 +73,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -98,10 +98,10 @@
 					graph.getModel().endUpdate();
 				}
 				
-				var button = mxUtils.button('View XML', function()
+				let button = mxUtils.button('View XML', function()
 				{
-					var encoder = new mxCodec();
-					var node = encoder.encode(graph.getModel());
+					let encoder = new mxCodec();
+					let node = encoder.encode(graph.getModel());
 					mxUtils.popup(mxUtils.getPrettyXml(node), true);
 				});
 				
diff --git a/src/examples/hierarchicallayout.html b/src/examples/hierarchicallayout.html
index b076de2b1..21ccf0a0b 100644
--- a/src/examples/hierarchicallayout.html
+++ b/src/examples/hierarchicallayout.html
@@ -35,13 +35,13 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Adds rubberband selection
 				new mxRubberband(graph);
 				
 				// Changes the default vertex style in-place
-				var style = graph.getStylesheet().getDefaultVertexStyle();
+				let style = graph.getStylesheet().getDefaultVertexStyle();
 				style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
 				style[mxConstants.STYLE_GRADIENTCOLOR] = 'white';
 				style[mxConstants.STYLE_PERIMETER_SPACING] = 6;
@@ -53,14 +53,14 @@
 
 				// Creates a layout algorithm to be used
 				// with the graph
-				var layout = new mxHierarchicalLayout(graph);
-				var organic = new mxFastOrganicLayout(graph);
+				let layout = new mxHierarchicalLayout(graph);
+				let organic = new mxFastOrganicLayout(graph);
 				organic.forceConstant = 120;
 				
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 			
 				// Adds a button to execute the layout
-				var button = document.createElement('button');
+				let button = document.createElement('button');
 				mxUtils.write(button, 'Hierarchical');
 				mxEvent.addListener(button, 'click', function(evt)
 				{
@@ -69,7 +69,7 @@
 				document.body.appendChild(button);
 
 				// Adds a button to execute the layout
-				var button = document.createElement('button');
+				let button = document.createElement('button');
 				mxUtils.write(button, 'Organic');
 				
 				mxEvent.addListener(button, 'click', function(evt)
diff --git a/src/examples/hovericons.html b/src/examples/hovericons.html
index 2c767b962..f56729dc4 100644
--- a/src/examples/hovericons.html
+++ b/src/examples/hovericons.html
@@ -26,10 +26,10 @@
 		function mxIconSet(state)
 		{
 			this.images = [];
-			var graph = state.view.graph;
+			let graph = state.view.graph;
 			
 			// Icon1
-			var img = mxUtils.createImage('images/copy.png');
+			let img = mxUtils.createImage('images/copy.png');
 			img.setAttribute('title', 'Duplicate');
 			img.style.position = 'absolute';
 			img.style.cursor = 'pointer';
@@ -40,7 +40,7 @@
 			
 			mxEvent.addGestureListeners(img,
 				(evt) => {
-					var s = graph.gridSize;
+					let s = graph.gridSize;
 					graph.setSelectionCells(graph.moveCells([state.cell], s, s, true));
 					mxEvent.consume(evt);
 					this.destroy();
@@ -51,7 +51,7 @@
 			this.images.push(img);
 			
 			// Delete
-			var img = mxUtils.createImage('images/delete2.png');
+			let img = mxUtils.createImage('images/delete2.png');
 			img.setAttribute('title', 'Delete');
 			img.style.position = 'absolute';
 			img.style.cursor = 'pointer';
@@ -83,9 +83,9 @@
 		{
 			if (this.images != null)
 			{
-				for (var i = 0; i < this.images.length; i++)
+				for (let i = 0; i < this.images.length; i++)
 				{
-					var img = this.images[i];
+					let img = this.images[i];
 					img.parentNode.removeChild(img);
 				}
 			}
@@ -107,11 +107,11 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setConnectable(true);
 				
 				// Defines the tolerance before removing the icons
-				var iconTolerance = 20;
+				let iconTolerance = 20;
 
 				// Shows icons if the mouse is over a cell
 				graph.addMouseListener(
@@ -132,8 +132,8 @@
 				    	if (this.currentState != null && (me.getState() == this.currentState ||
 				    		me.getState() == null))
 				    	{
-				    		var tol = iconTolerance;
-				    		var tmp = new mxRectangle(me.getGraphX() - tol,
+				    		let tol = iconTolerance;
+				    		let tmp = new mxRectangle(me.getGraphX() - tol,
 				    			me.getGraphY() - tol, 2 * tol, 2 * tol);
 
 				    		if (mxUtils.intersects(tmp, this.currentState))
@@ -142,7 +142,7 @@
 				    		}
 				    	}
 				    	
-						var tmp = graph.view.getState(me.getCell());
+						let tmp = graph.view.getState(me.getCell());
 				    	
 				    	// Ignores everything but vertices
 						if (graph.isMouseDown || (tmp != null && !graph.getModel().isVertex(tmp.cell)))
@@ -188,7 +188,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/hoverstyle.html b/src/examples/hoverstyle.html
index 35daf657d..6631b7615 100644
--- a/src/examples/hoverstyle.html
+++ b/src/examples/hoverstyle.html
@@ -32,7 +32,7 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				function updateStyle(state, hover)
 				{
@@ -69,7 +69,7 @@
 				            return;
 				        }
 
-				        var tmp = graph.view.getState(me.getCell());
+				        let tmp = graph.view.getState(me.getCell());
 
 				        // Ignores everything but vertices
 				        if (graph.isMouseDown || (tmp != null && !
@@ -134,7 +134,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/htmllabel.html b/src/examples/htmllabel.html
index f4e68f8fa..8acbf981b 100644
--- a/src/examples/htmllabel.html
+++ b/src/examples/htmllabel.html
@@ -35,7 +35,7 @@
 				mxEvent.disableContextMenu(container);
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Enables HTML labels
 				graph.setHtmlLabels(true);
@@ -44,13 +44,13 @@
 				new mxRubberband(graph);
 				
 				// Creates a user object that stores the state
-				var doc = mxUtils.createXmlDocument();
-				var obj = doc.createElement('UserObject');
+				let doc = mxUtils.createXmlDocument();
+				let obj = doc.createElement('UserObject');
 				obj.setAttribute('label', 'Hello, World!');
 				obj.setAttribute('checked', 'false');
 				
 				// Adds optional caching for the HTML label
-				var cached = true;
+				let cached = true;
 				
 				if (cached)
 				{
@@ -76,11 +76,11 @@
 					else if (mxUtils.isNode(cell.value) && cell.value.nodeName.toLowerCase() == 'userobject')
 					{
 						// Returns a DOM for the label
-						var div = document.createElement('div');
+						let div = document.createElement('div');
 						div.innerHTML = cell.getAttribute('label');
 						mxUtils.br(div);
 						
-						var checkbox = document.createElement('input');
+						let checkbox = document.createElement('input');
 						checkbox.setAttribute('type', 'checkbox');
 
 						if (cell.getAttribute('checked') == 'true')
@@ -92,7 +92,7 @@
 						// Writes back to cell if checkbox is clicked
 						mxEvent.addListener(checkbox, 'change', function(evt)
 						{
-							var elt = cell.value.cloneNode(true);
+							let elt = cell.value.cloneNode(true);
 							elt.setAttribute('checked', (checkbox.checked) ? 'true' : 'false');
 							
 							graph.model.setValue(cell, elt);
@@ -113,13 +113,13 @@
 				};
 
 				// Overrides method to store a cell label in the model
-				var cellLabelChanged = graph.cellLabelChanged;
+				let cellLabelChanged = graph.cellLabelChanged;
 				graph.cellLabelChanged = function(cell, newValue, autoSize)
 				{
 					if (mxUtils.isNode(cell.value) && cell.value.nodeName.toLowerCase() == 'userobject')
 					{
 						// Clones the value for correct undo/redo
-						var elt = cell.value.cloneNode(true);
+						let elt = cell.value.cloneNode(true);
 						elt.setAttribute('label', newValue);
 						newValue = elt;
 					}
@@ -128,7 +128,7 @@
 				};
 				
 				// Overrides method to create the editing value
-				var getEditingValue = graph.getEditingValue;
+				let getEditingValue = graph.getEditingValue;
 				graph.getEditingValue = function(cell)
 				{
 					if (mxUtils.isNode(cell.value) && cell.value.nodeName.toLowerCase() == 'userobject')
@@ -137,12 +137,12 @@
 					}
 				};
 				
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 				graph.insertVertex(parent, null, obj, 20, 20, 80, 60);
 				
 				// Undo/redo
-				var undoManager = new mxUndoManager();
-				var listener = function(sender, evt)
+				let undoManager = new mxUndoManager();
+				let listener = function(sender, evt)
 				{
 					undoManager.undoableEditHappened(evt.getProperty('edit'));
 				};
diff --git a/src/examples/ie9svg.html b/src/examples/ie9svg.html
index 0fdd59b1a..fda09ba64 100644
--- a/src/examples/ie9svg.html
+++ b/src/examples/ie9svg.html
@@ -35,14 +35,14 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Enables rubberband selection
 				new mxRubberband(graph);
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/images.html b/src/examples/images.html
index c4bf9fe88..77adca94c 100644
--- a/src/examples/images.html
+++ b/src/examples/images.html
@@ -33,7 +33,7 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Sets a background image and restricts child movement to its bounds
 				graph.setBackgroundImage(new mxImage('images/gradient_background.jpg', 360, 200));
@@ -49,7 +49,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -71,7 +71,7 @@
 		
 		function configureStylesheet(graph)
 		{
-			var style = {};
+			let style = {};
 			style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_IMAGE;
 			style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
 			style[mxConstants.STYLE_IMAGE] = 'images/icons48/keys.png';
diff --git a/src/examples/indicators.html b/src/examples/indicators.html
index 0fc6b1078..a72443b5a 100644
--- a/src/examples/indicators.html
+++ b/src/examples/indicators.html
@@ -34,7 +34,7 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setConnectable(true);
 				new mxKeyHandler(graph);
 				
@@ -42,7 +42,7 @@
 				graph.vertexLabelsMovable = true;
 				
 				// Creates a style with an indicator
-				var style = graph.getStylesheet().getDefaultVertexStyle();
+				let style = graph.getStylesheet().getDefaultVertexStyle();
 				
 				style[mxConstants.STYLE_SHAPE] = 'label';
 				style[mxConstants.STYLE_VERTICAL_ALIGN] = 'bottom';
@@ -56,7 +56,7 @@
 				delete style[mxConstants.STYLE_FILLCOLOR]; // transparent
 				
 				// Creates a style with an indicator
-				var style = graph.getStylesheet().getDefaultEdgeStyle();
+				let style = graph.getStylesheet().getDefaultEdgeStyle();
 				
 				style[mxConstants.STYLE_EDGE] = mxEdgeStyle.ElbowConnector;
 				style[mxConstants.STYLE_ELBOW] = mxConstants.ELBOW_VERTICAL;
@@ -64,7 +64,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/jquery.html b/src/examples/jquery.html
index 85b751d79..32a55dbde 100644
--- a/src/examples/jquery.html
+++ b/src/examples/jquery.html
@@ -41,12 +41,12 @@
 				mxEvent.disableContextMenu(container);
 
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Adds custom HTML labels
 				graph.setHtmlLabels(true);
 				
-				var chartColors = {
+				let chartColors = {
 					red: 'rgb(255, 99, 132)',
 					orange: 'rgb(255, 159, 64)',
 					yellow: 'rgb(255, 205, 86)',
@@ -56,13 +56,13 @@
 					grey: 'rgb(201, 203, 207)'
 				};
 				
-				var randomScalingFactor = function()
+				let randomScalingFactor = function()
 				{
 					return (Math.random() > 0.5 ? 1.0 : -1.0) * Math.round(Math.random() * 100);
 				};
 				
-				var MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
-		        var config = {
+				let MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
+		        let config = {
 		            type: 'line',
 		            data: {
 		                labels: ["January", "February", "March", "April", "May", "June", "July"],
@@ -130,19 +130,19 @@
 		        };
 			
 				// Returns canvas with dynamic chart for vertex labels
-				var graphConvertValueToString = graph.convertValueToString;
+				let graphConvertValueToString = graph.convertValueToString;
 				graph.convertValueToString = function(cell)
 				{
 					if (this.model.isVertex(cell))
 					{
-						var node = document.createElement('canvas');
+						let node = document.createElement('canvas');
 						node.setAttribute('width', cell.geometry.width);
 						node.setAttribute('height', cell.geometry.height);
 						
 						// Document for empty output if not in DOM
 						document.body.appendChild(node);
 						
-						var ctx = node.getContext("2d");
+						let ctx = node.getContext("2d");
 						new Chart(ctx, config);
 						
 						return node;
@@ -156,7 +156,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/jsondata.html b/src/examples/jsondata.html
index a8afbbe17..2c0c77367 100644
--- a/src/examples/jsondata.html
+++ b/src/examples/jsondata.html
@@ -35,14 +35,14 @@
 				mxEvent.disableContextMenu(container);
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Enables rubberband selection
 				new mxRubberband(graph);
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -64,8 +64,8 @@
 			// Adds an option to view the XML of the graph
 			document.body.appendChild(mxUtils.button('View XML', function()
 			{
-				var encoder = new mxCodec();
-				var node = encoder.encode(graph.getModel());
+				let encoder = new mxCodec();
+				let node = encoder.encode(graph.getModel());
 				mxUtils.popup(mxUtils.getXml(node), true);
 			}));
 		};
@@ -75,11 +75,11 @@
 			this.value = value;
 		}
 		
-		var codec = new mxObjectCodec(new CustomData());
+		let codec = new mxObjectCodec(new CustomData());
 
 		codec.encode = function(enc, obj)
 		{
-			var node = enc.document.createElement('CustomData');
+			let node = enc.document.createElement('CustomData');
 			mxUtils.setTextContent(node, JSON.stringify(obj));
 		   
 			return node;
@@ -87,7 +87,7 @@
 		
 		codec.decode = function(dec, node, into)
 		{
-			var obj = JSON.parse(mxUtils.getTextContent(node));
+			let obj = JSON.parse(mxUtils.getTextContent(node));
 			obj.constructor = CustomData;
 			
 			return obj;
diff --git a/src/examples/labelposition.html b/src/examples/labelposition.html
index a602a937b..39686211a 100644
--- a/src/examples/labelposition.html
+++ b/src/examples/labelposition.html
@@ -30,14 +30,14 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 
 				// Defines the common part of all cell styles as a string-prefix
-				var prefix = 'shape=image;image=images/icons48/keys.png;';
+				let prefix = 'shape=image;image=images/icons48/keys.png;';
 								
 				// Adds cells to the model in a single step and set the vertex
 				// label positions using the label position styles. Vertical
diff --git a/src/examples/labels.html b/src/examples/labels.html
index 6fa210a10..fc8ef83ce 100644
--- a/src/examples/labels.html
+++ b/src/examples/labels.html
@@ -35,7 +35,7 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setTooltips(true);
 				graph.htmlLabels = true;
 				graph.vertexLabelsMovable = true;
@@ -56,7 +56,7 @@
 				
 				graph.isCellResizable = function(cell)
 				{
-					var geo = this.model.getGeometry(cell);
+					let geo = this.model.getGeometry(cell);
 					
 					return geo == null || !geo.relative;
 				};
@@ -64,16 +64,16 @@
 				// Truncates the label to the size of the vertex
 				graph.getLabel = function(cell)
 				{
-					var label = (this.labelsVisible) ? this.convertValueToString(cell) : '';
-					var geometry = this.model.getGeometry(cell);
+					let label = (this.labelsVisible) ? this.convertValueToString(cell) : '';
+					let geometry = this.model.getGeometry(cell);
 					
 					if (!this.model.isCollapsed(cell) && geometry != null && (geometry.offset == null ||
 						(geometry.offset.x == 0 && geometry.offset.y == 0)) && this.model.isVertex(cell) &&
 						geometry.width >= 2)
 					{
-						var style = this.getCellStyle(cell);
-						var fontSize = style[mxConstants.STYLE_FONTSIZE] || mxConstants.DEFAULT_FONTSIZE;
-						var max = geometry.width / (fontSize * 0.625);
+						let style = this.getCellStyle(cell);
+						let fontSize = style[mxConstants.STYLE_FONTSIZE] || mxConstants.DEFAULT_FONTSIZE;
+						let max = geometry.width / (fontSize * 0.625);
 						
 						if (max < label.length)
 						{
@@ -93,7 +93,7 @@
 				// Enables clipping of vertex labels if no offset is defined
 				graph.isLabelClipped = function(cell)
 				{
-					var geometry = this.model.getGeometry(cell);
+					let geometry = this.model.getGeometry(cell);
 					
 					return geometry != null && !geometry.relative && (geometry.offset == null ||
 						(geometry.offset.x == 0 && geometry.offset.y == 0));
@@ -101,7 +101,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/layers.html b/src/examples/layers.html
index f48834319..4b1462f31 100644
--- a/src/examples/layers.html
+++ b/src/examples/layers.html
@@ -34,20 +34,20 @@
 			{
 				// Creates the graph inside the given container using a model
 				// with a custom root and two layers. Layers can also be added
-				// dynamically using var layer = model.add(root, new mxCell()).
-				var root = new mxCell();
+				// dynamically using let layer = model.add(root, new mxCell()).
+				let root = new mxCell();
 				var layer0 = root.insert(new mxCell());
 				var layer1 = root.insert(new mxCell()); 
-				var model = new mxGraphModel(root);
+				let model = new mxGraphModel(root);
 
-				var graph = new mxGraph(container, model);
+				let graph = new mxGraph(container, model);
 				
 				// Disables basic selection and cell handling
 				graph.setEnabled(false);
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				model.beginUpdate();
diff --git a/src/examples/lod.html b/src/examples/lod.html
index c0ee48b3a..0e25685c8 100644
--- a/src/examples/lod.html
+++ b/src/examples/lod.html
@@ -32,7 +32,7 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.centerZoom = false;
 
 				// Links level of detail to zoom level but can be independent of zoom
@@ -43,7 +43,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/map-background/leaflet-src.js b/src/examples/map-background/leaflet-src.js
index 76f476970..87981794f 100644
--- a/src/examples/map-background/leaflet-src.js
+++ b/src/examples/map-background/leaflet-src.js
@@ -9,7 +9,7 @@
 	(factory((global.L = {})));
 }(this, (function (exports) { 'use strict';
 
-var version = "1.3.1+HEAD.ba6f97f";
+let version = "1.3.1+HEAD.ba6f97f";
 
 /*
  * @namespace Util
@@ -17,7 +17,7 @@ var version = "1.3.1+HEAD.ba6f97f";
  * Various utility functions, used by Leaflet internally.
  */
 
-var freeze = Object.freeze;
+let freeze = Object.freeze;
 Object.freeze = (obj) => { return obj; };
 
 // @function extend(dest: Object, src?: Object): Object
@@ -36,7 +36,7 @@ function extend(dest) {
 
 // @function create(proto: Object, properties?: Object): Object
 // Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)
-var create = Object.create || (function () {
+let create = Object.create || (function () {
 	function F() {}
 	return function (proto) {
 		F.prototype = proto;
@@ -48,13 +48,13 @@ var create = Object.create || (function () {
 // Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).
 // Has a `L.bind()` shortcut.
 function bind(fn, obj) {
-	var slice = Array.prototype.slice;
+	let slice = Array.prototype.slice;
 
 	if (fn.bind) {
 		return fn.bind.apply(fn, slice.call(arguments, 1));
 	}
 
-	var args = slice.call(arguments, 2);
+	let args = slice.call(arguments, 2);
 
 	return function () {
 		return fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);
@@ -63,7 +63,7 @@ function bind(fn, obj) {
 
 // @property lastId: Number
 // Last unique ID used by [`stamp()`](#util-stamp)
-var lastId = 0;
+let lastId = 0;
 
 // @function stamp(obj: Object): Number
 // Returns the unique ID of an object, assigning it one if it doesn't have it.
@@ -114,7 +114,7 @@ function throttle(fn, time, context) {
 // `range[0]` and `range[1]`. The returned value will be always smaller than
 // `range[1]` unless `includeMax` is set to `true`.
 function wrapNum(x, range, includeMax) {
-	var max = range[1],
+	let max = range[1],
 	    min = range[0],
 	    d = max - min;
 	return x === max && includeMax ? x : ((x - min) % d + d) % d + min;
@@ -127,7 +127,7 @@ function falseFn() { return false; }
 // @function formatNum(num: Number, digits?: Number): Number
 // Returns the number `num` rounded to `digits` decimals, or to 6 decimals by default.
 function formatNum(num, digits) {
-	var pow = Math.pow(10, (digits === undefined ? 6 : digits));
+	let pow = Math.pow(10, (digits === undefined ? 6 : digits));
 	return Math.round(num * pow) / pow;
 }
 
@@ -161,14 +161,14 @@ function setOptions(obj, options) {
 // be appended at the end. If `uppercase` is `true`, the parameter names will
 // be uppercased (e.g. `'?A=foo&B=bar'`)
 function getParamString(obj, existingUrl, uppercase) {
-	var params = [];
+	let params = [];
 	for (var i in obj) {
 		params.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));
 	}
 	return ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');
 }
 
-var templateRe = /\{ *([\w_-]+) *\}/g;
+let templateRe = /\{ *([\w_-]+) *\}/g;
 
 // @function template(str: String, data: Object): String
 // Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`
@@ -177,7 +177,7 @@ var templateRe = /\{ *([\w_-]+) *\}/g;
 // data values — they will be evaluated passing `data` as an argument.
 function template(str, data) {
 	return str.replace(templateRe, function (str, key) {
-		var value = data[key];
+		let value = data[key];
 
 		if (value === undefined) {
 			throw new Error('No value provided for variable ' + str);
@@ -191,14 +191,14 @@ function template(str, data) {
 
 // @function isArray(obj): Boolean
 // Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)
-var isArray = Array.isArray || function (obj) {
+let isArray = Array.isArray || function (obj) {
 	return (Object.prototype.toString.call(obj) === '[object Array]');
 };
 
 // @function indexOf(array: Array, el: Object): Number
 // Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)
 function indexOf(array, el) {
-	for (var i = 0; i < array.length; i++) {
+	for (let i = 0; i < array.length; i++) {
 		if (array[i] === el) { return i; }
 	}
 	return -1;
@@ -208,7 +208,7 @@ function indexOf(array, el) {
 // Data URI string containing a base64-encoded empty GIF image.
 // Used as a hack to free memory from unused images on WebKit-powered
 // mobile devices (by setting image `src` to this string).
-var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';
+let emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';
 
 // inspired by http://paulirish.com/2011/requestanimationframe-for-smart-animating/
 
@@ -216,19 +216,19 @@ function getPrefixed(name) {
 	return window['webkit' + name] || window['moz' + name] || window['ms' + name];
 }
 
-var lastTime = 0;
+let lastTime = 0;
 
 // fallback for IE 7-8
 function timeoutDefer(fn) {
-	var time = +new Date(),
+	let time = +new Date(),
 	    timeToCall = Math.max(0, 16 - (time - lastTime));
 
 	lastTime = time + timeToCall;
 	return window.setTimeout(fn, timeToCall);
 }
 
-var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;
-var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||
+let requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;
+let cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||
 		getPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };
 
 // @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number
@@ -254,7 +254,7 @@ function cancelAnimFrame(id) {
 }
 
 
-var Util = (Object.freeze || Object)({
+let Util = (Object.freeze || Object)({
 	freeze: freeze,
 	extend: extend,
 	create: create,
@@ -294,7 +294,7 @@ Class.extend = (props) => {
 	// @function extend(props: Object): Function
 	// [Extends the current class](#class-inheritance) given the properties to be included.
 	// Returns a Javascript function that is a class constructor (to be called with `new`).
-	var NewClass = () => {
+	let NewClass = () => {
 
 		// call the constructor
 		if (this.initialize) {
@@ -305,9 +305,9 @@ Class.extend = (props) => {
 		this.callInitHooks();
 	};
 
-	var parentProto = NewClass.__super__ = this.prototype;
+	let parentProto = NewClass.__super__ = this.prototype;
 
-	var proto = create(parentProto);
+	let proto = create(parentProto);
 	proto.constructor = NewClass;
 
 	NewClass.prototype = proto;
@@ -353,7 +353,7 @@ Class.extend = (props) => {
 
 		this._initHooksCalled = true;
 
-		for (var i = 0, len = proto._initHooks.length; i < len; i++) {
+		for (let i = 0, len = proto._initHooks.length; i < len; i++) {
 			proto._initHooks[i].call(this);
 		}
 	};
@@ -379,9 +379,9 @@ Class.mergeOptions = (options) => {
 // @function addInitHook(fn: Function): this
 // Adds a [constructor hook](#class-constructor-hooks) to the class.
 Class.addInitHook = (fn) => { // (Function) || (String, args...)
-	var args = Array.prototype.slice.call(arguments, 1);
+	let args = Array.prototype.slice.call(arguments, 1);
 
-	var init = typeof fn === 'function' ? fn : function () {
+	let init = typeof fn === 'function' ? fn : function () {
 		this[fn].apply(this, args);
 	};
 
@@ -395,7 +395,7 @@ function checkDeprecatedMixinEvents(includes) {
 
 	includes = isArray(includes) ? includes : [includes];
 
-	for (var i = 0; i < includes.length; i++) {
+	for (let i = 0; i < includes.length; i++) {
 		if (includes[i] === L.Mixin.Events) {
 			console.warn('Deprecated include of L.Mixin.Events: ' +
 				'this property will be removed in future releases, ' +
@@ -429,7 +429,7 @@ function checkDeprecatedMixinEvents(includes) {
  * ```
  */
 
-var Events = {
+let Events = {
 	/* @method on(type: String, fn: Function, context?: Object): this
 	 * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).
 	 *
@@ -451,7 +451,7 @@ var Events = {
 			// types can be a string of space-separated words
 			types = splitWords(types);
 
-			for (var i = 0, len = types.length; i < len; i++) {
+			for (let i = 0, len = types.length; i < len; i++) {
 				this._on(types[i], fn, context);
 			}
 		}
@@ -484,7 +484,7 @@ var Events = {
 		} else {
 			types = splitWords(types);
 
-			for (var i = 0, len = types.length; i < len; i++) {
+			for (let i = 0, len = types.length; i < len; i++) {
 				this._off(types[i], fn, context);
 			}
 		}
@@ -497,7 +497,7 @@ var Events = {
 		this._events = this._events || {};
 
 		/* get/init listeners for type */
-		var typeListeners = this._events[type];
+		let typeListeners = this._events[type];
 		if (!typeListeners) {
 			typeListeners = [];
 			this._events[type] = typeListeners;
@@ -507,11 +507,11 @@ var Events = {
 			// Less memory footprint.
 			context = undefined;
 		}
-		var newListener = {fn: fn, ctx: context},
+		let newListener = {fn: fn, ctx: context},
 		    listeners = typeListeners;
 
 		// check if fn already there
-		for (var i = 0, len = listeners.length; i < len; i++) {
+		for (let i = 0, len = listeners.length; i < len; i++) {
 			if (listeners[i].fn === fn && listeners[i].ctx === context) {
 				return;
 			}
@@ -551,7 +551,7 @@ var Events = {
 
 			// find fn and remove it
 			for (i = 0, len = listeners.length; i < len; i++) {
-				var l = listeners[i];
+				let l = listeners[i];
 				if (l.ctx !== context) { continue; }
 				if (l.fn === fn) {
 
@@ -577,19 +577,19 @@ var Events = {
 	fire: function (type, data, propagate) {
 		if (!this.listens(type, propagate)) { return this; }
 
-		var event = extend({}, data, {
+		let event = extend({}, data, {
 			type: type,
 			target: this,
 			sourceTarget: data && data.sourceTarget || this
 		});
 
 		if (this._events) {
-			var listeners = this._events[type];
+			let listeners = this._events[type];
 
 			if (listeners) {
 				this._firingCount = (this._firingCount + 1) || 1;
-				for (var i = 0, len = listeners.length; i < len; i++) {
-					var l = listeners[i];
+				for (let i = 0, len = listeners.length; i < len; i++) {
+					let l = listeners[i];
 					l.fn.call(l.ctx || this, event);
 				}
 
@@ -608,7 +608,7 @@ var Events = {
 	// @method listens(type: String): Boolean
 	// Returns `true` if a particular event type has any listeners attached to it.
 	listens: function (type, propagate) {
-		var listeners = this._events && this._events[type];
+		let listeners = this._events && this._events[type];
 		if (listeners && listeners.length) { return true; }
 
 		if (propagate) {
@@ -631,7 +631,7 @@ var Events = {
 			return this;
 		}
 
-		var handler = bind(function () {
+		let handler = bind(function () {
 			this
 			    .off(types, fn, context)
 			    .off(types, handler, context);
@@ -695,7 +695,7 @@ Events.fireEvent = Events.fire;
 // Alias to [`listens(…)`](#evented-listens)
 Events.hasEventListeners = Events.listens;
 
-var Evented = Class.extend(Events);
+let Evented = Class.extend(Events);
 
 /*
  * @class Point
@@ -706,7 +706,7 @@ var Evented = Class.extend(Events);
  * @example
  *
  * ```js
- * var point = L.point(200, 300);
+ * let point = L.point(200, 300);
  * ```
  *
  * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:
@@ -728,7 +728,7 @@ function Point(x, y, round) {
 	this.y = (round ? Math.round(y) : y);
 }
 
-var trunc = Math.trunc || function (v) {
+let trunc = Math.trunc || function (v) {
 	return v > 0 ? Math.floor(v) : Math.ceil(v);
 };
 
@@ -859,7 +859,7 @@ Point.prototype = {
 	distanceTo: function (point) {
 		point = toPoint(point);
 
-		var x = point.x - this.x,
+		let x = point.x - this.x,
 		    y = point.y - this.y;
 
 		return Math.sqrt(x * x + y * y);
@@ -946,9 +946,9 @@ function toPoint(x, y, round) {
 function Bounds(a, b) {
 	if (!a) { return; }
 
-	var points = b ? [a, b] : a;
+	let points = b ? [a, b] : a;
 
-	for (var i = 0, len = points.length; i < len; i++) {
+	for (let i = 0, len = points.length; i < len; i++) {
 		this.extend(points[i]);
 	}
 }
@@ -1046,7 +1046,7 @@ Bounds.prototype = {
 	intersects: function (bounds) { // (Bounds) -> Boolean
 		bounds = toBounds(bounds);
 
-		var min = this.min,
+		let min = this.min,
 		    max = this.max,
 		    min2 = bounds.min,
 		    max2 = bounds.max,
@@ -1062,7 +1062,7 @@ Bounds.prototype = {
 	overlaps: function (bounds) { // (Bounds) -> Boolean
 		bounds = toBounds(bounds);
 
-		var min = this.min,
+		let min = this.min,
 		    max = this.max,
 		    min2 = bounds.min,
 		    max2 = bounds.max,
@@ -1123,9 +1123,9 @@ function toBounds(a, b) {
 function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])
 	if (!corner1) { return; }
 
-	var latlngs = corner2 ? [corner1, corner2] : corner1;
+	let latlngs = corner2 ? [corner1, corner2] : corner1;
 
-	for (var i = 0, len = latlngs.length; i < len; i++) {
+	for (let i = 0, len = latlngs.length; i < len; i++) {
 		this.extend(latlngs[i]);
 	}
 }
@@ -1139,7 +1139,7 @@ LatLngBounds.prototype = {
 	// @method extend(otherBounds: LatLngBounds): this
 	// Extend the bounds to contain the given bounds
 	extend: function (obj) {
-		var sw = this._southWest,
+		let sw = this._southWest,
 		    ne = this._northEast,
 		    sw2, ne2;
 
@@ -1175,7 +1175,7 @@ LatLngBounds.prototype = {
 	// For example, a ratio of 0.5 extends the bounds by 50% in each direction.
 	// Negative values will retract the bounds.
 	pad: function (bufferRatio) {
-		var sw = this._southWest,
+		let sw = this._southWest,
 		    ne = this._northEast,
 		    heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,
 		    widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;
@@ -1254,7 +1254,7 @@ LatLngBounds.prototype = {
 			obj = toLatLngBounds(obj);
 		}
 
-		var sw = this._southWest,
+		let sw = this._southWest,
 		    ne = this._northEast,
 		    sw2, ne2;
 
@@ -1274,7 +1274,7 @@ LatLngBounds.prototype = {
 	intersects: function (bounds) {
 		bounds = toLatLngBounds(bounds);
 
-		var sw = this._southWest,
+		let sw = this._southWest,
 		    ne = this._northEast,
 		    sw2 = bounds.getSouthWest(),
 		    ne2 = bounds.getNorthEast(),
@@ -1290,7 +1290,7 @@ LatLngBounds.prototype = {
 	overlaps: function (bounds) {
 		bounds = toLatLngBounds(bounds);
 
-		var sw = this._southWest,
+		let sw = this._southWest,
 		    ne = this._northEast,
 		    sw2 = bounds.getSouthWest(),
 		    ne2 = bounds.getNorthEast(),
@@ -1348,7 +1348,7 @@ function toLatLngBounds(a, b) {
  * @example
  *
  * ```
- * var latlng = L.latLng(50.5, 30.5);
+ * let latlng = L.latLng(50.5, 30.5);
  * ```
  *
  * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:
@@ -1393,7 +1393,7 @@ LatLng.prototype = {
 
 		obj = toLatLng(obj);
 
-		var margin = Math.max(
+		let margin = Math.max(
 		        Math.abs(this.lat - obj.lat),
 		        Math.abs(this.lng - obj.lng));
 
@@ -1423,7 +1423,7 @@ LatLng.prototype = {
 	// @method toBounds(sizeInMeters: Number): LatLngBounds
 	// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.
 	toBounds: function (sizeInMeters) {
-		var latAccuracy = 180 * sizeInMeters / 40075017,
+		let latAccuracy = 180 * sizeInMeters / 40075017,
 		    lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);
 
 		return toLatLngBounds(
@@ -1491,11 +1491,11 @@ function toLatLng(a, b, c) {
  * and methods can't be added to them with the `include` function.
  */
 
-var CRS = {
+let CRS = {
 	// @method latLngToPoint(latlng: LatLng, zoom: Number): Point
 	// Projects geographical coordinates into pixel coordinates for a given zoom.
 	latLngToPoint: function (latlng, zoom) {
-		var projectedPoint = this.projection.project(latlng),
+		let projectedPoint = this.projection.project(latlng),
 		    scale = this.scale(zoom);
 
 		return this.transformation._transform(projectedPoint, scale);
@@ -1505,7 +1505,7 @@ var CRS = {
 	// The inverse of `latLngToPoint`. Projects pixel coordinates on a given
 	// zoom into geographical coordinates.
 	pointToLatLng: function (point, zoom) {
-		var scale = this.scale(zoom),
+		let scale = this.scale(zoom),
 		    untransformedPoint = this.transformation.untransform(point, scale);
 
 		return this.projection.unproject(untransformedPoint);
@@ -1545,7 +1545,7 @@ var CRS = {
 	getProjectedBounds: function (zoom) {
 		if (this.infinite) { return null; }
 
-		var b = this.projection.bounds,
+		let b = this.projection.bounds,
 		    s = this.scale(zoom),
 		    min = this.transformation.transform(b.min, s),
 		    max = this.transformation.transform(b.max, s);
@@ -1578,7 +1578,7 @@ var CRS = {
 	// Returns a `LatLng` where lat and lng has been wrapped according to the
 	// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.
 	wrapLatLng: function (latlng) {
-		var lng = this.wrapLng ? wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,
+		let lng = this.wrapLng ? wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,
 		    lat = this.wrapLat ? wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,
 		    alt = latlng.alt;
 
@@ -1590,7 +1590,7 @@ var CRS = {
 	// that its center is within the CRS's bounds.
 	// Only accepts actual `L.LatLngBounds` instances, not arrays.
 	wrapLatLngBounds: function (bounds) {
-		var center = bounds.getCenter(),
+		let center = bounds.getCenter(),
 		    newCenter = this.wrapLatLng(center),
 		    latShift = center.lat - newCenter.lat,
 		    lngShift = center.lng - newCenter.lng;
@@ -1599,7 +1599,7 @@ var CRS = {
 			return bounds;
 		}
 
-		var sw = bounds.getSouthWest(),
+		let sw = bounds.getSouthWest(),
 		    ne = bounds.getNorthEast(),
 		    newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),
 		    newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);
@@ -1618,7 +1618,7 @@ var CRS = {
  * meters.
  */
 
-var Earth = extend({}, CRS, {
+let Earth = extend({}, CRS, {
 	wrapLng: [-180, 180],
 
 	// Mean Earth Radius, as recommended for use by
@@ -1628,7 +1628,7 @@ var Earth = extend({}, CRS, {
 
 	// distance between two geographical points using spherical law of cosines approximation
 	distance: function (latlng1, latlng2) {
-		var rad = Math.PI / 180,
+		let rad = Math.PI / 180,
 		    lat1 = latlng1.lat * rad,
 		    lat2 = latlng2.lat * rad,
 		    sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),
@@ -1648,13 +1648,13 @@ var Earth = extend({}, CRS, {
  * a sphere. Used by the `EPSG:3857` CRS.
  */
 
-var SphericalMercator = {
+let SphericalMercator = {
 
 	R: 6378137,
 	MAX_LATITUDE: 85.0511287798,
 
 	project: function (latlng) {
-		var d = Math.PI / 180,
+		let d = Math.PI / 180,
 		    max = this.MAX_LATITUDE,
 		    lat = Math.max(Math.min(max, latlng.lat), -max),
 		    sin = Math.sin(lat * d);
@@ -1665,7 +1665,7 @@ var SphericalMercator = {
 	},
 
 	unproject: function (point) {
-		var d = 180 / Math.PI;
+		let d = 180 / Math.PI;
 
 		return new LatLng(
 			(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,
@@ -1673,7 +1673,7 @@ var SphericalMercator = {
 	},
 
 	bounds: (function () {
-		var d = 6378137 * Math.PI;
+		let d = 6378137 * Math.PI;
 		return new Bounds([-d, -d], [d, d]);
 	})()
 };
@@ -1689,7 +1689,7 @@ var SphericalMercator = {
  * @example
  *
  * ```js
- * var transformation = L.transformation(2, 5, -1, 10),
+ * let transformation = L.transformation(2, 5, -1, 10),
  * 	p = L.point(1, 2),
  * 	p2 = transformation.transform(p), //  L.point(7, 8)
  * 	p3 = transformation.untransform(p2); //  L.point(1, 2)
@@ -1769,7 +1769,7 @@ var EPSG3857 = extend({}, Earth, {
 	projection: SphericalMercator,
 
 	transformation: (function () {
-		var scale = 0.5 / (Math.PI * SphericalMercator.R);
+		let scale = 0.5 / (Math.PI * SphericalMercator.R);
 		return toTransformation(scale, 0.5, -scale, 0.5);
 	}())
 });
@@ -1793,7 +1793,7 @@ function svgCreate(name) {
 // Generates a SVG path string for multiple rings, with each ring turning
 // into "M..L..L.." instructions
 function pointsToPath(rings, closed) {
-	var str = '',
+	let str = '',
 	i, j, len, len2, points, p;
 
 	for (i = 0, len = rings.length; i < len; i++) {
@@ -1830,50 +1830,50 @@ function pointsToPath(rings, closed) {
 var style$1 = document.documentElement.style;
 
 // @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).
-var ie = 'ActiveXObject' in window;
+let ie = 'ActiveXObject' in window;
 
 // @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.
 var ielt9 = ie && !document.addEventListener;
 
 // @property edge: Boolean; `true` for the Edge web browser.
-var edge = 'msLaunchUri' in navigator && !('documentMode' in document);
+let edge = 'msLaunchUri' in navigator && !('documentMode' in document);
 
 // @property webkit: Boolean;
 // `true` for webkit-based browsers like Chrome and Safari (including mobile versions).
-var webkit = userAgentContains('webkit');
+let webkit = userAgentContains('webkit');
 
 // @property android: Boolean
 // `true` for any browser running on an Android platform.
-var android = userAgentContains('android');
+let android = userAgentContains('android');
 
 // @property android23: Boolean; `true` for browsers running on Android 2 or Android 3.
 var android23 = userAgentContains('android 2') || userAgentContains('android 3');
 
 /* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */
-var webkitVer = parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit
+let webkitVer = parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit
 // @property androidStock: Boolean; `true` for the Android stock browser (i.e. not Chrome)
-var androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);
+let androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);
 
 // @property opera: Boolean; `true` for the Opera browser
-var opera = !!window.opera;
+let opera = !!window.opera;
 
 // @property chrome: Boolean; `true` for the Chrome browser.
-var chrome = userAgentContains('chrome');
+let chrome = userAgentContains('chrome');
 
 // @property gecko: Boolean; `true` for gecko-based browsers like Firefox.
-var gecko = userAgentContains('gecko') && !webkit && !opera && !ie;
+let gecko = userAgentContains('gecko') && !webkit && !opera && !ie;
 
 // @property safari: Boolean; `true` for the Safari browser.
-var safari = !chrome && userAgentContains('safari');
+let safari = !chrome && userAgentContains('safari');
 
-var phantom = userAgentContains('phantom');
+let phantom = userAgentContains('phantom');
 
 // @property opera12: Boolean
 // `true` for the Opera browser supporting CSS transforms (version 12 or later).
 var opera12 = 'OTransition' in style$1;
 
 // @property win: Boolean; `true` when the browser is running in a Windows platform
-var win = navigator.platform.indexOf('Win') === 0;
+let win = navigator.platform.indexOf('Win') === 0;
 
 // @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.
 var ie3d = ie && ('transition' in style$1);
@@ -1889,10 +1889,10 @@ var gecko3d = 'MozPerspective' in style$1;
 var any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;
 
 // @property mobile: Boolean; `true` for all browsers running in a mobile device.
-var mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');
+let mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');
 
 // @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.
-var mobileWebkit = mobile && webkit;
+let mobileWebkit = mobile && webkit;
 
 // @property mobileWebkit3d: Boolean
 // `true` for all webkit-based browsers in a mobile device supporting CSS transforms.
@@ -1900,50 +1900,50 @@ var mobileWebkit3d = mobile && webkit3d;
 
 // @property msPointer: Boolean
 // `true` for browsers implementing the Microsoft touch events model (notably IE10).
-var msPointer = !window.PointerEvent && window.MSPointerEvent;
+let msPointer = !window.PointerEvent && window.MSPointerEvent;
 
 // @property pointer: Boolean
 // `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).
-var pointer = !!(window.PointerEvent || msPointer);
+let pointer = !!(window.PointerEvent || msPointer);
 
 // @property touch: Boolean
 // `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).
 // This does not necessarily mean that the browser is running in a computer with
 // a touchscreen, it only means that the browser is capable of understanding
 // touch events.
-var touch = !window.L_NO_TOUCH && (pointer || 'ontouchstart' in window ||
+let touch = !window.L_NO_TOUCH && (pointer || 'ontouchstart' in window ||
 		(window.DocumentTouch && document instanceof window.DocumentTouch));
 
 // @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.
-var mobileOpera = mobile && opera;
+let mobileOpera = mobile && opera;
 
 // @property mobileGecko: Boolean
 // `true` for gecko-based browsers running in a mobile device.
-var mobileGecko = mobile && gecko;
+let mobileGecko = mobile && gecko;
 
 // @property retina: Boolean
 // `true` for browsers on a high-resolution "retina" screen.
-var retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;
+let retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;
 
 
 // @property canvas: Boolean
 // `true` when the browser supports [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).
-var canvas = (function () {
+let canvas = (function () {
 	return !!document.createElement('canvas').getContext;
 }());
 
 // @property svg: Boolean
 // `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).
-var svg = !!(document.createElementNS && svgCreate('svg').createSVGRect);
+let svg = !!(document.createElementNS && svgCreate('svg').createSVGRect);
 
 // @property vml: Boolean
 // `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).
-var vml = !svg && (function () {
+let vml = !svg && (function () {
 	try {
-		var div = document.createElement('div');
+		let div = document.createElement('div');
 		div.innerHTML = '<v:shape adj="1"/>';
 
-		var shape = div.firstChild;
+		let shape = div.firstChild;
 		shape.style.behavior = 'url(#default#VML)';
 
 		return shape && (typeof shape.adj === 'object');
@@ -1959,7 +1959,7 @@ function userAgentContains(str) {
 }
 
 
-var Browser = (Object.freeze || Object)({
+let Browser = (Object.freeze || Object)({
 	ie: ie,
 	ielt9: ielt9,
 	edge: edge,
@@ -1997,17 +1997,17 @@ var Browser = (Object.freeze || Object)({
  */
 
 
-var POINTER_DOWN =   msPointer ? 'MSPointerDown'   : 'pointerdown';
-var POINTER_MOVE =   msPointer ? 'MSPointerMove'   : 'pointermove';
-var POINTER_UP =     msPointer ? 'MSPointerUp'     : 'pointerup';
-var POINTER_CANCEL = msPointer ? 'MSPointerCancel' : 'pointercancel';
-var TAG_WHITE_LIST = ['INPUT', 'SELECT', 'OPTION'];
+let POINTER_DOWN =   msPointer ? 'MSPointerDown'   : 'pointerdown';
+let POINTER_MOVE =   msPointer ? 'MSPointerMove'   : 'pointermove';
+let POINTER_UP =     msPointer ? 'MSPointerUp'     : 'pointerup';
+let POINTER_CANCEL = msPointer ? 'MSPointerCancel' : 'pointercancel';
+let TAG_WHITE_LIST = ['INPUT', 'SELECT', 'OPTION'];
 
-var _pointers = {};
-var _pointerDocListener = false;
+let _pointers = {};
+let _pointerDocListener = false;
 
 // DomEvent.DoubleTap needs to know about this
-var _pointersCount = 0;
+let _pointersCount = 0;
 
 // Provides a touch events wrapper for (ms)pointer events.
 // ref http://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890
@@ -2027,7 +2027,7 @@ function addPointerListener(obj, type, handler, id) {
 }
 
 function removePointerListener(obj, type, id) {
-	var handler = obj['_leaflet_' + type + id];
+	let handler = obj['_leaflet_' + type + id];
 
 	if (type === 'touchstart') {
 		obj.removeEventListener(POINTER_DOWN, handler, false);
@@ -2044,7 +2044,7 @@ function removePointerListener(obj, type, id) {
 }
 
 function _addPointerStart(obj, handler, id) {
-	var onDown = bind(function (e) {
+	let onDown = bind(function (e) {
 		if (e.pointerType !== 'mouse' && e.MSPOINTER_TYPE_MOUSE && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {
 			// In IE11, some touch events needs to fire for form controls, or
 			// the controls will stop working. We keep a whitelist of tag names that
@@ -2101,7 +2101,7 @@ function _handlePointer(e, handler) {
 }
 
 function _addPointerMove(obj, handler, id) {
-	var onMove = (e) => {
+	let onMove = (e) => {
 		// don't fire touch moves when mouse isn't down
 		if ((e.pointerType === e.MSPOINTER_TYPE_MOUSE || e.pointerType === 'mouse') && e.buttons === 0) { return; }
 
@@ -2113,7 +2113,7 @@ function _addPointerMove(obj, handler, id) {
 }
 
 function _addPointerEnd(obj, handler, id) {
-	var onUp = (e) => {
+	let onUp = (e) => {
 		_handlePointer(e, handler);
 	};
 
@@ -2126,9 +2126,9 @@ function _addPointerEnd(obj, handler, id) {
  * Extends the event handling code with double tap support for mobile browsers.
  */
 
-var _touchstart = msPointer ? 'MSPointerDown' : pointer ? 'pointerdown' : 'touchstart';
-var _touchend = msPointer ? 'MSPointerUp' : pointer ? 'pointerup' : 'touchend';
-var _pre = '_leaflet_';
+let _touchstart = msPointer ? 'MSPointerDown' : pointer ? 'pointerdown' : 'touchstart';
+let _touchend = msPointer ? 'MSPointerUp' : pointer ? 'pointerup' : 'touchend';
+let _pre = '_leaflet_';
 
 // inspired by Zepto touch code by Thomas Fuchs
 function addDoubleTapListener(obj, handler, id) {
@@ -2148,7 +2148,7 @@ function addDoubleTapListener(obj, handler, id) {
 
 		if (count > 1) { return; }
 
-		var now = Date.now(),
+		let now = Date.now(),
 		    delta = now - (last || now);
 
 		touch$$1 = e.touches ? e.touches[0] : e;
@@ -2161,7 +2161,7 @@ function addDoubleTapListener(obj, handler, id) {
 			if (pointer) {
 				if ((!edge) || e.pointerType === 'mouse') { return; }
 				// work around .type being readonly with MSPointer* events
-				var newTouch = {},
+				let newTouch = {},
 				    prop, i;
 
 				for (i in touch$$1) {
@@ -2193,7 +2193,7 @@ function addDoubleTapListener(obj, handler, id) {
 }
 
 function removeDoubleTapListener(obj, id) {
-	var touchstart = obj[_pre + _touchstart + id],
+	let touchstart = obj[_pre + _touchstart + id],
 	    touchend = obj[_pre + _touchend + id],
 	    dblclick = obj[_pre + 'dblclick' + id];
 
@@ -2231,7 +2231,7 @@ function on(obj, types, fn, context) {
 	} else {
 		types = splitWords(types);
 
-		for (var i = 0, len = types.length; i < len; i++) {
+		for (let i = 0, len = types.length; i < len; i++) {
 			addOne(obj, types[i], fn, context);
 		}
 	}
@@ -2239,7 +2239,7 @@ function on(obj, types, fn, context) {
 	return this;
 }
 
-var eventsKey = '_leaflet_events';
+let eventsKey = '_leaflet_events';
 
 // @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this
 // Removes a previously added listener function.
@@ -2258,7 +2258,7 @@ function off(obj, types, fn, context) {
 	} else if (types) {
 		types = splitWords(types);
 
-		for (var i = 0, len = types.length; i < len; i++) {
+		for (let i = 0, len = types.length; i < len; i++) {
 			removeOne(obj, types[i], fn, context);
 		}
 	} else {
@@ -2272,15 +2272,15 @@ function off(obj, types, fn, context) {
 }
 
 function addOne(obj, type, fn, context) {
-	var id = type + stamp(fn) + (context ? '_' + stamp(context) : '');
+	let id = type + stamp(fn) + (context ? '_' + stamp(context) : '');
 
 	if (obj[eventsKey] && obj[eventsKey][id]) { return this; }
 
-	var handler = (e) => {
+	let handler = (e) => {
 		return fn.call(context || obj, e || window.event);
 	};
 
-	var originalHandler = handler;
+	let originalHandler = handler;
 
 	if (pointer && type.indexOf('touch') === 0) {
 		// Needs DomEvent.Pointer.js
@@ -2325,7 +2325,7 @@ function addOne(obj, type, fn, context) {
 
 function removeOne(obj, type, fn, context) {
 
-	var id = type + stamp(fn) + (context ? '_' + stamp(context) : ''),
+	let id = type + stamp(fn) + (context ? '_' + stamp(context) : ''),
 	    handler = obj[eventsKey] && obj[eventsKey][id];
 
 	if (!handler) { return this; }
@@ -2422,10 +2422,10 @@ function getMousePosition(e, container) {
 		return new Point(e.clientX, e.clientY);
 	}
 
-	var rect = container.getBoundingClientRect();
+	let rect = container.getBoundingClientRect();
 
-	var scaleX = rect.width / container.offsetWidth || 1;
-	var scaleY = rect.height / container.offsetHeight || 1;
+	let scaleX = rect.width / container.offsetWidth || 1;
+	let scaleY = rect.height / container.offsetHeight || 1;
 	return new Point(
 		e.clientX / scaleX - rect.left - container.clientLeft,
 		e.clientY / scaleY - rect.top - container.clientTop);
@@ -2433,7 +2433,7 @@ function getMousePosition(e, container) {
 
 // Chrome on Win scrolls double the pixels as in other platforms (see #4538),
 // and Firefox scrolls device pixels, not CSS pixels
-var wheelPxFactor =
+let wheelPxFactor =
 	(win && chrome) ? 2 * window.devicePixelRatio :
 	gecko ? window.devicePixelRatio : 1;
 
@@ -2454,7 +2454,7 @@ function getWheelDelta(e) {
 	       0;
 }
 
-var skipEvents = {};
+let skipEvents = {};
 
 function fakeStop(e) {
 	// fakes stopPropagation by setting a special event flag, checked/reset with skipped(e)
@@ -2462,7 +2462,7 @@ function fakeStop(e) {
 }
 
 function skipped(e) {
-	var events = skipEvents[e.type];
+	let events = skipEvents[e.type];
 	// reset when checking, as it's only used in map container and propagates outside of the map
 	skipEvents[e.type] = false;
 	return events;
@@ -2471,7 +2471,7 @@ function skipped(e) {
 // check if element really left/entered the event target (for mouseenter/mouseleave)
 function isExternalTarget(el, e) {
 
-	var related = e.relatedTarget;
+	let related = e.relatedTarget;
 
 	if (!related) { return true; }
 
@@ -2489,7 +2489,7 @@ var lastClick;
 
 // this is a horrible workaround for a bug in Android where a single touch triggers two click events
 function filterClick(e, handler) {
-	var timeStamp = (e.timeStamp || (e.originalEvent && e.originalEvent.timeStamp)),
+	let timeStamp = (e.timeStamp || (e.originalEvent && e.originalEvent.timeStamp)),
 	    elapsed = lastClick && (timeStamp - lastClick);
 
 	// are they closer together than 500ms yet more than 100ms?
@@ -2509,7 +2509,7 @@ function filterClick(e, handler) {
 
 
 
-var DomEvent = (Object.freeze || Object)({
+let DomEvent = (Object.freeze || Object)({
 	on: on,
 	off: off,
 	stopPropagation: stopPropagation,
@@ -2540,7 +2540,7 @@ var DomEvent = (Object.freeze || Object)({
 
 // @property TRANSFORM: String
 // Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).
-var TRANSFORM = testProp(
+let TRANSFORM = testProp(
 	['transform', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform']);
 
 // webkitTransition comes first because some browser versions that drop vendor prefix don't do
@@ -2548,12 +2548,12 @@ var TRANSFORM = testProp(
 
 // @property TRANSITION: String
 // Vendor-prefixed transition style name.
-var TRANSITION = testProp(
+let TRANSITION = testProp(
 	['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);
 
 // @property TRANSITION_END: String
 // Vendor-prefixed transitionend event name.
-var TRANSITION_END =
+let TRANSITION_END =
 	TRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend';
 
 
@@ -2568,10 +2568,10 @@ function get(id) {
 // Returns the value for a certain style attribute on an element,
 // including computed values or values set through CSS.
 function getStyle(el, style) {
-	var value = el.style[style] || (el.currentStyle && el.currentStyle[style]);
+	let value = el.style[style] || (el.currentStyle && el.currentStyle[style]);
 
 	if ((!value || value === 'auto') && document.defaultView) {
-		var css = document.defaultView.getComputedStyle(el, null);
+		let css = document.defaultView.getComputedStyle(el, null);
 		value = css ? css[style] : null;
 	}
 	return value === 'auto' ? null : value;
@@ -2580,7 +2580,7 @@ function getStyle(el, style) {
 // @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement
 // Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.
 function create$1(tagName, className, container) {
-	var el = document.createElement(tagName);
+	let el = document.createElement(tagName);
 	el.className = className || '';
 
 	if (container) {
@@ -2592,7 +2592,7 @@ function create$1(tagName, className, container) {
 // @function remove(el: HTMLElement)
 // Removes `el` from its parent element
 function remove(el) {
-	var parent = el.parentNode;
+	let parent = el.parentNode;
 	if (parent) {
 		parent.removeChild(el);
 	}
@@ -2609,7 +2609,7 @@ function empty(el) {
 // @function toFront(el: HTMLElement)
 // Makes `el` the last child of its parent, so it renders in front of the other children.
 function toFront(el) {
-	var parent = el.parentNode;
+	let parent = el.parentNode;
 	if (parent.lastChild !== el) {
 		parent.appendChild(el);
 	}
@@ -2618,7 +2618,7 @@ function toFront(el) {
 // @function toBack(el: HTMLElement)
 // Makes `el` the first child of its parent, so it renders behind the other children.
 function toBack(el) {
-	var parent = el.parentNode;
+	let parent = el.parentNode;
 	if (parent.firstChild !== el) {
 		parent.insertBefore(el, parent.firstChild);
 	}
@@ -2630,7 +2630,7 @@ function hasClass(el, name) {
 	if (el.classList !== undefined) {
 		return el.classList.contains(name);
 	}
-	var className = getClass(el);
+	let className = getClass(el);
 	return className.length > 0 && new RegExp('(^|\\s)' + name + '(\\s|$)').test(className);
 }
 
@@ -2638,12 +2638,12 @@ function hasClass(el, name) {
 // Adds `name` to the element's class attribute.
 function addClass(el, name) {
 	if (el.classList !== undefined) {
-		var classes = splitWords(name);
-		for (var i = 0, len = classes.length; i < len; i++) {
+		let classes = splitWords(name);
+		for (let i = 0, len = classes.length; i < len; i++) {
 			el.classList.add(classes[i]);
 		}
 	} else if (!hasClass(el, name)) {
-		var className = getClass(el);
+		let className = getClass(el);
 		setClass(el, (className ? className + ' ' : '') + name);
 	}
 }
@@ -2687,7 +2687,7 @@ function setOpacity(el, value) {
 }
 
 function _setOpacityIE(el, value) {
-	var filter = false,
+	let filter = false,
 	    filterName = 'DXImageTransform.Microsoft.Alpha';
 
 	// filters collection throws an error if we try to retrieve a filter that doesn't exist
@@ -2714,9 +2714,9 @@ function _setOpacityIE(el, value) {
 // that is a valid style name for an element. If no such name is found,
 // it returns false. Useful for vendor-prefixed styles like `transform`.
 function testProp(props) {
-	var style = document.documentElement.style;
+	let style = document.documentElement.style;
 
-	for (var i = 0; i < props.length; i++) {
+	for (let i = 0; i < props.length; i++) {
 		if (props[i] in style) {
 			return props[i];
 		}
@@ -2729,7 +2729,7 @@ function testProp(props) {
 // and optionally scaled by `scale`. Does not have an effect if the
 // browser doesn't support 3D CSS transforms.
 function setTransform(el, offset, scale) {
-	var pos = offset || new Point(0, 0);
+	let pos = offset || new Point(0, 0);
 
 	el.style[TRANSFORM] =
 		(ie3d ?
@@ -2784,12 +2784,12 @@ if ('onselectstart' in document) {
 		off(window, 'selectstart', preventDefault);
 	};
 } else {
-	var userSelectProperty = testProp(
+	let userSelectProperty = testProp(
 		['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);
 
 	disableTextSelection = () => {
 		if (userSelectProperty) {
-			var style = document.documentElement.style;
+			let style = document.documentElement.style;
 			_userSelect = style[userSelectProperty];
 			style[userSelectProperty] = 'none';
 		}
@@ -2845,7 +2845,7 @@ function restoreOutline() {
 }
 
 
-var DomUtil = (Object.freeze || Object)({
+let DomUtil = (Object.freeze || Object)({
 	TRANSFORM: TRANSFORM,
 	TRANSITION: TRANSITION,
 	TRANSITION_END: TRANSITION_END,
@@ -2882,7 +2882,7 @@ var DomUtil = (Object.freeze || Object)({
  *
  * @example
  * ```js
- * var fx = new L.PosAnimation();
+ * let fx = new L.PosAnimation();
  * fx.run(el, [300, 500], 0.5);
  * ```
  *
@@ -2891,7 +2891,7 @@ var DomUtil = (Object.freeze || Object)({
  *
  */
 
-var PosAnimation = Evented.extend({
+let PosAnimation = Evented.extend({
 
 	// @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)
 	// Run an animation of a given element to a new position, optionally setting
@@ -2933,7 +2933,7 @@ var PosAnimation = Evented.extend({
 	},
 
 	_step: function (round) {
-		var elapsed = (+new Date()) - this._startTime,
+		let elapsed = (+new Date()) - this._startTime,
 		    duration = this._duration * 1000;
 
 		if (elapsed < duration) {
@@ -2945,7 +2945,7 @@ var PosAnimation = Evented.extend({
 	},
 
 	_runFrame: function (progress, round) {
-		var pos = this._startPos.add(this._offset.multiplyBy(progress));
+		let pos = this._startPos.add(this._offset.multiplyBy(progress));
 		if (round) {
 			pos._round();
 		}
@@ -2981,7 +2981,7 @@ var PosAnimation = Evented.extend({
  *
  * ```js
  * // initialize the map on the "map" div with a given center and zoom
- * var map = L.map('map', {
+ * let map = L.map('map', {
  * 	center: [51.505, -0.09],
  * 	zoom: 13
  * });
@@ -2989,7 +2989,7 @@ var PosAnimation = Evented.extend({
  *
  */
 
-var Map = Evented.extend({
+let Map = Evented.extend({
 
 	options: {
 		// @section Map State Options
@@ -3149,7 +3149,7 @@ var Map = Evented.extend({
 			}
 
 			// try animating pan or zoom
-			var moved = (this._zoom !== zoom) ?
+			let moved = (this._zoom !== zoom) ?
 				this._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :
 				this._tryAnimatedPan(center, options.pan);
 
@@ -3197,7 +3197,7 @@ var Map = Evented.extend({
 	// @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this
 	// Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.
 	setZoomAround: function (latlng, zoom, options) {
-		var scale = this.getZoomScale(zoom),
+		let scale = this.getZoomScale(zoom),
 		    viewHalf = this.getSize().divideBy(2),
 		    containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng),
 
@@ -3212,7 +3212,7 @@ var Map = Evented.extend({
 		options = options || {};
 		bounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);
 
-		var paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),
+		let paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),
 		    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),
 
 		    zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));
@@ -3226,7 +3226,7 @@ var Map = Evented.extend({
 			};
 		}
 
-		var paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),
+		let paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),
 
 		    swPoint = this.project(bounds.getSouthWest(), zoom),
 		    nePoint = this.project(bounds.getNorthEast(), zoom),
@@ -3249,7 +3249,7 @@ var Map = Evented.extend({
 			throw new Error('Bounds are not valid.');
 		}
 
-		var target = this._getBoundsCenterZoom(bounds, options);
+		let target = this._getBoundsCenterZoom(bounds, options);
 		return this.setView(target.center, target.zoom, options);
 	},
 
@@ -3300,7 +3300,7 @@ var Map = Evented.extend({
 		if (options.animate !== false) {
 			addClass(this._mapPane, 'leaflet-pan-anim');
 
-			var newPos = this._getMapPanePos().subtract(offset).round();
+			let newPos = this._getMapPanePos().subtract(offset).round();
 			this._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);
 		} else {
 			this._rawPanBy(offset);
@@ -3322,7 +3322,7 @@ var Map = Evented.extend({
 
 		this._stop();
 
-		var from = this.project(this.getCenter()),
+		let from = this.project(this.getCenter()),
 		    to = this.project(targetCenter),
 		    size = this.getSize(),
 		    startZoom = this._zoom;
@@ -3346,7 +3346,7 @@ var Map = Evented.extend({
 
 			    // workaround for floating point precision bug when sq = 0, log = -Infinite,
 			    // thus triggering an infinite loop in flyTo
-			    var log = sq < 0.000000001 ? -18 : Math.log(sq);
+			    let log = sq < 0.000000001 ? -18 : Math.log(sq);
 
 			return log;
 		}
@@ -3362,12 +3362,12 @@ var Map = Evented.extend({
 
 		function easeOut(t) { return 1 - Math.pow(1 - t, 1.5); }
 
-		var start = Date.now(),
+		let start = Date.now(),
 		    S = (r(1) - r0) / rho,
 		    duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;
 
 		function frame() {
-			var t = (Date.now() - start) / duration,
+			let t = (Date.now() - start) / duration,
 			    s = easeOut(t) * S;
 
 			if (t <= 1) {
@@ -3395,7 +3395,7 @@ var Map = Evented.extend({
 	// Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),
 	// but takes a bounds parameter like [`fitBounds`](#map-fitbounds).
 	flyToBounds: function (bounds, options) {
-		var target = this._getBoundsCenterZoom(bounds, options);
+		let target = this._getBoundsCenterZoom(bounds, options);
 		return this.flyTo(target.center, target.zoom, options);
 	},
 
@@ -3423,7 +3423,7 @@ var Map = Evented.extend({
 	// @method setMinZoom(zoom: Number): this
 	// Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).
 	setMinZoom: function (zoom) {
-		var oldZoom = this.options.minZoom;
+		let oldZoom = this.options.minZoom;
 		this.options.minZoom = zoom;
 
 		if (this._loaded && oldZoom !== zoom) {
@@ -3440,7 +3440,7 @@ var Map = Evented.extend({
 	// @method setMaxZoom(zoom: Number): this
 	// Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).
 	setMaxZoom: function (zoom) {
-		var oldZoom = this.options.maxZoom;
+		let oldZoom = this.options.maxZoom;
 		this.options.maxZoom = zoom;
 
 		if (this._loaded && oldZoom !== zoom) {
@@ -3458,7 +3458,7 @@ var Map = Evented.extend({
 	// Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.
 	panInsideBounds: function (bounds, options) {
 		this._enforcingBounds = true;
-		var center = this.getCenter(),
+		let center = this.getCenter(),
 		    newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));
 
 		if (!center.equals(newCenter)) {
@@ -3490,11 +3490,11 @@ var Map = Evented.extend({
 			pan: true
 		}, options === true ? {animate: true} : options);
 
-		var oldSize = this.getSize();
+		let oldSize = this.getSize();
 		this._sizeChanged = true;
 		this._lastCenter = null;
 
-		var newSize = this.getSize(),
+		let newSize = this.getSize(),
 		    oldCenter = oldSize.divideBy(2).round(),
 		    newCenter = newSize.divideBy(2).round(),
 		    offset = oldCenter.subtract(newCenter);
@@ -3567,7 +3567,7 @@ var Map = Evented.extend({
 			return this;
 		}
 
-		var onResponse = bind(this._handleGeolocationResponse, this),
+		let onResponse = bind(this._handleGeolocationResponse, this),
 		    onError = bind(this._handleGeolocationError, this);
 
 		if (options.watch) {
@@ -3594,7 +3594,7 @@ var Map = Evented.extend({
 	},
 
 	_handleGeolocationError: function (error) {
-		var c = error.code,
+		let c = error.code,
 		    message = error.message ||
 		            (c === 1 ? 'permission denied' :
 		            (c === 2 ? 'position unavailable' : 'timeout'));
@@ -3613,18 +3613,18 @@ var Map = Evented.extend({
 	},
 
 	_handleGeolocationResponse: function (pos) {
-		var lat = pos.coords.latitude,
+		let lat = pos.coords.latitude,
 		    lng = pos.coords.longitude,
 		    latlng = new LatLng(lat, lng),
 		    bounds = latlng.toBounds(pos.coords.accuracy),
 		    options = this._locateOptions;
 
 		if (options.setView) {
-			var zoom = this.getBoundsZoom(bounds);
+			let zoom = this.getBoundsZoom(bounds);
 			this.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);
 		}
 
-		var data = {
+		let data = {
 			latlng: latlng,
 			bounds: bounds,
 			timestamp: pos.timestamp
@@ -3649,7 +3649,7 @@ var Map = Evented.extend({
 	addHandler: function (name, HandlerClass) {
 		if (!HandlerClass) { return this; }
 
-		var handler = this[name] = new HandlerClass(this);
+		let handler = this[name] = new HandlerClass(this);
 
 		this._handlers.push(handler);
 
@@ -3724,7 +3724,7 @@ var Map = Evented.extend({
 	// then returns it. The pane is created as a child of `container`, or
 	// as a child of the main map pane if not set.
 	createPane: function (name, container) {
-		var className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),
+		let className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),
 		    pane = create$1('div', className, container || this._mapPane);
 
 		if (name) {
@@ -3755,7 +3755,7 @@ var Map = Evented.extend({
 	// @method getBounds(): LatLngBounds
 	// Returns the geographical bounds visible in the current map view
 	getBounds: function () {
-		var bounds = this.getPixelBounds(),
+		let bounds = this.getPixelBounds(),
 		    sw = this.unproject(bounds.getBottomLeft()),
 		    ne = this.unproject(bounds.getTopRight());
 
@@ -3785,7 +3785,7 @@ var Map = Evented.extend({
 		bounds = toLatLngBounds(bounds);
 		padding = toPoint(padding || [0, 0]);
 
-		var zoom = this.getZoom() || 0,
+		let zoom = this.getZoom() || 0,
 		    min = this.getMinZoom(),
 		    max = this.getMaxZoom(),
 		    nw = bounds.getNorthWest(),
@@ -3824,7 +3824,7 @@ var Map = Evented.extend({
 	// Returns the bounds of the current map view in projected pixel
 	// coordinates (sometimes useful in layer and overlay implementations).
 	getPixelBounds: function (center, zoom) {
-		var topLeftPoint = this._getTopLeftPoint(center, zoom);
+		let topLeftPoint = this._getTopLeftPoint(center, zoom);
 		return new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));
 	},
 
@@ -3875,7 +3875,7 @@ var Map = Evented.extend({
 	// `fromZoom` to `toZoom`. Used internally to help with zoom animations.
 	getZoomScale: function (toZoom, fromZoom) {
 		// TODO replace with universal implementation after refactoring projections
-		var crs = this.options.crs;
+		let crs = this.options.crs;
 		fromZoom = fromZoom === undefined ? this._zoom : fromZoom;
 		return crs.scale(toZoom) / crs.scale(fromZoom);
 	},
@@ -3885,9 +3885,9 @@ var Map = Evented.extend({
 	// level and everything is scaled by a factor of `scale`. Inverse of
 	// [`getZoomScale`](#map-getZoomScale).
 	getScaleZoom: function (scale, fromZoom) {
-		var crs = this.options.crs;
+		let crs = this.options.crs;
 		fromZoom = fromZoom === undefined ? this._zoom : fromZoom;
-		var zoom = crs.zoom(scale * crs.scale(fromZoom));
+		let zoom = crs.zoom(scale * crs.scale(fromZoom));
 		return isNaN(zoom) ? Infinity : zoom;
 	},
 
@@ -3912,7 +3912,7 @@ var Map = Evented.extend({
 	// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),
 	// returns the corresponding geographical coordinate (for the current zoom level).
 	layerPointToLatLng: function (point) {
-		var projectedPoint = toPoint(point).add(this.getPixelOrigin());
+		let projectedPoint = toPoint(point).add(this.getPixelOrigin());
 		return this.unproject(projectedPoint);
 	},
 
@@ -3920,7 +3920,7 @@ var Map = Evented.extend({
 	// Given a geographical coordinate, returns the corresponding pixel coordinate
 	// relative to the [origin pixel](#map-getpixelorigin).
 	latLngToLayerPoint: function (latlng) {
-		var projectedPoint = this.project(toLatLng(latlng))._round();
+		let projectedPoint = this.project(toLatLng(latlng))._round();
 		return projectedPoint._subtract(this.getPixelOrigin());
 	},
 
@@ -3969,7 +3969,7 @@ var Map = Evented.extend({
 	// Given a pixel coordinate relative to the map container, returns
 	// the corresponding geographical coordinate (for the current zoom level).
 	containerPointToLatLng: function (point) {
-		var layerPoint = this.containerPointToLayerPoint(toPoint(point));
+		let layerPoint = this.containerPointToLayerPoint(toPoint(point));
 		return this.layerPointToLatLng(layerPoint);
 	},
 
@@ -4005,7 +4005,7 @@ var Map = Evented.extend({
 	// map initialization methods
 
 	_initContainer: function (id) {
-		var container = this._container = get(id);
+		let container = this._container = get(id);
 
 		if (!container) {
 			throw new Error('Map container not found.');
@@ -4018,7 +4018,7 @@ var Map = Evented.extend({
 	},
 
 	_initLayout: function () {
-		var container = this._container;
+		let container = this._container;
 
 		this._fadeAnimated = this.options.fadeAnimation && any3d;
 
@@ -4029,7 +4029,7 @@ var Map = Evented.extend({
 			(safari ? ' leaflet-safari' : '') +
 			(this._fadeAnimated ? ' leaflet-fade-anim' : ''));
 
-		var position = getStyle(container, 'position');
+		let position = getStyle(container, 'position');
 
 		if (position !== 'absolute' && position !== 'relative' && position !== 'fixed') {
 			container.style.position = 'relative';
@@ -4043,7 +4043,7 @@ var Map = Evented.extend({
 	},
 
 	_initPanes: function () {
-		var panes = this._panes = {};
+		let panes = this._panes = {};
 		this._paneRenderers = {};
 
 		// @section
@@ -4093,13 +4093,13 @@ var Map = Evented.extend({
 	_resetView: function (center, zoom) {
 		setPosition(this._mapPane, new Point(0, 0));
 
-		var loading = !this._loaded;
+		let loading = !this._loaded;
 		this._loaded = true;
 		zoom = this._limitZoom(zoom);
 
 		this.fire('viewprereset');
 
-		var zoomChanged = this._zoom !== zoom;
+		let zoomChanged = this._zoom !== zoom;
 		this
 			._moveStart(zoomChanged, false)
 			._move(center, zoom)
@@ -4136,7 +4136,7 @@ var Map = Evented.extend({
 		if (zoom === undefined) {
 			zoom = this._zoom;
 		}
-		var zoomChanged = this._zoom !== zoom;
+		let zoomChanged = this._zoom !== zoom;
 
 		this._zoom = zoom;
 		this._lastCenter = center;
@@ -4203,7 +4203,7 @@ var Map = Evented.extend({
 		this._targets = {};
 		this._targets[stamp(this._container)] = this;
 
-		var onOff = remove$$1 ? off : on;
+		let onOff = remove$$1 ? off : on;
 
 		// @event click: MouseEvent
 		// Fired when the user clicks (or taps) the map.
@@ -4250,7 +4250,7 @@ var Map = Evented.extend({
 	},
 
 	_onMoveEnd: function () {
-		var pos = this._getMapPanePos();
+		let pos = this._getMapPanePos();
 		if (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) {
 			// https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have
 			// a pixel offset on very high values, see: http://jsfiddle.net/dg6r5hhb/
@@ -4259,7 +4259,7 @@ var Map = Evented.extend({
 	},
 
 	_findEventTargets: function (e, type) {
-		var targets = [],
+		let targets = [],
 		    target,
 		    isHover = type === 'mouseout' || type === 'mouseover',
 		    src = e.target || e.srcElement,
@@ -4289,7 +4289,7 @@ var Map = Evented.extend({
 	_handleDOMEvent: function (e) {
 		if (!this._loaded || skipped(e)) { return; }
 
-		var type = e.type;
+		let type = e.type;
 
 		if (type === 'mousedown' || type === 'keypress') {
 			// prevents outline when clicking on keyboard-focusable element
@@ -4309,7 +4309,7 @@ var Map = Evented.extend({
 			// Fired before mouse click on the map (sometimes useful when you
 			// want something to happen on click before any existing click
 			// handlers start running).
-			var synth = extend({}, e);
+			let synth = extend({}, e);
 			synth.type = 'preclick';
 			this._fireDOMEvent(synth, synth.type, targets);
 		}
@@ -4321,24 +4321,24 @@ var Map = Evented.extend({
 
 		if (!targets.length) { return; }
 
-		var target = targets[0];
+		let target = targets[0];
 		if (type === 'contextmenu' && target.listens(type, true)) {
 			preventDefault(e);
 		}
 
-		var data = {
+		let data = {
 			originalEvent: e
 		};
 
 		if (e.type !== 'keypress') {
-			var isMarker = target.getLatLng && (!target._radius || target._radius <= 10);
+			let isMarker = target.getLatLng && (!target._radius || target._radius <= 10);
 			data.containerPoint = isMarker ?
 				this.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);
 			data.layerPoint = this.containerPointToLayerPoint(data.containerPoint);
 			data.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);
 		}
 
-		for (var i = 0; i < targets.length; i++) {
+		for (let i = 0; i < targets.length; i++) {
 			targets[i].fire(type, data, true);
 			if (data.originalEvent._stopped ||
 				(targets[i].options.bubblingMouseEvents === false && indexOf(this._mouseEvents, type) !== -1)) { return; }
@@ -4351,7 +4351,7 @@ var Map = Evented.extend({
 	},
 
 	_clearHandlers: function () {
-		for (var i = 0, len = this._handlers.length; i < len; i++) {
+		for (let i = 0, len = this._handlers.length; i < len; i++) {
 			this._handlers[i].disable();
 		}
 	},
@@ -4379,29 +4379,29 @@ var Map = Evented.extend({
 	},
 
 	_moved: function () {
-		var pos = this._getMapPanePos();
+		let pos = this._getMapPanePos();
 		return pos && !pos.equals([0, 0]);
 	},
 
 	_getTopLeftPoint: function (center, zoom) {
-		var pixelOrigin = center && zoom !== undefined ?
+		let pixelOrigin = center && zoom !== undefined ?
 			this._getNewPixelOrigin(center, zoom) :
 			this.getPixelOrigin();
 		return pixelOrigin.subtract(this._getMapPanePos());
 	},
 
 	_getNewPixelOrigin: function (center, zoom) {
-		var viewHalf = this.getSize()._divideBy(2);
+		let viewHalf = this.getSize()._divideBy(2);
 		return this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();
 	},
 
 	_latLngToNewLayerPoint: function (latlng, zoom, center) {
-		var topLeft = this._getNewPixelOrigin(center, zoom);
+		let topLeft = this._getNewPixelOrigin(center, zoom);
 		return this.project(latlng, zoom)._subtract(topLeft);
 	},
 
 	_latLngBoundsToNewLayerBounds: function (latLngBounds, zoom, center) {
-		var topLeft = this._getNewPixelOrigin(center, zoom);
+		let topLeft = this._getNewPixelOrigin(center, zoom);
 		return toBounds([
 			this.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft),
 			this.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft),
@@ -4425,7 +4425,7 @@ var Map = Evented.extend({
 
 		if (!bounds) { return center; }
 
-		var centerPoint = this.project(center, zoom),
+		let centerPoint = this.project(center, zoom),
 		    viewHalf = this.getSize().divideBy(2),
 		    viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),
 		    offset = this._getBoundsOffset(viewBounds, bounds, zoom);
@@ -4444,7 +4444,7 @@ var Map = Evented.extend({
 	_limitOffset: function (offset, bounds) {
 		if (!bounds) { return offset; }
 
-		var viewBounds = this.getPixelBounds(),
+		let viewBounds = this.getPixelBounds(),
 		    newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));
 
 		return offset.add(this._getBoundsOffset(newBounds, bounds));
@@ -4452,7 +4452,7 @@ var Map = Evented.extend({
 
 	// returns offset needed for pxBounds to get inside maxBounds at a specified zoom
 	_getBoundsOffset: function (pxBounds, maxBounds, zoom) {
-		var projectedMaxBounds = toBounds(
+		let projectedMaxBounds = toBounds(
 		        this.project(maxBounds.getNorthEast(), zoom),
 		        this.project(maxBounds.getSouthWest(), zoom)
 		    ),
@@ -4472,7 +4472,7 @@ var Map = Evented.extend({
 	},
 
 	_limitZoom: function (zoom) {
-		var min = this.getMinZoom(),
+		let min = this.getMinZoom(),
 		    max = this.getMaxZoom(),
 		    snap = any3d ? this.options.zoomSnap : 1;
 		if (snap) {
@@ -4492,7 +4492,7 @@ var Map = Evented.extend({
 
 	_tryAnimatedPan: function (center, options) {
 		// difference between the new and current centers in pixels
-		var offset = this._getCenterOffset(center)._trunc();
+		let offset = this._getCenterOffset(center)._trunc();
 
 		// don't animate too far unless animate: true specified in options
 		if ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }
@@ -4504,11 +4504,11 @@ var Map = Evented.extend({
 
 	_createAnimProxy: function () {
 
-		var proxy = this._proxy = create$1('div', 'leaflet-proxy leaflet-zoom-animated');
+		let proxy = this._proxy = create$1('div', 'leaflet-proxy leaflet-zoom-animated');
 		this._panes.mapPane.appendChild(proxy);
 
 		this.on('zoomanim', function (e) {
-			var prop = TRANSFORM,
+			let prop = TRANSFORM,
 			    transform = this._proxy.style[prop];
 
 			setTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1));
@@ -4520,7 +4520,7 @@ var Map = Evented.extend({
 		}, this);
 
 		this.on('load moveend', function () {
-			var c = this.getCenter(),
+			let c = this.getCenter(),
 			    z = this.getZoom();
 			setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1));
 		}, this);
@@ -4554,7 +4554,7 @@ var Map = Evented.extend({
 		        Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }
 
 		// offset is the pixel coords of the zoom origin relative to the current center
-		var scale = this.getZoomScale(zoom),
+		let scale = this.getZoomScale(zoom),
 		    offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale);
 
 		// don't animate if the zoom origin isn't within one screen from the current center, unless forced
@@ -4635,7 +4635,7 @@ function createMap(id, options) {
  * All other controls extend from this class.
  */
 
-var Control = Class.extend({
+let Control = Class.extend({
 	// @section
 	// @aka Control options
 	options: {
@@ -4662,7 +4662,7 @@ var Control = Class.extend({
 	// @method setPosition(position: string): this
 	// Sets the position of the control.
 	setPosition: function (position) {
-		var map = this._map;
+		let map = this._map;
 
 		if (map) {
 			map.removeControl(this);
@@ -4689,7 +4689,7 @@ var Control = Class.extend({
 		this.remove();
 		this._map = map;
 
-		var container = this._container = this.onAdd(map),
+		let container = this._container = this.onAdd(map),
 		    pos = this.getPosition(),
 		    corner = map._controlCorners[pos];
 
@@ -4730,7 +4730,7 @@ var Control = Class.extend({
 	}
 });
 
-var control = (options) => {
+let control = (options) => {
 	return new Control(options);
 };
 
@@ -4765,13 +4765,13 @@ Map.include({
 	},
 
 	_initControlPos: function () {
-		var corners = this._controlCorners = {},
+		let corners = this._controlCorners = {},
 		    l = 'leaflet-',
 		    container = this._controlContainer =
 		            create$1('div', l + 'control-container', this._container);
 
 		function createCorner(vSide, hSide) {
-			var className = l + vSide + ' ' + l + hSide;
+			let className = l + vSide + ' ' + l + hSide;
 
 			corners[vSide + hSide] = create$1('div', className, container);
 		}
@@ -4802,12 +4802,12 @@ Map.include({
  * @example
  *
  * ```js
- * var baseLayers = {
+ * let baseLayers = {
  * 	"Mapbox": mapbox,
  * 	"OpenStreetMap": osm
  * };
  *
- * var overlays = {
+ * let overlays = {
  * 	"Marker": marker,
  * 	"Roads": roadsLayer
  * };
@@ -4831,7 +4831,7 @@ Map.include({
  * ```
  */
 
-var Layers = Control.extend({
+let Layers = Control.extend({
 	// @section
 	// @aka Control.Layers options
 	options: {
@@ -4888,7 +4888,7 @@ var Layers = Control.extend({
 		this._map = map;
 		map.on('zoomend', this._checkDisabledLayers, this);
 
-		for (var i = 0; i < this._layers.length; i++) {
+		for (let i = 0; i < this._layers.length; i++) {
 			this._layers[i].layer.on('add remove', this._onLayerChange, this);
 		}
 
@@ -4904,7 +4904,7 @@ var Layers = Control.extend({
 	onRemove: function () {
 		this._map.off('zoomend', this._checkDisabledLayers, this);
 
-		for (var i = 0; i < this._layers.length; i++) {
+		for (let i = 0; i < this._layers.length; i++) {
 			this._layers[i].layer.off('add remove', this._onLayerChange, this);
 		}
 	},
@@ -4928,7 +4928,7 @@ var Layers = Control.extend({
 	removeLayer: function (layer) {
 		layer.off('add remove', this._onLayerChange, this);
 
-		var obj = this._getLayer(stamp(layer));
+		let obj = this._getLayer(stamp(layer));
 		if (obj) {
 			this._layers.splice(this._layers.indexOf(obj), 1);
 		}
@@ -4940,7 +4940,7 @@ var Layers = Control.extend({
 	expand: function () {
 		addClass(this._container, 'leaflet-control-layers-expanded');
 		this._form.style.height = null;
-		var acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);
+		let acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);
 		if (acceptableHeight < this._form.clientHeight) {
 			addClass(this._form, 'leaflet-control-layers-scrollbar');
 			this._form.style.height = acceptableHeight + 'px';
@@ -4959,7 +4959,7 @@ var Layers = Control.extend({
 	},
 
 	_initLayout: function () {
-		var className = 'leaflet-control-layers',
+		let className = 'leaflet-control-layers',
 		    container = this._container = create$1('div', className),
 		    collapsed = this.options.collapsed;
 
@@ -4969,7 +4969,7 @@ var Layers = Control.extend({
 		disableClickPropagation(container);
 		disableScrollPropagation(container);
 
-		var form = this._form = create$1('form', className + '-list');
+		let form = this._form = create$1('form', className + '-list');
 
 		if (collapsed) {
 			this._map.on('click', this.collapse, this);
@@ -4982,7 +4982,7 @@ var Layers = Control.extend({
 			}
 		}
 
-		var link = this._layersLink = create$1('a', className + '-toggle', container);
+		let link = this._layersLink = create$1('a', className + '-toggle', container);
 		link.href = '#';
 		link.title = 'Layers';
 
@@ -5005,7 +5005,7 @@ var Layers = Control.extend({
 	},
 
 	_getLayer: function (id) {
-		for (var i = 0; i < this._layers.length; i++) {
+		for (let i = 0; i < this._layers.length; i++) {
 
 			if (this._layers[i] && stamp(this._layers[i].layer) === id) {
 				return this._layers[i];
@@ -5071,7 +5071,7 @@ var Layers = Control.extend({
 			this._update();
 		}
 
-		var obj = this._getLayer(stamp(e.target));
+		let obj = this._getLayer(stamp(e.target));
 
 		// @namespace Map
 		// @section Layer events
@@ -5082,7 +5082,7 @@ var Layers = Control.extend({
 		// @event overlayremove: LayersControlEvent
 		// Fired when an overlay is deselected through the [layer control](#control-layers).
 		// @namespace Control.Layers
-		var type = obj.overlay ?
+		let type = obj.overlay ?
 			(e.type === 'add' ? 'overlayadd' : 'overlayremove') :
 			(e.type === 'add' ? 'baselayerchange' : null);
 
@@ -5094,17 +5094,17 @@ var Layers = Control.extend({
 	// IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see http://bit.ly/PqYLBe)
 	_createRadioElement: function (name, checked) {
 
-		var radioHtml = '<input type="radio" class="leaflet-control-layers-selector" name="' +
+		let radioHtml = '<input type="radio" class="leaflet-control-layers-selector" name="' +
 				name + '"' + (checked ? ' checked="checked"' : '') + '/>';
 
-		var radioFragment = document.createElement('div');
+		let radioFragment = document.createElement('div');
 		radioFragment.innerHTML = radioHtml;
 
 		return radioFragment.firstChild;
 	},
 
 	_addItem: function (obj) {
-		var label = document.createElement('label'),
+		let label = document.createElement('label'),
 		    checked = this._map.hasLayer(obj.layer),
 		    input;
 
@@ -5122,18 +5122,18 @@ var Layers = Control.extend({
 
 		on(input, 'click', this._onInputClick, this);
 
-		var name = document.createElement('span');
+		let name = document.createElement('span');
 		name.innerHTML = ' ' + obj.name;
 
 		// Helps from preventing layer control flicker when checkboxes are disabled
 		// https://github.com/Leaflet/Leaflet/issues/2771
-		var holder = document.createElement('div');
+		let holder = document.createElement('div');
 
 		label.appendChild(holder);
 		holder.appendChild(input);
 		holder.appendChild(name);
 
-		var container = obj.overlay ? this._overlaysList : this._baseLayersList;
+		let container = obj.overlay ? this._overlaysList : this._baseLayersList;
 		container.appendChild(label);
 
 		this._checkDisabledLayers();
@@ -5141,14 +5141,14 @@ var Layers = Control.extend({
 	},
 
 	_onInputClick: function () {
-		var inputs = this._layerControlInputs,
+		let inputs = this._layerControlInputs,
 		    input, layer;
-		var addedLayers = [],
+		let addedLayers = [],
 		    removedLayers = [];
 
 		this._handlingClick = true;
 
-		for (var i = inputs.length - 1; i >= 0; i--) {
+		for (let i = inputs.length - 1; i >= 0; i--) {
 			input = inputs[i];
 			layer = this._getLayer(input.layerId).layer;
 
@@ -5177,12 +5177,12 @@ var Layers = Control.extend({
 	},
 
 	_checkDisabledLayers: function () {
-		var inputs = this._layerControlInputs,
+		let inputs = this._layerControlInputs,
 		    input,
 		    layer,
 		    zoom = this._map.getZoom();
 
-		for (var i = inputs.length - 1; i >= 0; i--) {
+		for (let i = inputs.length - 1; i >= 0; i--) {
 			input = inputs[i];
 			layer = this._getLayer(input.layerId).layer;
 			input.disabled = (layer.options.minZoom !== undefined && zoom < layer.options.minZoom) ||
@@ -5213,7 +5213,7 @@ var Layers = Control.extend({
 
 // @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options)
 // Creates an attribution control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation.
-var layers = (baseLayers, overlays, options) => {
+let layers = (baseLayers, overlays, options) => {
 	return new Layers(baseLayers, overlays, options);
 };
 
@@ -5225,7 +5225,7 @@ var layers = (baseLayers, overlays, options) => {
  * A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`.
  */
 
-var Zoom = Control.extend({
+let Zoom = Control.extend({
 	// @section
 	// @aka Control.Zoom options
 	options: {
@@ -5249,7 +5249,7 @@ var Zoom = Control.extend({
 	},
 
 	onAdd: function (map) {
-		var zoomName = 'leaflet-control-zoom',
+		let zoomName = 'leaflet-control-zoom',
 		    container = create$1('div', zoomName + ' leaflet-bar'),
 		    options = this.options;
 
@@ -5293,7 +5293,7 @@ var Zoom = Control.extend({
 	},
 
 	_createButton: function (html, title, className, container, fn) {
-		var link = create$1('a', className, container);
+		let link = create$1('a', className, container);
 		link.innerHTML = html;
 		link.href = '#';
 		link.title = title;
@@ -5313,7 +5313,7 @@ var Zoom = Control.extend({
 	},
 
 	_updateDisabled: function () {
-		var map = this._map,
+		let map = this._map,
 		    className = 'leaflet-disabled';
 
 		removeClass(this._zoomInButton, className);
@@ -5346,7 +5346,7 @@ Map.addInitHook(function () {
 // @namespace Control.Zoom
 // @factory L.control.zoom(options: Control.Zoom options)
 // Creates a zoom control
-var zoom = (options) => {
+let zoom = (options) => {
 	return new Zoom(options);
 };
 
@@ -5364,7 +5364,7 @@ var zoom = (options) => {
  * ```
  */
 
-var Scale = Control.extend({
+let Scale = Control.extend({
 	// @section
 	// @aka Control.Scale options
 	options: {
@@ -5387,7 +5387,7 @@ var Scale = Control.extend({
 	},
 
 	onAdd: function (map) {
-		var className = 'leaflet-control-scale',
+		let className = 'leaflet-control-scale',
 		    container = create$1('div', className),
 		    options = this.options;
 
@@ -5413,10 +5413,10 @@ var Scale = Control.extend({
 	},
 
 	_update: function () {
-		var map = this._map,
+		let map = this._map,
 		    y = map.getSize().y / 2;
 
-		var maxMeters = map.distance(
+		let maxMeters = map.distance(
 			map.containerPointToLatLng([0, y]),
 			map.containerPointToLatLng([this.options.maxWidth, y]));
 
@@ -5433,14 +5433,14 @@ var Scale = Control.extend({
 	},
 
 	_updateMetric: function (maxMeters) {
-		var meters = this._getRoundNum(maxMeters),
+		let meters = this._getRoundNum(maxMeters),
 		    label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';
 
 		this._updateScale(this._mScale, label, meters / maxMeters);
 	},
 
 	_updateImperial: function (maxMeters) {
-		var maxFeet = maxMeters * 3.2808399,
+		let maxFeet = maxMeters * 3.2808399,
 		    maxMiles, miles, feet;
 
 		if (maxFeet > 5280) {
@@ -5475,7 +5475,7 @@ var Scale = Control.extend({
 
 // @factory L.control.scale(options?: Control.Scale options)
 // Creates an scale control with the given options.
-var scale = (options) => {
+let scale = (options) => {
 	return new Scale(options);
 };
 
@@ -5487,7 +5487,7 @@ var scale = (options) => {
  * The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control.
  */
 
-var Attribution = Control.extend({
+let Attribution = Control.extend({
 	// @section
 	// @aka Control.Attribution options
 	options: {
@@ -5560,7 +5560,7 @@ var Attribution = Control.extend({
 	_update: function () {
 		if (!this._map) { return; }
 
-		var attribs = [];
+		let attribs = [];
 
 		for (var i in this._attributions) {
 			if (this._attributions[i]) {
@@ -5568,7 +5568,7 @@ var Attribution = Control.extend({
 			}
 		}
 
-		var prefixAndAttribs = [];
+		let prefixAndAttribs = [];
 
 		if (this.options.prefix) {
 			prefixAndAttribs.push(this.options.prefix);
@@ -5598,7 +5598,7 @@ Map.addInitHook(function () {
 // @namespace Control.Attribution
 // @factory L.control.attribution(options: Control.Attribution options)
 // Creates an attribution control.
-var attribution = (options) => {
+let attribution = (options) => {
 	return new Attribution(options);
 };
 
@@ -5621,7 +5621,7 @@ control.attribution = attribution;
 // @aka L.Handler
 // Abstract class for map interaction handlers
 
-var Handler = Class.extend({
+let Handler = Class.extend({
 	initialize: function (map) {
 		this._map = map;
 	},
@@ -5668,7 +5668,7 @@ Handler.addTo = (map, name) => {
 	return this;
 };
 
-var Mixin = {Events: Events};
+let Mixin = {Events: Events};
 
 /*
  * @class Draggable
@@ -5681,19 +5681,19 @@ var Mixin = {Events: Events};
  *
  * @example
  * ```js
- * var draggable = new L.Draggable(elementToDrag);
+ * let draggable = new L.Draggable(elementToDrag);
  * draggable.enable();
  * ```
  */
 
-var START = touch ? 'touchstart mousedown' : 'mousedown';
-var END = {
+let START = touch ? 'touchstart mousedown' : 'mousedown';
+let END = {
 	mousedown: 'mouseup',
 	touchstart: 'touchend',
 	pointerdown: 'touchend',
 	MSPointerDown: 'touchend'
 };
-var MOVE = {
+let MOVE = {
 	mousedown: 'mousemove',
 	touchstart: 'touchmove',
 	pointerdown: 'touchmove',
@@ -5701,7 +5701,7 @@ var MOVE = {
 };
 
 
-var Draggable = Evented.extend({
+let Draggable = Evented.extend({
 
 	options: {
 		// @section
@@ -5777,7 +5777,7 @@ var Draggable = Evented.extend({
 		// Fired when a drag is about to start.
 		this.fire('down');
 
-		var first = e.touches ? e.touches[0] : e;
+		let first = e.touches ? e.touches[0] : e;
 
 		this._startPoint = new Point(first.clientX, first.clientY);
 
@@ -5798,7 +5798,7 @@ var Draggable = Evented.extend({
 			return;
 		}
 
-		var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
+		let first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
 		    newPoint = new Point(first.clientX, first.clientY),
 		    offset = newPoint.subtract(this._startPoint);
 
@@ -5835,7 +5835,7 @@ var Draggable = Evented.extend({
 	},
 
 	_updatePosition: function () {
-		var e = {originalEvent: this._lastEvent};
+		let e = {originalEvent: this._lastEvent};
 
 		// @event predrag: Event
 		// Fired continuously during dragging *before* each corresponding
@@ -5913,7 +5913,7 @@ function simplify(points, tolerance) {
 		return points.slice();
 	}
 
-	var sqTolerance = tolerance * tolerance;
+	let sqTolerance = tolerance * tolerance;
 
 	    // stage 1: vertex reduction
 	    points = _reducePoints(points, sqTolerance);
@@ -5939,7 +5939,7 @@ function closestPointOnSegment(p, p1, p2) {
 // Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm
 function _simplifyDP(points, sqTolerance) {
 
-	var len = points.length,
+	let len = points.length,
 	    ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,
 	    markers = new ArrayConstructor(len);
 
@@ -5961,7 +5961,7 @@ function _simplifyDP(points, sqTolerance) {
 
 function _simplifyDPStep(points, markers, sqTolerance, first, last) {
 
-	var maxSqDist = 0,
+	let maxSqDist = 0,
 	index, i, sqDist;
 
 	for (i = first + 1; i <= last - 1; i++) {
@@ -5983,9 +5983,9 @@ function _simplifyDPStep(points, markers, sqTolerance, first, last) {
 
 // reduce points that are too close to each other to a single point
 function _reducePoints(points, sqTolerance) {
-	var reducedPoints = [points[0]];
+	let reducedPoints = [points[0]];
 
-	for (var i = 1, prev = 0, len = points.length; i < len; i++) {
+	for (let i = 1, prev = 0, len = points.length; i < len; i++) {
 		if (_sqDist(points[i], points[prev]) > sqTolerance) {
 			reducedPoints.push(points[i]);
 			prev = i;
@@ -6005,7 +6005,7 @@ var _lastCode;
 // (modifying the segment points directly!). Used by Leaflet to only show polyline
 // points that are on the screen or near, increasing performance.
 function clipSegment(a, b, bounds, useLastCode, round) {
-	var codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),
+	let codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),
 	    codeB = _getBitCode(b, bounds),
 
 	    codeOut, p, newCode;
@@ -6040,7 +6040,7 @@ function clipSegment(a, b, bounds, useLastCode, round) {
 }
 
 function _getEdgeIntersection(a, b, code, bounds, round) {
-	var dx = b.x - a.x,
+	let dx = b.x - a.x,
 	    dy = b.y - a.y,
 	    min = bounds.min,
 	    max = bounds.max,
@@ -6067,7 +6067,7 @@ function _getEdgeIntersection(a, b, code, bounds, round) {
 }
 
 function _getBitCode(p, bounds) {
-	var code = 0;
+	let code = 0;
 
 	if (p.x < bounds.min.x) { // left
 		code |= 1;
@@ -6086,14 +6086,14 @@ function _getBitCode(p, bounds) {
 
 // square distance (to avoid unnecessary Math.sqrt calls)
 function _sqDist(p1, p2) {
-	var dx = p2.x - p1.x,
+	let dx = p2.x - p1.x,
 	    dy = p2.y - p1.y;
 	return dx * dx + dy * dy;
 }
 
 // return closest point on segment or distance to that point
 function _sqClosestPointOnSegment(p, p1, p2, sqDist) {
-	var x = p1.x,
+	let x = p1.x,
 	    y = p1.y,
 	    dx = p2.x - x,
 	    dy = p2.y - y,
@@ -6131,7 +6131,7 @@ function _flat(latlngs) {
 }
 
 
-var LineUtil = (Object.freeze || Object)({
+let LineUtil = (Object.freeze || Object)({
 	simplify: simplify,
 	pointToSegmentDistance: pointToSegmentDistance,
 	closestPointOnSegment: closestPointOnSegment,
@@ -6198,7 +6198,7 @@ function clipPolygon(points, bounds, round) {
 }
 
 
-var PolyUtil = (Object.freeze || Object)({
+let PolyUtil = (Object.freeze || Object)({
 	clipPolygon: clipPolygon
 });
 
@@ -6215,7 +6215,7 @@ var PolyUtil = (Object.freeze || Object)({
  * `EPSG:4326` and `Simple` CRS.
  */
 
-var LonLat = {
+let LonLat = {
 	project: function (latlng) {
 		return new Point(latlng.lng, latlng.lat);
 	},
@@ -6234,35 +6234,35 @@ var LonLat = {
  * Elliptical Mercator projection — more complex than Spherical Mercator. Takes into account that Earth is a geoid, not a perfect sphere. Used by the EPSG:3395 CRS.
  */
 
-var Mercator = {
+let Mercator = {
 	R: 6378137,
 	R_MINOR: 6356752.314245179,
 
 	bounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),
 
 	project: function (latlng) {
-		var d = Math.PI / 180,
+		let d = Math.PI / 180,
 		    r = this.R,
 		    y = latlng.lat * d,
 		    tmp = this.R_MINOR / r,
 		    e = Math.sqrt(1 - tmp * tmp),
 		    con = e * Math.sin(y);
 
-		var ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);
+		let ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);
 		y = -r * Math.log(Math.max(ts, 1E-10));
 
 		return new Point(latlng.lng * d * r, y);
 	},
 
 	unproject: function (point) {
-		var d = 180 / Math.PI,
+		let d = 180 / Math.PI,
 		    r = this.R,
 		    tmp = this.R_MINOR / r,
 		    e = Math.sqrt(1 - tmp * tmp),
 		    ts = Math.exp(-point.y / r),
 		    phi = Math.PI / 2 - 2 * Math.atan(ts);
 
-		for (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {
+		for (let i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {
 			con = e * Math.sin(phi);
 			con = Math.pow((1 - con) / (1 + con), e / 2);
 			dphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;
@@ -6299,7 +6299,7 @@ var Mercator = {
 
 
 
-var index = (Object.freeze || Object)({
+let index = (Object.freeze || Object)({
 	LonLat: LonLat,
 	Mercator: Mercator,
 	SphericalMercator: SphericalMercator
@@ -6316,7 +6316,7 @@ var EPSG3395 = extend({}, Earth, {
 	projection: Mercator,
 
 	transformation: (function () {
-		var scale = 0.5 / (Math.PI * Mercator.R);
+		let scale = 0.5 / (Math.PI * Mercator.R);
 		return toTransformation(scale, 0.5, -scale, 0.5);
 	}())
 });
@@ -6350,7 +6350,7 @@ var EPSG4326 = extend({}, Earth, {
  * simple euclidean distance.
  */
 
-var Simple = extend({}, CRS, {
+let Simple = extend({}, CRS, {
 	projection: LonLat,
 	transformation: toTransformation(1, 0, -1, 0),
 
@@ -6363,7 +6363,7 @@ var Simple = extend({}, CRS, {
 	},
 
 	distance: function (latlng1, latlng2) {
-		var dx = latlng2.lng - latlng1.lng,
+		let dx = latlng2.lng - latlng1.lng,
 		    dy = latlng2.lat - latlng1.lat;
 
 		return Math.sqrt(dx * dx + dy * dy);
@@ -6391,7 +6391,7 @@ CRS.Simple = Simple;
  * @example
  *
  * ```js
- * var layer = L.Marker(latlng).addTo(map);
+ * let layer = L.Marker(latlng).addTo(map);
  * layer.addTo(map);
  * layer.remove();
  * ```
@@ -6404,7 +6404,7 @@ CRS.Simple = Simple;
  */
 
 
-var Layer = Evented.extend({
+let Layer = Evented.extend({
 
 	// Classes extending `L.Layer` will inherit the following options:
 	options: {
@@ -6468,7 +6468,7 @@ var Layer = Evented.extend({
 	},
 
 	_layerAdd: function (e) {
-		var map = e.target;
+		let map = e.target;
 
 		// check in case layer gets added and then removed before the map is ready
 		if (!map.hasLayer(this)) { return; }
@@ -6477,7 +6477,7 @@ var Layer = Evented.extend({
 		this._zoomAnimated = map._zoomAnimated;
 
 		if (this.getEvents) {
-			var events = this.getEvents();
+			let events = this.getEvents();
 			map.on(events, this);
 			this.once('remove', function () {
 				map.off(events, this);
@@ -6536,7 +6536,7 @@ Map.include({
 			throw new Error('The provided object is not a Layer.');
 		}
 
-		var id = stamp(layer);
+		let id = stamp(layer);
 		if (this._layers[id]) { return this; }
 		this._layers[id] = layer;
 
@@ -6554,7 +6554,7 @@ Map.include({
 	// @method removeLayer(layer: Layer): this
 	// Removes the given layer from the map.
 	removeLayer: function (layer) {
-		var id = stamp(layer);
+		let id = stamp(layer);
 
 		if (!this._layers[id]) { return this; }
 
@@ -6602,7 +6602,7 @@ Map.include({
 	_addLayers: function (layers) {
 		layers = layers ? (isArray(layers) ? layers : [layers]) : [];
 
-		for (var i = 0, len = layers.length; i < len; i++) {
+		for (let i = 0, len = layers.length; i < len; i++) {
 			this.addLayer(layers[i]);
 		}
 	},
@@ -6615,7 +6615,7 @@ Map.include({
 	},
 
 	_removeZoomLimit: function (layer) {
-		var id = stamp(layer);
+		let id = stamp(layer);
 
 		if (this._zoomBoundLayers[id]) {
 			delete this._zoomBoundLayers[id];
@@ -6624,12 +6624,12 @@ Map.include({
 	},
 
 	_updateZoomLevels: function () {
-		var minZoom = Infinity,
+		let minZoom = Infinity,
 		    maxZoom = -Infinity,
 		    oldZoomSpan = this._getZoomSpan();
 
 		for (var i in this._zoomBoundLayers) {
-			var options = this._zoomBoundLayers[i].options;
+			let options = this._zoomBoundLayers[i].options;
 
 			minZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom);
 			maxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom);
@@ -6673,7 +6673,7 @@ Map.include({
  * ```
  */
 
-var LayerGroup = Layer.extend({
+let LayerGroup = Layer.extend({
 
 	initialize: function (layers, options) {
 		setOptions(this, options);
@@ -6692,7 +6692,7 @@ var LayerGroup = Layer.extend({
 	// @method addLayer(layer: Layer): this
 	// Adds the given layer to the group.
 	addLayer: function (layer) {
-		var id = this.getLayerId(layer);
+		let id = this.getLayerId(layer);
 
 		this._layers[id] = layer;
 
@@ -6709,7 +6709,7 @@ var LayerGroup = Layer.extend({
 	// @method removeLayer(id: Number): this
 	// Removes the layer with the given internal ID from the group.
 	removeLayer: function (layer) {
-		var id = layer in this._layers ? layer : this.getLayerId(layer);
+		let id = layer in this._layers ? layer : this.getLayerId(layer);
 
 		if (this._map && this._layers[id]) {
 			this._map.removeLayer(this._layers[id]);
@@ -6740,7 +6740,7 @@ var LayerGroup = Layer.extend({
 	// additional parameters. Has no effect if the layers contained do not
 	// implement `methodName`.
 	invoke: function (methodName) {
-		var args = Array.prototype.slice.call(arguments, 1),
+		let args = Array.prototype.slice.call(arguments, 1),
 		    i, layer;
 
 		for (i in this._layers) {
@@ -6785,7 +6785,7 @@ var LayerGroup = Layer.extend({
 	// @method getLayers(): Layer[]
 	// Returns an array of all the layers added to the group.
 	getLayers: function () {
-		var layers = [];
+		let layers = [];
 		this.eachLayer(layers.push, layers);
 		return layers;
 	},
@@ -6806,7 +6806,7 @@ var LayerGroup = Layer.extend({
 
 // @factory L.layerGroup(layers?: Layer[], options?: Object)
 // Create a layer group, optionally given an initial set of layers and an `options` object.
-var layerGroup = (layers, options) => {
+let layerGroup = (layers, options) => {
 	return new LayerGroup(layers, options);
 };
 
@@ -6832,7 +6832,7 @@ var layerGroup = (layers, options) => {
  * ```
  */
 
-var FeatureGroup = LayerGroup.extend({
+let FeatureGroup = LayerGroup.extend({
 
 	addLayer: function (layer) {
 		if (this.hasLayer(layer)) {
@@ -6886,10 +6886,10 @@ var FeatureGroup = LayerGroup.extend({
 	// @method getBounds(): LatLngBounds
 	// Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).
 	getBounds: function () {
-		var bounds = new LatLngBounds();
+		let bounds = new LatLngBounds();
 
 		for (var id in this._layers) {
-			var layer = this._layers[id];
+			let layer = this._layers[id];
 			bounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng());
 		}
 		return bounds;
@@ -6898,7 +6898,7 @@ var FeatureGroup = LayerGroup.extend({
 
 // @factory L.featureGroup(layers: Layer[])
 // Create a feature group, optionally given an initial set of layers.
-var featureGroup = (layers) => {
+let featureGroup = (layers) => {
 	return new FeatureGroup(layers);
 };
 
@@ -6911,7 +6911,7 @@ var featureGroup = (layers) => {
  * @example
  *
  * ```js
- * var myIcon = L.icon({
+ * let myIcon = L.icon({
  *     iconUrl: 'my-icon.png',
  *     iconRetinaUrl: 'my-icon@2x.png',
  *     iconSize: [38, 95],
@@ -6930,7 +6930,7 @@ var featureGroup = (layers) => {
  *
  */
 
-var Icon = Class.extend({
+let Icon = Class.extend({
 
 	/* @section
 	 * @aka Icon options
@@ -6995,7 +6995,7 @@ var Icon = Class.extend({
 	},
 
 	_createIcon: function (name, oldIcon) {
-		var src = this._getIconUrl(name);
+		let src = this._getIconUrl(name);
 
 		if (!src) {
 			if (name === 'icon') {
@@ -7004,21 +7004,21 @@ var Icon = Class.extend({
 			return null;
 		}
 
-		var img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);
+		let img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);
 		this._setIconStyles(img, name);
 
 		return img;
 	},
 
 	_setIconStyles: function (img, name) {
-		var options = this.options;
-		var sizeOption = options[name + 'Size'];
+		let options = this.options;
+		let sizeOption = options[name + 'Size'];
 
 		if (typeof sizeOption === 'number') {
 			sizeOption = [sizeOption, sizeOption];
 		}
 
-		var size = toPoint(sizeOption),
+		let size = toPoint(sizeOption),
 		    anchor = toPoint(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||
 		            size && size.divideBy(2, true));
 
@@ -7069,7 +7069,7 @@ function icon(options) {
  * `L.Marker.prototype.options.icon` with your own icon instead.
  */
 
-var IconDefault = Icon.extend({
+let IconDefault = Icon.extend({
 
 	options: {
 		iconUrl:       'marker-icon.png',
@@ -7095,8 +7095,8 @@ var IconDefault = Icon.extend({
 	},
 
 	_detectIconPath: function () {
-		var el = create$1('div',  'leaflet-default-icon-path', document.body);
-		var path = getStyle(el, 'background-image') ||
+		let el = create$1('div',  'leaflet-default-icon-path', document.body);
+		let path = getStyle(el, 'background-image') ||
 		           getStyle(el, 'backgroundImage');	// IE8
 
 		document.body.removeChild(el);
@@ -7129,13 +7129,13 @@ var IconDefault = Icon.extend({
  * Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)).
  */
 
-var MarkerDrag = Handler.extend({
+let MarkerDrag = Handler.extend({
 	initialize: function (marker) {
 		this._marker = marker;
 	},
 
 	addHooks: function () {
-		var icon = this._marker._icon;
+		let icon = this._marker._icon;
 
 		if (!this._draggable) {
 			this._draggable = new Draggable(icon, icon, true);
@@ -7169,7 +7169,7 @@ var MarkerDrag = Handler.extend({
 	},
 
 	_adjustPan: function (e) {
-		var marker = this._marker,
+		let marker = this._marker,
 		    map = marker._map,
 		    speed = this._marker.options.autoPanSpeed,
 		    padding = this._marker.options.autoPanPadding,
@@ -7177,14 +7177,14 @@ var MarkerDrag = Handler.extend({
 		    bounds = map.getPixelBounds(),
 		    origin = map.getPixelOrigin();
 
-		var panBounds = toBounds(
+		let panBounds = toBounds(
 			bounds.min._subtract(origin).add(padding),
 			bounds.max._subtract(origin).subtract(padding)
 		);
 
 		if (!panBounds.contains(iconPos)) {
 			// Compute incremental movement
-			var movement = toPoint(
+			let movement = toPoint(
 				(Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) -
 				(Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x),
 
@@ -7227,7 +7227,7 @@ var MarkerDrag = Handler.extend({
 	},
 
 	_onDrag: function (e) {
-		var marker = this._marker,
+		let marker = this._marker,
 		    shadow = marker._shadow,
 		iconPos = getPosition(marker._icon),
 		    latlng = marker._map.layerPointToLatLng(iconPos);
@@ -7276,7 +7276,7 @@ var MarkerDrag = Handler.extend({
  * ```
  */
 
-var Marker = Layer.extend({
+let Marker = Layer.extend({
 
 	// @section
 	// @aka Marker options
@@ -7396,7 +7396,7 @@ var Marker = Layer.extend({
 	// @method setLatLng(latlng: LatLng): this
 	// Changes the marker position to the given point.
 	setLatLng: function (latlng) {
-		var oldLatLng = this._latlng;
+		let oldLatLng = this._latlng;
 		this._latlng = toLatLng(latlng);
 		this.update();
 
@@ -7437,7 +7437,7 @@ var Marker = Layer.extend({
 	update: function () {
 
 		if (this._icon && this._map) {
-			var pos = this._map.latLngToLayerPoint(this._latlng).round();
+			let pos = this._map.latLngToLayerPoint(this._latlng).round();
 			this._setPos(pos);
 		}
 
@@ -7445,10 +7445,10 @@ var Marker = Layer.extend({
 	},
 
 	_initIcon: function () {
-		var options = this.options,
+		let options = this.options,
 		    classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');
 
-		var icon = options.icon.createIcon(this._icon),
+		let icon = options.icon.createIcon(this._icon),
 		    addIcon = false;
 
 		// if we're not reusing the icon, remove the old one and init new one
@@ -7482,7 +7482,7 @@ var Marker = Layer.extend({
 			});
 		}
 
-		var newShadow = options.icon.createShadow(this._shadow),
+		let newShadow = options.icon.createShadow(this._shadow),
 		    addShadow = false;
 
 		if (newShadow !== this._shadow) {
@@ -7549,7 +7549,7 @@ var Marker = Layer.extend({
 	},
 
 	_animateZoom: function (opt) {
-		var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();
+		let pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();
 
 		this._setPos(pos);
 	},
@@ -7563,7 +7563,7 @@ var Marker = Layer.extend({
 		this.addInteractiveTarget(this._icon);
 
 		if (MarkerDrag) {
-			var draggable = this.options.draggable;
+			let draggable = this.options.draggable;
 			if (this.dragging) {
 				draggable = this.dragging.enabled();
 				this.dragging.disable();
@@ -7589,7 +7589,7 @@ var Marker = Layer.extend({
 	},
 
 	_updateOpacity: function () {
-		var opacity = this.options.opacity;
+		let opacity = this.options.opacity;
 
 		setOpacity(this._icon, opacity);
 
@@ -7633,7 +7633,7 @@ function marker(latlng, options) {
  * overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.
  */
 
-var Path = Layer.extend({
+let Path = Layer.extend({
 
 	// @section
 	// @aka Path options
@@ -7774,7 +7774,7 @@ var Path = Layer.extend({
  * A circle of a fixed size with radius specified in pixels. Extends `Path`.
  */
 
-var CircleMarker = Path.extend({
+let CircleMarker = Path.extend({
 
 	// @section
 	// @aka CircleMarker options
@@ -7820,7 +7820,7 @@ var CircleMarker = Path.extend({
 	},
 
 	setStyle : function (options) {
-		var radius = options && options.radius || this._radius;
+		let radius = options && options.radius || this._radius;
 		Path.prototype.setStyle.call(this, options);
 		this.setRadius(radius);
 		return this;
@@ -7832,7 +7832,7 @@ var CircleMarker = Path.extend({
 	},
 
 	_updateBounds: function () {
-		var r = this._radius,
+		let r = this._radius,
 		    r2 = this._radiusY || r,
 		    w = this._clickTolerance(),
 		    p = [r + w, r2 + w];
@@ -7882,7 +7882,7 @@ function circleMarker(latlng, options) {
  * ```
  */
 
-var Circle = CircleMarker.extend({
+let Circle = CircleMarker.extend({
 
 	initialize: function (latlng, options, legacyOptions) {
 		if (typeof options === 'number') {
@@ -7916,7 +7916,7 @@ var Circle = CircleMarker.extend({
 	// @method getBounds(): LatLngBounds
 	// Returns the `LatLngBounds` of the path.
 	getBounds: function () {
-		var half = [this._radius, this._radiusY || this._radius];
+		let half = [this._radius, this._radiusY || this._radius];
 
 		return new LatLngBounds(
 			this._map.layerPointToLatLng(this._point.subtract(half)),
@@ -7927,13 +7927,13 @@ var Circle = CircleMarker.extend({
 
 	_project: function () {
 
-		var lng = this._latlng.lng,
+		let lng = this._latlng.lng,
 		    lat = this._latlng.lat,
 		    map = this._map,
 		    crs = map.options.crs;
 
 		if (crs.distance === Earth.distance) {
-			var d = Math.PI / 180,
+			let d = Math.PI / 180,
 			    latR = (this._mRadius / Earth.R) / d,
 			    top = map.project([lat + latR, lng]),
 			    bottom = map.project([lat - latR, lng]),
@@ -7983,13 +7983,13 @@ function circle(latlng, options, legacyOptions) {
  *
  * ```js
  * // create a red polyline from an array of LatLng points
- * var latlngs = [
+ * let latlngs = [
  * 	[45.51, -122.68],
  * 	[37.77, -122.43],
  * 	[34.04, -118.2]
  * ];
  *
- * var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);
+ * let polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);
  *
  * // zoom the map to the polyline
  * map.fitBounds(polyline.getBounds());
@@ -7999,7 +7999,7 @@ function circle(latlng, options, legacyOptions) {
  *
  * ```js
  * // create a red polyline from an array of arrays of LatLng points
- * var latlngs = [
+ * let latlngs = [
  * 	[[45.51, -122.68],
  * 	 [37.77, -122.43],
  * 	 [34.04, -118.2]],
@@ -8011,7 +8011,7 @@ function circle(latlng, options, legacyOptions) {
  */
 
 
-var Polyline = Path.extend({
+let Polyline = Path.extend({
 
 	// @section
 	// @aka Polyline options
@@ -8053,19 +8053,19 @@ var Polyline = Path.extend({
 	// @method closestLayerPoint: Point
 	// Returns the point closest to `p` on the Polyline.
 	closestLayerPoint: function (p) {
-		var minDistance = Infinity,
+		let minDistance = Infinity,
 		    minPoint = null,
 		    closest = _sqClosestPointOnSegment,
 		    p1, p2;
 
-		for (var j = 0, jLen = this._parts.length; j < jLen; j++) {
-			var points = this._parts[j];
+		for (let j = 0, jLen = this._parts.length; j < jLen; j++) {
+			let points = this._parts[j];
 
-			for (var i = 1, len = points.length; i < len; i++) {
+			for (let i = 1, len = points.length; i < len; i++) {
 				p1 = points[i - 1];
 				p2 = points[i];
 
-				var sqDist = closest(p, p1, p2, true);
+				let sqDist = closest(p, p1, p2, true);
 
 				if (sqDist < minDistance) {
 					minDistance = sqDist;
@@ -8149,10 +8149,10 @@ var Polyline = Path.extend({
 
 	// recursively convert latlngs input into actual LatLng instances; calculate bounds along the way
 	_convertLatLngs: function (latlngs) {
-		var result = [],
+		let result = [],
 		    flat = isFlat(latlngs);
 
-		for (var i = 0, len = latlngs.length; i < len; i++) {
+		for (let i = 0, len = latlngs.length; i < len; i++) {
 			if (flat) {
 				result[i] = toLatLng(latlngs[i]);
 				this._bounds.extend(result[i]);
@@ -8165,11 +8165,11 @@ var Polyline = Path.extend({
 	},
 
 	_project: function () {
-		var pxBounds = new Bounds();
+		let pxBounds = new Bounds();
 		this._rings = [];
 		this._projectLatlngs(this._latlngs, this._rings, pxBounds);
 
-		var w = this._clickTolerance(),
+		let w = this._clickTolerance(),
 		    p = new Point(w, w);
 
 		if (this._bounds.isValid() && pxBounds.isValid()) {
@@ -8181,7 +8181,7 @@ var Polyline = Path.extend({
 
 	// recursively turns latlngs into a set of rings with projected coordinates
 	_projectLatlngs: function (latlngs, result, projectedBounds) {
-		var flat = latlngs[0] instanceof LatLng,
+		let flat = latlngs[0] instanceof LatLng,
 		    len = latlngs.length,
 		    i, ring;
 
@@ -8201,7 +8201,7 @@ var Polyline = Path.extend({
 
 	// clip polyline by renderer bounds so that we have less to render for performance
 	_clipPoints: function () {
-		var bounds = this._renderer._bounds;
+		let bounds = this._renderer._bounds;
 
 		this._parts = [];
 		if (!this._pxBounds || !this._pxBounds.intersects(bounds)) {
@@ -8213,7 +8213,7 @@ var Polyline = Path.extend({
 			return;
 		}
 
-		var parts = this._parts,
+		let parts = this._parts,
 		    i, j, k, len, len2, segment, points;
 
 		for (i = 0, k = 0, len = this._rings.length; i < len; i++) {
@@ -8238,10 +8238,10 @@ var Polyline = Path.extend({
 
 	// simplify each clipped part of the polyline for performance
 	_simplifyPoints: function () {
-		var parts = this._parts,
+		let parts = this._parts,
 		    tolerance = this.options.smoothFactor;
 
-		for (var i = 0, len = parts.length; i < len; i++) {
+		for (let i = 0, len = parts.length; i < len; i++) {
 			parts[i] = simplify(parts[i], tolerance);
 		}
 	},
@@ -8307,9 +8307,9 @@ Polyline._flat = _flat;
  *
  * ```js
  * // create a red polygon from an array of LatLng points
- * var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];
+ * let latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];
  *
- * var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);
+ * let polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);
  *
  * // zoom the map to the polygon
  * map.fitBounds(polygon.getBounds());
@@ -8318,7 +8318,7 @@ Polyline._flat = _flat;
  * You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:
  *
  * ```js
- * var latlngs = [
+ * let latlngs = [
  *   [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring
  *   [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole
  * ];
@@ -8327,7 +8327,7 @@ Polyline._flat = _flat;
  * Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.
  *
  * ```js
- * var latlngs = [
+ * let latlngs = [
  *   [ // first polygon
  *     [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring
  *     [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole
@@ -8339,7 +8339,7 @@ Polyline._flat = _flat;
  * ```
  */
 
-var Polygon = Polyline.extend({
+let Polygon = Polyline.extend({
 
 	options: {
 		fill: true
@@ -8385,7 +8385,7 @@ var Polygon = Polyline.extend({
 	},
 
 	_convertLatLngs: function (latlngs) {
-		var result = Polyline.prototype._convertLatLngs.call(this, latlngs),
+		let result = Polyline.prototype._convertLatLngs.call(this, latlngs),
 		    len = result.length;
 
 		// remove last point if it equals first one
@@ -8409,7 +8409,7 @@ var Polygon = Polyline.extend({
 	_clipPoints: function () {
 		// polygons need a different clipping algorithm so we redefine that
 
-		var bounds = this._renderer._bounds,
+		let bounds = this._renderer._bounds,
 		    w = this.options.weight,
 		    p = new Point(w, w);
 
@@ -8426,7 +8426,7 @@ var Polygon = Polyline.extend({
 			return;
 		}
 
-		for (var i = 0, len = this._rings.length, clipped; i < len; i++) {
+		for (let i = 0, len = this._rings.length, clipped; i < len; i++) {
 			clipped = clipPolygon(this._rings[i], bounds, true);
 			if (clipped.length) {
 				this._parts.push(clipped);
@@ -8440,7 +8440,7 @@ var Polygon = Polyline.extend({
 
 	// Needed by the `Canvas` renderer for interactivity
 	_containsPoint: function (p) {
-		var inside = false,
+		let inside = false,
 		    part, p1, p2, i, j, k, len, len2;
 
 		if (!this._pxBounds.contains(p)) { return false; }
@@ -8492,7 +8492,7 @@ function polygon(latlngs, options) {
  * ```
  */
 
-var GeoJSON = FeatureGroup.extend({
+let GeoJSON = FeatureGroup.extend({
 
 	/* @section
 	 * @aka GeoJSON options
@@ -8554,7 +8554,7 @@ var GeoJSON = FeatureGroup.extend({
 	// @method addData( <GeoJSON> data ): this
 	// Adds a GeoJSON object to the layer.
 	addData: function (geojson) {
-		var features = isArray(geojson) ? geojson : geojson.features,
+		let features = isArray(geojson) ? geojson : geojson.features,
 		    i, len, feature;
 
 		if (features) {
@@ -8568,11 +8568,11 @@ var GeoJSON = FeatureGroup.extend({
 			return this;
 		}
 
-		var options = this.options;
+		let options = this.options;
 
 		if (options.filter && !options.filter(geojson)) { return this; }
 
-		var layer = geometryToLayer(geojson, options);
+		let layer = geometryToLayer(geojson, options);
 		if (!layer) {
 			return this;
 		}
@@ -8624,7 +8624,7 @@ var GeoJSON = FeatureGroup.extend({
 // functions if provided as options.
 function geometryToLayer(geojson, options) {
 
-	var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,
+	let geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,
 	    coords = geometry ? geometry.coordinates : null,
 	    layers = [],
 	    pointToLayer = options && options.pointToLayer,
@@ -8659,7 +8659,7 @@ function geometryToLayer(geojson, options) {
 
 	case 'GeometryCollection':
 		for (i = 0, len = geometry.geometries.length; i < len; i++) {
-			var layer = geometryToLayer({
+			let layer = geometryToLayer({
 				geometry: geometry.geometries[i],
 				type: 'Feature',
 				properties: geojson.properties
@@ -8688,9 +8688,9 @@ function coordsToLatLng(coords) {
 // `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default).
 // Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function.
 function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) {
-	var latlngs = [];
+	let latlngs = [];
 
-	for (var i = 0, len = coords.length, latlng; i < len; i++) {
+	for (let i = 0, len = coords.length, latlng; i < len; i++) {
 		latlng = levelsDeep ?
 			coordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) :
 			(_coordsToLatLng || coordsToLatLng)(coords[i]);
@@ -8714,9 +8714,9 @@ function latLngToCoords(latlng, precision) {
 // Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs)
 // `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default.
 function latLngsToCoords(latlngs, levelsDeep, closed, precision) {
-	var coords = [];
+	let coords = [];
 
-	for (var i = 0, len = latlngs.length; i < len; i++) {
+	for (let i = 0, len = latlngs.length; i < len; i++) {
 		coords.push(levelsDeep ?
 			latLngsToCoords(latlngs[i], levelsDeep - 1, closed, precision) :
 			latLngToCoords(latlngs[i], precision));
@@ -8749,7 +8749,7 @@ function asFeature(geojson) {
 	};
 }
 
-var PointToGeoJSON = {
+let PointToGeoJSON = {
 	toGeoJSON: function (precision) {
 		return getFeature(this, {
 			type: 'Point',
@@ -8775,9 +8775,9 @@ CircleMarker.include(PointToGeoJSON);
 // Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature).
 Polyline.include({
 	toGeoJSON: function (precision) {
-		var multi = !isFlat(this._latlngs);
+		let multi = !isFlat(this._latlngs);
 
-		var coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);
+		let coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);
 
 		return getFeature(this, {
 			type: (multi ? 'Multi' : '') + 'LineString',
@@ -8791,10 +8791,10 @@ Polyline.include({
 // Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature).
 Polygon.include({
 	toGeoJSON: function (precision) {
-		var holes = !isFlat(this._latlngs),
+		let holes = !isFlat(this._latlngs),
 		    multi = holes && !isFlat(this._latlngs[0]);
 
-		var coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);
+		let coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);
 
 		if (!holes) {
 			coords = [coords];
@@ -8811,7 +8811,7 @@ Polygon.include({
 // @namespace LayerGroup
 LayerGroup.include({
 	toMultiPoint: function (precision) {
-		var coords = [];
+		let coords = [];
 
 		this.eachLayer(function (layer) {
 			coords.push(layer.toGeoJSON(precision).geometry.coordinates);
@@ -8827,22 +8827,22 @@ LayerGroup.include({
 	// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).
 	toGeoJSON: function (precision) {
 
-		var type = this.feature && this.feature.geometry && this.feature.geometry.type;
+		let type = this.feature && this.feature.geometry && this.feature.geometry.type;
 
 		if (type === 'MultiPoint') {
 			return this.toMultiPoint(precision);
 		}
 
-		var isGeometryCollection = type === 'GeometryCollection',
+		let isGeometryCollection = type === 'GeometryCollection',
 		    jsons = [];
 
 		this.eachLayer(function (layer) {
 			if (layer.toGeoJSON) {
-				var json = layer.toGeoJSON(precision);
+				let json = layer.toGeoJSON(precision);
 				if (isGeometryCollection) {
 					jsons.push(json.geometry);
 				} else {
-					var feature = asFeature(json);
+					let feature = asFeature(json);
 					// Squash nested feature collections
 					if (feature.type === 'FeatureCollection') {
 						jsons.push.apply(jsons, feature.features);
@@ -8877,7 +8877,7 @@ function geoJSON(geojson, options) {
 }
 
 // Backward compatibility.
-var geoJson = geoJSON;
+let geoJson = geoJSON;
 
 /*
  * @class ImageOverlay
@@ -8889,13 +8889,13 @@ var geoJson = geoJSON;
  * @example
  *
  * ```js
- * var imageUrl = 'http://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',
+ * let imageUrl = 'http://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',
  * 	imageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];
  * L.imageOverlay(imageUrl, imageBounds).addTo(map);
  * ```
  */
 
-var ImageOverlay = Layer.extend({
+let ImageOverlay = Layer.extend({
 
 	// @section
 	// @aka ImageOverlay options
@@ -9020,7 +9020,7 @@ var ImageOverlay = Layer.extend({
 	},
 
 	getEvents: function () {
-		var events = {
+		let events = {
 			zoom: this._reset,
 			viewreset: this._reset
 		};
@@ -9054,8 +9054,8 @@ var ImageOverlay = Layer.extend({
 	},
 
 	_initImage: function () {
-		var wasElementSupplied = this._url.tagName === 'IMG';
-		var img = this._image = wasElementSupplied ? this._url : create$1('img');
+		let wasElementSupplied = this._url.tagName === 'IMG';
+		let img = this._image = wasElementSupplied ? this._url : create$1('img');
 
 		addClass(img, 'leaflet-image-layer');
 		if (this._zoomAnimated) { addClass(img, 'leaflet-zoom-animated'); }
@@ -9087,14 +9087,14 @@ var ImageOverlay = Layer.extend({
 	},
 
 	_animateZoom: function (e) {
-		var scale = this._map.getZoomScale(e.zoom),
+		let scale = this._map.getZoomScale(e.zoom),
 		    offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min;
 
 		setTransform(this._image, offset, scale);
 	},
 
 	_reset: function () {
-		var image = this._image,
+		let image = this._image,
 		    bounds = new Bounds(
 		        this._map.latLngToLayerPoint(this._bounds.getNorthWest()),
 		        this._map.latLngToLayerPoint(this._bounds.getSouthEast())),
@@ -9121,7 +9121,7 @@ var ImageOverlay = Layer.extend({
 		// Fired when the ImageOverlay layer has loaded its image
 		this.fire('error');
 
-		var errorUrl = this.options.errorOverlayUrl;
+		let errorUrl = this.options.errorOverlayUrl;
 		if (errorUrl && this._url !== errorUrl) {
 			this._url = errorUrl;
 			this._image.src = errorUrl;
@@ -9132,7 +9132,7 @@ var ImageOverlay = Layer.extend({
 // @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options)
 // Instantiates an image overlay object given the URL of the image and the
 // geographical bounds it is tied to.
-var imageOverlay = (url, bounds, options) => {
+let imageOverlay = (url, bounds, options) => {
 	return new ImageOverlay(url, bounds, options);
 };
 
@@ -9149,13 +9149,13 @@ var imageOverlay = (url, bounds, options) => {
  * @example
  *
  * ```js
- * var videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm',
+ * let videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm',
  * 	videoBounds = [[ 32, -130], [ 13, -100]];
  * L.VideoOverlay(videoUrl, videoBounds ).addTo(map);
  * ```
  */
 
-var VideoOverlay = ImageOverlay.extend({
+let VideoOverlay = ImageOverlay.extend({
 
 	// @section
 	// @aka VideoOverlay options
@@ -9170,8 +9170,8 @@ var VideoOverlay = ImageOverlay.extend({
 	},
 
 	_initImage: function () {
-		var wasElementSupplied = this._url.tagName === 'VIDEO';
-		var vid = this._image = wasElementSupplied ? this._url : create$1('video');
+		let wasElementSupplied = this._url.tagName === 'VIDEO';
+		let vid = this._image = wasElementSupplied ? this._url : create$1('video');
 
 		addClass(vid, 'leaflet-image-layer');
 		if (this._zoomAnimated) { addClass(vid, 'leaflet-zoom-animated'); }
@@ -9184,9 +9184,9 @@ var VideoOverlay = ImageOverlay.extend({
 		vid.onloadeddata = bind(this.fire, this, 'load');
 
 		if (wasElementSupplied) {
-			var sourceElements = vid.getElementsByTagName('source');
-			var sources = [];
-			for (var j = 0; j < sourceElements.length; j++) {
+			let sourceElements = vid.getElementsByTagName('source');
+			let sources = [];
+			for (let j = 0; j < sourceElements.length; j++) {
 				sources.push(sourceElements[j].src);
 			}
 
@@ -9198,8 +9198,8 @@ var VideoOverlay = ImageOverlay.extend({
 
 		vid.autoplay = !!this.options.autoplay;
 		vid.loop = !!this.options.loop;
-		for (var i = 0; i < this._url.length; i++) {
-			var source = create$1('source');
+		for (let i = 0; i < this._url.length; i++) {
+			let source = create$1('source');
 			source.src = this._url[i];
 			vid.appendChild(source);
 		}
@@ -9227,7 +9227,7 @@ function videoOverlay(video, bounds, options) {
  */
 
 // @namespace DivOverlay
-var DivOverlay = Layer.extend({
+let DivOverlay = Layer.extend({
 
 	// @section
 	// @aka DivOverlay options
@@ -9338,7 +9338,7 @@ var DivOverlay = Layer.extend({
 	},
 
 	getEvents: function () {
-		var events = {
+		let events = {
 			zoom: this._updatePosition,
 			viewreset: this._updatePosition
 		};
@@ -9376,8 +9376,8 @@ var DivOverlay = Layer.extend({
 	_updateContent: function () {
 		if (!this._content) { return; }
 
-		var node = this._contentNode;
-		var content = (typeof this._content === 'function') ? this._content(this._source || this) : this._content;
+		let node = this._contentNode;
+		let content = (typeof this._content === 'function') ? this._content(this._source || this) : this._content;
 
 		if (typeof content === 'string') {
 			node.innerHTML = content;
@@ -9393,7 +9393,7 @@ var DivOverlay = Layer.extend({
 	_updatePosition: function () {
 		if (!this._map) { return; }
 
-		var pos = this._map.latLngToLayerPoint(this._latlng),
+		let pos = this._map.latLngToLayerPoint(this._latlng),
 		    offset = toPoint(this.options.offset),
 		    anchor = this._getAnchor();
 
@@ -9403,7 +9403,7 @@ var DivOverlay = Layer.extend({
 			offset = offset.add(pos).add(anchor);
 		}
 
-		var bottom = this._containerBottom = -offset.y,
+		let bottom = this._containerBottom = -offset.y,
 		    left = this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x;
 
 		// bottom position the popup in case the height of the popup changes (images loading etc)
@@ -9436,7 +9436,7 @@ var DivOverlay = Layer.extend({
  * Here's a more complicated way to open a popup on a map:
  *
  * ```js
- * var popup = L.popup()
+ * let popup = L.popup()
  * 	.setLatLng(latlng)
  * 	.setContent('<p>Hello world!<br />This is a nice popup.</p>')
  * 	.openOn(map);
@@ -9445,7 +9445,7 @@ var DivOverlay = Layer.extend({
 
 
 // @namespace Popup
-var Popup = DivOverlay.extend({
+let Popup = DivOverlay.extend({
 
 	// @section
 	// @aka Popup options
@@ -9563,7 +9563,7 @@ var Popup = DivOverlay.extend({
 	},
 
 	getEvents: function () {
-		var events = DivOverlay.prototype.getEvents.call(this);
+		let events = DivOverlay.prototype.getEvents.call(this);
 
 		if (this.options.closeOnClick !== undefined ? this.options.closeOnClick : this._map.options.closePopupOnClick) {
 			events.preclick = this._close;
@@ -9583,12 +9583,12 @@ var Popup = DivOverlay.extend({
 	},
 
 	_initLayout: function () {
-		var prefix = 'leaflet-popup',
+		let prefix = 'leaflet-popup',
 		    container = this._container = create$1('div',
 			prefix + ' ' + (this.options.className || '') +
 			' leaflet-zoom-animated');
 
-		var wrapper = this._wrapper = create$1('div', prefix + '-content-wrapper', container);
+		let wrapper = this._wrapper = create$1('div', prefix + '-content-wrapper', container);
 		this._contentNode = create$1('div', prefix + '-content', wrapper);
 
 		disableClickPropagation(wrapper);
@@ -9599,7 +9599,7 @@ var Popup = DivOverlay.extend({
 		this._tip = create$1('div', prefix + '-tip', this._tipContainer);
 
 		if (this.options.closeButton) {
-			var closeButton = this._closeButton = create$1('a', prefix + '-close-button', container);
+			let closeButton = this._closeButton = create$1('a', prefix + '-close-button', container);
 			closeButton.href = '#close';
 			closeButton.innerHTML = '&#215;';
 
@@ -9608,13 +9608,13 @@ var Popup = DivOverlay.extend({
 	},
 
 	_updateLayout: function () {
-		var container = this._contentNode,
+		let container = this._contentNode,
 		    style = container.style;
 
 		style.width = '';
 		style.whiteSpace = 'nowrap';
 
-		var width = container.offsetWidth;
+		let width = container.offsetWidth;
 		width = Math.min(width, this.options.maxWidth);
 		width = Math.max(width, this.options.minWidth);
 
@@ -9623,7 +9623,7 @@ var Popup = DivOverlay.extend({
 
 		style.height = '';
 
-		var height = container.offsetHeight,
+		let height = container.offsetHeight,
 		    maxHeight = this.options.maxHeight,
 		    scrolledClass = 'leaflet-popup-scrolled';
 
@@ -9638,7 +9638,7 @@ var Popup = DivOverlay.extend({
 	},
 
 	_animateZoom: function (e) {
-		var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center),
+		let pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center),
 		    anchor = this._getAnchor();
 		setPosition(this._container, pos.add(anchor));
 	},
@@ -9646,7 +9646,7 @@ var Popup = DivOverlay.extend({
 	_adjustPan: function () {
 		if (!this.options.autoPan || (this._map._panAnim && this._map._panAnim._inProgress)) { return; }
 
-		var map = this._map,
+		let map = this._map,
 		    marginBottom = parseInt(getStyle(this._container, 'marginBottom'), 10) || 0,
 		    containerHeight = this._container.offsetHeight + marginBottom,
 		    containerWidth = this._containerWidth,
@@ -9654,7 +9654,7 @@ var Popup = DivOverlay.extend({
 
 		layerPos._add(getPosition(this._container));
 
-		var containerPos = map.layerPointToContainerPoint(layerPos),
+		let containerPos = map.layerPointToContainerPoint(layerPos),
 		    padding = toPoint(this.options.autoPanPadding),
 		    paddingTL = toPoint(this.options.autoPanPaddingTopLeft || padding),
 		    paddingBR = toPoint(this.options.autoPanPaddingBottomRight || padding),
@@ -9701,7 +9701,7 @@ var Popup = DivOverlay.extend({
 // @namespace Popup
 // @factory L.popup(options?: Popup options, source?: Layer)
 // Instantiates a `Popup` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the popup with a reference to the Layer to which it refers.
-var popup = (options, source) => {
+let popup = (options, source) => {
 	return new Popup(options, source);
 };
 
@@ -9766,7 +9766,7 @@ Map.include({
  * All layers share a set of methods convenient for binding popups to it.
  *
  * ```js
- * var layer = L.Polygon(latlngs).bindPopup('Hi There!').addTo(map);
+ * let layer = L.Polygon(latlngs).bindPopup('Hi There!').addTo(map);
  * layer.openPopup();
  * layer.closePopup();
  * ```
@@ -9900,7 +9900,7 @@ Layer.include({
 	},
 
 	_openPopup: function (e) {
-		var layer = e.layer || e.target;
+		let layer = e.layer || e.target;
 
 		if (!this._popup) {
 			return;
@@ -9962,7 +9962,7 @@ Layer.include({
 
 
 // @namespace Tooltip
-var Tooltip = DivOverlay.extend({
+let Tooltip = DivOverlay.extend({
 
 	// @section
 	// @aka Tooltip options
@@ -10037,7 +10037,7 @@ var Tooltip = DivOverlay.extend({
 	},
 
 	getEvents: function () {
-		var events = DivOverlay.prototype.getEvents.call(this);
+		let events = DivOverlay.prototype.getEvents.call(this);
 
 		if (touch && !this.options.permanent) {
 			events.preclick = this._close;
@@ -10053,7 +10053,7 @@ var Tooltip = DivOverlay.extend({
 	},
 
 	_initLayout: function () {
-		var prefix = 'leaflet-tooltip',
+		let prefix = 'leaflet-tooltip',
 		    className = prefix + ' ' + (this.options.className || '') + ' leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');
 
 		this._contentNode = this._container = create$1('div', className);
@@ -10064,7 +10064,7 @@ var Tooltip = DivOverlay.extend({
 	_adjustPan: function () {},
 
 	_setPosition: function (pos) {
-		var map = this._map,
+		let map = this._map,
 		    container = this._container,
 		    centerPoint = map.latLngToContainerPoint(map.getCenter()),
 		    tooltipPoint = map.layerPointToContainerPoint(pos),
@@ -10097,7 +10097,7 @@ var Tooltip = DivOverlay.extend({
 	},
 
 	_updatePosition: function () {
-		var pos = this._map.latLngToLayerPoint(this._latlng);
+		let pos = this._map.latLngToLayerPoint(this._latlng);
 		this._setPosition(pos);
 	},
 
@@ -10110,7 +10110,7 @@ var Tooltip = DivOverlay.extend({
 	},
 
 	_animateZoom: function (e) {
-		var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);
+		let pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);
 		this._setPosition(pos);
 	},
 
@@ -10124,7 +10124,7 @@ var Tooltip = DivOverlay.extend({
 // @namespace Tooltip
 // @factory L.tooltip(options?: Tooltip options, source?: Layer)
 // Instantiates a Tooltip object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the tooltip with a reference to the Layer to which it refers.
-var tooltip = (options, source) => {
+let tooltip = (options, source) => {
 	return new Tooltip(options, source);
 };
 
@@ -10171,7 +10171,7 @@ Map.include({
  * All layers share a set of methods convenient for binding tooltips to it.
  *
  * ```js
- * var layer = L.Polygon(latlngs).bindTooltip('Hi There!').addTo(map);
+ * let layer = L.Polygon(latlngs).bindTooltip('Hi There!').addTo(map);
  * layer.openTooltip();
  * layer.closeTooltip();
  * ```
@@ -10220,7 +10220,7 @@ Layer.include({
 
 	_initTooltipInteractions: function (remove$$1) {
 		if (!remove$$1 && this._tooltipHandlersAdded) { return; }
-		var onOff = remove$$1 ? 'off' : 'on',
+		let onOff = remove$$1 ? 'off' : 'on',
 		    events = {
 			remove: this.closeTooltip,
 			move: this._moveTooltip
@@ -10330,7 +10330,7 @@ Layer.include({
 	},
 
 	_openTooltip: function (e) {
-		var layer = e.layer || e.target;
+		let layer = e.layer || e.target;
 
 		if (!this._tooltip || !this._map) {
 			return;
@@ -10339,7 +10339,7 @@ Layer.include({
 	},
 
 	_moveTooltip: function (e) {
-		var latlng = e.latlng, containerPoint, layerPoint;
+		let latlng = e.latlng, containerPoint, layerPoint;
 		if (this._tooltip.options.sticky && e.originalEvent) {
 			containerPoint = this._map.mouseEventToContainerPoint(e.originalEvent);
 			layerPoint = this._map.containerPointToLayerPoint(containerPoint);
@@ -10359,7 +10359,7 @@ Layer.include({
  *
  * @example
  * ```js
- * var myIcon = L.divIcon({className: 'my-div-icon'});
+ * let myIcon = L.divIcon({className: 'my-div-icon'});
  * // you can set .my-div-icon styles in CSS
  *
  * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);
@@ -10368,7 +10368,7 @@ Layer.include({
  * By default, it has a 'leaflet-div-icon' CSS class and is styled as a little white square with a shadow.
  */
 
-var DivIcon = Icon.extend({
+let DivIcon = Icon.extend({
 	options: {
 		// @section
 		// @aka DivIcon options
@@ -10389,13 +10389,13 @@ var DivIcon = Icon.extend({
 	},
 
 	createIcon: function (oldIcon) {
-		var div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),
+		let div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),
 		    options = this.options;
 
 		div.innerHTML = options.html !== false ? options.html : '';
 
 		if (options.bgPos) {
-			var bgPos = toPoint(options.bgPos);
+			let bgPos = toPoint(options.bgPos);
 			div.style.backgroundPosition = (-bgPos.x) + 'px ' + (-bgPos.y) + 'px';
 		}
 		this._setIconStyles(div, 'icon');
@@ -10431,18 +10431,18 @@ Icon.Default = IconDefault;
  * To create a custom layer, extend GridLayer and implement the `createTile()` method, which will be passed a `Point` object with the `x`, `y`, and `z` (zoom level) coordinates to draw your tile.
  *
  * ```js
- * var CanvasLayer = L.GridLayer.extend({
+ * let CanvasLayer = L.GridLayer.extend({
  *     createTile: function(coords){
  *         // create a <canvas> element for drawing
- *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');
+ *         let tile = L.DomUtil.create('canvas', 'leaflet-tile');
  *
  *         // setup tile width and height according to the options
- *         var size = this.getTileSize();
+ *         let size = this.getTileSize();
  *         tile.width = size.x;
  *         tile.height = size.y;
  *
  *         // get a canvas context and draw something on it using coords.x, coords.y and coords.z
- *         var ctx = tile.getContext('2d');
+ *         let ctx = tile.getContext('2d');
  *
  *         // return the tile so it can be rendered on screen
  *         return tile;
@@ -10456,15 +10456,15 @@ Icon.Default = IconDefault;
  * Tile creation can also be asynchronous, this is useful when using a third-party drawing library. Once the tile is finished drawing it can be passed to the `done()` callback.
  *
  * ```js
- * var CanvasLayer = L.GridLayer.extend({
+ * let CanvasLayer = L.GridLayer.extend({
  *     createTile: function(coords, done){
  *         var error;
  *
  *         // create a <canvas> element for drawing
- *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');
+ *         let tile = L.DomUtil.create('canvas', 'leaflet-tile');
  *
  *         // setup tile width and height according to the options
- *         var size = this.getTileSize();
+ *         let size = this.getTileSize();
  *         tile.width = size.x;
  *         tile.height = size.y;
  *
@@ -10482,7 +10482,7 @@ Icon.Default = IconDefault;
  */
 
 
-var GridLayer = Layer.extend({
+let GridLayer = Layer.extend({
 
 	// @section
 	// @aka GridLayer options
@@ -10645,7 +10645,7 @@ var GridLayer = Layer.extend({
 	},
 
 	getEvents: function () {
-		var events = {
+		let events = {
 			viewprereset: this._invalidateAll,
 			viewreset: this._resetView,
 			zoom: this._resetView,
@@ -10682,7 +10682,7 @@ var GridLayer = Layer.extend({
 	// @method getTileSize: Point
 	// Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method.
 	getTileSize: function () {
-		var s = this.options.tileSize;
+		let s = this.options.tileSize;
 		return s instanceof Point ? s : new Point(s, s);
 	},
 
@@ -10695,10 +10695,10 @@ var GridLayer = Layer.extend({
 	_setAutoZIndex: function (compare) {
 		// go through all other layers of the same pane, set zIndex to max + 1 (front) or min - 1 (back)
 
-		var layers = this.getPane().children,
+		let layers = this.getPane().children,
 		    edgeZIndex = -compare(-Infinity, Infinity); // -Infinity for max, Infinity for min
 
-		for (var i = 0, len = layers.length, zIndex; i < len; i++) {
+		for (let i = 0, len = layers.length, zIndex; i < len; i++) {
 
 			zIndex = layers[i].style.zIndex;
 
@@ -10721,15 +10721,15 @@ var GridLayer = Layer.extend({
 
 		setOpacity(this._container, this.options.opacity);
 
-		var now = +new Date(),
+		let now = +new Date(),
 		    nextFrame = false,
 		    willPrune = false;
 
 		for (var key in this._tiles) {
-			var tile = this._tiles[key];
+			let tile = this._tiles[key];
 			if (!tile.current || !tile.loaded) { continue; }
 
-			var fade = Math.min(1, (now - tile.loaded) / 200);
+			let fade = Math.min(1, (now - tile.loaded) / 200);
 
 			setOpacity(tile.el, fade);
 			if (fade < 1) {
@@ -10769,7 +10769,7 @@ var GridLayer = Layer.extend({
 
 	_updateLevels: function () {
 
-		var zoom = this._tileZoom,
+		let zoom = this._tileZoom,
 		    maxZoom = this.options.maxZoom;
 
 		if (zoom === undefined) { return undefined; }
@@ -10786,7 +10786,7 @@ var GridLayer = Layer.extend({
 			}
 		}
 
-		var level = this._levels[zoom],
+		let level = this._levels[zoom],
 		    map = this._map;
 
 		if (!level) {
@@ -10824,7 +10824,7 @@ var GridLayer = Layer.extend({
 
 		var key, tile;
 
-		var zoom = this._map.getZoom();
+		let zoom = this._map.getZoom();
 		if (zoom > this.options.maxZoom ||
 			zoom < this.options.minZoom) {
 			this._removeAllTiles();
@@ -10839,7 +10839,7 @@ var GridLayer = Layer.extend({
 		for (key in this._tiles) {
 			tile = this._tiles[key];
 			if (tile.current && !tile.active) {
-				var coords = tile.coords;
+				let coords = tile.coords;
 				if (!this._retainParent(coords.x, coords.y, coords.z, coords.z - 5)) {
 					this._retainChildren(coords.x, coords.y, coords.z, coords.z + 2);
 				}
@@ -10886,7 +10886,7 @@ var GridLayer = Layer.extend({
 		    coords2 = new Point(+x2, +y2);
 		coords2.z = +z2;
 
-		var key = this._tileCoordsToKey(coords2),
+		let key = this._tileCoordsToKey(coords2),
 		    tile = this._tiles[key];
 
 		if (tile && tile.active) {
@@ -10906,13 +10906,13 @@ var GridLayer = Layer.extend({
 
 	_retainChildren: function (x, y, z, maxZoom) {
 
-		for (var i = 2 * x; i < 2 * x + 2; i++) {
-			for (var j = 2 * y; j < 2 * y + 2; j++) {
+		for (let i = 2 * x; i < 2 * x + 2; i++) {
+			for (let j = 2 * y; j < 2 * y + 2; j++) {
 
-				var coords = new Point(i, j);
+				let coords = new Point(i, j);
 				coords.z = z + 1;
 
-				var key = this._tileCoordsToKey(coords),
+				let key = this._tileCoordsToKey(coords),
 				    tile = this._tiles[key];
 
 				if (tile && tile.active) {
@@ -10931,7 +10931,7 @@ var GridLayer = Layer.extend({
 	},
 
 	_resetView: function (e) {
-		var animating = e && (e.pinch || e.flyTo);
+		let animating = e && (e.pinch || e.flyTo);
 		this._setView(this._map.getCenter(), this._map.getZoom(), animating, animating);
 	},
 
@@ -10940,7 +10940,7 @@ var GridLayer = Layer.extend({
 	},
 
 	_clampZoom: function (zoom) {
-		var options = this.options;
+		let options = this.options;
 
 		if (undefined !== options.minNativeZoom && zoom < options.minNativeZoom) {
 			return options.minNativeZoom;
@@ -10954,13 +10954,13 @@ var GridLayer = Layer.extend({
 	},
 
 	_setView: function (center, zoom, noPrune, noUpdate) {
-		var tileZoom = this._clampZoom(Math.round(zoom));
+		let tileZoom = this._clampZoom(Math.round(zoom));
 		if ((this.options.maxZoom !== undefined && tileZoom > this.options.maxZoom) ||
 		    (this.options.minZoom !== undefined && tileZoom < this.options.minZoom)) {
 			tileZoom = undefined;
 		}
 
-		var tileZoomChanged = this.options.updateWhenZooming && (tileZoom !== this._tileZoom);
+		let tileZoomChanged = this.options.updateWhenZooming && (tileZoom !== this._tileZoom);
 
 		if (!noUpdate || tileZoomChanged) {
 
@@ -10996,7 +10996,7 @@ var GridLayer = Layer.extend({
 	},
 
 	_setZoomTransform: function (level, center, zoom) {
-		var scale = this._map.getZoomScale(zoom, level.zoom),
+		let scale = this._map.getZoomScale(zoom, level.zoom),
 		    translate = level.origin.multiplyBy(scale)
 		        .subtract(this._map._getNewPixelOrigin(center, zoom)).round();
 
@@ -11008,12 +11008,12 @@ var GridLayer = Layer.extend({
 	},
 
 	_resetGrid: function () {
-		var map = this._map,
+		let map = this._map,
 		    crs = map.options.crs,
 		    tileSize = this._tileSize = this.getTileSize(),
 		    tileZoom = this._tileZoom;
 
-		var bounds = this._map.getPixelWorldBounds(this._tileZoom);
+		let bounds = this._map.getPixelWorldBounds(this._tileZoom);
 		if (bounds) {
 			this._globalTileRange = this._pxBoundsToTileRange(bounds);
 		}
@@ -11035,7 +11035,7 @@ var GridLayer = Layer.extend({
 	},
 
 	_getTiledPixelBounds: function (center) {
-		var map = this._map,
+		let map = this._map,
 		    mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom(),
 		    scale = map.getZoomScale(mapZoom, this._tileZoom),
 		    pixelCenter = map.project(center, this._tileZoom).floor(),
@@ -11046,14 +11046,14 @@ var GridLayer = Layer.extend({
 
 	// Private method to load tiles in the grid's active zoom level according to map bounds
 	_update: function (center) {
-		var map = this._map;
+		let map = this._map;
 		if (!map) { return; }
-		var zoom = this._clampZoom(map.getZoom());
+		let zoom = this._clampZoom(map.getZoom());
 
 		if (center === undefined) { center = map.getCenter(); }
 		if (this._tileZoom === undefined) { return; }	// if out of minzoom/maxzoom
 
-		var pixelBounds = this._getTiledPixelBounds(center),
+		let pixelBounds = this._getTiledPixelBounds(center),
 		    tileRange = this._pxBoundsToTileRange(pixelBounds),
 		    tileCenter = tileRange.getCenter(),
 		    queue = [],
@@ -11068,7 +11068,7 @@ var GridLayer = Layer.extend({
 		      isFinite(tileRange.max.y))) { throw new Error('Attempted to load an infinite number of tiles'); }
 
 		for (var key in this._tiles) {
-			var c = this._tiles[key].coords;
+			let c = this._tiles[key].coords;
 			if (c.z !== this._tileZoom || !noPruneRange.contains(new Point(c.x, c.y))) {
 				this._tiles[key].current = false;
 			}
@@ -11079,14 +11079,14 @@ var GridLayer = Layer.extend({
 		if (Math.abs(zoom - this._tileZoom) > 1) { this._setView(center, zoom); return; }
 
 		// create a queue of coordinates to load tiles from
-		for (var j = tileRange.min.y; j <= tileRange.max.y; j++) {
-			for (var i = tileRange.min.x; i <= tileRange.max.x; i++) {
-				var coords = new Point(i, j);
+		for (let j = tileRange.min.y; j <= tileRange.max.y; j++) {
+			for (let i = tileRange.min.x; i <= tileRange.max.x; i++) {
+				let coords = new Point(i, j);
 				coords.z = this._tileZoom;
 
 				if (!this._isValidTile(coords)) { continue; }
 
-				var tile = this._tiles[this._tileCoordsToKey(coords)];
+				let tile = this._tiles[this._tileCoordsToKey(coords)];
 				if (tile) {
 					tile.current = true;
 				} else {
@@ -11110,7 +11110,7 @@ var GridLayer = Layer.extend({
 			}
 
 			// create DOM fragment to append tiles in one batch
-			var fragment = document.createDocumentFragment();
+			let fragment = document.createDocumentFragment();
 
 			for (i = 0; i < queue.length; i++) {
 				this._addTile(queue[i], fragment);
@@ -11121,11 +11121,11 @@ var GridLayer = Layer.extend({
 	},
 
 	_isValidTile: function (coords) {
-		var crs = this._map.options.crs;
+		let crs = this._map.options.crs;
 
 		if (!crs.infinite) {
 			// don't load tile if it's out of bounds and not wrapped
-			var bounds = this._globalTileRange;
+			let bounds = this._globalTileRange;
 			if ((!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||
 			    (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))) { return false; }
 		}
@@ -11133,7 +11133,7 @@ var GridLayer = Layer.extend({
 		if (!this.options.bounds) { return true; }
 
 		// don't load tile if it doesn't intersect the bounds in options
-		var tileBounds = this._tileCoordsToBounds(coords);
+		let tileBounds = this._tileCoordsToBounds(coords);
 		return toLatLngBounds(this.options.bounds).overlaps(tileBounds);
 	},
 
@@ -11142,7 +11142,7 @@ var GridLayer = Layer.extend({
 	},
 
 	_tileCoordsToNwSe: function (coords) {
-		var map = this._map,
+		let map = this._map,
 		    tileSize = this.getTileSize(),
 		    nwPoint = coords.scaleBy(tileSize),
 		    sePoint = nwPoint.add(tileSize),
@@ -11153,7 +11153,7 @@ var GridLayer = Layer.extend({
 
 	// converts tile coordinates to its geographical bounds
 	_tileCoordsToBounds: function (coords) {
-		var bp = this._tileCoordsToNwSe(coords),
+		let bp = this._tileCoordsToNwSe(coords),
 		    bounds = new LatLngBounds(bp[0], bp[1]);
 
 		if (!this.options.noWrap) {
@@ -11168,14 +11168,14 @@ var GridLayer = Layer.extend({
 
 	// converts tile cache key to coordinates
 	_keyToTileCoords: function (key) {
-		var k = key.split(':'),
+		let k = key.split(':'),
 		    coords = new Point(+k[0], +k[1]);
 		coords.z = +k[2];
 		return coords;
 	},
 
 	_removeTile: function (key) {
-		var tile = this._tiles[key];
+		let tile = this._tiles[key];
 		if (!tile) { return; }
 
 		// Cancels any pending http requests associated with the tile
@@ -11199,7 +11199,7 @@ var GridLayer = Layer.extend({
 	_initTile: function (tile) {
 		addClass(tile, 'leaflet-tile');
 
-		var tileSize = this.getTileSize();
+		let tileSize = this.getTileSize();
 		tile.style.width = tileSize.x + 'px';
 		tile.style.height = tileSize.y + 'px';
 
@@ -11219,10 +11219,10 @@ var GridLayer = Layer.extend({
 	},
 
 	_addTile: function (coords, container) {
-		var tilePos = this._getTilePos(coords),
+		let tilePos = this._getTilePos(coords),
 		    key = this._tileCoordsToKey(coords);
 
-		var tile = this.createTile(this._wrapCoords(coords), bind(this._tileReady, this, coords));
+		let tile = this.createTile(this._wrapCoords(coords), bind(this._tileReady, this, coords));
 
 		this._initTile(tile);
 
@@ -11264,7 +11264,7 @@ var GridLayer = Layer.extend({
 			});
 		}
 
-		var key = this._tileCoordsToKey(coords);
+		let key = this._tileCoordsToKey(coords);
 
 		tile = this._tiles[key];
 		if (!tile) { return; }
@@ -11311,7 +11311,7 @@ var GridLayer = Layer.extend({
 	},
 
 	_wrapCoords: function (coords) {
-		var newCoords = new Point(
+		let newCoords = new Point(
 			this._wrapX ? wrapNum(coords.x, this._wrapX) : coords.x,
 			this._wrapY ? wrapNum(coords.y, this._wrapY) : coords.y);
 		newCoords.z = coords.z;
@@ -11319,7 +11319,7 @@ var GridLayer = Layer.extend({
 	},
 
 	_pxBoundsToTileRange: function (bounds) {
-		var tileSize = this.getTileSize();
+		let tileSize = this.getTileSize();
 		return new Bounds(
 			bounds.min.unscaleBy(tileSize).floor(),
 			bounds.max.unscaleBy(tileSize).ceil().subtract([1, 1]));
@@ -11370,7 +11370,7 @@ function gridLayer(options) {
  */
 
 
-var TileLayer = GridLayer.extend({
+let TileLayer = GridLayer.extend({
 
 	// @section
 	// @aka TileLayer options
@@ -11460,7 +11460,7 @@ var TileLayer = GridLayer.extend({
 	// to return an `<img>` HTML element with the appropriate image URL given `coords`. The `done`
 	// callback is called when the tile has been loaded.
 	createTile: function (coords, done) {
-		var tile = document.createElement('img');
+		let tile = document.createElement('img');
 
 		on(tile, 'load', bind(this._tileOnLoad, this, done, tile));
 		on(tile, 'error', bind(this._tileOnError, this, done, tile));
@@ -11493,7 +11493,7 @@ var TileLayer = GridLayer.extend({
 	// Called only internally, returns the URL for a tile given its coordinates.
 	// Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes.
 	getTileUrl: function (coords) {
-		var data = {
+		let data = {
 			r: retina ? '@2x' : '',
 			s: this._getSubdomain(coords),
 			x: coords.x,
@@ -11501,7 +11501,7 @@ var TileLayer = GridLayer.extend({
 			z: this._getZoomForUrl()
 		};
 		if (this._map && !this._map.options.crs.infinite) {
-			var invertedY = this._globalTileRange.max.y - coords.y;
+			let invertedY = this._globalTileRange.max.y - coords.y;
 			if (this.options.tms) {
 				data['y'] = invertedY;
 			}
@@ -11521,7 +11521,7 @@ var TileLayer = GridLayer.extend({
 	},
 
 	_tileOnError: function (done, tile, e) {
-		var errorUrl = this.options.errorTileUrl;
+		let errorUrl = this.options.errorTileUrl;
 		if (errorUrl && tile.getAttribute('src') !== errorUrl) {
 			tile.src = errorUrl;
 		}
@@ -11533,7 +11533,7 @@ var TileLayer = GridLayer.extend({
 	},
 
 	_getZoomForUrl: function () {
-		var zoom = this._tileZoom,
+		let zoom = this._tileZoom,
 		maxZoom = this.options.maxZoom,
 		zoomReverse = this.options.zoomReverse,
 		zoomOffset = this.options.zoomOffset;
@@ -11546,7 +11546,7 @@ var TileLayer = GridLayer.extend({
 	},
 
 	_getSubdomain: function (tilePoint) {
-		var index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;
+		let index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;
 		return this.options.subdomains[index];
 	},
 
@@ -11587,7 +11587,7 @@ function tileLayer(url, options) {
  * @example
  *
  * ```js
- * var nexrad = L.tileLayer.wms("http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi", {
+ * let nexrad = L.tileLayer.wms("http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi", {
  * 	layers: 'nexrad-n0r-900913',
  * 	format: 'image/png',
  * 	transparent: true,
@@ -11596,7 +11596,7 @@ function tileLayer(url, options) {
  * ```
  */
 
-var TileLayerWMS = TileLayer.extend({
+let TileLayerWMS = TileLayer.extend({
 
 	// @section
 	// @aka TileLayer.WMS options
@@ -11643,7 +11643,7 @@ var TileLayerWMS = TileLayer.extend({
 
 		this._url = url;
 
-		var wmsParams = extend({}, this.defaultWmsParams);
+		let wmsParams = extend({}, this.defaultWmsParams);
 
 		// all keys that are not TileLayer options go to WMS params
 		for (var i in options) {
@@ -11654,8 +11654,8 @@ var TileLayerWMS = TileLayer.extend({
 
 		options = setOptions(this, options);
 
-		var realRetina = options.detectRetina && retina ? 2 : 1;
-		var tileSize = this.getTileSize();
+		let realRetina = options.detectRetina && retina ? 2 : 1;
+		let tileSize = this.getTileSize();
 		wmsParams.width = tileSize.x * realRetina;
 		wmsParams.height = tileSize.y * realRetina;
 
@@ -11667,7 +11667,7 @@ var TileLayerWMS = TileLayer.extend({
 		this._crs = this.options.crs || map.options.crs;
 		this._wmsVersion = parseFloat(this.wmsParams.version);
 
-		var projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';
+		let projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';
 		this.wmsParams[projectionKey] = this._crs.code;
 
 		TileLayer.prototype.onAdd.call(this, map);
@@ -11675,7 +11675,7 @@ var TileLayerWMS = TileLayer.extend({
 
 	getTileUrl: function (coords) {
 
-		var tileBounds = this._tileCoordsToNwSe(coords),
+		let tileBounds = this._tileCoordsToNwSe(coords),
 		    crs = this._crs,
 		    bounds = toBounds(crs.project(tileBounds[0]), crs.project(tileBounds[1])),
 		    min = bounds.min,
@@ -11733,7 +11733,7 @@ tileLayer.wms = tileLayerWMS;
  * its map has moved
  */
 
-var Renderer = Layer.extend({
+let Renderer = Layer.extend({
 
 	// @section
 	// @aka Renderer options
@@ -11774,7 +11774,7 @@ var Renderer = Layer.extend({
 	},
 
 	getEvents: function () {
-		var events = {
+		let events = {
 			viewreset: this._reset,
 			zoom: this._onZoom,
 			moveend: this._update,
@@ -11795,7 +11795,7 @@ var Renderer = Layer.extend({
 	},
 
 	_updateTransform: function (center, zoom) {
-		var scale = this._map.getZoomScale(zoom, this._zoom),
+		let scale = this._map.getZoomScale(zoom, this._zoom),
 		    position = getPosition(this._container),
 		    viewHalf = this._map.getSize().multiplyBy(0.5 + this.options.padding),
 		    currentCenterPoint = this._map.project(this._center, zoom),
@@ -11835,7 +11835,7 @@ var Renderer = Layer.extend({
 	_update: function () {
 		// Update pixel bounds of renderer container (for positioning/sizing/clipping later)
 		// Subclasses are responsible of firing the 'update' event.
-		var p = this.options.padding,
+		let p = this.options.padding,
 		    size = this._map.getSize(),
 		    min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();
 
@@ -11863,7 +11863,7 @@ var Renderer = Layer.extend({
  * Use Canvas by default for all paths in the map:
  *
  * ```js
- * var map = L.map('map', {
+ * let map = L.map('map', {
  * 	renderer: L.canvas()
  * });
  * ```
@@ -11871,16 +11871,16 @@ var Renderer = Layer.extend({
  * Use a Canvas renderer with extra padding for specific vector geometries:
  *
  * ```js
- * var map = L.map('map');
- * var myRenderer = L.canvas({ padding: 0.5 });
- * var line = L.polyline( coordinates, { renderer: myRenderer } );
- * var circle = L.circle( center, { renderer: myRenderer } );
+ * let map = L.map('map');
+ * let myRenderer = L.canvas({ padding: 0.5 });
+ * let line = L.polyline( coordinates, { renderer: myRenderer } );
+ * let circle = L.circle( center, { renderer: myRenderer } );
  * ```
  */
 
-var Canvas = Renderer.extend({
+let Canvas = Renderer.extend({
 	getEvents: function () {
-		var events = Renderer.prototype.getEvents.call(this);
+		let events = Renderer.prototype.getEvents.call(this);
 		events.viewprereset = this._onViewPreReset;
 		return events;
 	},
@@ -11899,7 +11899,7 @@ var Canvas = Renderer.extend({
 	},
 
 	_initContainer: function () {
-		var container = this._container = document.createElement('canvas');
+		let container = this._container = document.createElement('canvas');
 
 		on(container, 'mousemove', throttle(this._onMouseMove, 32, this), this);
 		on(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this);
@@ -11934,7 +11934,7 @@ var Canvas = Renderer.extend({
 
 		Renderer.prototype._update.call(this);
 
-		var b = this._bounds,
+		let b = this._bounds,
 		    container = this._container,
 		    size = b.getSize(),
 		    m = retina ? 2 : 1;
@@ -11971,7 +11971,7 @@ var Canvas = Renderer.extend({
 		this._updateDashArray(layer);
 		this._layers[stamp(layer)] = layer;
 
-		var order = layer._order = {
+		let order = layer._order = {
 			layer: layer,
 			prev: this._drawLast,
 			next: null
@@ -11986,9 +11986,9 @@ var Canvas = Renderer.extend({
 	},
 
 	_removePath: function (layer) {
-		var order = layer._order;
-		var next = order.next;
-		var prev = order.prev;
+		let order = layer._order;
+		let next = order.next;
+		let prev = order.prev;
 
 		if (next) {
 			next.prev = prev;
@@ -12026,7 +12026,7 @@ var Canvas = Renderer.extend({
 
 	_updateDashArray: function (layer) {
 		if (layer.options.dashArray) {
-			var parts = layer.options.dashArray.split(','),
+			let parts = layer.options.dashArray.split(','),
 			    dashArray = [],
 			    i;
 			for (i = 0; i < parts.length; i++) {
@@ -12045,7 +12045,7 @@ var Canvas = Renderer.extend({
 
 	_extendRedrawBounds: function (layer) {
 		if (layer._pxBounds) {
-			var padding = (layer.options.weight || 0) + 1;
+			let padding = (layer.options.weight || 0) + 1;
 			this._redrawBounds = this._redrawBounds || new Bounds();
 			this._redrawBounds.extend(layer._pxBounds.min.subtract([padding, padding]));
 			this._redrawBounds.extend(layer._pxBounds.max.add([padding, padding]));
@@ -12067,9 +12067,9 @@ var Canvas = Renderer.extend({
 	},
 
 	_clear: function () {
-		var bounds = this._redrawBounds;
+		let bounds = this._redrawBounds;
 		if (bounds) {
-			var size = bounds.getSize();
+			let size = bounds.getSize();
 			this._ctx.clearRect(bounds.min.x, bounds.min.y, size.x, size.y);
 		} else {
 			this._ctx.clearRect(0, 0, this._container.width, this._container.height);
@@ -12080,7 +12080,7 @@ var Canvas = Renderer.extend({
 		var layer, bounds = this._redrawBounds;
 		this._ctx.save();
 		if (bounds) {
-			var size = bounds.getSize();
+			let size = bounds.getSize();
 			this._ctx.beginPath();
 			this._ctx.rect(bounds.min.x, bounds.min.y, size.x, size.y);
 			this._ctx.clip();
@@ -12088,7 +12088,7 @@ var Canvas = Renderer.extend({
 
 		this._drawing = true;
 
-		for (var order = this._drawFirst; order; order = order.next) {
+		for (let order = this._drawFirst; order; order = order.next) {
 			layer = order.layer;
 			if (!bounds || (layer._pxBounds && layer._pxBounds.intersects(bounds))) {
 				layer._updatePath();
@@ -12133,7 +12133,7 @@ var Canvas = Renderer.extend({
 
 		if (!this._drawing || layer._empty()) { return; }
 
-		var p = layer._point,
+		let p = layer._point,
 		    ctx = this._ctx,
 		    r = Math.max(Math.round(layer._radius), 1),
 		    s = (Math.max(Math.round(layer._radiusY), 1) || r) / r;
@@ -12156,7 +12156,7 @@ var Canvas = Renderer.extend({
 	},
 
 	_fillStroke: function (ctx, layer) {
-		var options = layer.options;
+		let options = layer.options;
 
 		if (options.fill) {
 			ctx.globalAlpha = options.fillOpacity;
@@ -12181,9 +12181,9 @@ var Canvas = Renderer.extend({
 	// so we emulate that by calculating what's under the mouse on mousemove/click manually
 
 	_onClick: function (e) {
-		var point = this._map.mouseEventToLayerPoint(e), layer, clickedLayer;
+		let point = this._map.mouseEventToLayerPoint(e), layer, clickedLayer;
 
-		for (var order = this._drawFirst; order; order = order.next) {
+		for (let order = this._drawFirst; order; order = order.next) {
 			layer = order.layer;
 			if (layer.options.interactive && layer._containsPoint(point) && !this._map._draggableMoved(layer)) {
 				clickedLayer = layer;
@@ -12198,13 +12198,13 @@ var Canvas = Renderer.extend({
 	_onMouseMove: function (e) {
 		if (!this._map || this._map.dragging.moving() || this._map._animatingZoom) { return; }
 
-		var point = this._map.mouseEventToLayerPoint(e);
+		let point = this._map.mouseEventToLayerPoint(e);
 		this._handleMouseHover(e, point);
 	},
 
 
 	_handleMouseOut: function (e) {
-		var layer = this._hoveredLayer;
+		let layer = this._hoveredLayer;
 		if (layer) {
 			// if we're leaving the layer, fire mouseout
 			removeClass(this._container, 'leaflet-interactive');
@@ -12216,7 +12216,7 @@ var Canvas = Renderer.extend({
 	_handleMouseHover: function (e, point) {
 		var layer, candidateHoveredLayer;
 
-		for (var order = this._drawFirst; order; order = order.next) {
+		for (let order = this._drawFirst; order; order = order.next) {
 			layer = order.layer;
 			if (layer.options.interactive && layer._containsPoint(point)) {
 				candidateHoveredLayer = layer;
@@ -12243,9 +12243,9 @@ var Canvas = Renderer.extend({
 	},
 
 	_bringToFront: function (layer) {
-		var order = layer._order;
-		var next = order.next;
-		var prev = order.prev;
+		let order = layer._order;
+		let next = order.next;
+		let prev = order.prev;
 
 		if (next) {
 			next.prev = prev;
@@ -12271,9 +12271,9 @@ var Canvas = Renderer.extend({
 	},
 
 	_bringToBack: function (layer) {
-		var order = layer._order;
-		var next = order.next;
-		var prev = order.prev;
+		let order = layer._order;
+		let next = order.next;
+		let prev = order.prev;
 
 		if (prev) {
 			prev.next = next;
@@ -12310,7 +12310,7 @@ function canvas$1(options) {
  */
 
 
-var vmlCreate = (function () {
+let vmlCreate = (function () {
 	try {
 		document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');
 		return function (name) {
@@ -12334,7 +12334,7 @@ var vmlCreate = (function () {
  */
 
 // mixin to redefine some SVG methods to handle VML syntax which is similar but with some differences
-var vmlMixin = {
+let vmlMixin = {
 
 	_initContainer: function () {
 		this._container = create$1('div', 'leaflet-vml-container');
@@ -12347,7 +12347,7 @@ var vmlMixin = {
 	},
 
 	_initPath: function (layer) {
-		var container = layer._container = vmlCreate('shape');
+		let container = layer._container = vmlCreate('shape');
 
 		addClass(container, 'leaflet-vml-shape ' + (this.options.className || ''));
 
@@ -12361,7 +12361,7 @@ var vmlMixin = {
 	},
 
 	_addPath: function (layer) {
-		var container = layer._container;
+		let container = layer._container;
 		this._container.appendChild(container);
 
 		if (layer.options.interactive) {
@@ -12370,14 +12370,14 @@ var vmlMixin = {
 	},
 
 	_removePath: function (layer) {
-		var container = layer._container;
+		let container = layer._container;
 		remove(container);
 		layer.removeInteractiveTarget(container);
 		delete this._layers[stamp(layer)];
 	},
 
 	_updateStyle: function (layer) {
-		var stroke = layer._stroke,
+		let stroke = layer._stroke,
 		    fill = layer._fill,
 		    options = layer.options,
 		    container = layer._container;
@@ -12424,7 +12424,7 @@ var vmlMixin = {
 	},
 
 	_updateCircle: function (layer) {
-		var p = layer._point.round(),
+		let p = layer._point.round(),
 		    r = Math.round(layer._radius),
 		    r2 = Math.round(layer._radiusY || r);
 
@@ -12468,7 +12468,7 @@ var create$2 = vml ? vmlCreate : svgCreate;
  * Use SVG by default for all paths in the map:
  *
  * ```js
- * var map = L.map('map', {
+ * let map = L.map('map', {
  * 	renderer: L.svg()
  * });
  * ```
@@ -12476,17 +12476,17 @@ var create$2 = vml ? vmlCreate : svgCreate;
  * Use a SVG renderer with extra padding for specific vector geometries:
  *
  * ```js
- * var map = L.map('map');
- * var myRenderer = L.svg({ padding: 0.5 });
- * var line = L.polyline( coordinates, { renderer: myRenderer } );
- * var circle = L.circle( center, { renderer: myRenderer } );
+ * let map = L.map('map');
+ * let myRenderer = L.svg({ padding: 0.5 });
+ * let line = L.polyline( coordinates, { renderer: myRenderer } );
+ * let circle = L.circle( center, { renderer: myRenderer } );
  * ```
  */
 
-var SVG = Renderer.extend({
+let SVG = Renderer.extend({
 
 	getEvents: function () {
-		var events = Renderer.prototype.getEvents.call(this);
+		let events = Renderer.prototype.getEvents.call(this);
 		events.zoomstart = this._onZoomStart;
 		return events;
 	},
@@ -12521,7 +12521,7 @@ var SVG = Renderer.extend({
 
 		Renderer.prototype._update.call(this);
 
-		var b = this._bounds,
+		let b = this._bounds,
 		    size = b.getSize(),
 		    container = this._container;
 
@@ -12542,7 +12542,7 @@ var SVG = Renderer.extend({
 	// methods below are called by vector layers implementations
 
 	_initPath: function (layer) {
-		var path = layer._path = create$2('path');
+		let path = layer._path = create$2('path');
 
 		// @namespace Path
 		// @option className: String = null
@@ -12577,7 +12577,7 @@ var SVG = Renderer.extend({
 	},
 
 	_updateStyle: function (layer) {
-		var path = layer._path,
+		let path = layer._path,
 		    options = layer.options;
 
 		if (!path) { return; }
@@ -12618,13 +12618,13 @@ var SVG = Renderer.extend({
 	},
 
 	_updateCircle: function (layer) {
-		var p = layer._point,
+		let p = layer._point,
 		    r = Math.max(Math.round(layer._radius), 1),
 		    r2 = Math.max(Math.round(layer._radiusY), 1) || r,
 		    arc = 'a' + r + ',' + r2 + ' 0 1,0 ';
 
 		// drawing a circle with two half-arcs
-		var d = layer._empty() ? 'M0 0' :
+		let d = layer._empty() ? 'M0 0' :
 			'M' + (p.x - r) + ',' + p.y +
 			arc + (r * 2) + ',0 ' +
 			arc + (-r * 2) + ',0 ';
@@ -12666,7 +12666,7 @@ Map.include({
 		// @namespace Path; @option renderer: Renderer
 		// Use this specific instance of `Renderer` for this path. Takes
 		// precedence over the map's [default renderer](#map-renderer).
-		var renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;
+		let renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;
 
 		if (!renderer) {
 			// @namespace Map; @option preferCanvas: Boolean = false
@@ -12686,7 +12686,7 @@ Map.include({
 			return false;
 		}
 
-		var renderer = this._paneRenderers[name];
+		let renderer = this._paneRenderers[name];
 		if (renderer === undefined) {
 			renderer = (SVG && svg$1({pane: name})) || (Canvas && canvas$1({pane: name}));
 			this._paneRenderers[name] = renderer;
@@ -12710,7 +12710,7 @@ Map.include({
  *
  * ```js
  * // define rectangle geographical bounds
- * var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];
+ * let bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];
  *
  * // create an orange rectangle
  * L.rectangle(bounds, {color: "#ff7800", weight: 1}).addTo(map);
@@ -12722,7 +12722,7 @@ Map.include({
  */
 
 
-var Rectangle = Polygon.extend({
+let Rectangle = Polygon.extend({
 	initialize: function (latLngBounds, options) {
 		Polygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);
 	},
@@ -12775,7 +12775,7 @@ Map.mergeOptions({
 	boxZoom: true
 });
 
-var BoxZoom = Handler.extend({
+let BoxZoom = Handler.extend({
 	initialize: function (map) {
 		this._map = map;
 		this._container = map._container;
@@ -12846,7 +12846,7 @@ var BoxZoom = Handler.extend({
 
 		this._point = this._map.mouseEventToContainerPoint(e);
 
-		var bounds = new Bounds(this._point, this._startPoint),
+		let bounds = new Bounds(this._point, this._startPoint),
 		    size = bounds.getSize();
 
 		setPosition(this._box, bounds.min);
@@ -12883,7 +12883,7 @@ var BoxZoom = Handler.extend({
 		this._clearDeferredResetState();
 		this._resetStateTimeout = setTimeout(bind(this._resetState, this), 0);
 
-		var bounds = new LatLngBounds(
+		let bounds = new LatLngBounds(
 		        this._map.containerPointToLatLng(this._startPoint),
 		        this._map.containerPointToLatLng(this._point));
 
@@ -12920,7 +12920,7 @@ Map.mergeOptions({
 	doubleClickZoom: true
 });
 
-var DoubleClickZoom = Handler.extend({
+let DoubleClickZoom = Handler.extend({
 	addHooks: function () {
 		this._map.on('dblclick', this._onDoubleClick, this);
 	},
@@ -12930,7 +12930,7 @@ var DoubleClickZoom = Handler.extend({
 	},
 
 	_onDoubleClick: function (e) {
-		var map = this._map,
+		let map = this._map,
 		    oldZoom = map.getZoom(),
 		    delta = map.options.zoomDelta,
 		    zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;
@@ -13003,10 +13003,10 @@ Map.mergeOptions({
 	maxBoundsViscosity: 0.0
 });
 
-var Drag = Handler.extend({
+let Drag = Handler.extend({
 	addHooks: function () {
 		if (!this._draggable) {
-			var map = this._map;
+			let map = this._map;
 
 			this._draggable = new Draggable(map._mapPane, map._container);
 
@@ -13045,11 +13045,11 @@ var Drag = Handler.extend({
 	},
 
 	_onDragStart: function () {
-		var map = this._map;
+		let map = this._map;
 
 		map._stop();
 		if (this._map.options.maxBounds && this._map.options.maxBoundsViscosity) {
-			var bounds = toLatLngBounds(this._map.options.maxBounds);
+			let bounds = toLatLngBounds(this._map.options.maxBounds);
 
 			this._offsetLimit = toBounds(
 				this._map.latLngToContainerPoint(bounds.getNorthWest()).multiplyBy(-1),
@@ -13073,7 +13073,7 @@ var Drag = Handler.extend({
 
 	_onDrag: function (e) {
 		if (this._map.options.inertia) {
-			var time = this._lastTime = +new Date(),
+			let time = this._lastTime = +new Date(),
 			    pos = this._lastPos = this._draggable._absPos || this._draggable._newPos;
 
 			this._positions.push(pos);
@@ -13095,7 +13095,7 @@ var Drag = Handler.extend({
 	},
 
 	_onZoomEnd: function () {
-		var pxCenter = this._map.getSize().divideBy(2),
+		let pxCenter = this._map.getSize().divideBy(2),
 		    pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);
 
 		this._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;
@@ -13109,9 +13109,9 @@ var Drag = Handler.extend({
 	_onPreDragLimit: function () {
 		if (!this._viscosity || !this._offsetLimit) { return; }
 
-		var offset = this._draggable._newPos.subtract(this._draggable._startPos);
+		let offset = this._draggable._newPos.subtract(this._draggable._startPos);
 
-		var limit = this._offsetLimit;
+		let limit = this._offsetLimit;
 		if (offset.x < limit.min.x) { offset.x = this._viscousLimit(offset.x, limit.min.x); }
 		if (offset.y < limit.min.y) { offset.y = this._viscousLimit(offset.y, limit.min.y); }
 		if (offset.x > limit.max.x) { offset.x = this._viscousLimit(offset.x, limit.max.x); }
@@ -13122,7 +13122,7 @@ var Drag = Handler.extend({
 
 	_onPreDragWrap: function () {
 		// TODO refactor to be able to adjust map pane position after zoom
-		var worldWidth = this._worldWidth,
+		let worldWidth = this._worldWidth,
 		    halfWidth = Math.round(worldWidth / 2),
 		    dx = this._initialWorldOffset,
 		    x = this._draggable._newPos.x,
@@ -13135,7 +13135,7 @@ var Drag = Handler.extend({
 	},
 
 	_onDragEnd: function (e) {
-		var map = this._map,
+		let map = this._map,
 		    options = map.options,
 
 		    noInertia = !options.inertia || this._times.length < 2;
@@ -13148,7 +13148,7 @@ var Drag = Handler.extend({
 		} else {
 			this._prunePositions(+new Date());
 
-			var direction = this._lastPos.subtract(this._positions[0]),
+			let direction = this._lastPos.subtract(this._positions[0]),
 			    duration = (this._lastTime - this._times[0]) / 1000,
 			    ease = options.easeLinearity,
 
@@ -13202,7 +13202,7 @@ Map.mergeOptions({
 	keyboardPanDelta: 80
 });
 
-var Keyboard = Handler.extend({
+let Keyboard = Handler.extend({
 
 	keyCodes: {
 		left:    [37],
@@ -13221,7 +13221,7 @@ var Keyboard = Handler.extend({
 	},
 
 	addHooks: function () {
-		var container = this._map._container;
+		let container = this._map._container;
 
 		// make the container focusable by tabbing
 		if (container.tabIndex <= 0) {
@@ -13258,7 +13258,7 @@ var Keyboard = Handler.extend({
 	_onMouseDown: function () {
 		if (this._focused) { return; }
 
-		var body = document.body,
+		let body = document.body,
 		    docEl = document.documentElement,
 		    top = body.scrollTop || docEl.scrollTop,
 		    left = body.scrollLeft || docEl.scrollLeft;
@@ -13279,7 +13279,7 @@ var Keyboard = Handler.extend({
 	},
 
 	_setPanDelta: function (panDelta) {
-		var keys = this._panKeys = {},
+		let keys = this._panKeys = {},
 		    codes = this.keyCodes,
 		    i, len;
 
@@ -13298,7 +13298,7 @@ var Keyboard = Handler.extend({
 	},
 
 	_setZoomDelta: function (zoomDelta) {
-		var keys = this._zoomKeys = {},
+		let keys = this._zoomKeys = {},
 		    codes = this.keyCodes,
 		    i, len;
 
@@ -13321,7 +13321,7 @@ var Keyboard = Handler.extend({
 	_onKeyDown: function (e) {
 		if (e.altKey || e.ctrlKey || e.metaKey) { return; }
 
-		var key = e.keyCode,
+		let key = e.keyCode,
 		    map = this._map,
 		    offset;
 
@@ -13385,7 +13385,7 @@ Map.mergeOptions({
 	wheelPxPerZoomLevel: 60
 });
 
-var ScrollWheelZoom = Handler.extend({
+let ScrollWheelZoom = Handler.extend({
 	addHooks: function () {
 		on(this._map._container, 'mousewheel', this._onWheelScroll, this);
 
@@ -13397,9 +13397,9 @@ var ScrollWheelZoom = Handler.extend({
 	},
 
 	_onWheelScroll: function (e) {
-		var delta = getWheelDelta(e);
+		let delta = getWheelDelta(e);
 
-		var debounce = this._map.options.wheelDebounceTime;
+		let debounce = this._map.options.wheelDebounceTime;
 
 		this._delta += delta;
 		this._lastMousePos = this._map.mouseEventToContainerPoint(e);
@@ -13408,7 +13408,7 @@ var ScrollWheelZoom = Handler.extend({
 			this._startTime = +new Date();
 		}
 
-		var left = Math.max(debounce - (+new Date() - this._startTime), 0);
+		let left = Math.max(debounce - (+new Date() - this._startTime), 0);
 
 		clearTimeout(this._timer);
 		this._timer = setTimeout(bind(this._performZoom, this), left);
@@ -13417,7 +13417,7 @@ var ScrollWheelZoom = Handler.extend({
 	},
 
 	_performZoom: function () {
-		var map = this._map,
+		let map = this._map,
 		    zoom = map.getZoom(),
 		    snap = this._map.options.zoomSnap || 0;
 
@@ -13466,7 +13466,7 @@ Map.mergeOptions({
 	tapTolerance: 15
 });
 
-var Tap = Handler.extend({
+let Tap = Handler.extend({
 	addHooks: function () {
 		on(this._map._container, 'touchstart', this._onDown, this);
 	},
@@ -13489,7 +13489,7 @@ var Tap = Handler.extend({
 			return;
 		}
 
-		var first = e.touches[0],
+		let first = e.touches[0],
 		    el = first.target;
 
 		this._startPos = this._newPos = new Point(first.clientX, first.clientY);
@@ -13526,7 +13526,7 @@ var Tap = Handler.extend({
 
 		if (this._fireClick && e && e.changedTouches) {
 
-			var first = e.changedTouches[0],
+			let first = e.changedTouches[0],
 			    el = first.target;
 
 			if (el && el.tagName && el.tagName.toLowerCase() === 'a') {
@@ -13547,13 +13547,13 @@ var Tap = Handler.extend({
 	},
 
 	_onMove: function (e) {
-		var first = e.touches[0];
+		let first = e.touches[0];
 		this._newPos = new Point(first.clientX, first.clientY);
 		this._simulateEvent('mousemove', first);
 	},
 
 	_simulateEvent: function (type, e) {
-		var simulatedEvent = document.createEvent('MouseEvents');
+		let simulatedEvent = document.createEvent('MouseEvents');
 
 		simulatedEvent._simulated = true;
 		e.target._simulatedClick = true;
@@ -13596,7 +13596,7 @@ Map.mergeOptions({
 	bounceAtZoomLimits: true
 });
 
-var TouchZoom = Handler.extend({
+let TouchZoom = Handler.extend({
 	addHooks: function () {
 		addClass(this._map._container, 'leaflet-touch-zoom');
 		on(this._map._container, 'touchstart', this._onTouchStart, this);
@@ -13608,7 +13608,7 @@ var TouchZoom = Handler.extend({
 	},
 
 	_onTouchStart: function (e) {
-		var map = this._map;
+		let map = this._map;
 		if (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }
 
 		var p1 = map.mouseEventToContainerPoint(e.touches[0]),
@@ -13637,7 +13637,7 @@ var TouchZoom = Handler.extend({
 	_onTouchMove: function (e) {
 		if (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }
 
-		var map = this._map,
+		let map = this._map,
 		    p1 = map.mouseEventToContainerPoint(e.touches[0]),
 		    p2 = map.mouseEventToContainerPoint(e.touches[1]),
 		    scale = p1.distanceTo(p2) / this._startDist;
@@ -13655,7 +13655,7 @@ var TouchZoom = Handler.extend({
 			if (scale === 1) { return; }
 		} else {
 			// Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng
-			var delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);
+			let delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);
 			if (scale === 1 && delta.x === 0 && delta.y === 0) { return; }
 			this._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom);
 		}
@@ -13667,7 +13667,7 @@ var TouchZoom = Handler.extend({
 
 		cancelAnimFrame(this._animRequest);
 
-		var moveFn = bind(map._move, map, this._center, this._zoom, {pinch: true, round: false});
+		let moveFn = bind(map._move, map, this._center, this._zoom, {pinch: true, round: false});
 		this._animRequest = requestAnimFrame(moveFn, this, true);
 
 		preventDefault(e);
@@ -13709,7 +13709,7 @@ Map.TouchZoom = TouchZoom;
 
 // misc
 
-var oldL = window.L;
+let oldL = window.L;
 function noConflict() {
 	window.L = oldL;
 	return this;
diff --git a/src/examples/map-background/map-background.html b/src/examples/map-background/map-background.html
index 2ad5d24e2..5d1e8a176 100644
--- a/src/examples/map-background/map-background.html
+++ b/src/examples/map-background/map-background.html
@@ -42,7 +42,7 @@
 			}
 			else
 			{
-				var container = document.createElement('div');
+				let container = document.createElement('div');
 				container.style.position = 'absolute';
 				container.style.overflow = 'hidden';
 				container.style.left = '0px';
@@ -60,7 +60,7 @@
 				// using graph.setPanning(), setTooltips() & setConnectable().
 				// To enable rubberband selection and basic keyboard events,
 				// use new mxRubberband(graph) and new mxKeyHandler(graph).
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Enables tooltips, new connections and panning
 				graph.setPanning(true);
@@ -68,8 +68,8 @@
 				graph.setConnectable(true);
 				
 				// Automatically handle parallel edges
- 				var layout = new mxParallelEdgeLayout(graph);
- 				var layoutMgr = new mxLayoutManager(graph);
+ 				let layout = new mxParallelEdgeLayout(graph);
+ 				let layoutMgr = new mxLayoutManager(graph);
  				
  				layoutMgr.getLayout = function(cell)
 				{
@@ -81,15 +81,15 @@
 				
 				// Enables rubberband (marquee) selection and a handler
 				// for basic keystrokes (eg. return, escape during editing).
-				var rubberband = new mxRubberband(graph);
-				var keyHandler = new mxKeyHandler(graph);
+				let rubberband = new mxRubberband(graph);
+				let keyHandler = new mxKeyHandler(graph);
 
 				// Changes the default style for edges "in-place" and assigns
 				// an alternate edge style which is applied in mxGraph.flip
 				// when the user double clicks on the adjustment control point
 				// of the edge. The ElbowConnector edge style switches to TopToBottom
 				// if the horizontal style is true.
-				var style = graph.getStylesheet().getDefaultEdgeStyle();
+				let style = graph.getStylesheet().getDefaultEdgeStyle();
 				style[mxConstants.STYLE_ROUNDED] = true;
 				style[mxConstants.STYLE_EDGE] = mxEdgeStyle.ElbowConnector;
 		
@@ -109,7 +109,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -130,7 +130,7 @@
 			}
 
 			var map100Zoom = 13;
-			var map = L.map('map',
+			let map = L.map('map',
 				{
 					attributionControl: false,
 					zoomControl: false,
@@ -146,14 +146,14 @@
 			L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png').addTo(map);
 
 			
-			var zoomPanListener = function(view, evt) {
-				var tr = evt.getProperty('translate');
-				var oldTr = evt.getProperty('previousTranslate');
+			let zoomPanListener = function(view, evt) {
+				let tr = evt.getProperty('translate');
+				let oldTr = evt.getProperty('previousTranslate');
 
-				var sc = evt.getProperty('scale');
-				var oldSc = evt.getProperty('previousScale');
+				let sc = evt.getProperty('scale');
+				let oldSc = evt.getProperty('previousScale');
 				
-				var s = view.scale;
+				let s = view.scale;
 
 				if (sc != null)
 				{
diff --git a/src/examples/map.html b/src/examples/map.html
index 73e2968cd..13de5404a 100644
--- a/src/examples/map.html
+++ b/src/examples/map.html
@@ -49,7 +49,7 @@
 		// Initialize the map and the custom overlay.
 		function initialize()
 		{
-		  var mapOptions = {
+		  let mapOptions = {
 		    zoom: 4,
 		    center: new google.maps.LatLng(34, -96),
 		    mapTypeId: google.maps.MapTypeId.ROADMAP,
@@ -57,11 +57,11 @@
 		      {"elementType": "labels", "stylers": [{"visibility": "off" }]}]
 		  };
 
-		  var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
+		  let map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
 
-		  var swBound = new google.maps.LatLng(18, -126);
-		  var neBound = new google.maps.LatLng(50, -65);
-		  var bounds = new google.maps.LatLngBounds(swBound, neBound);
+		  let swBound = new google.maps.LatLng(18, -126);
+		  let neBound = new google.maps.LatLng(50, -65);
+		  let bounds = new google.maps.LatLngBounds(swBound, neBound);
 
 		  // The custom mxGraphOverlay object contains the graph,
 		  // the bounds of the graph, and a reference to the map.
@@ -89,7 +89,7 @@
 		 */
 		mxGraphOverlay.prototype.onAdd = function()
 		{
-			var div = document.createElement('div');
+			let div = document.createElement('div');
 			div.style.borderStyle = 'none';
 			div.style.borderWidth = '0px';
 			div.style.overflow = 'visible';
@@ -99,12 +99,12 @@
 			mxClient.NO_FO = true;
 			
 			// Creates the graph inside the given container
-			var graph = new mxGraph(div);
+			let graph = new mxGraph(div);
 			graph.setHtmlLabels(true);
 			graph.view.setTranslate(4, 4);
 			
 			// Sets default vertex style
-			var style = {};
+			let style = {};
 			style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_ELLIPSE;
 			style[mxConstants.STYLE_PERIMETER] = mxPerimeter.EllipsePerimeter;
 			style[mxConstants.STYLE_FILLCOLOR] = '#8CCDF5';
@@ -131,7 +131,7 @@
 			
 			// Gets the default parent for inserting new cells. This
 			// is normally the first child of the root (ie. layer 0).
-			var parent = graph.getDefaultParent();
+			let parent = graph.getDefaultParent();
 							
 			// Adds cells to the model in a single step
 			graph.getModel().beginUpdate();
@@ -152,8 +152,8 @@
 				// This node and its connections are only visible for zoom 200% and above
 				var n12 = graph.insertVertex(parent, null, {label:'Columbus', minScale:2}, 380, 120, 10, 10);
 				
-				var estyle = 'strokeWidth=2;endArrow=none;labelBackgroundColor=white;';
-				var e = [graph.insertEdge(parent, null, '', n1, n2, estyle),
+				let estyle = 'strokeWidth=2;endArrow=none;labelBackgroundColor=white;';
+				let e = [graph.insertEdge(parent, null, '', n1, n2, estyle),
 				         graph.insertEdge(parent, null, '', n2, n3, estyle),
 				         graph.insertEdge(parent, null, '', n1, n4, estyle),
 				         graph.insertEdge(parent, null, '', n2, n4, estyle),
@@ -182,9 +182,9 @@
 				graph.getModel().beginUpdate();
 				try
 				{
-					for (var i = 0; i < e.length; i++)
+					for (let i = 0; i < e.length; i++)
 					{
-						var rnd = Math.random();
+						let rnd = Math.random();
 						graph.getModel().setValue(e[i], Math.round(rnd * 100));
 					}
 				}
@@ -198,7 +198,7 @@
 			this.div_ = div;
 			
 			// Add the element to the "overlayLayer" pane.
-			var panes = this.getPanes();
+			let panes = this.getPanes();
 			panes.overlayLayer.appendChild(div);
 		};
 
@@ -207,20 +207,20 @@
 		  // We use the south-west and north-east
 		  // coordinates of the overlay to peg it to the correct position and size.
 		  // To do this, we need to retrieve the projection from the overlay.
-		  var overlayProjection = this.getProjection();
+		  let overlayProjection = this.getProjection();
 
 		  // Retrieve the south-west and north-east coordinates of this overlay
 		  // in LatLngs and convert them to pixel coordinates.
 		  // We'll use these coordinates to resize the div.
-		  var sw = overlayProjection.fromLatLngToDivPixel(this.bounds_.getSouthWest());
-		  var ne = overlayProjection.fromLatLngToDivPixel(this.bounds_.getNorthEast());
+		  let sw = overlayProjection.fromLatLngToDivPixel(this.bounds_.getSouthWest());
+		  let ne = overlayProjection.fromLatLngToDivPixel(this.bounds_.getNorthEast());
 
 		  // Resize the graph's div to fit the indicated dimensions.
-		  var div = this.div_;
+		  let div = this.div_;
 		  div.style.left = sw.x + 'px';
 		  div.style.top = ne.y + 'px';
-		  var w = (ne.x - sw.x);
-		  var h = (sw.y - ne.y);
+		  let w = (ne.x - sw.x);
+		  let h = (sw.y - ne.y);
 		  div.style.width = w + 'px';
 		  div.style.height = h + 'px';
 		  
diff --git a/src/examples/markers.html b/src/examples/markers.html
index 0a1e32b7b..3136c1b0b 100644
--- a/src/examples/markers.html
+++ b/src/examples/markers.html
@@ -38,8 +38,8 @@
 				// Registers and defines the custom marker
 				mxMarker.addMarker('dash', function(canvas, shape, type, pe, unitX, unitY, size, source, sw, filled)
 				{
-					var nx = unitX * (size + sw + 1);
-					var ny = unitY * (size + sw + 1);
+					let nx = unitX * (size + sw + 1);
+					let ny = unitY * (size + sw + 1);
 
 					return function()
 					{
@@ -85,24 +85,24 @@
 				mxUtils.extend(LinkShape, mxArrow);
 				LinkShape.prototype.paintEdgeShape = function(c, pts)
 				{
-					var width = 10;
+					let width = 10;
 
 					// Base vector (between end points)
 					var p0 = pts[0];
-					var pe = pts[pts.length - 1];
+					let pe = pts[pts.length - 1];
 					
-					var dx = pe.x - p0.x;
-					var dy = pe.y - p0.y;
-					var dist = Math.sqrt(dx * dx + dy * dy);
-					var length = dist;
+					let dx = pe.x - p0.x;
+					let dy = pe.y - p0.y;
+					let dist = Math.sqrt(dx * dx + dy * dy);
+					let length = dist;
 					
 					// Computes the norm and the inverse norm
-					var nx = dx / dist;
-					var ny = dy / dist;
-					var basex = length * nx;
-					var basey = length * ny;
-					var floorx = width * ny/3;
-					var floory = -width * nx/3;
+					let nx = dx / dist;
+					let ny = dy / dist;
+					let basex = length * nx;
+					let basey = length * ny;
+					let floorx = width * ny/3;
+					let floory = -width * nx/3;
 					
 					// Computes points
 					var p0x = p0.x - floorx / 2;
@@ -129,10 +129,10 @@
 				mxCellRenderer.registerShape('link', LinkShape);
 
 				// Creates the graph
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Sets default styles
-				var style = graph.getStylesheet().getDefaultVertexStyle();
+				let style = graph.getStylesheet().getDefaultVertexStyle();
 				style['fillColor'] = '#FFFFFF';
 				style['strokeColor'] = '#000000';
 				style['fontColor'] = '#000000';
@@ -147,7 +147,7 @@
 				style['endSize'] = '8';
 
 				// Populates the graph
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				graph.getModel().beginUpdate();
 				try
diff --git a/src/examples/menustyle.html b/src/examples/menustyle.html
index c775da993..e606b93fe 100644
--- a/src/examples/menustyle.html
+++ b/src/examples/menustyle.html
@@ -79,7 +79,7 @@
 				mxConstants.VERTEX_SELECTION_COLOR = '#00a8ff';
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setTooltips(true);
 
 				// Enables rubberband selection
@@ -87,7 +87,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -104,9 +104,9 @@
 				}
 				
 				// Creates a new overlay with an image and a tooltip and makes it "transparent" to events
-				var overlay = new mxCellOverlay(new mxImage('editors/images/overlays/check.png', 16, 16), 'Overlay tooltip');
+				let overlay = new mxCellOverlay(new mxImage('editors/images/overlays/check.png', 16, 16), 'Overlay tooltip');
 
-				var mxCellRendererInstallCellOverlayListeners = mxCellRenderer.prototype.installCellOverlayListeners;
+				let mxCellRendererInstallCellOverlayListeners = mxCellRenderer.prototype.installCellOverlayListeners;
 				mxCellRenderer.prototype.installCellOverlayListeners = function(state, overlay, shape)
 				{
 					mxCellRendererInstallCellOverlayListeners.apply(this, arguments);
diff --git a/src/examples/merge.html b/src/examples/merge.html
index 0a399e72b..1a6a4d2f7 100644
--- a/src/examples/merge.html
+++ b/src/examples/merge.html
@@ -34,13 +34,13 @@
 				mxConstants.SHADOWCOLOR = '#c0c0c0';
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// No size handles, please...
 				graph.setCellsResizable(false);
 
 				// Makes all cells round with a white, bold label
-				var style = graph.stylesheet.getDefaultVertexStyle();
+				let style = graph.stylesheet.getDefaultVertexStyle();
 				style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_ELLIPSE;
 				style[mxConstants.STYLE_PERIMETER] = mxPerimeter.EllipsePerimeter;
 				style[mxConstants.STYLE_FONTCOLOR] = 'white';
@@ -61,23 +61,23 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the target model in a single step
 				// using custom ids for the vertices and edges
-				var w = 40;
-				var h = 40;
+				let w = 40;
+				let h = 40;
 				
 				graph.getModel().beginUpdate();
 				try
 				{
-					var a = graph.insertVertex(parent, 'a', 'A', 20, 20, w, h, 'fillColor=blue');
-					var b = graph.insertVertex(parent, 'b', 'B', 20, 200, w, h, 'fillColor=blue');
-					var c = graph.insertVertex(parent, 'c', 'C', 200, 20, w, h, 'fillColor=red');
-					var d = graph.insertVertex(parent, 'd', 'D', 200, 200, w, h, 'fillColor=red');
-					var ac = graph.insertEdge(parent, 'ac', 'ac', a, c, 'strokeColor=blue;verticalAlign=bottom');
-					var ad = graph.insertEdge(parent, 'ad', 'ad', a, d, 'strokeColor=blue;align=left;verticalAlign=bottom');
-					var bd = graph.insertEdge(parent, 'bd', 'bd', b, d, 'strokeColor=blue;verticalAlign=bottom');
+					let a = graph.insertVertex(parent, 'a', 'A', 20, 20, w, h, 'fillColor=blue');
+					let b = graph.insertVertex(parent, 'b', 'B', 20, 200, w, h, 'fillColor=blue');
+					let c = graph.insertVertex(parent, 'c', 'C', 200, 20, w, h, 'fillColor=red');
+					let d = graph.insertVertex(parent, 'd', 'D', 200, 200, w, h, 'fillColor=red');
+					let ac = graph.insertEdge(parent, 'ac', 'ac', a, c, 'strokeColor=blue;verticalAlign=bottom');
+					let ad = graph.insertEdge(parent, 'ad', 'ad', a, d, 'strokeColor=blue;align=left;verticalAlign=bottom');
+					let bd = graph.insertEdge(parent, 'bd', 'bd', b, d, 'strokeColor=blue;verticalAlign=bottom');
 				}
 				finally
 				{
@@ -97,13 +97,13 @@
 				graph2.getModel().beginUpdate();
 				try
 				{
-					var c = graph2.insertVertex(parent2, 'c', 'C', 200, 20, w, h, 'fillColor=green');
-					var d = graph2.insertVertex(parent2, 'd', 'D', 200, 200, w, h, 'fillColor=green');
-					var e = graph2.insertVertex(parent2, 'e', 'E', 400, 20, w, h, 'fillColor=green');
-					var f = graph2.insertVertex(parent2, 'f', 'F', 400, 200, w, h, 'fillColor=green');
-					var ce = graph2.insertEdge(parent2, 'ce', 'ce', c, e, 'strokeColor=green;verticalAlign=bottom');
-					var ed = graph2.insertEdge(parent2, 'ed', 'ed', e, d, 'strokeColor=green;align=right;verticalAlign=bottom');
-					var fd = graph2.insertEdge(parent2, 'bd', 'fd', f, d, 'strokeColor=green;verticalAlign=bottom');
+					let c = graph2.insertVertex(parent2, 'c', 'C', 200, 20, w, h, 'fillColor=green');
+					let d = graph2.insertVertex(parent2, 'd', 'D', 200, 200, w, h, 'fillColor=green');
+					let e = graph2.insertVertex(parent2, 'e', 'E', 400, 20, w, h, 'fillColor=green');
+					let f = graph2.insertVertex(parent2, 'f', 'F', 400, 200, w, h, 'fillColor=green');
+					let ce = graph2.insertEdge(parent2, 'ce', 'ce', c, e, 'strokeColor=green;verticalAlign=bottom');
+					let ed = graph2.insertEdge(parent2, 'ed', 'ed', e, d, 'strokeColor=green;align=right;verticalAlign=bottom');
+					let fd = graph2.insertEdge(parent2, 'bd', 'fd', f, d, 'strokeColor=green;verticalAlign=bottom');
 				}
 				finally
 				{
diff --git a/src/examples/monitor.html b/src/examples/monitor.html
index 28494bf90..e99708185 100644
--- a/src/examples/monitor.html
+++ b/src/examples/monitor.html
@@ -34,10 +34,10 @@
 				mxConstants.SHADOWCOLOR = '#e0e0e0';
 				
 				// Creates the graph inside the given container
-				var graph = createGraph(container);
+				let graph = createGraph(container);
 
 				// Creates a process display using the activity names as IDs to refer to the elements
-				var xml = '<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/>'+
+				let xml = '<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/>'+
 					'<mxCell id="2" value="Claim Handling Process" style="swimlane" vertex="1" parent="1"><mxGeometry x="1" width="850" height="400" as="geometry"/></mxCell>'+
 					'<mxCell id="3" value="Claim Manager" style="swimlane" vertex="1" parent="2"><mxGeometry x="30" width="820" height="200" as="geometry"/></mxCell>'+
 					'<mxCell id="5" value="" style="start" vertex="1" parent="3"><mxGeometry x="40" y="85" width="30" height="30" as="geometry"/></mxCell>'+
@@ -75,8 +75,8 @@
 					'<mxCell id="30" value="" edge="1" parent="2" source="27" target="EnterAccountingData"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="469" y="40"/></Array></mxGeometry></mxCell>'+
 					'<mxCell id="33" value="" edge="1" parent="2" source="6" target="EnterAccountingData"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="255" y="200"/></Array></mxGeometry></mxCell>'+
 					'</root></mxGraphModel>';
-				var doc = mxUtils.parseXml(xml);
-				var codec = new mxCodec(doc);
+				let doc = mxUtils.parseXml(xml);
+				let codec = new mxCodec(doc);
 				codec.decode(doc.documentElement, graph.getModel());
 			}
 			
@@ -85,7 +85,7 @@
 			{
 				// XML is normally fetched from URL at server using mxUtils.get - this is a client-side
 				// string with randomized states to demonstrate the idea of the workflow monitor
-				var xml = '<process><update id="ApproveClaim" state="'+getState()+'"/><update id="AuthorizeClaim" state="'+getState()+'"/>'+
+				let xml = '<process><update id="ApproveClaim" state="'+getState()+'"/><update id="AuthorizeClaim" state="'+getState()+'"/>'+
 					'<update id="CheckAccountingData" state="'+getState()+'"/><update id="ReviewClaim" state="'+getState()+'"/>'+
 					'<update id="ApproveReviewedClaim" state="'+getState()+'"/><update id="EnterAccountingData" state="'+getState()+'"/></process>';
 				update(graph, xml);
@@ -99,12 +99,12 @@
 		{
 			if (xml != null && xml.length > 0)
 			{
-				var doc = mxUtils.parseXml(xml);
+				let doc = mxUtils.parseXml(xml);
 				
 				if (doc != null && doc.documentElement != null)
 				{
-					var model = graph.getModel();
-					var nodes = doc.documentElement.getElementsByTagName('update');
+					let model = graph.getModel();
+					let nodes = doc.documentElement.getElementsByTagName('update');
 					
 					if (nodes != null && nodes.length > 0)
 					{
@@ -112,14 +112,14 @@
 
 						try
 						{
-							for (var i = 0; i < nodes.length; i++)
+							for (let i = 0; i < nodes.length; i++)
 							{
 								// Processes the activity nodes inside the process node
-								var id = nodes[i].getAttribute('id');
-								var state = nodes[i].getAttribute('state');
+								let id = nodes[i].getAttribute('id');
+								let state = nodes[i].getAttribute('state');
 								
 								// Gets the cell for the given activity name from the model
-								var cell = model.getCell(id);
+								let cell = model.getCell(id);
 								
 								// Updates the cell color and adds some tooltip information
 								if (cell != null)
@@ -166,7 +166,7 @@
 		 */
 		function createOverlay(image, tooltip)
 		{
-			var overlay = new mxCellOverlay(image, tooltip);
+			let overlay = new mxCellOverlay(image, tooltip);
 
 			// Installs a handler for clicks on the overlay
 			overlay.addListener(mxEvent.CLICK, function(sender, evt)
@@ -182,7 +182,7 @@
 		 */
 		function createGraph(container)
 		{
-			var graph = new mxGraph(container);
+			let graph = new mxGraph(container);
 			graph.setTooltips(true);
 			graph.setEnabled(false);
 			
@@ -193,7 +193,7 @@
 			};
 
 			// Creates the stylesheet for the process display
-			var style = graph.getStylesheet().getDefaultVertexStyle();
+			let style = graph.getStylesheet().getDefaultVertexStyle();
 			style[mxConstants.STYLE_FONTSIZE] = 11;
 			style[mxConstants.STYLE_FONTCOLOR] = 'black';
 			style[mxConstants.STYLE_STROKECOLOR] = '#808080';
@@ -264,8 +264,8 @@
 		 */
 		function getState()
 		{
-			var state = 'Init';
-			var rnd = Math.random() * 4;
+			let state = 'Init';
+			let rnd = Math.random() * 4;
 			
 			if (rnd > 3)
 			{
diff --git a/src/examples/morph.html b/src/examples/morph.html
index ff38fdbb1..e63debd57 100644
--- a/src/examples/morph.html
+++ b/src/examples/morph.html
@@ -35,14 +35,14 @@
 				mxEvent.disableContextMenu(container);
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Enables rubberband selection
 				new mxRubberband(graph);
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -59,7 +59,7 @@
 					graph.getModel().endUpdate();
 				}
 				
-				var mult = 1;
+				let mult = 1;
 				
 				document.body.appendChild(mxUtils.button('Morph', function()
 				{
@@ -68,12 +68,12 @@
 					graph.getModel().beginUpdate();
 					try
 					{
-						var geo = graph.getCellGeometry(v1);
+						let geo = graph.getCellGeometry(v1);
 						geo = geo.clone();
 						geo.x += 180 * mult;
 						graph.getModel().setGeometry(v1, geo);
 						
-						var geo = graph.getCellGeometry(v2);
+						let geo = graph.getCellGeometry(v2);
 						geo = geo.clone();
 						geo.x -= 180 * mult;
 						graph.getModel().setGeometry(v2, geo);
@@ -81,7 +81,7 @@
 					finally
 					{
 						// Arguments are number of steps, ease and delay
-						var morph = new mxMorphing(graph, 20, 1.2, 20);
+						let morph = new mxMorphing(graph, 20, 1.2, 20);
 						morph.addListener(mxEvent.DONE, function()
 						{
 							graph.getModel().endUpdate();
diff --git a/src/examples/offpage.html b/src/examples/offpage.html
index 7131b718b..f0a4eeb5c 100644
--- a/src/examples/offpage.html
+++ b/src/examples/offpage.html
@@ -35,7 +35,7 @@
 			}
 			else
 			{
-				var container = document.createElement('div');
+				let container = document.createElement('div');
 				container.style.position = 'absolute';
 				container.style.overflow = 'hidden';
 				container.style.left = '0px';
@@ -47,13 +47,13 @@
 				document.body.appendChild(container);
 			
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setEnabled(false);
 				
 				// Highlights offpage connectors
-				var highlight = new mxCellTracker(graph, null, function(me)
+				let highlight = new mxCellTracker(graph, null, function(me)
 				{
-					var cell = me.getCell();
+					let cell = me.getCell();
 					
 					if (cell != null &&
 						cell.value != null &&
@@ -69,7 +69,7 @@
 				// executes function in user object
 				graph.addListener(mxEvent.CLICK, function(source, evt)
 				{
-					var cell = evt.getProperty('cell');
+					let cell = evt.getProperty('cell');
 					
 					if (cell != null &&
 						cell.value != null &&
@@ -93,19 +93,19 @@
 
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var first = null;
-				var second = null;
+				let first = null;
+				let second = null;
 				
 				first = function()
 				{
-					var value = {toString: function() { return 'Next'; }, create: second};
+					let value = {toString: function() { return 'Next'; }, create: second};
 				
 					// Adds cells to the model in a single step
 					graph.getModel().beginUpdate();
 					try
 					{
 						graph.getModel().setRoot(graph.getModel().createRoot());
-						var parent = graph.getDefaultParent();
+						let parent = graph.getDefaultParent();
 					
 						var v1 = graph.insertVertex(parent, null, 'Click', 30, 20, 80, 30, 'fillColor=#FFFF88;strokeColor=#FF1A00');
 						var v2 = graph.insertVertex(parent, null, 'Next', 20, 150, 100, 30, 'fillColor=#FFFF88;strokeColor=#FF1A00');
@@ -121,14 +121,14 @@
 
 				second = function()
 				{
-					var value = {toString: function() { return 'Prev'; }, create: first};
+					let value = {toString: function() { return 'Prev'; }, create: first};
 				
 					// Adds cells to the model in a single step
 					graph.getModel().beginUpdate();
 					try
 					{
 						graph.getModel().setRoot(graph.getModel().createRoot());
-						var parent = graph.getDefaultParent();
+						let parent = graph.getDefaultParent();
 					
 						var v1 = graph.insertVertex(parent, null, 'Click', 30, 20, 80, 30, 'fillColor=#CDEB8B;strokeColor=#008C00');
 						var v2 = graph.insertVertex(parent, null, 'Prev', 220, 20, 100, 30, 'fillColor=#CDEB8B;strokeColor=#008C00');
diff --git a/src/examples/orgchart.html b/src/examples/orgchart.html
index 78ca7f992..931e1e06b 100644
--- a/src/examples/orgchart.html
+++ b/src/examples/orgchart.html
@@ -37,7 +37,7 @@
 			else
 			{
 				// Workaround for Internet Explorer ignoring certain styles
-				var container = document.createElement('div');
+				let container = document.createElement('div');
 				container.style.position = 'absolute';
 				container.style.overflow = 'hidden';
 				container.style.left = '0px';
@@ -45,7 +45,7 @@
 				container.style.right = '0px';
 				container.style.bottom = '0px';
 
-				var outline = document.getElementById('outlineContainer');
+				let outline = document.getElementById('outlineContainer');
 
 				mxEvent.disableContextMenu(container);
 
@@ -62,7 +62,7 @@
 				document.body.appendChild(container);
 
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Enables automatic sizing for vertices after editing and
 				// panning by using the left mouse button.
@@ -80,13 +80,13 @@
 
 				// Creates the outline (navigator, overview) for moving
 				// around the graph in the top, right corner of the window.
-				var outln = new mxOutline(graph, outline);
+				let outln = new mxOutline(graph, outline);
 				
 				// Disables tooltips on touch devices
 				graph.setTooltips(!mxClient.IS_TOUCH);
 
 				// Set some stylesheet options for the visual appearance of vertices
-				var style = graph.getStylesheet().getDefaultVertexStyle();
+				let style = graph.getStylesheet().getDefaultVertexStyle();
 				style[mxConstants.STYLE_SHAPE] = 'label';
 				
 				style[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_MIDDLE;
@@ -126,12 +126,12 @@
 				style[mxConstants.STYLE_EDGE] = mxEdgeStyle.TopToBottom;
 
 				// Stops editing on enter or escape keypress
-				var keyHandler = new mxKeyHandler(graph);
+				let keyHandler = new mxKeyHandler(graph);
 
 				// Enables automatic layout on the graph and installs
 				// a tree layout for all groups who's children are
 				// being changed, added or removed.
-				var layout = new mxCompactTreeLayout(graph, false);
+				let layout = new mxCompactTreeLayout(graph, false);
 				layout.useBoundingBox = false;
 				layout.edgeRouting = false;
 				layout.levelDistance = 60;
@@ -144,7 +144,7 @@
 					return true;
 				};
 
-				var layoutMgr = new mxLayoutManager(graph);
+				let layoutMgr = new mxLayoutManager(graph);
 
 				layoutMgr.getLayout = function(cell)
 				{
@@ -161,10 +161,10 @@
 				};
 
 				// Fix for wrong preferred size
-				var oldGetPreferredSizeForCell = graph.getPreferredSizeForCell;
+				let oldGetPreferredSizeForCell = graph.getPreferredSizeForCell;
 				graph.getPreferredSizeForCell = function(cell)
 				{
-					var result = oldGetPreferredSizeForCell.apply(this, arguments);
+					let result = oldGetPreferredSizeForCell.apply(this, arguments);
 
 					if (result != null)
 					{
@@ -184,7 +184,7 @@
 				// (without affecting the preferred size for new cells)
 				graph.cellRenderer.getLabelValue = function(state)
 				{
-					var result = state.cell.value;
+					let result = state.cell.value;
 					
 					if (state.view.graph.getModel().isVertex(state.cell))
 					{
@@ -204,13 +204,13 @@
 
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 
 				// Adds the root vertex of the tree
 				graph.getModel().beginUpdate();
 				try
 				{
-					var w = graph.container.offsetWidth;
+					let w = graph.container.offsetWidth;
 					var v1 = graph.insertVertex(parent, 'treeRoot',
 						'Organization', w/2 - 30, 20, 140, 60, 'image=editors/images/house.png');
 					graph.updateCellSize(v1);
@@ -222,10 +222,10 @@
 					graph.getModel().endUpdate();
 				}
 
-				var content = document.createElement('div');
+				let content = document.createElement('div');
 				content.style.padding = '4px';
 
-				var tb = new mxToolbar(content);
+				let tb = new mxToolbar(content);
 
 				tb.addItem('Zoom In', 'images/zoom_in32.png',function(evt)
 				{
@@ -244,18 +244,18 @@
 
 				tb.addItem('Print', 'images/print32.png',function(evt)
 				{
-					var preview = new mxPrintPreview(graph, 1);
+					let preview = new mxPrintPreview(graph, 1);
 					preview.open();
 				});
 
 				tb.addItem('Poster Print', 'images/press32.png',function(evt)
 				{
-					var pageCount = mxUtils.prompt('Enter maximum page count', '1');
+					let pageCount = mxUtils.prompt('Enter maximum page count', '1');
 
 					if (pageCount != null)
 					{
-						var scale = mxUtils.getScaleForPageCount(pageCount, graph);
-						var preview = new mxPrintPreview(graph, scale);
+						let scale = mxUtils.getScaleForPageCount(pageCount, graph);
+						let preview = new mxPrintPreview(graph, scale);
 						preview.open();
 					}
 				});
@@ -271,7 +271,7 @@
 // Function to create the entries in the popupmenu
 function createPopupMenu(graph, menu, cell, evt)
 {
-	var model = graph.getModel();
+	let model = graph.getModel();
 
 	if (cell != null)
 	{
@@ -314,18 +314,18 @@ function createPopupMenu(graph, menu, cell, evt)
 
 	menu.addItem('Print', 'editors/images/print.gif', function()
 	{
-		var preview = new mxPrintPreview(graph, 1);
+		let preview = new mxPrintPreview(graph, 1);
 		preview.open();
 	});
 
 	menu.addItem('Poster Print', 'editors/images/print.gif', function()
 	{
-		var pageCount = mxUtils.prompt('Enter maximum page count', '1');
+		let pageCount = mxUtils.prompt('Enter maximum page count', '1');
 
 		if (pageCount != null)
 		{
-			var scale = mxUtils.getScaleForPageCount(pageCount, graph);
-			var preview = new mxPrintPreview(graph, scale);
+			let scale = mxUtils.getScaleForPageCount(pageCount, graph);
+			let preview = new mxPrintPreview(graph, scale);
 			preview.open();
 		}
 	});
@@ -333,7 +333,7 @@ function createPopupMenu(graph, menu, cell, evt)
 
 function addOverlays(graph, cell, addDeleteIcon)
 {
-	var overlay = new mxCellOverlay(new mxImage('images/add.png', 24, 24), 'Add child');
+	let overlay = new mxCellOverlay(new mxImage('images/add.png', 24, 24), 'Add child');
 	overlay.cursor = 'hand';
 	overlay.align = mxConstants.ALIGN_CENTER;
 	overlay.addListener(mxEvent.CLICK, mxUtils.bind(this, function(sender, evt)
@@ -361,26 +361,26 @@ function addOverlays(graph, cell, addDeleteIcon)
 
 function addChild(graph, cell)
 {
-	var model = graph.getModel();
-	var parent = graph.getDefaultParent();
+	let model = graph.getModel();
+	let parent = graph.getDefaultParent();
 	var vertex;
 
 	model.beginUpdate();
 	try
 	{
 		vertex = graph.insertVertex(parent, null, 'Double click to set name');
-		var geometry = model.getGeometry(vertex);
+		let geometry = model.getGeometry(vertex);
 
 		// Updates the geometry of the vertex with the
 		// preferred size computed in the graph
-		var size = graph.getPreferredSizeForCell(vertex);
+		let size = graph.getPreferredSizeForCell(vertex);
 		geometry.width = size.width;
 		geometry.height = size.height;
 
 		// Adds the edge between the existing cell
 		// and the new vertex and executes the
 		// automatic layout on the parent
-		var edge = graph.insertEdge(parent, null, '', cell, vertex);
+		let edge = graph.insertEdge(parent, null, '', cell, vertex);
 
 		// Configures the edge label "in-place" to reside
 		// at the end of the edge (x = 1) and with an offset
@@ -402,7 +402,7 @@ function addChild(graph, cell)
 function deleteSubtree(graph, cell)
 {
 	// Gets the subtree from cell downwards
-	var cells = [];
+	let cells = [];
 	graph.traverse(cell, true, function(vertex)
 	{
 		cells.push(vertex);
diff --git a/src/examples/orthogonal.html b/src/examples/orthogonal.html
index 9a0aa0921..f66a6ea54 100644
--- a/src/examples/orthogonal.html
+++ b/src/examples/orthogonal.html
@@ -47,7 +47,7 @@
 				mxConnectionHandler.prototype.movePreviewAway = false;
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.disconnectOnMove = false;
 				graph.foldingEnabled = false;
 				graph.cellsResizable = false;
@@ -59,8 +59,8 @@
 				{
 					mxGraphView.prototype.updateFixedTerminalPoint.apply(this, arguments);
 					
-					var pts = edge.absolutePoints;
-					var pt = pts[(source) ? 0 : pts.length - 1];
+					let pts = edge.absolutePoints;
+					let pt = pts[(source) ? 0 : pts.length - 1];
 
 					if (terminal != null && pt == null && this.getPerimeterFunction(terminal) == null)
 					{
@@ -76,7 +76,7 @@
 				// Implements the connect preview
 				graph.connectionHandler.createEdgeState = function(me)
 				{
-					var edge = graph.createEdge(null, null, null, null, null);
+					let edge = graph.createEdge(null, null, null, null, null);
 					
 					return new mxCellState(this.graph.view, edge, this.graph.getCellStyle(edge));
 				};
@@ -90,7 +90,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/overlays.html b/src/examples/overlays.html
index 7bb13c50b..1b87064d1 100644
--- a/src/examples/overlays.html
+++ b/src/examples/overlays.html
@@ -35,13 +35,13 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Disables basic selection and cell handling
 				graph.setEnabled(false);
 								
 				// Highlights the vertices when the mouse enters
-				var highlight = new mxCellTracker(graph, '#00FF00');
+				let highlight = new mxCellTracker(graph, '#00FF00');
 				
 				// Enables tooltips for the overlays
 				graph.setTooltips(true);
@@ -50,16 +50,16 @@
 				// that toggles the overlay for the respective cell
 				graph.addListener(mxEvent.CLICK, function(sender, evt)
 				{
-					var cell = evt.getProperty('cell');
+					let cell = evt.getProperty('cell');
 					
 					if (cell != null)
 					{
-						var overlays = graph.getCellOverlays(cell);
+						let overlays = graph.getCellOverlays(cell);
 						
 						if (overlays == null)
 						{
 							// Creates a new overlay with an image and a tooltip
-							var overlay = new mxCellOverlay(
+							let overlay = new mxCellOverlay(
 								new mxImage('editors/images/overlays/check.png', 16, 16),
 								'Overlay tooltip');
 
@@ -83,14 +83,14 @@
 				// that shows an alert box
 				graph.addListener(mxEvent.DOUBLE_CLICK, function(sender, evt)
 				{
-					var cell = evt.getProperty('cell');
+					let cell = evt.getProperty('cell');
 					mxUtils.alert('Doubleclick: '+((cell != null) ? 'Cell' : 'Graph'));
 					evt.consume();
 				});
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/pagebreaks.html b/src/examples/pagebreaks.html
index 014d61d05..3088c1b8a 100644
--- a/src/examples/pagebreaks.html
+++ b/src/examples/pagebreaks.html
@@ -35,7 +35,7 @@
 				mxEvent.disableContextMenu(container);
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.view.setScale(0.15);
 				graph.pageBreaksVisible = true;
 				graph.pageBreakDashed = true;
@@ -44,8 +44,8 @@
 				graph.setPanning(true);
 				
 				// Account for the header and footer size in the page format
-				var headerSize = 100;
-				var footerSize = 100;
+				let headerSize = 100;
+				let footerSize = 100;
 				
 				// Removes header and footer from page height
  				graph.pageFormat.height -= headerSize + footerSize;
@@ -58,7 +58,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -103,32 +103,32 @@
 					function(evt)
 					{
 						// Matches actual printer paper size and avoids blank pages
-						var scale = 0.5;
+						let scale = 0.5;
 
 						// Applies scale to page
-						var pf = mxRectangle.fromRectangle(graph.pageFormat || mxConstants.PAGE_FORMAT_A4_PORTRAIT);
+						let pf = mxRectangle.fromRectangle(graph.pageFormat || mxConstants.PAGE_FORMAT_A4_PORTRAIT);
 						pf.width = Math.round(pf.width * scale * graph.pageScale);
 						pf.height = Math.round(pf.height * scale * graph.pageScale);
 
 						// Finds top left corner of top left page
-						var bounds = mxRectangle.fromRectangle(graph.getGraphBounds());
+						let bounds = mxRectangle.fromRectangle(graph.getGraphBounds());
 						bounds.x -= graph.view.translate.x * graph.view.scale;
 						bounds.y -= graph.view.translate.y * graph.view.scale;
 
 						var x0 = Math.floor(bounds.x / pf.width) * pf.width;
 						var y0 = Math.floor(bounds.y / pf.height) * pf.height;
 					
-				 		var preview = new mxPrintPreview(graph, scale, pf, 0, -x0, -y0);
+				 		let preview = new mxPrintPreview(graph, scale, pf, 0, -x0, -y0);
 					 	preview.marginTop = headerSize * scale * graph.pageScale;
 					 	preview.marginBottom = footerSize * scale * graph.pageScale;
 					 	preview.autoOrigin = false;
 					 	
-						var oldRenderPage = preview.renderPage;
+						let oldRenderPage = preview.renderPage;
 						preview.renderPage = function(w, h, x, y, content, pageNumber)
 						{
-							var div = oldRenderPage.apply(this, arguments);
+							let div = oldRenderPage.apply(this, arguments);
 
-							var header = document.createElement('div');
+							let header = document.createElement('div');
 							header.style.position = 'absolute';
 							header.style.boxSizing = 'border-box';
 							header.style.fontFamily = 'Arial,Helvetica';
@@ -142,7 +142,7 @@
 							// Vertical centering for text in header/footer
 							header.style.lineHeight = (this.marginTop - 10) + 'px';
 							
-							var footer = header.cloneNode(true);
+							let footer = header.cloneNode(true);
 
 							mxUtils.write(header, 'Page ' + pageNumber + ' - Header');
 							header.style.borderBottom = '1px solid gray';
diff --git a/src/examples/perimeter.html b/src/examples/perimeter.html
index 57d6df0c6..c48e1d533 100644
--- a/src/examples/perimeter.html
+++ b/src/examples/perimeter.html
@@ -36,16 +36,16 @@
 				mxGraphViewGetPerimeterPoint = mxGraphView.prototype.getPerimeterPoint;
 				mxGraphView.prototype.getPerimeterPoint = function(terminal, next, orthogonal, border)
 				{
-					var point = mxGraphViewGetPerimeterPoint.apply(this, arguments);
+					let point = mxGraphViewGetPerimeterPoint.apply(this, arguments);
 					
 					if (point != null)
 					{
-						var perimeter = this.getPerimeterFunction(terminal);
+						let perimeter = this.getPerimeterFunction(terminal);
 
 						if (terminal.text != null && terminal.text.boundingBox != null)
 						{
 							// Adds a small border to the label bounds
-							var b = terminal.text.boundingBox.clone();
+							let b = terminal.text.boundingBox.clone();
 							b.grow(3)
 
 							if (mxUtils.rectangleIntersectsSegment(b, point, next))
@@ -59,7 +59,7 @@
 				};
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setVertexLabelsMovable(true);
 				graph.setConnectable(true);
 
@@ -72,7 +72,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/permissions.html b/src/examples/permissions.html
index 1532474b5..3b2584b33 100644
--- a/src/examples/permissions.html
+++ b/src/examples/permissions.html
@@ -36,7 +36,7 @@
 				mxConnectionHandler.prototype.connectImage = new mxImage('images/connector.gif', 16, 16);
 			
 				// Creates the div for the graph
-				var container = document.createElement('div');
+				let container = document.createElement('div');
 				container.style.position = 'absolute';
 				container.style.overflow = 'hidden';
 				container.style.left = '00px';
@@ -48,15 +48,15 @@
 				document.body.appendChild(container);
 
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Enable tooltips, disables mutligraphs, enable loops
 				graph.setMultigraph(false);
 				graph.setAllowLoops(true);
 
 				// Enables rubberband selection and key handling
-				var rubberband = new mxRubberband(graph);
-				var keyHandler = new mxKeyHandler(graph);
+				let rubberband = new mxRubberband(graph);
+				let keyHandler = new mxKeyHandler(graph);
 				
 				// Assigns the delete key
 				keyHandler.bindKey(46, function(evt)
@@ -69,9 +69,9 @@
 				
 				// Shared variable between child function scopes
 				// aka "private" variable
-				var currentPermission = null;
+				let currentPermission = null;
 				
-				var apply = function(permission)
+				let apply = function(permission)
 				{
 					graph.clearSelection();
 					permission.apply(graph);
@@ -86,43 +86,43 @@
 				
 				apply(new Permission());
 				
-				var button = mxUtils.button('Allow All', function(evt)
+				let button = mxUtils.button('Allow All', function(evt)
 				{
 					apply(new Permission());
 				});
 				document.body.appendChild(button);
 												
-				var button = mxUtils.button('Connect Only', function(evt)
+				let button = mxUtils.button('Connect Only', function(evt)
 				{
 					apply(new Permission(false, true, false, false, true));
 				});
 				document.body.appendChild(button);
 								
-				var button = mxUtils.button('Edges Only', function(evt)
+				let button = mxUtils.button('Edges Only', function(evt)
 				{
 					apply(new Permission(false, false, true, false, false));
 				});
 				document.body.appendChild(button);
 								
-				var button = mxUtils.button('Vertices Only', function(evt)
+				let button = mxUtils.button('Vertices Only', function(evt)
 				{
 					apply(new Permission(false, false, false, true, false));
 				});
 				document.body.appendChild(button);
 				
-				var button = mxUtils.button('Select Only', function(evt)
+				let button = mxUtils.button('Select Only', function(evt)
 				{
 					apply(new Permission(false, false, false, false, false));
 				});
 				document.body.appendChild(button);
 				
-				var button = mxUtils.button('Locked', function(evt)
+				let button = mxUtils.button('Locked', function(evt)
 				{
 					apply(new Permission(true, false));
 				});
 				document.body.appendChild(button);
 								
-				var button = mxUtils.button('Disabled', function(evt)
+				let button = mxUtils.button('Disabled', function(evt)
 				{
 					graph.clearSelection();
 					graph.setEnabled(false);
@@ -137,49 +137,49 @@
 				// dynamic conditions to be used in the functions. See the
 				// specification for more functions to extend (eg.
 				// isSelectable).
-				var oldDisconnectable = graph.isCellDisconnectable;
+				let oldDisconnectable = graph.isCellDisconnectable;
 				graph.isCellDisconnectable = function(cell, terminal, source)
 				{
 					return oldDisconnectable.apply(this, arguments) &&
 						currentPermission.editEdges;
 				};
 				
-				var oldTerminalPointMovable = graph.isTerminalPointMovable;
+				let oldTerminalPointMovable = graph.isTerminalPointMovable;
 				graph.isTerminalPointMovable = function(cell)
 				{
 					return oldTerminalPointMovable.apply(this, arguments) &&
 						currentPermission.editEdges;
 				};
 				
-				var oldBendable = graph.isCellBendable;
+				let oldBendable = graph.isCellBendable;
 				graph.isCellBendable = function(cell)
 				{
 					return oldBendable.apply(this, arguments) &&
 						currentPermission.editEdges;
 				};
 				
-				var oldLabelMovable = graph.isLabelMovable;
+				let oldLabelMovable = graph.isLabelMovable;
 				graph.isLabelMovable = function(cell)
 				{
 					return oldLabelMovable.apply(this, arguments) &&
 						currentPermission.editEdges;
 				};
 				
-				var oldMovable = graph.isCellMovable;
+				let oldMovable = graph.isCellMovable;
 				graph.isCellMovable = function(cell)
 				{
 					return oldMovable.apply(this, arguments) &&
 						currentPermission.editVertices;
 				};
 				
-				var oldResizable = graph.isCellResizable;
+				let oldResizable = graph.isCellResizable;
 				graph.isCellResizable = function(cell)
 				{
 					return oldResizable.apply(this, arguments) &&
 						currentPermission.editVertices;
 				};
 								
-				var oldEditable = graph.isCellEditable;
+				let oldEditable = graph.isCellEditable;
 				graph.isCellEditable = function(cell)
 				{
 					return oldEditable.apply(this, arguments) &&
@@ -189,7 +189,7 @@
 						currentPermission.editEdges);
 				};
 				
-				var oldDeletable = graph.isCellDeletable;
+				let oldDeletable = graph.isCellDeletable;
 				graph.isCellDeletable = function(cell)
 				{
 					return oldDeletable.apply(this, arguments) &&
@@ -199,7 +199,7 @@
 						currentPermission.editEdges);
 				};
 				
-				var oldCloneable = graph.isCellCloneable;
+				let oldCloneable = graph.isCellCloneable;
 				graph.isCellCloneable = function(cell)
 				{
 					return oldCloneable.apply(this, arguments) &&
@@ -208,7 +208,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/portrefs.html b/src/examples/portrefs.html
index f8b9831d1..33c4885fa 100644
--- a/src/examples/portrefs.html
+++ b/src/examples/portrefs.html
@@ -26,7 +26,7 @@
 			// Replaces the port image
 			mxConstraintHandler.prototype.pointImage = new mxImage('images/dot.gif', 10, 10);
 			
-			var graph = new mxGraph(container);
+			let graph = new mxGraph(container);
 			graph.setConnectable(true);
 			
 			// Disables automatic handling of ports. This disables the reset of the
@@ -39,10 +39,10 @@
 			
 			// Gets the default parent for inserting new cells. This
 			// is normally the first child of the root (ie. layer 0).
-			var parent = graph.getDefaultParent();
+			let parent = graph.getDefaultParent();
 
 			// Ports are equal for all shapes...
-			var ports = new Array();
+			let ports = new Array();
 			
 			// NOTE: Constraint is used later for orthogonal edge routing (currently ignored)
 			ports['w'] = {x: 0, y: 0.5, perimeter: true, constraint: 'west'};
@@ -111,14 +111,14 @@
 				{
 					if (terminal.shape != null)
 					{
-						var ports = terminal.shape.getPorts();
-						var cstrs = new Array();
+						let ports = terminal.shape.getPorts();
+						let cstrs = new Array();
 						
 						for (var id in ports)
 						{
-							var port = ports[id];
+							let port = ports[id];
 							
-							var cstr = new mxConnectionConstraint(new mxPoint(port.x, port.y), port.perimeter);
+							let cstr = new mxConnectionConstraint(new mxPoint(port.x, port.y), port.perimeter);
 							cstr.id = id;
 							cstrs.push(cstr);
 						}
@@ -135,7 +135,7 @@
 			{
 				if (constraint != null)
 				{
-					var key = (source) ? mxConstants.STYLE_SOURCE_PORT : mxConstants.STYLE_TARGET_PORT;
+					let key = (source) ? mxConstants.STYLE_SOURCE_PORT : mxConstants.STYLE_TARGET_PORT;
 					
 					if (constraint == null || constraint.id == null)
 					{
@@ -151,12 +151,12 @@
 			// Returns the port for the given connection
 			graph.getConnectionConstraint = function(edge, terminal, source)
 			{
-				var key = (source) ? mxConstants.STYLE_SOURCE_PORT : mxConstants.STYLE_TARGET_PORT;
-				var id = edge.style[key];
+				let key = (source) ? mxConstants.STYLE_SOURCE_PORT : mxConstants.STYLE_TARGET_PORT;
+				let id = edge.style[key];
 				
 				if (id != null)
 				{
-					var c =  new mxConnectionConstraint(null, null);
+					let c =  new mxConnectionConstraint(null, null);
 					c.id = id;
 					
 					return c;
@@ -171,7 +171,7 @@
 			{
 				if (constraint.id != null && vertex != null && vertex.shape != null)
 				{
-					var port = vertex.shape.getPorts()[constraint.id];
+					let port = vertex.shape.getPorts()[constraint.id];
 					
 					if (port != null)
 					{
@@ -203,13 +203,13 @@
 			// Comming soon... Integration with orthogonal edge style
 			// Sets default edge style to use port constraints (needs to be moved up when uncommented)
 			//graph.getStylesheet().getDefaultEdgeStyle()['edgeStyle'] = 'orthogonalEdgeStyle';
-			/*var mxUtilsGetPortConstraints = mxUtils.getPortConstraints;
+			/*let mxUtilsGetPortConstraints = mxUtils.getPortConstraints;
 			mxUtils.getPortConstraints = function(terminal, edge, source, defaultValue)
 			{
-				var key = (source) ? mxConstants.STYLE_SOURCE_PORT : mxConstants.STYLE_TARGET_PORT;
-				var id = edge.style[key];
+				let key = (source) ? mxConstants.STYLE_SOURCE_PORT : mxConstants.STYLE_TARGET_PORT;
+				let id = edge.style[key];
 				
-				var port = terminal.shape.getPorts()[id];
+				let port = terminal.shape.getPorts()[id];
 				
 				// TODO: Add support for rotation, direction
 				if (port != null)
@@ -222,7 +222,7 @@
 			// Connect preview
 			graph.connectionHandler.createEdgeState = function(me)
 			{
-				var edge = graph.createEdge(null, null, null, null, null);
+				let edge = graph.createEdge(null, null, null, null, null);
 				
 				return new mxCellState(this.graph.view, edge, this.graph.getCellStyle(edge));
 			};
diff --git a/src/examples/ports.html b/src/examples/ports.html
index 576f76b90..8505239f6 100644
--- a/src/examples/ports.html
+++ b/src/examples/ports.html
@@ -67,9 +67,9 @@
 				// The editor is used to create certain functionality for the
 				// graph, such as the rubberband selection, but most parts
 				// of the UI are custom in this example.
-				var editor = new mxEditor();
-				var graph = editor.graph;
-				var model = graph.getModel();
+				let editor = new mxEditor();
+				let graph = editor.graph;
+				let model = graph.getModel();
 
 				// Disable highlight of cells when dragging from toolbar
 				graph.setDropEnabled(false);
@@ -88,7 +88,7 @@
 
 				// Sets the graph container and configures the editor
 				editor.setGraphContainer(container);
-				var config = mxUtils.load(
+				let config = mxUtils.load(
 					'editors/config/keyhandler-commons.xml').
 						getDocumentElement();
 				editor.configure(config);
@@ -98,7 +98,7 @@
 				// is supposed to be a cell which is cloned for new cells.
 				// The groupBorderSize is used to define the spacing between
 				// the children of a group and the group bounds.
-				var group = new mxCell('Group', new mxGeometry(), 'group');
+				let group = new mxCell('Group', new mxGeometry(), 'group');
 				group.setVertex(true);
 				group.setConnectable(false);
 				editor.defaultGroup = group;
@@ -126,7 +126,7 @@
 				// label for expanded groups
 				graph.getLabel = function(cell)
 				{
-					var tmp = mxGraph.prototype.getLabel.apply(this, arguments); // "supercall"
+					let tmp = mxGraph.prototype.getLabel.apply(this, arguments); // "supercall"
 					
 					if (this.isCellLocked(cell))
 					{
@@ -137,7 +137,7 @@
 					}
 					else if (this.isCellCollapsed(cell))
 					{
-						var index = tmp.indexOf('</h1>');
+						let index = tmp.indexOf('</h1>');
 						
 						if (index > 0)
 						{
@@ -186,7 +186,7 @@
 						}
 						else
 						{
-							var content = document.createElement('div');
+							let content = document.createElement('div');
 							content.innerHTML = this.convertValueToString(cell);
 							showModalWindow(this, 'Properties', content, 400, 300);
 						}
@@ -239,7 +239,7 @@
 					'images/icons48/server.png');
 
 				// Displays useful hints in a small semi-transparent box.
-				var hints = document.createElement('div');
+				let hints = document.createElement('div');
 				hints.style.position = 'absolute';
 				hints.style.overflow = 'hidden';
 				hints.style.width = '230px';
@@ -264,7 +264,7 @@
 				
 				// Creates a new DIV that is used as a toolbar and adds
 				// toolbar buttons.
-				var spacer = document.createElement('div');
+				let spacer = document.createElement('div');
 				spacer.style.display = 'inline';
 				spacer.style.padding = '8px';
 				
@@ -307,11 +307,11 @@
 				// Defines a new export action
 				editor.addAction('export', function(editor, cell)
 				{
-					var textarea = document.createElement('textarea');
+					let textarea = document.createElement('textarea');
 					textarea.style.width = '400px';
 					textarea.style.height = '400px';
-					var enc = new mxCodec(mxUtils.createXmlDocument());
-					var node = enc.encode(editor.graph.getModel());
+					let enc = new mxCodec(mxUtils.createXmlDocument());
+					let node = enc.encode(editor.graph.getModel());
 					textarea.value = mxUtils.getPrettyXml(node);
 					showModalWindow(graph, 'XML', textarea, 410, 440);
 				});
@@ -339,14 +339,14 @@
 				
 				// Creates the outline (navigator, overview) for moving
 				// around the graph in the top, right corner of the window.
-				var outln = new mxOutline(graph, outline);
+				let outln = new mxOutline(graph, outline);
 
 				// To show the images in the outline, uncomment the following code
 				//outln.outline.labelsVisible = true;
 				//outln.outline.setHtmlLabels(true);
 				
 				// Fades-out the splash screen after the UI has been loaded.
-				var splash = document.getElementById('splash');
+				let splash = document.getElementById('splash');
 				if (splash != null)
 				{
 					try
@@ -366,11 +366,11 @@
 		
 		function addToolbarButton(editor, toolbar, action, label, image, isTransparent)
 		{
-			var button = document.createElement('button');
+			let button = document.createElement('button');
 			button.style.fontSize = '10';
 			if (image != null)
 			{
-				var img = document.createElement('img');
+				let img = document.createElement('img');
 				img.setAttribute('src', image);
 				img.style.width = '16px';
 				img.style.height = '16px';
@@ -394,7 +394,7 @@
 
 		function showModalWindow(graph, title, content, width, height)
 		{
-			var background = document.createElement('div');
+			let background = document.createElement('div');
 			background.style.position = 'absolute';
 			background.style.left = '0px';
 			background.style.top = '0px';
@@ -404,10 +404,10 @@
 			mxUtils.setOpacity(background, 50);
 			document.body.appendChild(background);
 
-			var x = Math.max(0, document.body.scrollWidth/2-width/2);
-			var y = Math.max(10, (document.body.scrollHeight ||
+			let x = Math.max(0, document.body.scrollWidth/2-width/2);
+			let y = Math.max(10, (document.body.scrollHeight ||
 						document.documentElement.scrollHeight)/2-height*2/3);
-			var wnd = new mxWindow(title, content, x, y, width, height, false, true);
+			let wnd = new mxWindow(title, content, x, y, width, height, false, true);
 			wnd.setClosable(true);
 			
 			// Fades the background out after after the window has been closed
@@ -428,10 +428,10 @@
 			// Function that is executed when the image is dropped on
 			// the graph. The cell argument points to the cell under
 			// the mousepointer if there is one.
-			var funct = function(graph, evt, cell, x, y)
+			let funct = function(graph, evt, cell, x, y)
 			{
-				var parent = graph.getDefaultParent();
-				var model = graph.getModel();
+				let parent = graph.getDefaultParent();
+				let model = graph.getModel();
 				
 				var v1 = null;
 				
@@ -449,19 +449,19 @@
 					v1.geometry.alternateBounds = new mxRectangle(0, 0, 120, 40);
 										
 					// Adds the ports at various relative locations
-					var port = graph.insertVertex(v1, null, 'Trigger', 0, 0.25, 16, 16,
+					let port = graph.insertVertex(v1, null, 'Trigger', 0, 0.25, 16, 16,
 							'port;image=editors/images/overlays/flash.png;align=right;imageAlign=right;spacingRight=18', true);
 					port.geometry.offset = new mxPoint(-6, -8);
 		
-					var port = graph.insertVertex(v1, null, 'Input', 0, 0.75, 16, 16,
+					let port = graph.insertVertex(v1, null, 'Input', 0, 0.75, 16, 16,
 							'port;image=editors/images/overlays/check.png;align=right;imageAlign=right;spacingRight=18', true);
 					port.geometry.offset = new mxPoint(-6, -4);
 					
-					var port = graph.insertVertex(v1, null, 'Error', 1, 0.25, 16, 16,
+					let port = graph.insertVertex(v1, null, 'Error', 1, 0.25, 16, 16,
 							'port;image=editors/images/overlays/error.png;spacingLeft=18', true);
 					port.geometry.offset = new mxPoint(-8, -8);
 
-					var port = graph.insertVertex(v1, null, 'Result', 1, 0.75, 16, 16,
+					let port = graph.insertVertex(v1, null, 'Result', 1, 0.75, 16, 16,
 							'port;image=editors/images/overlays/information.png;spacingLeft=18', true);
 					port.geometry.offset = new mxPoint(-8, -4);
 				}
@@ -474,26 +474,26 @@
 			}
 			
 			// Creates the image which is used as the sidebar icon (drag source)
-			var img = document.createElement('img');
+			let img = document.createElement('img');
 			img.setAttribute('src', image);
 			img.style.width = '48px';
 			img.style.height = '48px';
 			img.title = 'Drag this to the diagram to create a new vertex';
 			sidebar.appendChild(img);
 			
-			var dragElt = document.createElement('div');
+			let dragElt = document.createElement('div');
 			dragElt.style.border = 'dashed black 1px';
 			dragElt.style.width = '120px';
 			dragElt.style.height = '120px';
 			  					
 			// Creates the image which is used as the drag icon (preview)
-			var ds = mxUtils.makeDraggable(img, graph, funct, dragElt, 0, 0, true, true);
+			let ds = mxUtils.makeDraggable(img, graph, funct, dragElt, 0, 0, true, true);
 			ds.setGuidesEnabled(true);
 		};
 		
 		function configureStylesheet(graph)
 		{
-			var style = {};
+			let style = {};
 			style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE;
 			style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
 			style[mxConstants.STYLE_ALIGN] = mxConstants.ALIGN_CENTER;
@@ -512,7 +512,7 @@
 
 			// NOTE: Alternative vertex style for non-HTML labels should be as
 			// follows. This repaces the above style for HTML labels.
-			/*var style = {};
+			/*let style = {};
 			style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_LABEL;
 			style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
 			style[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_TOP;
diff --git a/src/examples/radialtreelayout.html b/src/examples/radialtreelayout.html
index e05f15704..fb95355fb 100644
--- a/src/examples/radialtreelayout.html
+++ b/src/examples/radialtreelayout.html
@@ -35,13 +35,13 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Adds rubberband selection
 				new mxRubberband(graph);
 				
 				// Changes the default vertex style in-place
-				var style = graph.getStylesheet().getDefaultVertexStyle();
+				let style = graph.getStylesheet().getDefaultVertexStyle();
 				style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
 				style[mxConstants.STYLE_GRADIENTCOLOR] = 'white';
 				style[mxConstants.STYLE_PERIMETER_SPACING] = 6;
@@ -53,9 +53,9 @@
 
 				// Creates a layout algorithm to be used
 				// with the graph
-				var layout = new mxRadialTreeLayout(graph);
+				let layout = new mxRadialTreeLayout(graph);
 				
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 			
 				// Load cells and layouts the graph
 				graph.getModel().beginUpdate();
diff --git a/src/examples/resources.html b/src/examples/resources.html
index 4eaf0aa4c..dfa975c15 100644
--- a/src/examples/resources.html
+++ b/src/examples/resources.html
@@ -43,14 +43,14 @@
 					mxEvent.disableContextMenu(container);
 					
 					// Creates the graph inside the given container
-					var graph = new mxGraph(container);
+					let graph = new mxGraph(container);
 	
 					// Enables rubberband selection
 					new mxRubberband(graph);
 					
 					// Gets the default parent for inserting new cells. This
 					// is normally the first child of the root (ie. layer 0).
-					var parent = graph.getDefaultParent();
+					let parent = graph.getDefaultParent();
 									
 					// Adds cells to the model in a single step
 					graph.getModel().beginUpdate();
diff --git a/src/examples/schema.html b/src/examples/schema.html
index d6a571d3f..a1f085b59 100644
--- a/src/examples/schema.html
+++ b/src/examples/schema.html
@@ -54,22 +54,22 @@
 
 				// Prefetches all images that appear in colums
 				// to avoid problems with the auto-layout
-				var keyImage = new Image();
+				let keyImage = new Image();
 				keyImage.src = "images/key.png";
 
-				var plusImage = new Image();
+				let plusImage = new Image();
 				plusImage.src = "images/plus.png";
 
-				var checkImage = new Image();
+				let checkImage = new Image();
 				checkImage.src = "images/check.png";
 
 				// Creates the graph inside the given container. The
 				// editor is used to create certain functionality for the
 				// graph, such as the rubberband selection, but most parts
 				// of the UI are custom in this example.
-				var editor = new mxEditor();
-				var graph = editor.graph;
-				var model = graph.model;
+				let editor = new mxEditor();
+				let graph = editor.graph;
+				let model = graph.model;
 				
 				// Disables some global features
 				graph.setConnectable(true);
@@ -98,7 +98,7 @@
 
 				// Sets the graph container and configures the editor
 				editor.setGraphContainer(container);
-				var config = mxUtils.load(
+				let config = mxUtils.load(
 					'editors/config/keyhandler-minimal.xml').
 						getDocumentElement();
 				editor.configure(config);
@@ -107,7 +107,7 @@
 				editor.layoutSwimlanes = true;
 				editor.createSwimlaneLayout = () =>
 				{
-					var layout = new mxStackLayout(this.graph, false);
+					let layout = new mxStackLayout(this.graph, false);
 					layout.fill = true;
 					layout.resizeParent = true;
 					
@@ -129,7 +129,7 @@
 					}
 					else
 					{
-						var old = cell.value.name;
+						let old = cell.value.name;
 						cell.value.name = value;
 						return old;
 					}
@@ -168,8 +168,8 @@
 					}
 					else if (this.model.isEdge(state.cell))
 					{
-						var source = this.model.getTerminal(state.cell, true);
-						var parent = this.model.getParent(source);
+						let source = this.model.getTerminal(state.cell, true);
+						let parent = this.model.getParent(source);
 						
 						return parent.value.name+'.'+source.value.name;
 					}
@@ -182,7 +182,7 @@
 				{
 					if (this.isHtmlLabel(cell))
 					{
-						var label = '';
+						let label = '';
 						
 						if (cell.value.primaryKey)
 						{
@@ -216,16 +216,16 @@
 				// Removes the source vertex if edges are removed
 				graph.addListener(mxEvent.REMOVE_CELLS, function(sender, evt)
 				{
-					var cells = evt.getProperty('cells');
+					let cells = evt.getProperty('cells');
 					
-					for (var i = 0; i < cells.length; i++)
+					for (let i = 0; i < cells.length; i++)
 					{
-						var cell = cells[i];
+						let cell = cells[i];
 						
 						if (this.model.isEdge(cell))
 						{
-							var terminal = this.model.getTerminal(cell, true);
-							var parent = this.model.getParent(terminal);
+							let terminal = this.model.getTerminal(cell, true);
+							let parent = this.model.getParent(terminal);
 							this.model.remove(terminal);
 						}
 					}
@@ -247,15 +247,15 @@
 				configureStylesheet(graph);
 
 				// Adds sidebar icon for the table object
-				var tableObject = new Table('TABLENAME');
-				var table = new mxCell(tableObject, new mxGeometry(0, 0, 200, 28), 'table');
+				let tableObject = new Table('TABLENAME');
+				let table = new mxCell(tableObject, new mxGeometry(0, 0, 200, 28), 'table');
 				
 				table.setVertex(true);
 				addSidebarIcon(graph, sidebar, 	table, 'images/icons48/table.png');
 				
 				// Adds sidebar icon for the column object
-				var columnObject = new Column('COLUMNNAME');
-				var column = new mxCell(columnObject, new mxGeometry(0, 0, 0, 26));
+				let columnObject = new Column('COLUMNNAME');
+				let column = new mxCell(columnObject, new mxGeometry(0, 0, 0, 26));
 				
 				column.setVertex(true);
 				column.setConnectable(false);
@@ -263,7 +263,7 @@
 				addSidebarIcon(graph, sidebar, 	column, 'images/icons48/column.png');
 				
 				// Adds primary key field into table
-				var firstColumn = column.clone();
+				let firstColumn = column.clone();
 				
 				firstColumn.value.name = 'TABLENAME_ID';
 				firstColumn.value.type = 'INTEGER';
@@ -276,12 +276,12 @@
 				graph.addEdge = function(edge, parent, source, target, index)
 				{
 					// Finds the primary key child of the target table
-					var primaryKey = null;
-					var childCount = this.model.getChildCount(target);
+					let primaryKey = null;
+					let childCount = this.model.getChildCount(target);
 					
 					for (var i=0; i < childCount; i++)
 					{
-						var child = this.model.getChildAt(target, i);
+						let child = this.model.getChildAt(target, i);
 						
 						if (child.value.primaryKey)
 						{
@@ -318,7 +318,7 @@
 				};
 
 				// Displays useful hints in a small semi-transparent box.
-				var hints = document.createElement('div');
+				let hints = document.createElement('div');
 				hints.style.position = 'absolute';
 				hints.style.overflow = 'hidden';
 				hints.style.width = '230px';
@@ -344,7 +344,7 @@
 				
 				// Creates a new DIV that is used as a toolbar and adds
 				// toolbar buttons.
-				var spacer = document.createElement('div');
+				let spacer = document.createElement('div');
 				spacer.style.display = 'inline';
 				spacer.style.padding = '8px';
 
@@ -381,11 +381,11 @@
 				// Defines a create SQK action
 				editor.addAction('showSql', function(editor, cell)
 				{
-					var sql = createSql(graph);
+					let sql = createSql(graph);
 					
 					if (sql.length > 0)
 					{
-						var textarea = document.createElement('textarea');
+						let textarea = document.createElement('textarea');
 						textarea.style.width = '400px';
 						textarea.style.height = '400px';
 						
@@ -403,11 +403,11 @@
 				// Defines export XML action
 				editor.addAction('export', function(editor, cell)
 				{
-					var textarea = document.createElement('textarea');
+					let textarea = document.createElement('textarea');
 					textarea.style.width = '400px';
 					textarea.style.height = '400px';
-					var enc = new mxCodec(mxUtils.createXmlDocument());
-					var node = enc.encode(editor.graph.getModel());
+					let enc = new mxCodec(mxUtils.createXmlDocument());
+					let node = enc.encode(editor.graph.getModel());
 					textarea.value = mxUtils.getPrettyXml(node);
 					showModalWindow('XML', textarea, 410, 440);
 				});
@@ -428,10 +428,10 @@
 				
 				// Creates the outline (navigator, overview) for moving
 				// around the graph in the top, right corner of the window.
-				var outln = new mxOutline(graph, outline);
+				let outln = new mxOutline(graph, outline);
 				
 				// Fades-out the splash screen after the UI has been loaded.
-				var splash = document.getElementById('splash');
+				let splash = document.getElementById('splash');
 				if (splash != null)
 				{
 					try
@@ -451,11 +451,11 @@
 		
 		function addToolbarButton(editor, toolbar, action, label, image, isTransparent)
 		{
-			var button = document.createElement('button');
+			let button = document.createElement('button');
 			button.style.fontSize = '10';
 			if (image != null)
 			{
-				var img = document.createElement('img');
+				let img = document.createElement('img');
 				img.setAttribute('src', image);
 				img.style.width = '16px';
 				img.style.height = '16px';
@@ -479,7 +479,7 @@
 
 		function showModalWindow(title, content, width, height)
 		{
-			var background = document.createElement('div');
+			let background = document.createElement('div');
 			background.style.position = 'absolute';
 			background.style.left = '0px';
 			background.style.top = '0px';
@@ -489,10 +489,10 @@
 			mxUtils.setOpacity(background, 50);
 			document.body.appendChild(background);
 
-			var x = Math.max(0, document.body.scrollWidth/2-width/2);
-			var y = Math.max(10, (document.body.scrollHeight ||
+			let x = Math.max(0, document.body.scrollWidth/2-width/2);
+			let y = Math.max(10, (document.body.scrollHeight ||
 						document.documentElement.scrollHeight)/2-height*2/3);
-			var wnd = new mxWindow(title, content, x, y, width, height, false, true);
+			let wnd = new mxWindow(title, content, x, y, width, height, false, true);
 			wnd.setClosable(true);
 						
 			// Fades the background out after after the window has been closed
@@ -512,22 +512,22 @@
 			// Function that is executed when the image is dropped on
 			// the graph. The cell argument points to the cell under
 			// the mousepointer if there is one.
-			var funct = function(graph, evt, cell)
+			let funct = function(graph, evt, cell)
 			{
 				graph.stopEditing(false);
 
-				var pt = graph.getPointForEvent(evt);
+				let pt = graph.getPointForEvent(evt);
 				
-				var parent = graph.getDefaultParent();
-				var model = graph.getModel();
+				let parent = graph.getDefaultParent();
+				let model = graph.getModel();
 				
-				var isTable = graph.isSwimlane(prototype);
-				var name = null;				
+				let isTable = graph.isSwimlane(prototype);
+				let name = null;
 
 				if (!isTable)
 				{
 					parent = cell;
-					var pstate = graph.getView().getState(parent);
+					let pstate = graph.getView().getState(parent);
 					
 					if (parent == null || pstate == null)
 					{
@@ -538,13 +538,13 @@
 					pt.x -= pstate.x;
 					pt.y -= pstate.y;
 
-					var columnCount = graph.model.getChildCount(parent)+1;
+					let columnCount = graph.model.getChildCount(parent)+1;
 					name = mxUtils.prompt('Enter name for new column', 'COLUMN'+columnCount);
 				}
 				else
 				{
-					var tableCount = 0;
-					var childCount = graph.model.getChildCount(parent);
+					let tableCount = 0;
+					let childCount = graph.model.getChildCount(parent);
 					
 					for (var i=0; i<childCount; i++)
 					{
@@ -554,7 +554,7 @@
 						}
 					}
 					
-					var name = mxUtils.prompt('Enter name for new table', 'TABLE'+(tableCount+1));
+					let name = mxUtils.prompt('Enter name for new table', 'TABLE'+(tableCount+1));
 				}
 				
 				if (name != null)
@@ -586,7 +586,7 @@
 			}
 			
 			// Creates the image which is used as the sidebar icon (drag source)
-			var img = document.createElement('img');
+			let img = document.createElement('img');
 			img.setAttribute('src', image);
 			img.style.width = '48px';
 			img.style.height = '48px';
@@ -594,8 +594,8 @@
 			sidebar.appendChild(img);
 			  					
 			// Creates the image which is used as the drag icon (preview)
-			var dragImage = img.cloneNode(true);
-			var ds = mxUtils.makeDraggable(img, graph, funct, dragImage);
+			let dragImage = img.cloneNode(true);
+			let ds = mxUtils.makeDraggable(img, graph, funct, dragImage);
 
 			// Adds highlight of target tables for columns
 			ds.highlightDropTargets = true;
@@ -607,7 +607,7 @@
 				}
 				else
 				{
-					var cell = graph.getCellAt(x, y);
+					let cell = graph.getCellAt(x, y);
 					
 					if (graph.isSwimlane(cell))
 					{
@@ -615,7 +615,7 @@
 					}
 					else
 					{
-						var parent = graph.getModel().getParent(cell);
+						let parent = graph.getModel().getParent(cell);
 						
 						if (graph.isSwimlane(parent))
 						{
@@ -628,7 +628,7 @@
 		
 		function configureStylesheet(graph)
 		{
-			var style = {};
+			let style = {};
 			style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE;
 			style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
 			style[mxConstants.STYLE_ALIGN] = mxConstants.ALIGN_LEFT;
@@ -715,27 +715,27 @@
 		{
 			// Creates a form for the user object inside
 			// the cell
-			var form = new mxForm('properties');
+			let form = new mxForm('properties');
 
 			// Adds a field for the columnname
-			var nameField = form.addText('Name', cell.value.name);
-			var typeField = form.addText('Type', cell.value.type);
+			let nameField = form.addText('Name', cell.value.name);
+			let typeField = form.addText('Type', cell.value.type);
 			
-			var primaryKeyField = form.addCheckbox('Primary Key', cell.value.primaryKey);
-			var autoIncrementField = form.addCheckbox('Auto Increment', cell.value.autoIncrement);
-			var notNullField = form.addCheckbox('Not Null', cell.value.notNull);
-			var uniqueField = form.addCheckbox('Unique', cell.value.unique);
+			let primaryKeyField = form.addCheckbox('Primary Key', cell.value.primaryKey);
+			let autoIncrementField = form.addCheckbox('Auto Increment', cell.value.autoIncrement);
+			let notNullField = form.addCheckbox('Not Null', cell.value.notNull);
+			let uniqueField = form.addCheckbox('Unique', cell.value.unique);
 			
-			var defaultField = form.addText('Default', cell.value.defaultValue || '');
-			var useDefaultField = form.addCheckbox('Use Default', (cell.value.defaultValue != null));
+			let defaultField = form.addText('Default', cell.value.defaultValue || '');
+			let useDefaultField = form.addCheckbox('Use Default', (cell.value.defaultValue != null));
 
-			var wnd = null;
+			let wnd = null;
 
 			// Defines the function to be executed when the
 			// OK button is pressed in the dialog
-			var okFunction = function()
+			let okFunction = function()
 			{
-				var clone = cell.value.clone();
+				let clone = cell.value.clone();
 				
 				clone.name = nameField.value;
 				clone.type = typeField.value;
@@ -761,38 +761,38 @@
 			
 			// Defines the function to be executed when the
 			// Cancel button is pressed in the dialog
-			var cancelFunction = function()
+			let cancelFunction = function()
 			{
 				wnd.destroy();
 			}
 			form.addButtons(okFunction, cancelFunction);
 
-			var parent = graph.model.getParent(cell);
-			var name = parent.value.name + '.' + cell.value.name;
+			let parent = graph.model.getParent(cell);
+			let name = parent.value.name + '.' + cell.value.name;
 			wnd = showModalWindow(name, form.table, 240, 240);
 		};
 		
 		function createSql(graph)
 		{
-			var sql = [];
-			var parent = graph.getDefaultParent();
-			var childCount = graph.model.getChildCount(parent);
+			let sql = [];
+			let parent = graph.getDefaultParent();
+			let childCount = graph.model.getChildCount(parent);
 
 			for (var i=0; i<childCount; i++)
 			{
-				var child = graph.model.getChildAt(parent, i);
+				let child = graph.model.getChildAt(parent, i);
 				
 				if (!graph.model.isEdge(child))
 				{
 					sql.push('CREATE TABLE IF NOT EXISTS '+child.value.name+' (');
 					
-					var columnCount = graph.model.getChildCount(child);
+					let columnCount = graph.model.getChildCount(child);
 
 					if (columnCount > 0)
 					{
 						for (var j=0; j<columnCount; j++)
 						{
-							var column = graph.model.getChildAt(child, j).value;
+							let column = graph.model.getChildAt(child, j).value;
 							
 							sql.push('\n    '+column.name+' '+column.type);
 							
diff --git a/src/examples/scrollbars.html b/src/examples/scrollbars.html
index 498416e58..8f7a56eca 100644
--- a/src/examples/scrollbars.html
+++ b/src/examples/scrollbars.html
@@ -98,7 +98,7 @@
 				{
 					// Determines the y-coordinate of the target perimeter point
 					// by using the currentRowNode assigned in updateRow
-					var y = me.getY();
+					let y = me.getY();
 
 					if (this.currentRowNode != null)
 					{
@@ -106,7 +106,7 @@
 					}
 
 					// Checks on which side of the terminal to leave
-					var x = state.x;
+					let x = state.x;
 					
 					if (this.previous.getCenterX() > state.getCenterX())
 					{
@@ -119,7 +119,7 @@
 				// Overrides source perimeter point for connection previews
 				mxConnectionHandler.prototype.getSourcePerimeterPoint = function(state, next, me)
 				{
-					var y = me.getY();
+					let y = me.getY();
 
 					if (this.sourceRowNode != null)
 					{
@@ -127,7 +127,7 @@
 					}
 
 					// Checks on which side of the terminal to leave
-					var x = state.x;
+					let x = state.x;
 					
 					if (next.x > state.getCenterX())
 					{
@@ -144,7 +144,7 @@
 				};
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Uses the entity perimeter (below) as default
 				graph.stylesheet.getDefaultVertexStyle()[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_TOP;
@@ -193,7 +193,7 @@
 				// Scroll events should not start moving the vertex
 				graph.cellRenderer.isLabelEvent = function(state, evt)
 				{
-					var source = mxEvent.getSource(evt);
+					let source = mxEvent.getSource(evt);
 
 					return state.text != null && source != state.text.node &&
 						source != state.text.node.getElementsByTagName('div')[0];
@@ -201,18 +201,18 @@
 
 				// Adds scrollbars to the outermost div and keeps the
 				// DIV position and size the same as the vertex
-				var oldRedrawLabel = graph.cellRenderer.redrawLabel;
+				let oldRedrawLabel = graph.cellRenderer.redrawLabel;
 				graph.cellRenderer.redrawLabel = function(state)
 				{
 					oldRedrawLabel.apply(this, arguments); // "supercall"
-					var graph = state.view.graph;
-					var model = graph.model;
+					let graph = state.view.graph;
+					let model = graph.model;
 
 					if (model.isVertex(state.cell) && state.text != null)
 					{
 						// Scrollbars are on the div
-						var s = graph.view.scale;
-						var div = state.text.node.getElementsByTagName('div')[2];
+						let s = graph.view.scale;
+						let div = state.text.node.getElementsByTagName('div')[2];
 						
 						if (div != null)
 						{
@@ -221,15 +221,15 @@
 							{
 								div.scrollHandler = true;
 								
-								var updateEdges = mxUtils.bind(this, function()
+								let updateEdges = mxUtils.bind(this, function()
 								{
-									var edgeCount = model.getEdgeCount(state.cell);
+									let edgeCount = model.getEdgeCount(state.cell);
 									
 									// Only updates edges to avoid update in DOM order
 									// for text label which would reset the scrollbar
-									for (var i = 0; i < edgeCount; i++)
+									for (let i = 0; i < edgeCount; i++)
 									{
-										var edge = model.getEdgeAt(state.cell, i);
+										let edge = model.getEdgeAt(state.cell, i);
 										graph.view.invalidate(edge, true, false);
 										graph.view.validate(edge);
 									}
@@ -258,8 +258,8 @@
 					{
 						// Stores the current row number in a property so that it can
 						// be retrieved to create the preview and final edge
-						var rowNumber = 0;
-						var current = target.parentNode.firstChild;
+						let rowNumber = 0;
+						let current = target.parentNode.firstChild;
 
 						while (target != current && current != null)
 						{
@@ -280,13 +280,13 @@
 				// Adds placement of the connect icon based on the mouse event target (row)
 				graph.connectionHandler.updateIcons = function(state, icons, me)
 				{
-					var target = me.getSource();
+					let target = me.getSource();
 					target = this.updateRow(target);
 					
 					if (target != null && this.currentRow != null)
 					{
-						var div = target.parentNode.parentNode.parentNode;
-						var s = state.view.scale;
+						let div = target.parentNode.parentNode.parentNode;
+						let s = state.view.scale;
 
 						icons[0].node.style.visibility = 'visible';
 						icons[0].bounds.x = state.x + target.offsetLeft + Math.min(state.width,
@@ -304,7 +304,7 @@
 				};
 
 				// Updates the targetRow in the preview edge State
-				var oldMouseMove = graph.connectionHandler.mouseMove;
+				let oldMouseMove = graph.connectionHandler.mouseMove;
 				graph.connectionHandler.mouseMove = function(sender, me)
 				{
 					if (this.edgeState != null)
@@ -330,13 +330,13 @@
 				// Creates the edge state that may be used for preview
 				graph.connectionHandler.createEdgeState = function(me)
 				{
-					var relation = doc.createElement('Relation');
+					let relation = doc.createElement('Relation');
 					relation.setAttribute('sourceRow', this.currentRow || '0');
 					relation.setAttribute('targetRow', '0');
 
-					var edge = this.createEdge(relation);
-					var style = this.graph.getCellStyle(edge);
-					var state = new mxCellState(this.graph.view, edge, style);
+					let edge = this.createEdge(relation);
+					let style = this.graph.getCellStyle(edge);
+					let state = new mxCellState(this.graph.view, edge, style);
 
 					// Stores the source row in the handler
 					this.sourceRowNode = this.currentRowNode;
@@ -381,11 +381,11 @@
 				};
 
 				// User objects (data) for the individual cells
-				var doc = mxUtils.createXmlDocument();
+				let doc = mxUtils.createXmlDocument();
 
 				// Same should be used to create the XML node for the table
 				// description and the rows (most probably as child nodes)
-				var relation = doc.createElement('Relation');
+				let relation = doc.createElement('Relation');
 				relation.setAttribute('sourceRow', '4');
 				relation.setAttribute('targetRow', '6');
 				
@@ -397,11 +397,11 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
-				var width = 160;
-				var height = 230;
+				let width = 160;
+				let height = 230;
 				graph.getModel().beginUpdate();
 				try
 				{
@@ -436,11 +436,11 @@
 		// Implements a special perimeter for table rows inside the table markup
 		mxGraphView.prototype.updateFloatingTerminalPoint = function(edge, start, end, source)
 		{
-			var next = this.getNextPoint(edge, end, source);
-			var div = start.text.node.getElementsByTagName('div')[2];
+			let next = this.getNextPoint(edge, end, source);
+			let div = start.text.node.getElementsByTagName('div')[2];
 			
-			var x = start.x;
-			var y = start.getCenterY();
+			let x = start.x;
+			let y = start.getCenterY();
 		
 			// Checks on which side of the terminal to leave
 			if (next.x > x + start.width / 2)
@@ -454,13 +454,13 @@
 				
 				if (mxUtils.isNode(edge.cell.value) && !this.graph.isCellCollapsed(start.cell))
 				{
-					var attr = (source) ? 'sourceRow' : 'targetRow';
-					var row = parseInt(edge.cell.value.getAttribute(attr));
+					let attr = (source) ? 'sourceRow' : 'targetRow';
+					let row = parseInt(edge.cell.value.getAttribute(attr));
 			
 					// HTML labels contain an outer table which is built-in
-					var table = div.getElementsByTagName('table')[0];
-					var trs = table.getElementsByTagName('tr');
-					var tr = trs[Math.min(trs.length - 1, row - 1)];
+					let table = div.getElementsByTagName('table')[0];
+					let trs = table.getElementsByTagName('tr');
+					let tr = trs[Math.min(trs.length - 1, row - 1)];
 					
 					// Gets vertical center of source or target row
 					if (tr != null)
@@ -470,7 +470,7 @@
 				}
 
 				// Keeps vertical coordinate inside start
-				var offsetTop = parseInt(div.style.top) * start.view.scale;
+				let offsetTop = parseInt(div.style.top) * start.view.scale;
 				y = Math.min(start.y + start.height, Math.max(start.y + offsetTop, y));
 
 				// Updates the vertical position of the nearest point if we're not
@@ -488,13 +488,13 @@
 			// the edges have a common target row
 			if (source && mxUtils.isNode(edge.cell.value) && start != null && end != null)
 			{
-				var edges = this.graph.getEdgesBetween(start.cell, end.cell, true);
-				var tmp = [];
+				let edges = this.graph.getEdgesBetween(start.cell, end.cell, true);
+				let tmp = [];
 		
 				// Filters the edges with the same source row
-				var row = edge.cell.value.getAttribute('targetRow');
+				let row = edge.cell.value.getAttribute('targetRow');
 				
-				for (var i = 0; i < edges.length; i++)
+				for (let i = 0; i < edges.length; i++)
 				{
 					if (mxUtils.isNode(edges[i].value) &&
 						edges[i].value.getAttribute('targetRow') == row)
@@ -508,10 +508,10 @@
 				if (edges.length > 1 && edge.cell == edges[edges.length - 1])
 				{
 					// Finds the vertical center
-					var states = [];
-					var y = 0;
+					let states = [];
+					let y = 0;
 					
-					for (var i = 0; i < edges.length; i++)
+					for (let i = 0; i < edges.length; i++)
 				    {
 						states[i] = this.getState(edges[i]);
 				   		y += states[i].absolutePoints[0].y;
@@ -519,9 +519,9 @@
 				    
 				    y /= edges.length;
 					
-				    for (var i = 0; i < states.length; i++)
+				    for (let i = 0; i < states.length; i++)
 				    {
-						var x = states[i].absolutePoints[1].x;
+						let x = states[i].absolutePoints[1].x;
 
 						if (states[i].absolutePoints.length < 5)
 						{
@@ -543,12 +543,12 @@
 		};
 
 		// Defines global helper function to get y-coordinate for a given cell state and row
-		var getRowY = function(state, tr)
+		let getRowY = function(state, tr)
 		{
-			var s = state.view.scale;
-			var div = tr.parentNode.parentNode.parentNode;
-			var offsetTop = parseInt(div.style.top);
-			var y = state.y + (tr.offsetTop + tr.offsetHeight / 2 - div.scrollTop + offsetTop) * s;
+			let s = state.view.scale;
+			let div = tr.parentNode.parentNode.parentNode;
+			let offsetTop = parseInt(div.style.top);
+			let y = state.y + (tr.offsetTop + tr.offsetHeight / 2 - div.scrollTop + offsetTop) * s;
 			y = Math.min(state.y + state.height, Math.max(state.y + offsetTop * s, y));
 			
 			return y;
diff --git a/src/examples/secondlabel.html b/src/examples/secondlabel.html
index 63ea6980e..26c842302 100644
--- a/src/examples/secondlabel.html
+++ b/src/examples/secondlabel.html
@@ -22,7 +22,7 @@
 		// Simple solution to add additional text to the rectangle shape definition:
 		(function()
 		{
-			var mxRectangleShapeIsHtmlAllowed = mxRectangleShape.prototype.isHtmlAllowed;
+			let mxRectangleShapeIsHtmlAllowed = mxRectangleShape.prototype.isHtmlAllowed;
 			mxRectangleShape.prototype.isHtmlAllowed = function()
 			{
 				return mxRectangleShapeIsHtmlAllowed.apply(this, arguments) && this.state == null;
@@ -55,7 +55,7 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Disables the folding icon
 				graph.isCellFoldable = function(cell)
@@ -63,7 +63,7 @@
 					return false;
 				}
 
-				var secondLabelVisible = true;
+				let secondLabelVisible = true;
 
 				// Hook for returning shape number for a given cell
 				graph.getSecondLabel = function(cell)
@@ -77,7 +77,7 @@
 					return null;
 				};
 
-				var relativeChildVerticesVisible = true;
+				let relativeChildVerticesVisible = true;
 
 				// Overrides method to hide relative child vertices
 				graph.isCellVisible = function(cell)
@@ -88,14 +88,14 @@
 				};
 
 				// Creates the shape for the shape number and puts it into the draw pane
-				var redrawShape = graph.cellRenderer.redrawShape;
+				let redrawShape = graph.cellRenderer.redrawShape;
 				graph.cellRenderer.redrawShape = function(state, force, rendering)
 				{
-					var result = redrawShape.apply(this, arguments);
+					let result = redrawShape.apply(this, arguments);
 
 					if (result && secondLabelVisible && state.cell.geometry != null && !state.cell.geometry.relative)
 					{
-						var secondLabel = graph.getSecondLabel(state.cell);
+						let secondLabel = graph.getSecondLabel(state.cell);
 	
 						if (secondLabel != null && state.shape != null && state.secondLabel == null)
 						{
@@ -119,8 +119,8 @@
 					
 					if (state.secondLabel != null)
 					{
-						var scale = graph.getView().getScale();
-						var bounds = new mxRectangle(state.x + state.width - 8 * scale, state.y + 8 * scale, 35, 0);
+						let scale = graph.getView().getScale();
+						let bounds = new mxRectangle(state.x + state.width - 8 * scale, state.y + 8 * scale, 35, 0);
 						state.secondLabel.state = state;
 						state.secondLabel.value = graph.getSecondLabel(state.cell);
 						state.secondLabel.scale = scale;
@@ -132,7 +132,7 @@
 				};
 
 				// Destroys the shape number
-				var destroy = graph.cellRenderer.destroy;
+				let destroy = graph.cellRenderer.destroy;
 				graph.cellRenderer.destroy = function(state)
 				{
 					destroy.apply(this, arguments);
@@ -151,7 +151,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/serverview.html b/src/examples/serverview.html
index f33a10c6e..b4e1b45dd 100644
--- a/src/examples/serverview.html
+++ b/src/examples/serverview.html
@@ -21,16 +21,16 @@
 	<!-- Overrides certain methods required for the server-side-image to be used. -->
 	<script type="text/javascript">
 		// Makes the background of the in-place editor non-transparent
-		var previousStartEditing = mxCellEditor.prototype.startEditing;
+		let previousStartEditing = mxCellEditor.prototype.startEditing;
 		mxCellEditor.prototype.startEditing = (cell, trigger) =>
 		{
 			previousStartEditing.apply(this, arguments);
 	
-			var state = this.graph.getView().getState(cell);
+			let state = this.graph.getView().getState(cell);
 	
 			if (state != null)
 			{
-				var color = mxUtils.getValue(state.style, mxConstants.STYLE_FILLCOLOR, 'white');
+				let color = mxUtils.getValue(state.style, mxConstants.STYLE_FILLCOLOR, 'white');
 				this.textarea.style.background = color;
 			}
 		};
@@ -44,18 +44,18 @@
 		// the edge but not for overlapping labels or most part of the edge labels.
 		mxGraphView.prototype.installListeners = function()
 		{
-			var graph = this.graph;
-			var container = graph.container;
+			let graph = this.graph;
+			let container = graph.container;
 			
 			if (container != null)
 			{
 				mxEvent.addGestureListeners(container,
 					mxUtils.bind(this, function(evt)
 					{
-						var pt = mxUtils.convertPoint(graph.container,
+						let pt = mxUtils.convertPoint(graph.container,
 							mxEvent.getClientX(evt), mxEvent.getClientY(evt));
-						var cell = graph.getCellAt(pt.x, pt.y);
-						var state = this.getState(cell);
+						let cell = graph.getCellAt(pt.x, pt.y);
+						let state = this.getState(cell);
 
 						if (state != null)
 						{
@@ -74,10 +74,10 @@
 					}),
 					mxUtils.bind(this, function(evt)
 					{
-						var pt = mxUtils.convertPoint(graph.container,
+						let pt = mxUtils.convertPoint(graph.container,
 							mxEvent.getClientX(evt), mxEvent.getClientY(evt));
-						var cell = graph.getCellAt(pt.x, pt.y);
-						var state = this.getState(cell);
+						let cell = graph.getCellAt(pt.x, pt.y);
+						let state = this.getState(cell);
 	
 						if (state != null)
 						{
@@ -92,10 +92,10 @@
 					}),
 					mxUtils.bind(this, function(evt)
 					{
-						var pt = mxUtils.convertPoint(graph.container,
+						let pt = mxUtils.convertPoint(graph.container,
 							mxEvent.getClientX(evt), mxEvent.getClientY(evt));
-						var cell = graph.getCellAt(pt.x, pt.y);
-						var state = this.getState(cell);
+						let cell = graph.getCellAt(pt.x, pt.y);
+						let state = this.getState(cell);
 	
 						if (state != null)
 						{
@@ -113,9 +113,9 @@
 				mxEvent.addListener(container, 'dblclick',
 					mxUtils.bind(this, function(evt)
 					{
-						var pt = mxUtils.convertPoint(graph.container,
+						let pt = mxUtils.convertPoint(graph.container,
 							mxEvent.getClientX(evt), mxEvent.getClientY(evt));
-						var cell = graph.getCellAt(pt.x, pt.y);
+						let cell = graph.getCellAt(pt.x, pt.y);
 						
 						graph.dblClick(evt, cell);
 					})
@@ -177,11 +177,11 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Holds the current image
-				var img = null;
-				var loader = new Image();
+				let img = null;
+				let loader = new Image();
 				loader.src = 'images/loading.gif';
 				loader.style.zIndex = 1;
 				loader.style.visibility = 'hidden';
@@ -203,23 +203,23 @@
 					mxGraphView.prototype.validate.apply(this, arguments);
 
 					var t0 = new Date().getTime();
-					var bounds = graph.getGraphBounds();
+					let bounds = graph.getGraphBounds();
 
 					// Note that we send out an XML version of the view which
 					// allows us to keep most customizations on the client-side.
 					// No deltas are used here, the complete view is sent to the
 					// server on each update.
-					var node = mxUtils.getViewXml(graph, 1);
-					var xml = encodeURIComponent(mxUtils.getXml(node));
+					let node = mxUtils.getViewXml(graph, 1);
+					let xml = encodeURIComponent(mxUtils.getXml(node));
 
-					var onload = function(req)
+					let onload = function(req)
 					{
-						var dt = (new Date().getTime() - t0) / 1000;
+						let dt = (new Date().getTime() - t0) / 1000;
 						//mxLog.debug('post returned after '+dt+' secs');
 					
 						if (req.getStatus() == 200)
 						{
-							var image =new Image();
+							let image =new Image();
 
 							// Less flickering if the old image is removed after
 							// the new image was received from the server
@@ -234,7 +234,7 @@
 								graph.container.insertBefore(img, graph.container.firstChild);
 								loader.style.visibility = 'hidden';
 								
-								var dt = (new Date().getTime() - t0) / 1000;
+								let dt = (new Date().getTime() - t0) / 1000;
 								//mxLog.debug('received '+img.clientWidth+'x'+img.clientHeight+' pixels in '+dt+' secs');
 								graph.setEnabled(true);
 							};
@@ -248,7 +248,7 @@
 						}
 					};
 
-					var onerror = function(req)
+					let onerror = function(req)
 					{
 						//mxLog.debug('error: '+req.getStatus());
 					}
@@ -270,7 +270,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 				//mxLog.show();
 
 				// Adds cells to the model in a single step
diff --git a/src/examples/shape.html b/src/examples/shape.html
index eb1943f65..10eaa4455 100644
--- a/src/examples/shape.html
+++ b/src/examples/shape.html
@@ -64,8 +64,8 @@
 		*/
 		BoxShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
 		{
-			var dy = this.extrude * this.scale;
-			var dx = this.extrude * this.scale;
+			let dy = this.extrude * this.scale;
+			let dx = this.extrude * this.scale;
 
 			if (isForeground)
 			{
@@ -110,14 +110,14 @@
 			else
 			{
 				// Creates the graph inside the DOM node.
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Disables basic selection and cell handling
 				graph.setEnabled(false);
 
 				// Changes the default style for vertices "in-place"
 				// to use the custom shape.
-				var style = graph.getStylesheet().getDefaultVertexStyle();
+				let style = graph.getStylesheet().getDefaultVertexStyle();
 				style[mxConstants.STYLE_SHAPE] = 'box';
 				
 				// Adds a spacing for the label that matches the
@@ -131,7 +131,7 @@
 
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/showregion.html b/src/examples/showregion.html
index 25e0fe983..55e169fda 100644
--- a/src/examples/showregion.html
+++ b/src/examples/showregion.html
@@ -79,10 +79,10 @@
 				mxConstants.VERTEX_SELECTION_COLOR = '#00a8ff';
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Enables rubberband selection
-				var rubberband = new mxRubberband(graph);
+				let rubberband = new mxRubberband(graph);
 				
 				rubberband.isForceRubberbandEvent = function(me)
 				{
@@ -92,31 +92,31 @@
 				// Defines a new popup menu for region selection in the rubberband handler
 				rubberband.popupMenu = new mxPopupMenu(function(menu, cell, evt)
 				{
-					var rect = new mxRectangle(rubberband.x, rubberband.y, rubberband.width, rubberband.height);
+					let rect = new mxRectangle(rubberband.x, rubberband.y, rubberband.width, rubberband.height);
 					
 					menu.addItem('Show this', null, function()
 				    {
 						rubberband.popupMenu.hideMenu();
-						var bounds = graph.getGraphBounds();
+						let bounds = graph.getGraphBounds();
 						mxUtils.show(graph, null, bounds.x - rubberband.x, bounds.y - rubberband.y, rubberband.width, rubberband.height);
 				    });
 				});
 				
-				var rubberbandMouseDown = rubberband.mouseDown;
+				let rubberbandMouseDown = rubberband.mouseDown;
 				rubberband.mouseDown = function(sender, me)
 				{
 					this.popupMenu.hideMenu();
 					rubberbandMouseDown.apply(this, arguments);
 				};
 				
-				var rubberbandMouseUp = rubberband.mouseUp;
+				let rubberbandMouseUp = rubberband.mouseUp;
 				rubberband.mouseUp = function(sender, me)
 				{
 					if (this.div != null && mxEvent.isPopupTrigger(me.getEvent()))
 					{
 						if (!graph.popupMenuHandler.isMenuShowing())
 						{
-							var origin = mxUtils.getScrollOrigin();
+							let origin = mxUtils.getScrollOrigin();
 							this.popupMenu.popup(me.getX() + origin.x + 1, me.getY() + origin.y + 1, null, me.getEvent());
 							this.reset();
 						}
@@ -129,7 +129,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/standardsmode.html b/src/examples/standardsmode.html
index ef6d6fcca..944194788 100644
--- a/src/examples/standardsmode.html
+++ b/src/examples/standardsmode.html
@@ -39,7 +39,7 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Uncomment the following if you want the container
 				// to fit the size of the graph
@@ -50,7 +50,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -69,8 +69,8 @@
 				// Prints the rendering mode and display dialect (VML or SVG) in use
 				// CSS1Compat means standard
 				mxLog.show();
-				var mode = (document.compatMode == 'CSS1Compat') ? 'standards' : 'quirks';
-				var disp = (mxClient.IS_SVG) ? 'svg' : 'vml';
+				let mode = (document.compatMode == 'CSS1Compat') ? 'standards' : 'quirks';
+				let disp = (mxClient.IS_SVG) ? 'svg' : 'vml';
 				mxLog.debug(mode + ' ' + disp);
 			}
 		};
diff --git a/src/examples/stencils.html b/src/examples/stencils.html
index 7e5800d25..726b08f2f 100644
--- a/src/examples/stencils.html
+++ b/src/examples/stencils.html
@@ -53,9 +53,9 @@
 				// Uses the shape for resize previews
 				mxVertexHandler.prototype.createSelectionShape = function(bounds)
 				{
-					var key = this.state.style[mxConstants.STYLE_SHAPE];
-					var stencil = mxStencilRegistry.getStencil(key);
-					var shape = null;
+					let key = this.state.style[mxConstants.STYLE_SHAPE];
+					let stencil = mxStencilRegistry.getStencil(key);
+					let shape = null;
 					
 					if (stencil != null)
 					{
@@ -116,9 +116,9 @@
 				mxCellRenderer.registerShape('customShape', CustomShape);
 				
 				// Loads the stencils into the registry
-				var req = mxUtils.load('stencils.xml');
-				var root = req.getDocumentElement();
-				var shape = root.firstChild;
+				let req = mxUtils.load('stencils.xml');
+				let root = req.getDocumentElement();
+				let shape = root.firstChild;
 				
 				while (shape != null)
 				{
@@ -133,7 +133,7 @@
 				mxEvent.disableContextMenu(container);
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setConnectable(true);
 				graph.setTooltips(true);
 				graph.setPanning(true);
@@ -149,7 +149,7 @@
 				};
 				
 				// Changes default styles
-				var style = graph.getStylesheet().getDefaultEdgeStyle();
+				let style = graph.getStylesheet().getDefaultEdgeStyle();
 				style[mxConstants.STYLE_EDGE] = 'orthogonalEdgeStyle';
 				style = graph.getStylesheet().getDefaultVertexStyle();
 				style[mxConstants.STYLE_FILLCOLOR] = '#adc5ff';
@@ -161,7 +161,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -215,11 +215,11 @@
 
 				document.body.appendChild(mxUtils.button('Rotate', function()
 				{
-					var cell = graph.getSelectionCell();
+					let cell = graph.getSelectionCell();
 					
 					if (cell != null)
 					{
-						var geo = graph.getCellGeometry(cell);
+						let geo = graph.getCellGeometry(cell);
 	
 						if (geo != null)
 						{
@@ -230,17 +230,17 @@
 								geo = geo.clone();
 								geo.x += geo.width / 2 - geo.height / 2;
 								geo.y += geo.height / 2 - geo.width / 2;
-								var tmp = geo.width;
+								let tmp = geo.width;
 								geo.width = geo.height;
 								geo.height = tmp;
 								graph.getModel().setGeometry(cell, geo);
 								
 								// Reads the current direction and advances by 90 degrees
-								var state = graph.view.getState(cell);
+								let state = graph.view.getState(cell);
 								
 								if (state != null)
 								{
-									var dir = state.style[mxConstants.STYLE_DIRECTION] || 'east'/*default*/;
+									let dir = state.style[mxConstants.STYLE_DIRECTION] || 'east'/*default*/;
 									
 									if (dir == 'east')
 									{
@@ -295,11 +295,11 @@
 				
 				document.body.appendChild(mxUtils.button('Style', function()
 				{
-					var cell = graph.getSelectionCell();
+					let cell = graph.getSelectionCell();
 					
 					if (cell != null)
 					{
-						var style = mxUtils.prompt('Style', graph.getModel().getStyle(cell));
+						let style = mxUtils.prompt('Style', graph.getModel().getStyle(cell));
 						
 						if (style != null)
 						{
diff --git a/src/examples/stylesheet.html b/src/examples/stylesheet.html
index 81afbcb16..c9e4b40e8 100644
--- a/src/examples/stylesheet.html
+++ b/src/examples/stylesheet.html
@@ -36,7 +36,7 @@
 			else
 			{
 				// Creates the graph inside the DOM node.
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 			
 				// Disables basic selection and cell handling
 				graph.setEnabled(false);
@@ -45,7 +45,7 @@
 				// a supercall to use the default implementation.
 				graph.getLabel = function(cell)
 				{
-					var label = mxGraph.prototype.getLabel.apply(this, arguments);
+					let label = mxGraph.prototype.getLabel.apply(this, arguments);
 					
 					if (this.getModel().isEdge(cell))
 					{
@@ -61,13 +61,13 @@
 				graph.setTooltips(true);
 				graph.getTooltip = function(state)
 				{
-					var cell = state.cell;
-					var model = this.getModel();
+					let cell = state.cell;
+					let model = this.getModel();
 					
 					if (model.isEdge(cell))
 					{
-						var source = this.getLabel(model.getTerminal(cell, true));
-						var target = this.getLabel(model.getTerminal(cell, false));
+						let source = this.getLabel(model.getTerminal(cell, true));
+						let target = this.getLabel(model.getTerminal(cell, false));
 						
 						return source+' -> '+target;
 					}
@@ -78,7 +78,7 @@
 				};
 				
 				// Creates the default style for vertices
-				var style = [];
+				let style = [];
 				style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE;
 				style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
 				style[mxConstants.STYLE_STROKECOLOR] = 'gray';
@@ -105,7 +105,7 @@
 
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/swimlanes.html b/src/examples/swimlanes.html
index 2c02e91b0..503f44c76 100644
--- a/src/examples/swimlanes.html
+++ b/src/examples/swimlanes.html
@@ -41,13 +41,13 @@
 				// Creates a wrapper editor around a new graph inside
 				// the given container using an XML config for the
 				// keyboard bindings
-				var config = mxUtils.load(
+				let config = mxUtils.load(
 					'editors/config/keyhandler-commons.xml').
 						getDocumentElement();
-				var editor = new mxEditor(config);
+				let editor = new mxEditor(config);
 				editor.setGraphContainer(container);
-				var graph = editor.graph;
-				var model = graph.getModel();
+				let graph = editor.graph;
+				let model = graph.getModel();
 
 				// Auto-resizes the container
 				graph.border = 80;
@@ -56,7 +56,7 @@
 				graph.graphHandler.setRemoveCellsFromParent(false);
 
 				// Changes the default vertex style in-place
-				var style = graph.getStylesheet().getDefaultVertexStyle();
+				let style = graph.getStylesheet().getDefaultVertexStyle();
 				style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_SWIMLANE;
 				style[mxConstants.STYLE_VERTICAL_ALIGN] = 'middle';
 				style[mxConstants.STYLE_LABEL_BACKGROUNDCOLOR] = 'white';
@@ -126,13 +126,13 @@
 					graph.setAllowDanglingEdges(false);
 					
 					// End-states are no valid sources
-					var previousIsValidSource = graph.isValidSource;
+					let previousIsValidSource = graph.isValidSource;
 					
 					graph.isValidSource = function(cell)
 					{
 						if (previousIsValidSource.apply(this, arguments))
 						{
-							var style = this.getModel().getStyle(cell);
+							let style = this.getModel().getStyle(cell);
 							
 							return style == null || !(style == 'end' || style.indexOf('end') == 0);
 						}
@@ -148,7 +148,7 @@
 					// style below
 					graph.isValidTarget = function(cell)
 					{
-						var style = this.getModel().getStyle(cell);
+						let style = this.getModel().getStyle(cell);
 						
 						return !this.getModel().isEdge(cell) && !this.isSwimlane(cell) &&
 							(style == null || !(style == 'state' || style.indexOf('state') == 0));
@@ -168,15 +168,15 @@
 							return true;
 						}
 						
-						var model = this.getModel();
-						var lane = false;
-						var pool = false;
-						var cell = false;
+						let model = this.getModel();
+						let lane = false;
+						let pool = false;
+						let cell = false;
 						
 						// Checks if any lanes or pools are selected
-						for (var i = 0; i < cells.length; i++)
+						for (let i = 0; i < cells.length; i++)
 						{
-							var tmp = model.getParent(cells[i]);
+							let tmp = model.getParent(cells[i]);
 							lane = lane || this.isPool(tmp);
 							pool = pool || this.isPool(cells[i]);
 							
@@ -190,8 +190,8 @@
 					// Adds new method for identifying a pool
 					graph.isPool = function(cell)
 					{
-						var model = this.getModel();
-						var parent = model.getParent(cell);
+						let model = this.getModel();
+						let parent = model.getParent(cell);
 					
 						return parent != null && model.getParent(parent) == model.getRoot();
 					};
@@ -199,7 +199,7 @@
 					// Changes swimlane orientation while collapsed
 					graph.model.getStyle = function(cell)
 					{
-						var style = mxGraphModel.prototype.getStyle.apply(this, arguments);
+						let style = mxGraphModel.prototype.getStyle.apply(this, arguments);
 					
 						if (graph.isCellCollapsed(cell))
 						{
@@ -219,13 +219,13 @@
 					};
 
 					// Keeps widths on collapse/expand					
-					var foldingHandler = function(sender, evt)
+					let foldingHandler = function(sender, evt)
 					{
-						var cells = evt.getProperty('cells');
+						let cells = evt.getProperty('cells');
 						
-						for (var i = 0; i < cells.length; i++)
+						for (let i = 0; i < cells.length; i++)
 						{
-							var geo = graph.model.getGeometry(cells[i]);
+							let geo = graph.model.getGeometry(cells[i]);
 
 							if (geo.alternateBounds != null)
 							{
@@ -241,7 +241,7 @@
 				new mxSwimlaneManager(graph);
 
 				// Creates a stack depending on the orientation of the swimlane
-				var layout = new mxStackLayout(graph, false);
+				let layout = new mxStackLayout(graph, false);
 				
 				// Makes sure all children fit into the parent swimlane
 				layout.resizeParent = true;
@@ -256,7 +256,7 @@
 				}
 				
 				// Keeps the lanes and pools stacked
-				var layoutMgr = new mxLayoutManager(graph);
+				let layoutMgr = new mxLayoutManager(graph);
 
 				layoutMgr.getLayout = function(cell)
 				{
@@ -273,7 +273,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 
 				// Adds cells to the model in a single step
 				model.beginUpdate();
@@ -319,7 +319,7 @@
 					var end2 = graph.insertVertex(lane2a, null, 'B', 560, 30, 30, 30, 'end');
 					var end3 = graph.insertVertex(lane2a, null, 'C', 560, 84, 30, 30, 'end');
 					
-					var e = null;
+					let e = null;
 					
 					graph.insertEdge(lane1a, null, null, start1, step1);
 					graph.insertEdge(lane1a, null, null, step1, step11);
diff --git a/src/examples/template.html b/src/examples/template.html
index 7116e19ed..c6e2e54e4 100644
--- a/src/examples/template.html
+++ b/src/examples/template.html
@@ -35,13 +35,13 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Adds rubberband selection to the graph
 				new mxRubberband(graph);
 				
-				var doc = mxUtils.parseXml(xml);
-				var codec = new mxCodec(doc);
+				let doc = mxUtils.parseXml(xml);
+				let codec = new mxCodec(doc);
 				codec.decode(doc.documentElement, graph.getModel());
 			}
 		};
diff --git a/src/examples/thread.html b/src/examples/thread.html
index 79ad781ef..c0762b5e9 100644
--- a/src/examples/thread.html
+++ b/src/examples/thread.html
@@ -33,14 +33,14 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Disables basic selection and cell handling
 				graph.setEnabled(false);
 
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 				var v1, v2, e1;
 												
 				// Adds cells to the model in a single step
@@ -58,9 +58,9 @@
 				}
 					
 				// Function to switch the overlay every 5 secs
-				var f = function()
+				let f = function()
 				{
-					var overlays = graph.getCellOverlays(v1);
+					let overlays = graph.getCellOverlays(v1);
 					
 					if (overlays == null)
 					{
diff --git a/src/examples/toolbar.html b/src/examples/toolbar.html
index c5e348acd..15db71ac7 100644
--- a/src/examples/toolbar.html
+++ b/src/examples/toolbar.html
@@ -37,7 +37,7 @@
 			else
 			{
 				// Creates the div for the toolbar
-				var tbContainer = document.createElement('div');
+				let tbContainer = document.createElement('div');
 				tbContainer.style.position = 'absolute';
 				tbContainer.style.overflow = 'hidden';
 				tbContainer.style.padding = '2px';
@@ -49,7 +49,7 @@
 				document.body.appendChild(tbContainer);
 			
 				// Creates new toolbar without event processing
-				var toolbar = new mxToolbar(tbContainer);
+				let toolbar = new mxToolbar(tbContainer);
 				toolbar.enabled = false
 				
 				// Creates the div for the graph
@@ -66,14 +66,14 @@
 
 				// Creates the model and the graph inside the container
 				// using the fastest rendering available on the browser
-				var model = new mxGraphModel();
-				var graph = new mxGraph(container, model);
+				let model = new mxGraphModel();
+				let graph = new mxGraph(container, model);
 				graph.dropEnabled = true;
 				
 				// Matches DnD inside the graph
 				mxDragSource.prototype.getDropTarget = function(graph, x, y)
 				{
-					var cell = graph.getCellAt(x, y);
+					let cell = graph.getCellAt(x, y);
 					
 					if (!graph.isValidDropTarget(cell))
 					{
@@ -88,12 +88,12 @@
 				graph.setMultigraph(false);
 
 				// Stops editing on enter or escape keypress
-				var keyHandler = new mxKeyHandler(graph);
-				var rubberband = new mxRubberband(graph);
+				let keyHandler = new mxKeyHandler(graph);
+				let rubberband = new mxRubberband(graph);
 				
-				var addVertex = function(icon, w, h, style)
+				let addVertex = function(icon, w, h, style)
 				{
-					var vertex = new mxCell(null, new mxGeometry(0, 0, w, h), style);
+					let vertex = new mxCell(null, new mxGeometry(0, 0, w, h), style);
 					vertex.setVertex(true);
 				
 					addToolbarItem(graph, toolbar, vertex, icon);
@@ -109,30 +109,30 @@
 				addVertex('editors/images/actor.gif', 30, 40, 'shape=actor');
 				toolbar.addLine();
 				
-				var button = mxUtils.button('Create toolbar entry from selection', function(evt)
+				let button = mxUtils.button('Create toolbar entry from selection', function(evt)
 				{
 					if (!graph.isSelectionEmpty())
 					{
 						// Creates a copy of the selection array to preserve its state
-						var cells = graph.getSelectionCells();
-						var bounds = graph.getView().getBounds(cells);
+						let cells = graph.getSelectionCells();
+						let bounds = graph.getView().getBounds(cells);
 						
 						// Function that is executed when the image is dropped on
 						// the graph. The cell argument points to the cell under
 						// the mousepointer if there is one.
-						var funct = function(graph, evt, cell)
+						let funct = function(graph, evt, cell)
 						{
 							graph.stopEditing(false);
 			
-							var pt = graph.getPointForEvent(evt);
-							var dx = pt.x - bounds.x;
-							var dy = pt.y - bounds.y;
+							let pt = graph.getPointForEvent(evt);
+							let dx = pt.x - bounds.x;
+							let dy = pt.y - bounds.y;
 							
 							graph.setSelectionCells(graph.importCells(cells, dx, dy, cell));
 						}
 			
 						// Creates the image which is used as the drag icon (preview)
-						var img = toolbar.addMode(null, 'editors/images/outline.gif', funct);
+						let img = toolbar.addMode(null, 'editors/images/outline.gif', funct);
 						mxUtils.makeDraggable(img, graph, funct);
 					}
 				});
@@ -150,12 +150,12 @@
 			// Function that is executed when the image is dropped on
 			// the graph. The cell argument points to the cell under
 			// the mousepointer if there is one.
-			var funct = function(graph, evt, cell)
+			let funct = function(graph, evt, cell)
 			{
 				graph.stopEditing(false);
 
-				var pt = graph.getPointForEvent(evt);
-				var vertex = graph.getModel().cloneCell(prototype);
+				let pt = graph.getPointForEvent(evt);
+				let vertex = graph.getModel().cloneCell(prototype);
 				vertex.geometry.x = pt.x;
 				vertex.geometry.y = pt.y;
 				
@@ -163,7 +163,7 @@
 			}
 
 			// Creates the image which is used as the drag icon (preview)
-			var img = toolbar.addMode(null, image, funct);
+			let img = toolbar.addMode(null, image, funct);
 			mxUtils.makeDraggable(img, graph, funct);
 		}
 
diff --git a/src/examples/touch.html b/src/examples/touch.html
index ebb9fa291..f3c01be65 100644
--- a/src/examples/touch.html
+++ b/src/examples/touch.html
@@ -67,7 +67,7 @@
 				// mxClient.IS_TOUCH || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0
 				
 				// Disables built-in text selection and context menu while not editing text
-				var textEditing =  mxUtils.bind(this, function(evt)
+				let textEditing =  mxUtils.bind(this, function(evt)
 				{
 					return graph.isEditing();
 				});
@@ -77,13 +77,13 @@
 				container.oncontextmenu = textEditing;
 
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.centerZoom = false;
 				graph.setConnectable(true);
 				graph.setPanning(true);
 				
 				// Creates rubberband selection
-			    var rubberband = new mxRubberband(graph);
+			    let rubberband = new mxRubberband(graph);
 				
 				graph.popupMenuHandler.autoExpand = true;
 				
@@ -116,9 +116,9 @@
 
 				// Context menu trigger implementation depending on current selection state
 				// combined with support for normal popup trigger.
-				var cellSelected = false;
-				var selectionEmpty = false;
-				var menuShowing = false;
+				let cellSelected = false;
+				let selectionEmpty = false;
+				let menuShowing = false;
 				
 				graph.fireMouseEvent = function(evtName, me, sender)
 				{
@@ -151,12 +151,12 @@
 				{
 					if (!mxEvent.isMultiTouchEvent(evt))
 					{
-						var me = evt.getProperty('event');
-						var cell = evt.getProperty('cell');
+						let me = evt.getProperty('event');
+						let cell = evt.getProperty('cell');
 						
 						if (cell == null)
 						{
-							var pt = mxUtils.convertPoint(this.container,
+							let pt = mxUtils.convertPoint(this.container,
 									mxEvent.getClientX(me), mxEvent.getClientY(me));
 							rubberband.start(pt.x, pt.y);
 						}
@@ -187,7 +187,7 @@
 
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -212,11 +212,11 @@
 				// Adds custom hit detection if native hit detection found no cell
 				graph.updateMouseEvent = function(me)
 				{
-					var me = mxGraph.prototype.updateMouseEvent.apply(this, arguments);
+					let me = mxGraph.prototype.updateMouseEvent.apply(this, arguments);
 
 					if (me.getState() == null)
 					{
-						var cell = this.getCellAt(me.graphX, me.graphY);
+						let cell = this.getCellAt(me.graphX, me.graphY);
 
 						if (cell != null && this.isSwimlane(cell) && this.hitsSwimlaneContent(cell, me.graphX, me.graphY))
 						{
@@ -270,7 +270,7 @@
 			// One finger pans (no rubberband selection) must start regardless of mouse button
 			mxPanningHandler.prototype.isPanningTrigger = function(me)
 			{
-				var evt = me.getEvent();
+				let evt = me.getEvent();
 				
 			 	return (me.getState() == null && !mxEvent.isMouseEvent(evt)) ||
 			 		(mxEvent.isPopupTrigger(evt) && (me.getState() == null ||
@@ -278,7 +278,7 @@
 			};
 	
 			// Don't clear selection if multiple cells selected
-			var graphHandlerMouseDown = mxGraphHandler.prototype.mouseDown;
+			let graphHandlerMouseDown = mxGraphHandler.prototype.mouseDown;
 			mxGraphHandler.prototype.mouseDown = function(sender, me)
 			{
 				graphHandlerMouseDown.apply(this, arguments);
@@ -303,12 +303,12 @@
 			};
 	
 			// Overrides double click handling to use the tolerance
-			var graphDblClick = mxGraph.prototype.dblClick;
+			let graphDblClick = mxGraph.prototype.dblClick;
 			mxGraph.prototype.dblClick = function(evt, cell)
 			{
 				if (cell == null)
 				{
-					var pt = mxUtils.convertPoint(this.container,
+					let pt = mxUtils.convertPoint(this.container,
 						mxEvent.getClientX(evt), mxEvent.getClientY(evt));
 					cell = this.getCellAt(pt.x, pt.y);
 				}
@@ -317,7 +317,7 @@
 			};
 	
 			// Rounded edge and vertex handles
-			var touchHandle = new mxImage('images/handle-main.png', 17, 17);
+			let touchHandle = new mxImage('images/handle-main.png', 17, 17);
 			mxVertexHandler.prototype.handleImage = touchHandle;
 			mxEdgeHandler.prototype.handleImage = touchHandle;
 			mxOutline.prototype.sizerImage = touchHandle;
@@ -326,9 +326,9 @@
 			new Image().src = touchHandle.src;
 	
 			// Adds connect icon to selected vertex
-			var connectorSrc = 'images/handle-connect.png';
+			let connectorSrc = 'images/handle-connect.png';
 	
-			var vertexHandlerInit = mxVertexHandler.prototype.init;
+			let vertexHandlerInit = mxVertexHandler.prototype.init;
 			mxVertexHandler.prototype.init = function()
 			{
 				// TODO: Use 4 sizers, move outside of shape
@@ -359,7 +359,7 @@
 							this.graph.popupMenuHandler.hideMenu();
 							this.graph.stopEditing(false);
 							
-							var pt = mxUtils.convertPoint(this.graph.container,
+							let pt = mxUtils.convertPoint(this.graph.container,
 									mxEvent.getClientX(evt), mxEvent.getClientY(evt));
 							this.graph.connectionHandler.start(this.state, pt.x, pt.y);
 							this.graph.isMouseDown = true;
@@ -374,7 +374,7 @@
 				this.redrawHandles();
 			};
 			
-			var vertexHandlerHideSizers = mxVertexHandler.prototype.hideSizers;
+			let vertexHandlerHideSizers = mxVertexHandler.prototype.hideSizers;
 			mxVertexHandler.prototype.hideSizers = function()
 			{
 				vertexHandlerHideSizers.apply(this, arguments);
@@ -385,7 +385,7 @@
 				}
 			};
 			
-			var vertexHandlerReset = mxVertexHandler.prototype.reset;
+			let vertexHandlerReset = mxVertexHandler.prototype.reset;
 			mxVertexHandler.prototype.reset = function()
 			{
 				vertexHandlerReset.apply(this, arguments);
@@ -396,15 +396,15 @@
 				}
 			};
 			
-			var vertexHandlerRedrawHandles = mxVertexHandler.prototype.redrawHandles;
+			let vertexHandlerRedrawHandles = mxVertexHandler.prototype.redrawHandles;
 			mxVertexHandler.prototype.redrawHandles = function()
 			{
 				vertexHandlerRedrawHandles.apply(this);
 	
 				if (this.state != null && this.connectorImg != null)
 				{
-					var pt = new mxPoint();
-					var s = this.state;
+					let pt = new mxPoint();
+					let s = this.state;
 					
 					// Top right for single-sizer
 					if (mxVertexHandler.prototype.singleSizer)
@@ -418,14 +418,14 @@
 						pt.y = s.y + s.height / 2;
 					}
 					
-					var alpha = mxUtils.toRadians(mxUtils.getValue(s.style, mxConstants.STYLE_ROTATION, 0));
+					let alpha = mxUtils.toRadians(mxUtils.getValue(s.style, mxConstants.STYLE_ROTATION, 0));
 					
 					if (alpha != 0)
 					{
-						var cos = Math.cos(alpha);
-						var sin = Math.sin(alpha);
+						let cos = Math.cos(alpha);
+						let sin = Math.sin(alpha);
 						
-						var ct = new mxPoint(s.getCenterX(), s.getCenterY());
+						let ct = new mxPoint(s.getCenterX(), s.getCenterY());
 						pt = mxUtils.getRotatedPoint(pt, cos, sin, ct);
 					}
 					
@@ -434,7 +434,7 @@
 				}
 			};
 			
-			var vertexHandlerDestroy = mxVertexHandler.prototype.destroy;
+			let vertexHandlerDestroy = mxVertexHandler.prototype.destroy;
 			mxVertexHandler.prototype.destroy = function(sender, me)
 			{
 				vertexHandlerDestroy.apply(this, arguments);
diff --git a/src/examples/tree.html b/src/examples/tree.html
index 867641844..c8497b149 100644
--- a/src/examples/tree.html
+++ b/src/examples/tree.html
@@ -37,8 +37,8 @@
 		
 		TreeNodeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
 		{
-			var graph = this.state.view.graph;
-			var hasChildren = graph.model.getOutgoingEdges(this.state.cell).length > 0;
+			let graph = this.state.view.graph;
+			let hasChildren = graph.model.getOutgoingEdges(this.state.cell).length > 0;
 			
 			if (isForeground)
 			{
@@ -65,7 +65,7 @@
 		// Defines a custom perimeter for the nodes in the tree
 		mxGraphView.prototype.updateFloatingTerminalPoint = function(edge, start, end, source)
 		{
-			var pt = null;
+			let pt = null;
 			
 			if (source)
 			{
@@ -103,7 +103,7 @@
 				mxGraph.prototype.expandedImage = new mxImage(mxClient.imageBasePath + '/expanded.gif', 9, 9);
 				
 				// Workaround for Internet Explorer ignoring certain styles
-				var container = document.createElement('div');
+				let container = document.createElement('div');
 				container.style.position = 'absolute';
 				container.style.overflow = 'hidden';
 				container.style.left = '0px';
@@ -114,13 +114,13 @@
 				document.body.appendChild(container);
 			
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Avoids overlap of edges and collapse icons
 				graph.keepEdgesInBackground = true;
 
 				// Set some stylesheet options for the visual appearance
-				var style = graph.getStylesheet().getDefaultVertexStyle();
+				let style = graph.getStylesheet().getDefaultVertexStyle();
 				style[mxConstants.STYLE_SHAPE] = 'treenode';
 				style[mxConstants.STYLE_GRADIENTCOLOR] = 'white';
 				style[mxConstants.STYLE_SHADOW] = true;
@@ -136,18 +136,18 @@
 				graph.panningHandler.useLeftButtonForPanning = true;
 
 				// Stops editing on enter or escape keypress
-				var keyHandler = new mxKeyHandler(graph);
+				let keyHandler = new mxKeyHandler(graph);
 				
 				// Enables automatic layout on the graph and installs
 				// a tree layout for all groups who's children are
 				// being changed, added or removed.
-				var layout = new mxCompactTreeLayout(graph, false);
+				let layout = new mxCompactTreeLayout(graph, false);
 				layout.useBoundingBox = false;
 				layout.edgeRouting = false;
 				layout.levelDistance = 30;
 				layout.nodeDistance = 10;
 
-				var layoutMgr = new mxLayoutManager(graph);
+				let layoutMgr = new mxLayoutManager(graph);
 				
 				layoutMgr.getLayout = function(cell)
 				{
@@ -171,10 +171,10 @@
 				{
 					if (state.control != null)
 					{
-						var oldScale = state.control.scale;
-						var w = state.control.bounds.width / oldScale;
-						var h = state.control.bounds.height / oldScale;
-						var s = state.view.scale;			
+						let oldScale = state.control.scale;
+						let w = state.control.bounds.width / oldScale;
+						let h = state.control.bounds.height / oldScale;
+						let s = state.view.scale;
 
 						return new mxRectangle(state.x + state.width / 2 - w / 2 * s,
 							state.y + state.height + TreeNodeShape.prototype.segment * s - h / 2 * s,
@@ -206,14 +206,14 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds the root vertex of the tree
 				graph.getModel().beginUpdate();
 				try
 				{
-					var w = graph.container.offsetWidth;
-					var root = graph.insertVertex(parent, 'treeRoot', 'Root', w/2 - 30, 20, 60, 40);
+					let w = graph.container.offsetWidth;
+					let root = graph.insertVertex(parent, 'treeRoot', 'Root', w/2 - 30, 20, 60, 40);
 
 					var v1 = graph.insertVertex(parent, 'v1', 'Child 1', 0, 0, 60, 40);
 					graph.insertEdge(parent, null, '', root, v1);
@@ -258,7 +258,7 @@
 		function toggleSubtree(graph, cell, show)
 		{
 			show = (show != null) ? show : true;
-			var cells = [];
+			let cells = [];
 			
 			graph.traverse(cell, true, function(vertex)
 			{
diff --git a/src/examples/uiconfig.html b/src/examples/uiconfig.html
index 18e5ac1b8..6f2fadbce 100644
--- a/src/examples/uiconfig.html
+++ b/src/examples/uiconfig.html
@@ -38,7 +38,7 @@
 				// editor is used to create certain functionality for the
 				// graph, such as the rubberband selection, but most parts
 				// of the UI are custom in this example.
-				var editor = new mxEditor();
+				let editor = new mxEditor();
 
 				// Configures the editor's UI, the toolbar and the popupmenu.
 				// Note that the element with the id toolbox is used in the
@@ -51,7 +51,7 @@
 				// and toolbar objects, respectively.
 				// Keep in mind that the as-attributes of the add-items in the
 				// toolbar and popupmenu sections refer to keys in mxResources.
-				var config = mxUtils.load('uiconfig.xml').getDocumentElement();
+				let config = mxUtils.load('uiconfig.xml').getDocumentElement();
 				mxObjectCodec.allowEval = true;
 				editor.configure(config);
 				mxObjectCodec.allowEval = false;
@@ -60,8 +60,8 @@
 				editor.graph.setConnectable(true);
 
 				// Creates the second toolbar programmatically
-				var container = document.getElementById('toolbar');
-				var toolbar = new mxDefaultToolbar(container, editor);
+				let container = document.getElementById('toolbar');
+				let toolbar = new mxDefaultToolbar(container, editor);
 				
 				// Use eg. mxResources.get("delete") to translate tooltip
 				toolbar.addItem('Show XML', 'images/icons48/gear.png', 'myFirstAction');
diff --git a/src/examples/uiconfig.xml b/src/examples/uiconfig.xml
index 97bdc10b9..5d2a9a947 100644
--- a/src/examples/uiconfig.xml
+++ b/src/examples/uiconfig.xml
@@ -16,8 +16,8 @@
 		<add as="myFirstAction"><![CDATA[
 			function (editor, cell)
 			{
-				var encoder = new mxCodec();
-				var node = encoder.encode(editor.graph.getModel());
+				let encoder = new mxCodec();
+				let node = encoder.encode(editor.graph.getModel());
 				mxUtils.popup(mxUtils.getPrettyXml(node), true);
 			}
 		]]></add>
diff --git a/src/examples/userobject.html b/src/examples/userobject.html
index 4cc4a9552..aead40eb1 100644
--- a/src/examples/userobject.html
+++ b/src/examples/userobject.html
@@ -33,7 +33,7 @@
 			{
 				// Note that these XML nodes will be enclosing the
 				// mxCell nodes for the model cells in the output
-				var doc = mxUtils.createXmlDocument();
+				let doc = mxUtils.createXmlDocument();
 
 				var person1 = doc.createElement('Person');
 				person1.setAttribute('firstName', 'Daffy');
@@ -43,11 +43,11 @@
 				person2.setAttribute('firstName', 'Bugs');
 				person2.setAttribute('lastName', 'Bunny');
 
-				var relation = doc.createElement('Knows');
+				let relation = doc.createElement('Knows');
 				relation.setAttribute('since', '1985');
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Optional disabling of sizing
 				graph.setCellsResizable(false);
@@ -74,8 +74,8 @@
 					{
 						if (cell.value.nodeName.toLowerCase() == 'person')
 						{
-							var firstName = cell.getAttribute('firstName', '');
-							var lastName = cell.getAttribute('lastName', '');
+							let firstName = cell.getAttribute('firstName', '');
+							let lastName = cell.getAttribute('lastName', '');
 
 							if (lastName != null && lastName.length > 0)
 							{
@@ -96,21 +96,21 @@
 				};
 
 				// Overrides method to store a cell label in the model
-				var cellLabelChanged = graph.cellLabelChanged;
+				let cellLabelChanged = graph.cellLabelChanged;
 				graph.cellLabelChanged = function(cell, newValue, autoSize)
 				{
 					if (mxUtils.isNode(cell.value) &&
 						cell.value.nodeName.toLowerCase() == 'person')
 					{
-						var pos = newValue.indexOf(' ');
+						let pos = newValue.indexOf(' ');
 
-						var firstName = (pos > 0) ? newValue.substring(0,
+						let firstName = (pos > 0) ? newValue.substring(0,
 								pos) : newValue;
-						var lastName = (pos > 0) ? newValue.substring(
+						let lastName = (pos > 0) ? newValue.substring(
 								pos + 1, newValue.length) : '';
 
 						// Clones the value for correct undo/redo
-						var elt = cell.value.cloneNode(true);
+						let elt = cell.value.cloneNode(true);
 
 						elt.setAttribute('firstName', firstName);
 						elt.setAttribute('lastName', lastName);
@@ -123,14 +123,14 @@
 				};
 
 				// Overrides method to create the editing value
-				var getEditingValue = graph.getEditingValue;
+				let getEditingValue = graph.getEditingValue;
 				graph.getEditingValue = function(cell)
 				{
 					if (mxUtils.isNode(cell.value) &&
 						cell.value.nodeName.toLowerCase() == 'person')
 					{
-						var firstName = cell.getAttribute('firstName', '');
-						var lastName = cell.getAttribute('lastName', '');
+						let firstName = cell.getAttribute('firstName', '');
+						let lastName = cell.getAttribute('lastName', '');
 
 						return firstName + ' ' + lastName;
 					}
@@ -139,14 +139,14 @@
 				// Adds a special tooltip for edges
 				graph.setTooltips(true);
 				
-				var getTooltipForCell = graph.getTooltipForCell;
+				let getTooltipForCell = graph.getTooltipForCell;
 				graph.getTooltipForCell = function(cell)
 				{
 					// Adds some relation details for edges
 					if (graph.getModel().isEdge(cell))
 					{
-						var src = this.getLabel(this.getModel().getTerminal(cell, true));
-						var trg = this.getLabel(this.getModel().getTerminal(cell, false));
+						let src = this.getLabel(this.getModel().getTerminal(cell, true));
+						let trg = this.getLabel(this.getModel().getTerminal(cell, false));
 
 						return src + ' ' + cell.value.nodeName + ' ' +  trg;
 					}
@@ -160,14 +160,14 @@
 				// Adds an option to view the XML of the graph
 				document.body.appendChild(mxUtils.button('View XML', function()
 				{
-					var encoder = new mxCodec();
-					var node = encoder.encode(graph.getModel());
+					let encoder = new mxCodec();
+					let node = encoder.encode(graph.getModel());
 					mxUtils.popup(mxUtils.getPrettyXml(node), true);
 				}));
 
 				// Changes the style for match the markup
 				// Creates the default style for vertices
-				var style = graph.getStylesheet().getDefaultVertexStyle();
+				let style = graph.getStylesheet().getDefaultVertexStyle();
 				style[mxConstants.STYLE_STROKECOLOR] = 'gray';
 				style[mxConstants.STYLE_ROUNDED] = true;
 				style[mxConstants.STYLE_SHADOW] = true;
@@ -188,7 +188,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -219,7 +219,7 @@
 			 */
 			function selectionChanged(graph)
 			{
-				var div = document.getElementById('properties');
+				let div = document.getElementById('properties');
 
 				// Forces focusout in IE
 				graph.container.focus();
@@ -228,7 +228,7 @@
 				div.innerHTML = '';
 
 				// Gets the selection cell
-				var cell = graph.getSelectionCell();
+				let cell = graph.getSelectionCell();
 
 				if (cell == null)
 				{
@@ -237,17 +237,17 @@
 				else
 				{
 					// Writes the title
-					var center = document.createElement('center');
+					let center = document.createElement('center');
 					mxUtils.writeln(center, cell.value.nodeName + ' (' + cell.id + ')');
 					div.appendChild(center);
 					mxUtils.br(div);
 
 					// Creates the form from the attributes of the user object
-					var form = new mxForm();
+					let form = new mxForm();
 	
-					var attrs = cell.value.attributes;
+					let attrs = cell.value.attributes;
 					
-					for (var i = 0; i < attrs.length; i++)
+					for (let i = 0; i < attrs.length; i++)
 					{
 						createTextField(graph, form, cell, attrs[i]);
 					}
@@ -262,12 +262,12 @@
 			 */
 			function createTextField(graph, form, cell, attribute)
 			{
-				var input = form.addText(attribute.nodeName + ':', attribute.nodeValue);
+				let input = form.addText(attribute.nodeName + ':', attribute.nodeValue);
 
-				var applyHandler = function()
+				let applyHandler = function()
 				{
-					var newValue = input.value || '';
-					var oldValue = cell.getAttribute(attribute.nodeName, '');
+					let newValue = input.value || '';
+					let oldValue = cell.getAttribute(attribute.nodeName, '');
 
 					if (newValue != oldValue)
 					{
@@ -275,7 +275,7 @@
                         
                         try
                         {
-                        	var edit = new mxCellAttributeChange(
+                        	let edit = new mxCellAttributeChange(
  		                           cell, attribute.nodeName,
  		                           newValue);
                            	graph.getModel().execute(edit);
diff --git a/src/examples/validation.html b/src/examples/validation.html
index 3be3a899a..72719cef8 100644
--- a/src/examples/validation.html
+++ b/src/examples/validation.html
@@ -31,13 +31,13 @@
 			}
 			else
 			{
-				var xmlDocument = mxUtils.createXmlDocument();
-				var sourceNode = xmlDocument.createElement('Source');
-				var targetNode = xmlDocument.createElement('Target');
-				var subtargetNode = xmlDocument.createElement('Subtarget');
+				let xmlDocument = mxUtils.createXmlDocument();
+				let sourceNode = xmlDocument.createElement('Source');
+				let targetNode = xmlDocument.createElement('Target');
+				let subtargetNode = xmlDocument.createElement('Subtarget');
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				graph.setConnectable(true);
 				graph.setTooltips(true);
 				graph.setAllowDanglingEdges(false);
@@ -65,7 +65,7 @@
 				new mxRubberband(graph);
 
 				// Removes cells when [DELETE] is pressed
-				var keyHandler = new mxKeyHandler(graph);
+				let keyHandler = new mxKeyHandler(graph);
 				keyHandler.bindKey(46, function(evt)
 				{
 					if (graph.isEnabled())
@@ -76,7 +76,7 @@
 
 				// Installs automatic validation (use editor.validation = true
 				// if you are using an mxEditor instance)
-				var listener = function(sender, evt)
+				let listener = function(sender, evt)
 				{
 					graph.validateGraph();
 				};
@@ -85,7 +85,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/examples/visibility.html b/src/examples/visibility.html
index b41aefd16..610997c96 100644
--- a/src/examples/visibility.html
+++ b/src/examples/visibility.html
@@ -32,23 +32,23 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 
 				// Enables rubberband selection
 				new mxRubberband(graph);
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 				
-				var showOne = true;
-				var showTwo = true;
-				var showThree = true;
+				let showOne = true;
+				let showTwo = true;
+				let showThree = true;
 				
 				// Overridden to implement dynamic conditions
 				graph.isCellVisible = function(cell)
 				{
-					var result = mxGraph.prototype.isCellVisible.apply(this, arguments);
+					let result = mxGraph.prototype.isCellVisible.apply(this, arguments);
 					
 					if (result && cell.value != null)
 					{
@@ -99,7 +99,7 @@
 				}));
 				
 				// Explicit remove/add
-				var removed = null;
+				let removed = null;
 				
 				document.body.appendChild(mxUtils.button('Add/remove cell', function()
 				{
diff --git a/src/examples/webpack/src/anchors.js b/src/examples/webpack/src/anchors.js
index 4cf8ba6ae..09fa8fef8 100644
--- a/src/examples/webpack/src/anchors.js
+++ b/src/examples/webpack/src/anchors.js
@@ -1,4 +1,4 @@
-var mxgraph = require("../../../dist/build")({
+let mxgraph = require("../../../dist/build")({
       mxImageBasePath: "../../src/images",
       mxBasePath: "../../src"
     }),
@@ -59,13 +59,13 @@ window.onload = () => {
     mxEvent.disableContextMenu(container);
 
     // Creates the graph inside the given container
-    var graph = new mxGraph(container);
+    let graph = new mxGraph(container);
     graph.setConnectable(true);
 
     // Enables connect preview for the default edge style
     graph.connectionHandler.createEdgeState = function(me)
     {
-      var edge = graph.createEdge(null, null, null, null, null);
+      let edge = graph.createEdge(null, null, null, null, null);
 
       return new mxCellState(this.graph.view, edge, this.graph.getCellStyle(edge));
     };
@@ -78,7 +78,7 @@ window.onload = () => {
 
     // Gets the default parent for inserting new cells. This
     // is normally the first child of the root (ie. layer 0).
-    var parent = graph.getDefaultParent();
+    let parent = graph.getDefaultParent();
 
     // Adds cells to the model in a single step
     graph.getModel().beginUpdate();
diff --git a/src/examples/windows.html b/src/examples/windows.html
index 2cee11b5a..fba2bc8c3 100644
--- a/src/examples/windows.html
+++ b/src/examples/windows.html
@@ -34,22 +34,22 @@
 			{
 				// Note that we're using the container scrollbars for the graph so that the
 				// container extends to the parent div inside the window
-				var wnd = new mxWindow('Scrollable, resizable, given height', container, 50, 50, 220, 224, true, true);
+				let wnd = new mxWindow('Scrollable, resizable, given height', container, 50, 50, 220, 224, true, true);
 				
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Adds rubberband selection and keystrokes
 				graph.setTooltips(true);
 				graph.setPanning(true);
-				var rubberband = new mxRubberband(graph);
+				let rubberband = new mxRubberband(graph);
 				new mxKeyHandler(graph);
 				
 				mxEvent.disableContextMenu(container);
 
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 								
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
@@ -69,8 +69,8 @@
 				wnd.setResizable(true);
 				wnd.setVisible(true);
 				
-				var lorem = 'Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat. Quis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ';
-				var content = document.createElement('div');
+				let lorem = 'Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat. Quis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ';
+				let content = document.createElement('div');
 				mxUtils.write(content, lorem + lorem + lorem);
 				
 				wnd = new mxWindow('Scrollable, resizable, auto height', content, 300, 50, 200, null, true, true);
diff --git a/src/examples/wires.html b/src/examples/wires.html
index 7fac29cba..7394e3f06 100644
--- a/src/examples/wires.html
+++ b/src/examples/wires.html
@@ -48,8 +48,8 @@ for storing references to ports.)
 		mxConnectionHandler.prototype.waypointsEnabled = true;
 		mxGraph.prototype.resetEdgesOnConnect = false;
 		mxConstants.SHADOWCOLOR = '#C0C0C0';
-		var joinNodeSize = 7;
-		var strokeWidth = 2;
+		let joinNodeSize = 7;
+		let strokeWidth = 2;
 		
 		// Replaces the port image
 		mxConstraintHandler.prototype.pointImage = new mxImage('images/dot.gif', 10, 10);
@@ -68,7 +68,7 @@ for storing references to ports.)
 		
 		function main(container)
 		{
-			var graph = new mxGraph(container);
+			let graph = new mxGraph(container);
 			graph.view.scale = 1;
 			graph.setPanning(true);
 			graph.setConnectable(true);
@@ -95,7 +95,7 @@ for storing references to ports.)
 			// incoming/outgoing direction.
 			graph.getAllConnectionConstraints = function(terminal)
 			{
-			   var geo = (terminal != null) ? this.getCellGeometry(terminal.cell) : null;
+			   let geo = (terminal != null) ? this.getCellGeometry(terminal.cell) : null;
 
 			   if ((geo != null ? !geo.relative : false) &&
 				   this.getModel().isVertex(terminal.cell) &&
@@ -117,7 +117,7 @@ for storing references to ports.)
 				}
 				else
 				{
-					var geo = (cell != null) ? this.graph.getCellGeometry(cell) : null;
+					let geo = (cell != null) ? this.graph.getCellGeometry(cell) : null;
 					
 					return (geo != null) ? geo.relative : false;
 				}
@@ -130,21 +130,21 @@ for storing references to ports.)
 			// Adds a special tooltip for edges
 			graph.setTooltips(true);
 			
-			var getTooltipForCell = graph.getTooltipForCell;
+			let getTooltipForCell = graph.getTooltipForCell;
 			graph.getTooltipForCell = function(cell)
 			{
-				var tip = '';
+				let tip = '';
 				
 				if (cell != null)
 				{
-					var src = this.getModel().getTerminal(cell, true);
+					let src = this.getModel().getTerminal(cell, true);
 					
 					if (src != null)
 					{
 						tip += this.getTooltipForCell(src) + ' ';
 					}
 					
-					var parent = this.getModel().getParent(cell);
+					let parent = this.getModel().getParent(cell);
 					
 					if (this.getModel().isVertex(parent))
 					{
@@ -153,7 +153,7 @@ for storing references to ports.)
 	
 					tip += getTooltipForCell.apply(this, arguments);
 					
-					var trg = this.getModel().getTerminal(cell, false);
+					let trg = this.getModel().getTerminal(cell, false);
 					
 					if (trg != null)
 					{
@@ -165,7 +165,7 @@ for storing references to ports.)
 			};
 
 			// Switch for black background and bright styles
-			var invert = false;
+			let invert = false;
 			
 			if (invert)
 			{
@@ -186,12 +186,12 @@ for storing references to ports.)
 				mxGraphHandler.prototype.previewColor = 'white';
 			}
 			
-			var labelBackground = (invert) ? '#000000' : '#FFFFFF';
-			var fontColor = (invert) ? '#FFFFFF' : '#000000';
-			var strokeColor = (invert) ? '#C0C0C0' : '#000000';
-			var fillColor = (invert) ? 'none' : '#FFFFFF';
+			let labelBackground = (invert) ? '#000000' : '#FFFFFF';
+			let fontColor = (invert) ? '#FFFFFF' : '#000000';
+			let strokeColor = (invert) ? '#C0C0C0' : '#000000';
+			let fillColor = (invert) ? 'none' : '#FFFFFF';
 			
-			var style = graph.getStylesheet().getDefaultEdgeStyle();
+			let style = graph.getStylesheet().getDefaultEdgeStyle();
 			delete style['endArrow'];
 			style['strokeColor'] = strokeColor;
 			style['labelBackgroundColor'] = labelBackground;
@@ -219,7 +219,7 @@ for storing references to ports.)
 			style['rounded'] = '1';
 			style['strokeWidth'] = strokeWidth;
 
-			var parent = graph.getDefaultParent();
+			let parent = graph.getDefaultParent();
 			
 			graph.getModel().beginUpdate();
 			try
@@ -356,8 +356,8 @@ for storing references to ports.)
 			}));
 			
 			// Undo/redo
-			var undoManager = new mxUndoManager();
-			var listener = function(sender, evt)
+			let undoManager = new mxUndoManager();
+			let listener = function(sender, evt)
 			{
 				undoManager.undoableEditHappened(evt.getProperty('edit'));
 			};
@@ -381,14 +381,14 @@ for storing references to ports.)
 			}));
 			
 			// Wire-mode
-			var checkbox = document.createElement('input');
+			let checkbox = document.createElement('input');
 			checkbox.setAttribute('type', 'checkbox');
 			
 			document.body.appendChild(checkbox);
 			mxUtils.write(document.body, 'Wire Mode');
 			
 			// Starts connections on the background in wire-mode
-			var connectionHandlerIsStartEvent = graph.connectionHandler.isStartEvent;
+			let connectionHandlerIsStartEvent = graph.connectionHandler.isStartEvent;
 			graph.connectionHandler.isStartEvent = function(me)
 			{
 				return checkbox.checked || connectionHandlerIsStartEvent.apply(this, arguments);
@@ -396,14 +396,14 @@ for storing references to ports.)
 			
 			// Avoids any connections for gestures within tolerance except when in wire-mode
 			// or when over a port
-			var connectionHandlerMouseUp = graph.connectionHandler.mouseUp;
+			let connectionHandlerMouseUp = graph.connectionHandler.mouseUp;
 			graph.connectionHandler.mouseUp = function(sender, me)
 			{
 				if (this.first != null && this.previous != null)
 				{
-					var point = mxUtils.convertPoint(this.graph.container, me.getX(), me.getY());
-					var dx = Math.abs(point.x - this.first.x);
-					var dy = Math.abs(point.y - this.first.y);
+					let point = mxUtils.convertPoint(this.graph.container, me.getX(), me.getY());
+					let dx = Math.abs(point.x - this.first.x);
+					let dy = Math.abs(point.y - this.first.y);
 
 					if (dx < this.graph.tolerance && dy < this.graph.tolerance)
 					{
@@ -453,7 +453,7 @@ for storing references to ports.)
 		// Computes the position of edge to edge connection points.
 		mxGraphView.prototype.updateFixedTerminalPoint = function(edge, terminal, source, constraint)
 		{
-			var pt = null;
+			let pt = null;
 			
 			if (constraint != null)
 			{
@@ -471,10 +471,10 @@ for storing references to ports.)
 			
 			if (pt == null)
 			{
-				var s = this.scale;
-				var tr = this.translate;
-				var orig = edge.origin;
-				var geo = this.graph.getCellGeometry(edge.cell);
+				let s = this.scale;
+				let tr = this.translate;
+				let orig = edge.origin;
+				let geo = this.graph.getCellGeometry(edge.cell);
 				pt = geo.getTerminalPoint(source);
 
 				// Computes edge-to-edge connection point
@@ -486,16 +486,16 @@ for storing references to ports.)
 					// Finds nearest segment on edge and computes intersection
 					if (terminal != null && terminal.absolutePoints != null)
 					{
-						var seg = mxUtils.findNearestSegment(terminal, pt.x, pt.y);
+						let seg = mxUtils.findNearestSegment(terminal, pt.x, pt.y);
 
 						// Finds orientation of the segment
 						var p0 = terminal.absolutePoints[seg];
-						var pe = terminal.absolutePoints[seg + 1];
-						var horizontal = (p0.x - pe.x == 0);
+						let pe = terminal.absolutePoints[seg + 1];
+						let horizontal = (p0.x - pe.x == 0);
 						
 						// Stores the segment in the edge state
-						var key = (source) ? 'sourceConstraint' : 'targetConstraint';
-						var value = (horizontal) ? 'horizontal' : 'vertical';
+						let key = (source) ? 'sourceConstraint' : 'targetConstraint';
+						let value = (horizontal) ? 'horizontal' : 'vertical';
 						edge.style[key] = value;
 						
 						// Keeps the coordinate within the segment bounds
@@ -523,8 +523,8 @@ for storing references to ports.)
 				// Snaps point to grid
 				/*if (pt != null)
 				{
-					var tr = this.graph.view.translate;
-					var s = this.graph.view.scale;
+					let tr = this.graph.view.translate;
+					let s = this.graph.view.scale;
 					
 					pt.x = (this.graph.snap(pt.x / s - tr.x) + tr.x) * s;
 					pt.y = (this.graph.snap(pt.y / s - tr.y) + tr.y) * s;
@@ -541,7 +541,7 @@ for storing references to ports.)
 		// Sets source terminal point for edge-to-edge connections.
 		mxConnectionHandler.prototype.createEdgeState = function(me)
 		{
-			var edge = this.graph.createEdge();
+			let edge = this.graph.createEdge();
 			
 			if (this.sourceConstraint != null && this.previous != null)
 			{
@@ -550,9 +550,9 @@ for storing references to ports.)
 			}
 			else if (this.graph.model.isEdge(me.getCell()))
 			{
-				var scale = this.graph.view.scale;
-				var tr = this.graph.view.translate;
-				var pt = new mxPoint(this.graph.snap(me.getGraphX() / scale) - tr.x,
+				let scale = this.graph.view.scale;
+				let tr = this.graph.view.translate;
+				let pt = new mxPoint(this.graph.snap(me.getGraphX() / scale) - tr.x,
 						this.graph.snap(me.getGraphY() / scale) - tr.y);
 				edge.geometry.setTerminalPoint(pt, true);
 			}
@@ -579,9 +579,9 @@ for storing references to ports.)
 				if (this.shape != null && this.currentState != null &&
 					this.currentState.view.graph.model.isEdge(this.currentState.cell))
 				{
-					var scale = this.graph.view.scale;
-					var tr = this.graph.view.translate;
-					var pt = new mxPoint(this.graph.snap(me.getGraphX() / scale) - tr.x,
+					let scale = this.graph.view.scale;
+					let tr = this.graph.view.translate;
+					let pt = new mxPoint(this.graph.snap(me.getGraphX() / scale) - tr.x,
 							this.graph.snap(me.getGraphY() / scale) - tr.y);
 					this.edgeState.cell.geometry.setTerminalPoint(pt, false);
 				}
@@ -591,7 +591,7 @@ for storing references to ports.)
 		// Updates the terminal and control points in the cloned preview.
 		mxEdgeSegmentHandler.prototype.clonePreviewState = function(point, terminal)
 		{
-			var clone = mxEdgeHandler.prototype.clonePreviewState.apply(this, arguments);
+			let clone = mxEdgeHandler.prototype.clonePreviewState.apply(this, arguments);
 			clone.cell = clone.cell.clone();
 			
 			if (this.isSource || this.isTarget)
@@ -613,23 +613,23 @@ for storing references to ports.)
 			return clone;
 		};
 		
-		var mxEdgeHandlerConnect = mxEdgeHandler.prototype.connect;
+		let mxEdgeHandlerConnect = mxEdgeHandler.prototype.connect;
 		mxEdgeHandler.prototype.connect = function(edge, terminal, isSource, isClone, me)
 		{
-			var result = null;
-			var model = this.graph.getModel();
-			var parent = model.getParent(edge);
+			let result = null;
+			let model = this.graph.getModel();
+			let parent = model.getParent(edge);
 			
 			model.beginUpdate();
 			try
 			{
 				result = mxEdgeHandlerConnect.apply(this, arguments);
-				var geo = model.getGeometry(result);
+				let geo = model.getGeometry(result);
 				
 				if (geo != null)
 				{
 					geo = geo.clone();
-					var pt = null;
+					let pt = null;
 					
 					if (model.isEdge(terminal))
 					{
@@ -637,7 +637,7 @@ for storing references to ports.)
 						pt.x = pt.x / this.graph.view.scale - this.graph.view.translate.x;
 						pt.y = pt.y / this.graph.view.scale - this.graph.view.translate.y;
 			
-						var pstate = this.graph.getView().getState(
+						let pstate = this.graph.getView().getState(
 								this.graph.getModel().getParent(edge));
 								
 						if (pstate != null)
@@ -669,7 +669,7 @@ for storing references to ports.)
 		mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker;
 		mxConnectionHandler.prototype.createMarker = function()
 		{
-			var marker = mxConnectionHandlerCreateMarker.apply(this, arguments);
+			let marker = mxConnectionHandlerCreateMarker.apply(this, arguments);
 			
 			// Uses complete area of cell for new connections (no hotspot)
 			marker.intersects = function(state, evt)
@@ -722,7 +722,7 @@ for storing references to ports.)
 		mxEdgeHandlerCreateMarker = mxEdgeHandler.prototype.createMarker;
 		mxEdgeHandler.prototype.createMarker = function()
 		{
-			var marker = mxEdgeHandlerCreateMarker.apply(this, arguments);
+			let marker = mxEdgeHandlerCreateMarker.apply(this, arguments);
 			
 			// Adds in-place highlighting when reconnecting existing edges
 			marker.highlight.highlight = this.graph.connectionHandler.marker.highlight.highlight;
@@ -737,7 +737,7 @@ for storing references to ports.)
 		mxGraphGetCellStyle = mxGraph.prototype.getCellStyle;
 		mxGraph.prototype.getCellStyle = function(cell)
 		{
-			var style = mxGraphGetCellStyle.apply(this, arguments);
+			let style = mxGraphGetCellStyle.apply(this, arguments);
 			
 			if (style != null && this.model.isEdge(cell))
 			{
@@ -767,7 +767,7 @@ for storing references to ports.)
 
 		ResistorShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
 		{
-			var dx = w / 16;
+			let dx = w / 16;
 
 			if (isForeground)
 			{
@@ -795,9 +795,9 @@ for storing references to ports.)
 	mxEdgeStyle.WireConnector = function(state, source, target, hints, result)
 	{
 		// Creates array of all way- and terminalpoints
-		var pts = state.absolutePoints;
-		var horizontal = true;
-		var hint = null;
+		let pts = state.absolutePoints;
+		let horizontal = true;
+		let hint = null;
 		
 		// Gets the initial connection from the source terminal or edge
 		if (source != null && state.view.graph.model.isEdge(source.cell))
@@ -809,7 +809,7 @@ for storing references to ports.)
 			horizontal = source.style['portConstraint'] != 'vertical';
 			
 			// Checks the direction of the shape and rotates
-			var direction = source.style[mxConstants.STYLE_DIRECTION];
+			let direction = source.style[mxConstants.STYLE_DIRECTION];
 			
 			if (direction == 'north' || direction == 'south')
 			{
@@ -819,7 +819,7 @@ for storing references to ports.)
 		
 		// Adds the first point
 		// TODO: Should move along connected segment
-		var pt = pts[0];
+		let pt = pts[0];
 		
 		if (pt == null && source != null)
 		{
@@ -830,7 +830,7 @@ for storing references to ports.)
 			pt = pt.clone();
 		}
 		
-		var first = pt;
+		let first = pt;
 
 		// Adds the waypoints
 		if (hints != null && hints.length > 0)
@@ -851,7 +851,7 @@ for storing references to ports.)
 				//horizontal = !horizontal;
 			}*/
 			
-			for (var i = 0; i < hints.length; i++)
+			for (let i = 0; i < hints.length; i++)
 			{
 				horizontal = !horizontal;
 				hint = state.view.transformControlPoint(state, hints[i]);
@@ -904,13 +904,13 @@ for storing references to ports.)
 	mxGraphCreateHandler = mxGraph.prototype.createHandler;
 	mxGraph.prototype.createHandler = function(state)
 	{
-		var result = null;
+		let result = null;
 		
 		if (state != null)
 		{
 			if (this.model.isEdge(state.cell))
 			{
-				var style = this.view.getEdgeStyle(state);
+				let style = this.view.getEdgeStyle(state);
 				
 				if (style == mxEdgeStyle.WireConnector)
 				{
diff --git a/src/examples/wrapping.html b/src/examples/wrapping.html
index 34e677950..17fd9d023 100644
--- a/src/examples/wrapping.html
+++ b/src/examples/wrapping.html
@@ -33,7 +33,7 @@
 			else
 			{
 				// Creates the graph inside the given container
-				var graph = new mxGraph(container);
+				let graph = new mxGraph(container);
 				
 				// Enables HTML labels as wrapping is only available for those
 				graph.setHtmlLabels(true);
@@ -46,7 +46,7 @@
 				
 				// Gets the default parent for inserting new cells. This
 				// is normally the first child of the root (ie. layer 0).
-				var parent = graph.getDefaultParent();
+				let parent = graph.getDefaultParent();
 
 				// Adds cells to the model in a single step
 				graph.getModel().beginUpdate();
diff --git a/src/js/editor/mxDefaultKeyHandler.js b/src/js/editor/mxDefaultKeyHandler.js
index ac13c30a1..420f7415a 100644
--- a/src/js/editor/mxDefaultKeyHandler.js
+++ b/src/js/editor/mxDefaultKeyHandler.js
@@ -4,8 +4,9 @@
  * Updated to ES9 syntax by David Morrissey 2021
  */
 
-import mxKeyHandler from "../handler/mxKeyHandler";
+import mxEvent from "../util/mxEvent";
 import mxEventObject from "../util/mxEventObject";
+import mxKeyHandler from "../handler/mxKeyHandler";
 
 class mxDefaultKeyHandler {
   /**
diff --git a/src/js/editor/mxEditor.js b/src/js/editor/mxEditor.js
index ce026727a..aa811483c 100644
--- a/src/js/editor/mxEditor.js
+++ b/src/js/editor/mxEditor.js
@@ -173,8 +173,8 @@ class mxEditor extends mxEventSource {
    * (code)
    * editor.graph.addListener(mxEvent.CLICK, (sender, evt)=>
    * {
-   *   var e = evt.getProperty('event');
-   *   var cell = evt.getProperty('cell');
+   *   let e = evt.getProperty('event');
+   *   let cell = evt.getProperty('cell');
    *
    *   if (cell != null && !e.isConsumed())
    *   {
@@ -512,8 +512,8 @@ class mxEditor extends mxEventSource {
    * page, the following code is used:
    *
    * (code)
-   * var doc = mxUtils.parseXML(xmlString);
-   * var node = doc.documentElement;
+   * let doc = mxUtils.parseXML(xmlString);
+   * let node = doc.documentElement;
    * editor.readGraphModel(node);
    * (end)
    *
@@ -573,12 +573,12 @@ class mxEditor extends mxEventSource {
    * (code)
    * function html2js(text)
    * {
-   *   var entitySearch = /&#[0-9]+;/;
+   *   let entitySearch = /&#[0-9]+;/;
    *   var entity;
    *
    *   while (entity = entitySearch.exec(text))
    *   {
-   *     var charCode = entity[0].substring(2, entity[0].length -1);
+   *     let charCode = entity[0].substring(2, entity[0].length -1);
    *     text = text.substring(0, entity.index)
    *            + String.fromCharCode(charCode)
    *            + text.substring(entity.index + entity[0].length);
@@ -714,9 +714,9 @@ class mxEditor extends mxEventSource {
    * the following code can be used. This requires an reference to the editor.
    *
    * (code)
-   * var userObject = {};
-   * var parent = editor.graph.getDefaultParent();
-   * var model = editor.graph.model;
+   * let userObject = {};
+   * let parent = editor.graph.getDefaultParent();
+   * let model = editor.graph.model;
    * model.beginUpdate();
    * try
    * {
@@ -733,8 +733,8 @@ class mxEditor extends mxEventSource {
    * the add function instead of addVertex.
    *
    * (code)
-   * var template = editor.templates['task'];
-   * var clone = editor.graph.model.cloneCell(template);
+   * let template = editor.templates['task'];
+   * let clone = editor.graph.model.cloneCell(template);
    * (end)
    *
    * Resources:
@@ -799,7 +799,7 @@ class mxEditor extends mxEventSource {
    * (code)
    * editor.addListener(mxEvent.AFTER_ADD_VERTEX, (sender, evt)=>
    * {
-   *   var vertex = evt.getProperty('vertex');
+   *   let vertex = evt.getProperty('vertex');
    *
    *   if (editor.graph.isCellEditable(vertex))
    *   {
@@ -821,8 +821,8 @@ class mxEditor extends mxEventSource {
    * Example:
    *
    * (code)
-   * var config = mxUtils.load('config/diagrameditor.xml').getDocumentElement();
-   * var editor = new mxEditor(config);
+   * let config = mxUtils.load('config/diagrameditor.xml').getDocumentElement();
+   * let editor = new mxEditor(config);
    * (end)
    *
    * Parameters:
@@ -948,7 +948,7 @@ class mxEditor extends mxEventSource {
     });
 
     this.addAction('print', (editor) => {
-      var preview = new mxPrintPreview(editor.graph, 1);
+      let preview = new mxPrintPreview(editor.graph, 1);
       preview.open();
     });
 
@@ -957,13 +957,13 @@ class mxEditor extends mxEventSource {
     });
 
     this.addAction('exportImage', (editor) => {
-      var url = editor.getUrlImage();
+      let url = editor.getUrlImage();
 
       if (url == null || mxClient.IS_LOCAL) {
         editor.execute('show');
       } else {
-        var node = mxUtils.getViewXml(editor.graph, 1);
-        var xml = mxUtils.getXml(node, '\n');
+        let node = mxUtils.getViewXml(editor.graph, 1);
+        let xml = mxUtils.getXml(node, '\n');
 
         mxUtils.submit(url, editor.postParameterName + '=' +
             encodeURIComponent(xml), document, '_blank');
@@ -1135,7 +1135,7 @@ class mxEditor extends mxEventSource {
 
     this.addAction('collapseAll', (editor) => {
       if (editor.graph.isEnabled()) {
-        var cells = editor.graph.getChildVertices();
+        let cells = editor.graph.getChildVertices();
         editor.graph.foldCells(true, false, cells);
       }
     });
@@ -1148,7 +1148,7 @@ class mxEditor extends mxEventSource {
 
     this.addAction('expandAll', (editor) => {
       if (editor.graph.isEnabled()) {
-        var cells = editor.graph.getChildVertices();
+        let cells = editor.graph.getChildVertices();
         editor.graph.foldCells(false, false, cells);
       }
     });
@@ -1261,8 +1261,8 @@ class mxEditor extends mxEventSource {
     });
 
     this.addAction('zoom', (editor) => {
-      var current = editor.graph.getView().scale * 100;
-      var scale = parseFloat(mxUtils.prompt(
+      let current = editor.graph.getView().scale * 100;
+      let scale = parseFloat(mxUtils.prompt(
           mxResources.get(editor.askZoomResource) ||
           editor.askZoomResource,
           current)) / 100;
@@ -1309,7 +1309,7 @@ class mxEditor extends mxEventSource {
    * the XML node.
    *
    * (code)
-   * var node = mxUtils.load(url).getDocumentElement();
+   * let node = mxUtils.load(url).getDocumentElement();
    * (end)
    *
    * Parameters:
@@ -1320,7 +1320,7 @@ class mxEditor extends mxEventSource {
     if (node != null) {
       // Creates a decoder for the XML data
       // and uses it to configure the editor
-      var dec = new mxCodec(node.ownerDocument);
+      let dec = new mxCodec(node.ownerDocument);
       dec.decode(node, this);
 
       // Resets the counters, modified state and
@@ -1395,13 +1395,13 @@ class mxEditor extends mxEventSource {
    * (end)
    */
   execute = (actionname, cell, evt) => {
-    var action = this.actions[actionname];
+    let action = this.actions[actionname];
 
     if (action != null) {
       try {
         // Creates the array of arguments by replacing the actionname
         // with the editor instance in the args of this function
-        var args = arguments;
+        let args = arguments;
         args[0] = this;
 
         // Invokes the function on the editor using the args
@@ -1442,7 +1442,7 @@ class mxEditor extends mxEventSource {
    * container and is initialized from <setGraphContainer>.
    */
   createGraph = () => {
-    var graph = new mxGraph(null, null, this.graphRenderHint);
+    let graph = new mxGraph(null, null, this.graphRenderHint);
 
     // Enables rubberband, tooltips, panning
     graph.setTooltips(true);
@@ -1494,7 +1494,7 @@ class mxEditor extends mxEventSource {
    * Sets the graph's container using <mxGraph.init>.
    */
   createSwimlaneManager = (graph) => {
-    var swimlaneMgr = new mxSwimlaneManager(graph, false);
+    let swimlaneMgr = new mxSwimlaneManager(graph, false);
 
     swimlaneMgr.isHorizontal = mxUtils.bind(this, () => {
       return this.horizontalFlow;
@@ -1514,12 +1514,12 @@ class mxEditor extends mxEventSource {
    * is, the locally defined inter- and intraswimlane layouts.
    */
   createLayoutManager = (graph) => {
-    var layoutMgr = new mxLayoutManager(graph);
+    let layoutMgr = new mxLayoutManager(graph);
 
-    var self = this; // closure
+    let self = this; // closure
     layoutMgr.getLayout = (cell) => {
-      var layout = null;
-      var model = self.graph.getModel();
+      let layout = null;
+      let model = self.graph.getModel();
 
       if (model.getParent(cell) != null) {
         // Executes the swimlane layout if a child of
@@ -1586,7 +1586,7 @@ class mxEditor extends mxEventSource {
     // Installs a listener for double click events
     graph.addListener(mxEvent.DOUBLE_CLICK,
         mxUtils.bind(this, (sender, evt) => {
-          var cell = evt.getProperty('cell');
+          let cell = evt.getProperty('cell');
 
           if (cell != null &&
               graph.isEnabled() &&
@@ -1604,8 +1604,8 @@ class mxEditor extends mxEventSource {
    * Adds the <undoManager> to the graph model and the view.
    */
   installUndoHandler = (graph) => {
-    var listener = (sender, evt) => {
-      var edit = evt.getProperty('edit');
+    let listener = (sender, evt) => {
+      let edit = evt.getProperty('edit');
       this.undoManager.undoableEditHappened(edit);
     };
 
@@ -1613,8 +1613,8 @@ class mxEditor extends mxEventSource {
     graph.getView().addListener(mxEvent.UNDO, listener);
 
     // Keeps the selection state in sync
-    var undoHandler = (sender, evt) => {
-      var changes = evt.getProperty('edit').changes;
+    let undoHandler = (sender, evt) => {
+      let changes = evt.getProperty('edit').changes;
       graph.setSelectionCells(graph.getSelectionCellsForChanges(changes));
     };
 
@@ -1628,7 +1628,7 @@ class mxEditor extends mxEventSource {
    * Installs listeners for dispatching the <root> event.
    */
   installDrillHandler = (graph) => {
-    var listener = mxUtils.bind(this, (sender) => {
+    let listener = mxUtils.bind(this, (sender) => {
       this.fireEvent(new mxEventObject(mxEvent.ROOT));
     });
 
@@ -1644,7 +1644,7 @@ class mxEditor extends mxEventSource {
    * fires a <root> event.
    */
   installChangeHandler = (graph) => {
-    var listener = (sender, evt) => {
+    let listener = (sender, evt) => {
       // Updates the modified state
       this.setModified(true);
 
@@ -1655,10 +1655,10 @@ class mxEditor extends mxEventSource {
       }
 
       // Checks if the root has been changed
-      var changes = evt.getProperty('edit').changes;
+      let changes = evt.getProperty('edit').changes;
 
-      for (var i = 0; i < changes.length; i++) {
-        var change = changes[i];
+      for (let i = 0; i < changes.length; i++) {
+        let change = changes[i];
 
         if (change instanceof mxRootChange ||
             (change instanceof mxValueChange &&
@@ -1681,8 +1681,8 @@ class mxEditor extends mxEventSource {
    * one is defined.
    */
   installInsertHandler = (graph) => {
-    var self = this; // closure
-    var insertHandler =
+    let self = this; // closure
+    let insertHandler =
         {
           mouseDown: (sender, me) => {
             if (self.insertFunction != null &&
@@ -1723,8 +1723,8 @@ class mxEditor extends mxEventSource {
    * swimlanes in the diagram.
    */
   createDiagramLayout = () => {
-    var gs = this.graph.gridSize;
-    var layout = new mxStackLayout(this.graph, !this.horizontalFlow,
+    let gs = this.graph.gridSize;
+    let layout = new mxStackLayout(this.graph, !this.horizontalFlow,
         this.swimlaneSpacing, 2 * gs, 2 * gs);
 
     // Overrides isIgnored to only take into account swimlanes
@@ -1783,7 +1783,7 @@ class mxEditor extends mxEventSource {
       // Prints the last saved time in the status bar
       // when files are saved
       this.addListener(mxEvent.SAVE, mxUtils.bind(this, () => {
-        var tstamp = new Date().toLocaleString();
+        let tstamp = new Date().toLocaleString();
         this.setStatus((mxResources.get(this.lastSavedResource) ||
             this.lastSavedResource) + ': ' + tstamp);
       }));
@@ -1844,7 +1844,7 @@ class mxEditor extends mxEventSource {
    */
   treeLayout = (cell, horizontal) => {
     if (cell != null) {
-      var layout = new mxCompactTreeLayout(this.graph, horizontal);
+      let layout = new mxCompactTreeLayout(this.graph, horizontal);
       layout.execute(cell);
     }
   };
@@ -1856,9 +1856,9 @@ class mxEditor extends mxEventSource {
    * diagram.
    */
   getTitle = () => {
-    var title = '';
-    var graph = this.graph;
-    var cell = graph.getCurrentRoot();
+    let title = '';
+    let graph = this.graph;
+    let cell = graph.getCurrentRoot();
 
     while (cell != null &&
     graph.getModel().getParent(
@@ -1872,7 +1872,7 @@ class mxEditor extends mxEventSource {
       cell = graph.getModel().getParent(cell);
     }
 
-    var prefix = this.getRootTitle();
+    let prefix = this.getRootTitle();
 
     return prefix + title;
   };
@@ -1884,7 +1884,7 @@ class mxEditor extends mxEventSource {
    * <mxGraph.model>.
    */
   getRootTitle = () => {
-    var root = this.graph.getModel().getRoot();
+    let root = this.graph.getModel().getRoot();
     return this.graph.convertValueToString(root);
   };
 
@@ -1914,7 +1914,7 @@ class mxEditor extends mxEventSource {
    * in the group's content area.
    */
   groupCells = () => {
-    var border = (this.groupBorderSize != null) ?
+    let border = (this.groupBorderSize != null) ?
         this.groupBorderSize :
         this.graph.gridSize;
     return this.graph.groupCells(this.createGroup(), border);
@@ -1927,7 +1927,7 @@ class mxEditor extends mxEventSource {
    * as a new group cell in <group>.
    */
   createGroup = () => {
-    var model = this.graph.getModel();
+    let model = this.graph.getModel();
 
     return model.cloneCell(this.defaultGroup);
   };
@@ -1957,7 +1957,7 @@ class mxEditor extends mxEventSource {
    */
   open = (filename) => {
     if (filename != null) {
-      var xml = mxUtils.load(filename).getXml();
+      let xml = mxUtils.load(filename).getXml();
       this.readGraphModel(xml.documentElement);
       this.filename = filename;
 
@@ -1972,7 +1972,7 @@ class mxEditor extends mxEventSource {
    * the command history and modified state.
    */
   readGraphModel = (node) => {
-    var dec = new mxCodec(node.ownerDocument);
+    let dec = new mxCodec(node.ownerDocument);
     dec.decode(node, this.graph.getModel());
     this.resetHistory();
   };
@@ -2003,7 +2003,7 @@ class mxEditor extends mxEventSource {
 
     // Posts the data if the URL is not empty
     if (url != null && url.length > 0) {
-      var data = this.writeGraphModel(linefeed);
+      let data = this.writeGraphModel(linefeed);
       this.postDiagram(url, data);
 
       // Resets the modified flag
@@ -2030,8 +2030,8 @@ class mxEditor extends mxEventSource {
    * editor.addListener(mxEvent.POST, (sender, evt)=>
    * {
    *   // Process response (replace diagram)
-   *   var req = evt.getProperty('request');
-   *   var root = req.getDocumentElement();
+   *   let req = evt.getProperty('request');
+   *   let root = req.getDocumentElement();
    *   editor.graph.readGraphModel(root)
    * });
    * (end)
@@ -2057,8 +2057,8 @@ class mxEditor extends mxEventSource {
    * follows:
    *
    * (code)
-   * var enc = new mxCodec();
-   * var node = enc.encode(this.graph.getModel());
+   * let enc = new mxCodec();
+   * let node = enc.encode(this.graph.getModel());
    * return mxUtils.getXml(node, this.linefeed);
    * (end)
    *
@@ -2069,8 +2069,8 @@ class mxEditor extends mxEventSource {
    */
   writeGraphModel = (linefeed) => {
     linefeed = (linefeed != null) ? linefeed : this.linefeed;
-    var enc = new mxCodec();
-    var node = enc.encode(this.graph.getModel());
+    let enc = new mxCodec();
+    let node = enc.encode(this.graph.getModel());
 
     return mxUtils.getXml(node, linefeed);
   };
@@ -2106,7 +2106,7 @@ class mxEditor extends mxEventSource {
    * stylesheet and refreshes the graph.
    */
   swapStyles = (first, second) => {
-    var style = this.graph.getStylesheet().styles[second];
+    let style = this.graph.getStylesheet().styles[second];
     this.graph.getView().getStylesheet().putCellStyle(
         second, this.graph.getStylesheet().styles[first]);
     this.graph.getStylesheet().putCellStyle(first, style);
@@ -2139,9 +2139,9 @@ class mxEditor extends mxEventSource {
       // graph and computes the location of the dialog
       this.graph.stopEditing(true);
 
-      var offset = mxUtils.getOffset(this.graph.container);
-      var x = offset.x + 10;
-      var y = offset.y;
+      let offset = mxUtils.getOffset(this.graph.container);
+      let x = offset.x + 10;
+      let y = offset.y;
 
       // Avoids moving the dialog if it is alredy open
       if (this.properties != null && !this.movePropertiesDialog) {
@@ -2152,7 +2152,7 @@ class mxEditor extends mxEventSource {
           // Places the dialog near the cell for which it
       // displays the properties
       else {
-        var bounds = this.graph.getCellBounds(cell);
+        let bounds = this.graph.getCellBounds(cell);
 
         if (bounds != null) {
           x += bounds.x + Math.min(200, bounds.width);
@@ -2163,7 +2163,7 @@ class mxEditor extends mxEventSource {
       // Hides the existing properties dialog and creates a new one with the
       // contents created in the hook method
       this.hideProperties();
-      var node = this.createProperties(cell);
+      let node = this.createProperties(cell);
 
       if (node != null) {
         // Displays the contents in a window and stores a reference to the
@@ -2193,23 +2193,23 @@ class mxEditor extends mxEventSource {
    * node attributes in a form.
    */
   createProperties = (cell) => {
-    var model = this.graph.getModel();
-    var value = model.getValue(cell);
+    let model = this.graph.getModel();
+    let value = model.getValue(cell);
 
     if (mxUtils.isNode(value)) {
       // Creates a form for the user object inside
       // the cell
-      var form = new mxForm('properties');
+      let form = new mxForm('properties');
 
       // Adds a readonly field for the cell id
-      var id = form.addText('ID', cell.getId());
+      let id = form.addText('ID', cell.getId());
       id.setAttribute('readonly', 'true');
 
-      var geo = null;
-      var yField = null;
-      var xField = null;
-      var widthField = null;
-      var heightField = null;
+      let geo = null;
+      let yField = null;
+      let xField = null;
+      let widthField = null;
+      let heightField = null;
 
       // Adds fields for the location and size
       if (model.isVertex(cell)) {
@@ -2224,18 +2224,18 @@ class mxEditor extends mxEventSource {
       }
 
       // Adds a field for the cell style
-      var tmp = model.getStyle(cell);
-      var style = form.addText('Style', tmp || '');
+      let tmp = model.getStyle(cell);
+      let style = form.addText('Style', tmp || '');
 
       // Creates textareas for each attribute of the
       // user object within the cell
-      var attrs = value.attributes;
-      var texts = [];
+      let attrs = value.attributes;
+      let texts = [];
 
-      for (var i = 0; i < attrs.length; i++) {
+      for (let i = 0; i < attrs.length; i++) {
         // Creates a textarea with more lines for
         // the cell label
-        var val = attrs[i].value;
+        let val = attrs[i].value;
         texts[i] = form.addTextarea(attrs[i].nodeName, val,
             (attrs[i].nodeName == 'label') ? 4 : 2);
       }
@@ -2246,7 +2246,7 @@ class mxEditor extends mxEventSource {
 
       // Defines the function to be executed when the
       // OK button is pressed in the dialog
-      var okFunction = mxUtils.bind(this, () => {
+      let okFunction = mxUtils.bind(this, () => {
         // Hides the dialog
         this.hideProperties();
 
@@ -2276,8 +2276,8 @@ class mxEditor extends mxEventSource {
           // attribute and executes it using the
           // model, which will also make the change
           // part of the current transaction
-          for (var i = 0; i < attrs.length; i++) {
-            var edit = new mxCellAttributeChange(
+          for (let i = 0; i < attrs.length; i++) {
+            let edit = new mxCellAttributeChange(
                 cell, attrs[i].nodeName,
                 texts[i].value);
             model.execute(edit);
@@ -2297,7 +2297,7 @@ class mxEditor extends mxEventSource {
 
       // Defines the function to be executed when the
       // Cancel button is pressed in the dialog
-      var cancelFunction = () => {
+      let cancelFunction = () => {
         // Hides the dialog
         this.hideProperties();
       };
@@ -2332,7 +2332,7 @@ class mxEditor extends mxEventSource {
    * window, the following code can be used:
    *
    * (code)
-   * var oldShowTasks = showTasks;
+   * let oldShowTasks = showTasks;
    * showTasks = ()=>
    * {
    *   oldShowTasks.apply(this, arguments); // "supercall"
@@ -2346,11 +2346,11 @@ class mxEditor extends mxEventSource {
    */
   showTasks = () => {
     if (this.tasks == null) {
-      var div = document.createElement('div');
+      let div = document.createElement('div');
       div.style.padding = '4px';
       div.style.paddingLeft = '20px';
-      var w = document.body.clientWidth;
-      var wnd = new mxWindow(
+      let w = document.body.clientWidth;
+      let wnd = new mxWindow(
           mxResources.get(this.tasksResource) ||
           this.tasksResource,
           div, w - 220, this.tasksTop, 200);
@@ -2360,7 +2360,7 @@ class mxEditor extends mxEventSource {
       // Installs a function to update the contents
       // of the tasks window on every change of the
       // model, selection or root.
-      var funct = mxUtils.bind(this, (sender) => {
+      let funct = mxUtils.bind(this, (sender) => {
         mxEvent.release(div);
         div.innerHTML = '';
         this.createTasks(div);
@@ -2389,7 +2389,7 @@ class mxEditor extends mxEventSource {
    */
   refreshTasks = (div) => {
     if (this.tasks != null) {
-      var div = this.tasks.content;
+      let div = this.tasks.content;
       mxEvent.release(div);
       div.innerHTML = '';
       this.createTasks(div);
@@ -2419,17 +2419,17 @@ class mxEditor extends mxEventSource {
    */
   showHelp = (tasks) => {
     if (this.help == null) {
-      var frame = document.createElement('iframe');
+      let frame = document.createElement('iframe');
       frame.setAttribute('src', mxResources.get('urlHelp') || this.urlHelp);
       frame.setAttribute('height', '100%');
       frame.setAttribute('width', '100%');
       frame.setAttribute('frameBorder', '0');
       frame.style.backgroundColor = 'white';
 
-      var w = document.body.clientWidth;
-      var h = (document.body.clientHeight || document.documentElement.clientHeight);
+      let w = document.body.clientWidth;
+      let h = (document.body.clientHeight || document.documentElement.clientHeight);
 
-      var wnd = new mxWindow(mxResources.get(this.helpResource) || this.helpResource,
+      let wnd = new mxWindow(mxResources.get(this.helpResource) || this.helpResource,
           frame, (w - this.helpWidth) / 2, (h - this.helpHeight) / 3, this.helpWidth, this.helpHeight);
       wnd.setMaximizable(true);
       wnd.setClosable(true);
@@ -2443,8 +2443,8 @@ class mxEditor extends mxEventSource {
 
       // Workaround for ignored iframe height 100% in FF
       if (mxClient.IS_NS) {
-        var handler = (sender) => {
-          var h = wnd.div.offsetHeight;
+        let handler = (sender) => {
+          let h = wnd.div.offsetHeight;
           frame.setAttribute('height', (h - 26) + 'px');
         };
 
@@ -2467,10 +2467,10 @@ class mxEditor extends mxEventSource {
    * created using an <mxOutline>.
    */
   showOutline = () => {
-    var create = this.outline == null;
+    let create = this.outline == null;
 
     if (create) {
-      var div = document.createElement('div');
+      let div = document.createElement('div');
 
       div.style.overflow = 'hidden';
       div.style.position = 'relative';
@@ -2479,14 +2479,14 @@ class mxEditor extends mxEventSource {
       div.style.background = 'white';
       div.style.cursor = 'move';
 
-      var wnd = new mxWindow(
+      let wnd = new mxWindow(
           mxResources.get(this.outlineResource) ||
           this.outlineResource,
           div, 600, 480, 200, 200, false);
 
       // Creates the outline in the specified div
       // and links it to the existing graph
-      var outline = new mxOutline(this.graph, div);
+      let outline = new mxOutline(this.graph, div);
       wnd.setClosable(true);
       wnd.setResizable(true);
       wnd.destroyOnClose = false;
@@ -2550,22 +2550,22 @@ class mxEditor extends mxEventSource {
    */
   createEdge = (source, target) => {
     // Clones the defaultedge prototype
-    var e = null;
+    let e = null;
 
     if (this.defaultEdge != null) {
-      var model = this.graph.getModel();
+      let model = this.graph.getModel();
       e = model.cloneCell(this.defaultEdge);
     } else {
       e = new mxCell('');
       e.setEdge(true);
 
-      var geo = new mxGeometry();
+      let geo = new mxGeometry();
       geo.relative = true;
       e.setGeometry(geo);
     }
 
     // Overrides the edge style
-    var style = this.getEdgeStyle();
+    let style = this.getEdgeStyle();
 
     if (style != null) {
       e.setStyle(style);
@@ -2609,7 +2609,7 @@ class mxEditor extends mxEventSource {
    */
   cycleAttribute = (cell) => {
     if (this.cycleAttributeName != null) {
-      var value = this.consumeCycleAttribute(cell);
+      let value = this.consumeCycleAttribute(cell);
 
       if (value != null) {
         cell.setStyle(cell.getStyle() + ';' +
@@ -2625,17 +2625,17 @@ class mxEditor extends mxEventSource {
    * x and y coordinate and fires an <addVertex> event.
    */
   addVertex = (parent, vertex, x, y) => {
-    var model = this.graph.getModel();
+    let model = this.graph.getModel();
 
     while (parent != null && !this.graph.isValidDropTarget(parent)) {
       parent = model.getParent(parent);
     }
 
     parent = (parent != null) ? parent : this.graph.getSwimlaneAt(x, y);
-    var scale = this.graph.getView().scale;
+    let scale = this.graph.getView().scale;
 
-    var geo = model.getGeometry(vertex);
-    var pgeo = model.getGeometry(parent);
+    let geo = model.getGeometry(vertex);
+    let pgeo = model.getGeometry(parent);
 
     if (this.graph.isSwimlane(vertex) &&
         !this.graph.swimlaneNesting) {
@@ -2644,16 +2644,16 @@ class mxEditor extends mxEventSource {
       return null;
     } else if (parent != null && pgeo != null) {
       // Keeps vertex inside parent
-      var state = this.graph.getView().getState(parent);
+      let state = this.graph.getView().getState(parent);
 
       if (state != null) {
         x -= state.origin.x * scale;
         y -= state.origin.y * scale;
 
         if (this.graph.isConstrainedMoving) {
-          var width = geo.width;
-          var height = geo.height;
-          var tmp = state.x + state.width;
+          let width = geo.width;
+          let height = geo.height;
+          let tmp = state.x + state.width;
 
           if (x + width > tmp) {
             x -= x + width - tmp;
diff --git a/src/js/handler/mxCellHighlight.js b/src/js/handler/mxCellHighlight.js
index 80b395e76..739874046 100644
--- a/src/js/handler/mxCellHighlight.js
+++ b/src/js/handler/mxCellHighlight.js
@@ -49,7 +49,7 @@ class mxCellHighlight {
    * A helper class to highlight cells. Here is an example for a given cell.
    *
    * (code)
-   * var highlight = new mxCellHighlight(graph, '#ff0000', 2);
+   * let highlight = new mxCellHighlight(graph, '#ff0000', 2);
    * highlight.highlight(graph.view.getState(cell)));
    * (end)
    *
@@ -69,7 +69,7 @@ class mxCellHighlight {
       this.repaintHandler = () => {
         // Updates reference to state
         if (this.state != null) {
-          var tmp = this.graph.view.getState(this.state.cell);
+          let tmp = this.graph.view.getState(this.state.cell);
 
           if (tmp == null) {
             this.hide();
@@ -132,7 +132,7 @@ class mxCellHighlight {
    * Creates and returns the highlight shape for the given state.
    */
   createShape = () => {
-    var shape = this.graph.cellRenderer.createShape(this.state);
+    let shape = this.graph.cellRenderer.createShape(this.state);
 
     shape.svgStrokeTolerance = this.graph.tolerance;
     shape.points = this.state.absolutePoints;
@@ -229,10 +229,10 @@ class mxCellHighlight {
    * Returns true if this highlight is at the given position.
    */
   isHighlightAt = (x, y) => {
-    var hit = false;
+    let hit = false;
 
     if (this.shape != null && document.elementFromPoint != null) {
-      var elt = document.elementFromPoint(x, y);
+      let elt = document.elementFromPoint(x, y);
 
       while (elt != null) {
         if (elt == this.shape.node) {
diff --git a/src/js/handler/mxCellMarker.js b/src/js/handler/mxCellMarker.js
index 68354187c..817a7ad62 100644
--- a/src/js/handler/mxCellMarker.js
+++ b/src/js/handler/mxCellMarker.js
@@ -80,7 +80,7 @@ class mxCellMarker extends mxEventSource {
    * for highlighting all cells, the following code is used:
    *
    * (code)
-   * var marker = new mxCellMarker(graph);
+   * let marker = new mxCellMarker(graph);
    * graph.addMouseListener({
    *   mouseDown: ()=> {},
    *   mouseMove: (sender, me)=>
@@ -236,7 +236,7 @@ class mxCellMarker extends mxEventSource {
    * marker color and valid state.
    */
   process = (me) => {
-    var state = null;
+    let state = null;
 
     if (this.isEnabled()) {
       state = this.getState(me);
@@ -252,7 +252,7 @@ class mxCellMarker extends mxEventSource {
    * Sets and marks the current valid state.
    */
   setCurrentState = (state, me, color) => {
-    var isValid = (state != null) ? this.isValidState(state) : false;
+    let isValid = (state != null) ? this.isValidState(state) : false;
     color = (color != null) ? color : this.getMarkerColor(me.getEvent(), state, isValid);
 
     if (isValid) {
@@ -280,7 +280,7 @@ class mxCellMarker extends mxEventSource {
    * Marks the given cell using the given color, or <validColor> if no color is specified.
    */
   markCell = (cell, color) => {
-    var state = this.graph.getView().getState(cell);
+    let state = this.graph.getView().getState(cell);
 
     if (state != null) {
       this.currentColor = (color != null) ? color : this.validColor;
@@ -337,9 +337,9 @@ class mxCellMarker extends mxEventSource {
    * <mxCellState> for the given <mxMouseEvent>.
    */
   getState = (me) => {
-    var view = this.graph.getView();
-    var cell = this.getCell(me);
-    var state = this.getStateToMark(view.getState(cell));
+    let view = this.graph.getView();
+    let cell = this.getCell(me);
+    let state = this.getStateToMark(view.getState(cell));
 
     return (state != null && this.intersects(state, me)) ? state : null;
   };
diff --git a/src/js/handler/mxCellTracker.js b/src/js/handler/mxCellTracker.js
index 383a5ab61..a99020c47 100644
--- a/src/js/handler/mxCellTracker.js
+++ b/src/js/handler/mxCellTracker.js
@@ -26,7 +26,7 @@ class mxCellTracker extends mxCellMarker {
    *   mouseDown: (sender, me)=> { },
    *   mouseMove: (sender, me)=>
    *   {
-   *     var tmp = me.getCell();
+   *     let tmp = me.getCell();
    *
    *     if (tmp != this.cell)
    *     {
diff --git a/src/js/handler/mxConnectionHandler.js b/src/js/handler/mxConnectionHandler.js
index ec91034df..9c34b003c 100644
--- a/src/js/handler/mxConnectionHandler.js
+++ b/src/js/handler/mxConnectionHandler.js
@@ -332,13 +332,13 @@ class mxConnectionHandler extends mxEventSource {
    * (code)
    * graph.connectionHandler.addListener(mxEvent.CONNECT, (sender, evt)=>
    * {
-   *   var edge = evt.getProperty('cell');
-   *   var source = graph.getModel().getTerminal(edge, true);
-   *   var target = graph.getModel().getTerminal(edge, false);
+   *   let edge = evt.getProperty('cell');
+   *   let source = graph.getModel().getTerminal(edge, true);
+   *   let target = graph.getModel().getTerminal(edge, false);
    *
-   *   var style = graph.getCellStyle(edge);
-   *   var sourcePortId = style[mxConstants.STYLE_SOURCE_PORT];
-   *   var targetPortId = style[mxConstants.STYLE_TARGET_PORT];
+   *   let style = graph.getCellStyle(edge);
+   *   let sourcePortId = style[mxConstants.STYLE_SOURCE_PORT];
+   *   let targetPortId = style[mxConstants.STYLE_TARGET_PORT];
    *
    *   mxLog.show();
    *   mxLog.debug('connect', edge, source.id, target.id, sourcePortId, targetPortId);
@@ -453,7 +453,7 @@ class mxConnectionHandler extends mxEventSource {
    */
   createShape = () => {
     // Creates the edge preview
-    var shape = (this.livePreview && this.edgeState != null) ?
+    let shape = (this.livePreview && this.edgeState != null) ?
         this.graph.cellRenderer.createShape(this.edgeState) :
         new mxPolyline([], mxConstants.INVALID_COLOR);
     shape.dialect = (this.graph.dialect != mxConstants.DIALECT_SVG) ?
@@ -524,13 +524,13 @@ class mxConnectionHandler extends mxEventSource {
    * Creates and returns the <mxCellMarker> used in <marker>.
    */
   createMarker = () => {
-    var marker = new mxCellMarker(this.graph);
+    let marker = new mxCellMarker(this.graph);
     marker.hotspotEnabled = true;
 
     // Overrides to return cell at location only if valid (so that
     // there is no highlight for invalid cells)
     marker.getCell = mxUtils.bind(this, (me) => {
-      var cell = getCell.apply(marker, arguments);
+      let cell = getCell.apply(marker, arguments);
       this.error = null;
 
       // Checks for cell at preview point (with grid)
@@ -540,7 +540,7 @@ class mxConnectionHandler extends mxEventSource {
 
       // Uses connectable parent vertex if one exists
       if (cell != null && !this.graph.isCellConnectable(cell)) {
-        var parent = this.graph.getModel().getParent(cell);
+        let parent = this.graph.getModel().getParent(cell);
 
         if (this.graph.getModel().isVertex(parent) && this.graph.isCellConnectable(parent)) {
           cell = parent;
@@ -727,18 +727,18 @@ class mxConnectionHandler extends mxEventSource {
    * state - <mxCellState> whose connect icons should be returned.
    */
   createIcons = (state) => {
-    var image = this.getConnectImage(state);
+    let image = this.getConnectImage(state);
 
     if (image != null && state != null) {
       this.iconState = state;
-      var icons = [];
+      let icons = [];
 
       // Cannot use HTML for the connect icons because the icon receives all
       // mouse move events in IE, must use VML and SVG instead even if the
       // connect-icon appears behind the selection border and the selection
       // border consumes the events before the icon gets a chance
-      var bounds = new mxRectangle(0, 0, image.width, image.height);
-      var icon = new mxImageShape(bounds, image.src, null, null, 0);
+      let bounds = new mxRectangle(0, 0, image.width, image.height);
+      let icon = new mxImageShape(bounds, image.src, null, null, 0);
       icon.preserveImageAspect = false;
 
       if (this.isMoveIconToFrontForState(state)) {
@@ -758,12 +758,12 @@ class mxConnectionHandler extends mxEventSource {
       icon.node.style.cursor = mxConstants.CURSOR_CONNECT;
 
       // Events transparency
-      var getState = () => {
+      let getState = () => {
         return (this.currentState != null) ? this.currentState : state;
       };
 
       // Updates the local icon before firing the mouse down event.
-      var mouseDown = (evt) => {
+      let mouseDown = (evt) => {
         if (!mxEvent.isConsumed(evt)) {
           this.icon = icon;
           this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN,
@@ -793,7 +793,7 @@ class mxConnectionHandler extends mxEventSource {
    */
   redrawIcons = (icons, state) => {
     if (icons != null && icons[0] != null && state != null) {
-      var pos = this.getIconPosition(icons[0], state);
+      let pos = this.getIconPosition(icons[0], state);
       icons[0].bounds.x = pos.x;
       icons[0].bounds.y = pos.y;
       icons[0].redraw();
@@ -811,23 +811,23 @@ class mxConnectionHandler extends mxEventSource {
    * state - <mxCellState> under the mouse.
    */
   getIconPosition = (icon, state) => {
-    var scale = this.graph.getView().scale;
-    var cx = state.getCenterX();
-    var cy = state.getCenterY();
+    let scale = this.graph.getView().scale;
+    let cx = state.getCenterX();
+    let cy = state.getCenterY();
 
     if (this.graph.isSwimlane(state.cell)) {
-      var size = this.graph.getStartSize(state.cell);
+      let size = this.graph.getStartSize(state.cell);
 
       cx = (size.width != 0) ? state.x + size.width * scale / 2 : cx;
       cy = (size.height != 0) ? state.y + size.height * scale / 2 : cy;
 
-      var alpha = mxUtils.toRadians(mxUtils.getValue(state.style, mxConstants.STYLE_ROTATION) || 0);
+      let alpha = mxUtils.toRadians(mxUtils.getValue(state.style, mxConstants.STYLE_ROTATION) || 0);
 
       if (alpha != 0) {
-        var cos = Math.cos(alpha);
-        var sin = Math.sin(alpha);
-        var ct = new mxPoint(state.getCenterX(), state.getCenterY());
-        var pt = mxUtils.getRotatedPoint(new mxPoint(cx, cy), cos, sin, ct);
+        let cos = Math.cos(alpha);
+        let sin = Math.sin(alpha);
+        let ct = new mxPoint(state.getCenterX(), state.getCenterY());
+        let pt = mxUtils.getRotatedPoint(new mxPoint(cx, cy), cos, sin, ct);
         cx = pt.x;
         cy = pt.y;
       }
@@ -844,7 +844,7 @@ class mxConnectionHandler extends mxEventSource {
    */
   destroyIcons = () => {
     if (this.icons != null) {
-      for (var i = 0; i < this.icons.length; i++) {
+      for (let i = 0; i < this.icons.length; i++) {
         this.icons[i].destroy();
       }
 
@@ -905,7 +905,7 @@ class mxConnectionHandler extends mxEventSource {
 
       // Stores the starting point in the geometry of the preview
       if (this.previous == null && this.edgeState != null) {
-        var pt = this.graph.getPointForEvent(me.getEvent());
+        let pt = this.graph.getPointForEvent(me.getEvent());
         this.edgeState.cell.geometry.setTerminalPoint(pt, true);
       }
 
@@ -940,7 +940,7 @@ class mxConnectionHandler extends mxEventSource {
    * (code)
    * graph.connectionHandler.createEdgeState = (me)=>
    * {
-   *   var edge = graph.createEdge(null, null, null, null, null, 'edgeStyle=elbowEdgeStyle');
+   *   let edge = graph.createEdge(null, null, null, null, null, 'edgeStyle=elbowEdgeStyle');
    *
    *   return new mxCellState(this.graph.view, edge, this.graph.getCellStyle(edge));
    * };
@@ -957,18 +957,18 @@ class mxConnectionHandler extends mxEventSource {
    * or shift is pressed.
    */
   isOutlineConnectEvent = (me) => {
-    var offset = mxUtils.getOffset(this.graph.container);
-    var evt = me.getEvent();
+    let offset = mxUtils.getOffset(this.graph.container);
+    let evt = me.getEvent();
 
-    var clientX = mxEvent.getClientX(evt);
-    var clientY = mxEvent.getClientY(evt);
+    let clientX = mxEvent.getClientX(evt);
+    let clientY = mxEvent.getClientY(evt);
 
-    var doc = document.documentElement;
-    var left = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);
-    var top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
+    let doc = document.documentElement;
+    let left = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);
+    let top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
 
-    var gridX = this.currentPoint.x - this.graph.container.scrollLeft + offset.x - left;
-    var gridY = this.currentPoint.y - this.graph.container.scrollTop + offset.y - top;
+    let gridX = this.currentPoint.x - this.graph.container.scrollLeft + offset.x - left;
+    let gridY = this.currentPoint.y - this.graph.container.scrollTop + offset.y - top;
 
     return this.outlineConnect && !mxEvent.isShiftDown(me.getEvent()) &&
         (me.isSource(this.marker.highlight.shape) ||
@@ -1030,7 +1030,7 @@ class mxConnectionHandler extends mxEventSource {
         this.currentState = null;
       }
 
-      var outline = this.isOutlineConnectEvent(me);
+      let outline = this.isOutlineConnectEvent(me);
 
       if (this.currentState != null && outline) {
         // Handles special case where mouse is on outline away from actual end point
@@ -1039,7 +1039,7 @@ class mxConnectionHandler extends mxEventSource {
           point = new mxPoint(me.getGraphX(), me.getGraphY());
         }
 
-        var constraint = this.graph.getOutlineConstraint(point, this.currentState, me);
+        let constraint = this.graph.getOutlineConstraint(point, this.currentState, me);
         this.constraintHandler.setFocus(me, this.currentState, false);
         this.constraintHandler.currentConstraint = constraint;
         this.constraintHandler.currentPoint = point;
@@ -1047,7 +1047,7 @@ class mxConnectionHandler extends mxEventSource {
 
       if (this.outlineConnect) {
         if (this.marker.highlight != null && this.marker.highlight.shape != null) {
-          var s = this.graph.view.scale;
+          let s = this.graph.view.scale;
 
           if (this.constraintHandler.currentConstraint != null &&
               this.constraintHandler.currentFocus != null) {
@@ -1090,8 +1090,8 @@ class mxConnectionHandler extends mxEventSource {
    * Converts the given point from screen coordinates to model coordinates.
    */
   convertWaypoint = (point) => {
-    var scale = this.graph.getView().getScale();
-    var tr = this.graph.getView().getTranslate();
+    let scale = this.graph.getView().getScale();
+    let tr = this.graph.getView().getTranslate();
 
     point.x = point.x / scale - tr.x;
     point.y = point.y / scale - tr.y;
@@ -1105,8 +1105,8 @@ class mxConnectionHandler extends mxEventSource {
    */
   snapToPreview = (me, point) => {
     if (!mxEvent.isAltDown(me.getEvent()) && this.previous != null) {
-      var tol = this.graph.gridSize * this.graph.view.scale / 2;
-      var tmp = (this.sourceConstraint != null) ? this.first :
+      let tol = this.graph.gridSize * this.graph.view.scale / 2;
+      let tmp = (this.sourceConstraint != null) ? this.first :
           new mxPoint(this.previous.getCenterX(), this.previous.getCenterY());
 
       if (Math.abs(tmp.x - me.getGraphX()) < tol) {
@@ -1133,10 +1133,10 @@ class mxConnectionHandler extends mxEventSource {
         this.currentState = null;
       }
 
-      var view = this.graph.getView();
-      var scale = view.scale;
-      var tr = view.translate;
-      var point = new mxPoint(me.getGraphX(), me.getGraphY());
+      let view = this.graph.getView();
+      let scale = view.scale;
+      let tr = view.translate;
+      let point = new mxPoint(me.getGraphX(), me.getGraphY());
       this.error = null;
 
       if (this.graph.isGridEnabledEvent(me.getEvent())) {
@@ -1155,8 +1155,8 @@ class mxConnectionHandler extends mxEventSource {
       }
 
       if (this.first != null) {
-        var constraint = null;
-        var current = point;
+        let constraint = null;
+        let current = point;
 
         // Uses the current point from the constraint handler if available
         if (this.constraintHandler.currentConstraint != null &&
@@ -1178,15 +1178,15 @@ class mxConnectionHandler extends mxEventSource {
 
         // Moves the connect icon with the mouse
         if (this.selectedIcon != null) {
-          var w = this.selectedIcon.bounds.width;
-          var h = this.selectedIcon.bounds.height;
+          let w = this.selectedIcon.bounds.width;
+          let h = this.selectedIcon.bounds.height;
 
           if (this.currentState != null && this.targetConnectImage) {
-            var pos = this.getIconPosition(this.selectedIcon, this.currentState);
+            let pos = this.getIconPosition(this.selectedIcon, this.currentState);
             this.selectedIcon.bounds.x = pos.x;
             this.selectedIcon.bounds.y = pos.y;
           } else {
-            var bounds = new mxRectangle(me.getGraphX() + this.connectIconOffset.x,
+            let bounds = new mxRectangle(me.getGraphX() + this.connectIconOffset.x,
                 me.getGraphY() + this.connectIconOffset.y, w, h);
             this.selectedIcon.bounds = bounds;
           }
@@ -1202,7 +1202,7 @@ class mxConnectionHandler extends mxEventSource {
         } else {
           if (this.currentState != null) {
             if (this.constraintHandler.currentConstraint == null) {
-              var tmp = this.getTargetPerimeterPoint(this.currentState, me);
+              let tmp = this.getTargetPerimeterPoint(this.currentState, me);
 
               if (tmp != null) {
                 current = tmp;
@@ -1212,9 +1212,9 @@ class mxConnectionHandler extends mxEventSource {
 
           // Computes the source perimeter point
           if (this.sourceConstraint == null && this.previous != null) {
-            var next = (this.waypoints != null && this.waypoints.length > 0) ?
+            let next = (this.waypoints != null && this.waypoints.length > 0) ?
                 this.waypoints[0] : current;
-            var tmp = this.getSourcePerimeterPoint(this.previous, next, me);
+            let tmp = this.getSourcePerimeterPoint(this.previous, next, me);
 
             if (tmp != null) {
               pt2 = tmp;
@@ -1227,7 +1227,7 @@ class mxConnectionHandler extends mxEventSource {
         // makes sure the preview shape does not prevent the detection
         // of the cell under the mousepointer even for slow gestures.
         if (this.currentState == null && this.movePreviewAway) {
-          var tmp = pt2;
+          let tmp = pt2;
 
           if (this.edgeState != null && this.edgeState.absolutePoints.length >= 2) {
             var tmp2 = this.edgeState.absolutePoints[this.edgeState.absolutePoints.length - 2];
@@ -1237,10 +1237,10 @@ class mxConnectionHandler extends mxEventSource {
             }
           }
 
-          var dx = current.x - tmp.x;
-          var dy = current.y - tmp.y;
+          let dx = current.x - tmp.x;
+          let dy = current.y - tmp.y;
 
-          var len = Math.sqrt(dx * dx + dy * dy);
+          let len = Math.sqrt(dx * dx + dy * dy);
 
           if (len == 0) {
             return;
@@ -1256,8 +1256,8 @@ class mxConnectionHandler extends mxEventSource {
 
         // Creates the preview shape (lazy)
         if (this.shape == null) {
-          var dx = Math.abs(me.getGraphX() - this.first.x);
-          var dy = Math.abs(me.getGraphY() - this.first.y);
+          let dx = Math.abs(me.getGraphX() - this.first.x);
+          let dy = Math.abs(me.getGraphY() - this.first.y);
 
           if (dx > this.graph.tolerance || dy > this.graph.tolerance) {
             this.shape = this.createShape();
@@ -1276,7 +1276,7 @@ class mxConnectionHandler extends mxEventSource {
           if (this.edgeState != null) {
             this.shape.points = this.edgeState.absolutePoints;
           } else {
-            var pts = [pt2];
+            let pts = [pt2];
 
             if (this.waypoints != null) {
               pts = pts.concat(this.waypoints);
@@ -1319,10 +1319,10 @@ class mxConnectionHandler extends mxEventSource {
       }
 
       if (!this.graph.isMouseDown && this.currentState != null && this.icons != null) {
-        var hitsIcon = false;
-        var target = me.getSource();
+        let hitsIcon = false;
+        let target = me.getSource();
 
-        for (var i = 0; i < this.icons.length && !hitsIcon; i++) {
+        for (let i = 0; i < this.icons.length && !hitsIcon; i++) {
           hitsIcon = target == this.icons[i].node || target.parentNode == this.icons[i].node;
         }
 
@@ -1368,13 +1368,13 @@ class mxConnectionHandler extends mxEventSource {
     }
 
     // Scales and translates the waypoints to the model
-    var realPoints = null;
+    let realPoints = null;
 
     if (this.waypoints != null) {
       realPoints = [];
 
-      for (var i = 0; i < this.waypoints.length; i++) {
-        var pt = this.waypoints[i].clone();
+      for (let i = 0; i < this.waypoints.length; i++) {
+        let pt = this.waypoints[i].clone();
         this.convertWaypoint(pt);
         realPoints[i] = pt;
       }
@@ -1395,15 +1395,15 @@ class mxConnectionHandler extends mxEventSource {
    * me - <mxMouseEvent> that represents the mouse move.
    */
   getTargetPerimeterPoint = (state, me) => {
-    var result = null;
-    var view = state.view;
-    var targetPerimeter = view.getPerimeterFunction(state);
+    let result = null;
+    let view = state.view;
+    let targetPerimeter = view.getPerimeterFunction(state);
 
     if (targetPerimeter != null) {
-      var next = (this.waypoints != null && this.waypoints.length > 0) ?
+      let next = (this.waypoints != null && this.waypoints.length > 0) ?
           this.waypoints[this.waypoints.length - 1] :
           new mxPoint(this.previous.getCenterX(), this.previous.getCenterY());
-      var tmp = targetPerimeter(view.getPerimeterBounds(state),
+      let tmp = targetPerimeter(view.getPerimeterBounds(state),
           this.edgeState, next, false);
 
       if (tmp != null) {
@@ -1429,20 +1429,20 @@ class mxConnectionHandler extends mxEventSource {
    * me - <mxMouseEvent> that represents the mouse move.
    */
   getSourcePerimeterPoint = (state, next, me) => {
-    var result = null;
-    var view = state.view;
-    var sourcePerimeter = view.getPerimeterFunction(state);
-    var c = new mxPoint(state.getCenterX(), state.getCenterY());
+    let result = null;
+    let view = state.view;
+    let sourcePerimeter = view.getPerimeterFunction(state);
+    let c = new mxPoint(state.getCenterX(), state.getCenterY());
 
     if (sourcePerimeter != null) {
-      var theta = mxUtils.getValue(state.style, mxConstants.STYLE_ROTATION, 0);
-      var rad = -theta * (Math.PI / 180);
+      let theta = mxUtils.getValue(state.style, mxConstants.STYLE_ROTATION, 0);
+      let rad = -theta * (Math.PI / 180);
 
       if (theta != 0) {
         next = mxUtils.getRotatedPoint(new mxPoint(next.x, next.y), Math.cos(rad), Math.sin(rad), c);
       }
 
-      var tmp = sourcePerimeter(view.getPerimeterBounds(state), state, next, false);
+      let tmp = sourcePerimeter(view.getPerimeterBounds(state), state, next, false);
 
       if (tmp != null) {
         if (theta != 0) {
@@ -1493,10 +1493,10 @@ class mxConnectionHandler extends mxEventSource {
    * Adds the waypoint for the given event to <waypoints>.
    */
   addWaypointForEvent = (me) => {
-    var point = mxUtils.convertPoint(this.graph.container, me.getX(), me.getY());
-    var dx = Math.abs(point.x - this.first.x);
-    var dy = Math.abs(point.y - this.first.y);
-    var addPoint = this.waypoints != null || (this.mouseDownCounter > 1 &&
+    let point = mxUtils.convertPoint(this.graph.container, me.getX(), me.getY());
+    let dx = Math.abs(point.x - this.first.x);
+    let dy = Math.abs(point.y - this.first.y);
+    let addPoint = this.waypoints != null || (this.mouseDownCounter > 1 &&
         (dx > this.graph.tolerance || dy > this.graph.tolerance));
 
     if (addPoint) {
@@ -1504,8 +1504,8 @@ class mxConnectionHandler extends mxEventSource {
         this.waypoints = [];
       }
 
-      var scale = this.graph.view.scale;
-      var point = new mxPoint(this.graph.snap(me.getGraphX() / scale) * scale,
+      let scale = this.graph.view.scale;
+      let point = new mxPoint(this.graph.snap(me.getGraphX() / scale) * scale,
           this.graph.snap(me.getGraphY() / scale) * scale);
       this.waypoints.push(point);
     }
@@ -1541,8 +1541,8 @@ class mxConnectionHandler extends mxEventSource {
       var c1 = this.sourceConstraint;
       var c2 = this.constraintHandler.currentConstraint;
 
-      var source = (this.previous != null) ? this.previous.cell : null;
-      var target = null;
+      let source = (this.previous != null) ? this.previous.cell : null;
+      let target = null;
 
       if (this.constraintHandler.currentConstraint != null &&
           this.constraintHandler.currentFocus != null) {
@@ -1687,9 +1687,9 @@ class mxConnectionHandler extends mxEventSource {
     if (target != null || this.isCreateTarget(evt) || this.graph.allowDanglingEdges) {
       // Uses the common parent of source and target or
       // the default parent to insert the edge
-      var model = this.graph.getModel();
-      var terminalInserted = false;
-      var edge = null;
+      let model = this.graph.getModel();
+      let terminalInserted = false;
+      let edge = null;
 
       model.beginUpdate();
       try {
@@ -1703,10 +1703,10 @@ class mxConnectionHandler extends mxEventSource {
             // Disables edges as drop targets if the target cell was created
             // FIXME: Should not shift if vertex was aligned (same in Java)
             if (dropTarget == null || !this.graph.getModel().isEdge(dropTarget)) {
-              var pstate = this.graph.getView().getState(dropTarget);
+              let pstate = this.graph.getView().getState(dropTarget);
 
               if (pstate != null) {
-                var tmp = model.getGeometry(target);
+                let tmp = model.getGeometry(target);
                 tmp.x -= pstate.origin.x;
                 tmp.y -= pstate.origin.y;
               }
@@ -1718,7 +1718,7 @@ class mxConnectionHandler extends mxEventSource {
           }
         }
 
-        var parent = this.graph.getDefaultParent();
+        let parent = this.graph.getDefaultParent();
 
         if (source != null && target != null &&
             model.getParent(source) == model.getParent(target) &&
@@ -1733,8 +1733,8 @@ class mxConnectionHandler extends mxEventSource {
 
         // Uses the value of the preview edge state for inserting
         // the new edge into the graph
-        var value = null;
-        var style = null;
+        let value = null;
+        let style = null;
 
         if (this.edgeState != null) {
           value = this.edgeState.cell.value;
@@ -1753,12 +1753,12 @@ class mxConnectionHandler extends mxEventSource {
             model.setGeometry(edge, this.edgeState.cell.geometry);
           }
 
-          var parent = model.getParent(source);
+          let parent = model.getParent(source);
 
           // Inserts edge before source
           if (this.isInsertBefore(edge, source, target, evt, dropTarget)) {
-            var index = null;
-            var tmp = source;
+            let index = null;
+            let tmp = source;
 
             while (tmp.parent != null && tmp.geometry != null &&
             tmp.geometry.relative && tmp.parent != edge.parent) {
@@ -1771,7 +1771,7 @@ class mxConnectionHandler extends mxEventSource {
           }
 
           // Makes sure the edge has a non-null, relative geometry
-          var geo = model.getGeometry(edge);
+          let geo = model.getGeometry(edge);
 
           if (geo == null) {
             geo = new mxGeometry();
@@ -1782,20 +1782,20 @@ class mxConnectionHandler extends mxEventSource {
 
           // Uses scaled waypoints in geometry
           if (this.waypoints != null && this.waypoints.length > 0) {
-            var s = this.graph.view.scale;
-            var tr = this.graph.view.translate;
+            let s = this.graph.view.scale;
+            let tr = this.graph.view.translate;
             geo.points = [];
 
-            for (var i = 0; i < this.waypoints.length; i++) {
-              var pt = this.waypoints[i];
+            for (let i = 0; i < this.waypoints.length; i++) {
+              let pt = this.waypoints[i];
               geo.points.push(new mxPoint(pt.x / s - tr.x, pt.y / s - tr.y));
             }
           }
 
           if (target == null) {
-            var t = this.graph.view.translate;
-            var s = this.graph.view.scale;
-            var pt = (this.originalPoint != null) ?
+            let t = this.graph.view.translate;
+            let s = this.graph.view.scale;
+            let pt = (this.originalPoint != null) ?
                 new mxPoint(this.originalPoint.x / s - t.x, this.originalPoint.y / s - t.y) :
                 new mxPoint(this.currentPoint.x / s - t.x, this.currentPoint.y / s - t.y);
             pt.x -= this.graph.panDx / this.graph.view.scale;
@@ -1840,7 +1840,7 @@ class mxConnectionHandler extends mxEventSource {
     if (this.factoryMethod == null) {
       return this.graph.insertEdge(parent, id, value, source, target, style);
     } else {
-      var edge = this.createEdge(value, source, target, style);
+      let edge = this.createEdge(value, source, target, style);
       edge = this.graph.addEdge(edge, parent, source, target);
 
       return edge;
@@ -1861,32 +1861,32 @@ class mxConnectionHandler extends mxEventSource {
    */
   createTargetVertex = (evt, source) => {
     // Uses the first non-relative source
-    var geo = this.graph.getCellGeometry(source);
+    let geo = this.graph.getCellGeometry(source);
 
     while (geo != null && geo.relative) {
       source = this.graph.getModel().getParent(source);
       geo = this.graph.getCellGeometry(source);
     }
 
-    var clone = this.graph.cloneCell(source);
-    var geo = this.graph.getModel().getGeometry(clone);
+    let clone = this.graph.cloneCell(source);
+    let geo = this.graph.getModel().getGeometry(clone);
 
     if (geo != null) {
-      var t = this.graph.view.translate;
-      var s = this.graph.view.scale;
-      var point = new mxPoint(this.currentPoint.x / s - t.x, this.currentPoint.y / s - t.y);
+      let t = this.graph.view.translate;
+      let s = this.graph.view.scale;
+      let point = new mxPoint(this.currentPoint.x / s - t.x, this.currentPoint.y / s - t.y);
       geo.x = Math.round(point.x - geo.width / 2 - this.graph.panDx / s);
       geo.y = Math.round(point.y - geo.height / 2 - this.graph.panDy / s);
 
       // Aligns with source if within certain tolerance
-      var tol = this.getAlignmentTolerance();
+      let tol = this.getAlignmentTolerance();
 
       if (tol > 0) {
-        var sourceState = this.graph.view.getState(source);
+        let sourceState = this.graph.view.getState(source);
 
         if (sourceState != null) {
-          var x = sourceState.x / s - t.x;
-          var y = sourceState.y / s - t.y;
+          let x = sourceState.x / s - t.x;
+          let y = sourceState.y / s - t.y;
 
           if (Math.abs(x - geo.x) <= tol) {
             geo.x = Math.round(x);
@@ -1927,7 +1927,7 @@ class mxConnectionHandler extends mxEventSource {
    * style - Optional style from the preview edge.
    */
   createEdge = (value, source, target, style) => {
-    var edge = null;
+    let edge = null;
 
     // Creates a new edge using the factoryMethod
     if (this.factoryMethod != null) {
@@ -1939,7 +1939,7 @@ class mxConnectionHandler extends mxEventSource {
       edge.setEdge(true);
       edge.setStyle(style);
 
-      var geo = new mxGeometry();
+      let geo = new mxGeometry();
       geo.relative = true;
       edge.setGeometry(geo);
     }
diff --git a/src/js/handler/mxConstraintHandler.js b/src/js/handler/mxConstraintHandler.js
index d2bb7c5a0..361c9dc89 100644
--- a/src/js/handler/mxConstraintHandler.js
+++ b/src/js/handler/mxConstraintHandler.js
@@ -101,7 +101,7 @@ class mxConstraintHandler {
    */
   reset = () => {
     if (this.focusIcons != null) {
-      for (var i = 0; i < this.focusIcons.length; i++) {
+      for (let i = 0; i < this.focusIcons.length; i++) {
         this.focusIcons[i].destroy();
       }
 
@@ -169,7 +169,7 @@ class mxConstraintHandler {
    */
   destroyIcons = () => {
     if (this.focusIcons != null) {
-      for (var i = 0; i < this.focusIcons.length; i++) {
+      for (let i = 0; i < this.focusIcons.length; i++) {
         this.focusIcons[i].destroy();
       }
 
@@ -206,7 +206,7 @@ class mxConstraintHandler {
    * Returns the cell for the given event.
    */
   getCellForEvent = (me, point) => {
-    var cell = me.getCell();
+    let cell = me.getCell();
 
     // Gets cell under actual point if different from event location
     if (cell == null && point != null && (me.getGraphX() != point.x || me.getGraphY() != point.y)) {
@@ -215,7 +215,7 @@ class mxConstraintHandler {
 
     // Uses connectable parent vertex if one exists
     if (cell != null && !this.graph.isCellConnectable(cell)) {
-      var parent = this.graph.getModel().getParent(cell);
+      let parent = this.graph.getModel().getParent(cell);
 
       if (this.graph.getModel().isVertex(parent) && this.graph.isCellConnectable(parent)) {
         cell = parent;
@@ -242,12 +242,12 @@ class mxConstraintHandler {
         mxEvent.addListener(this.graph.container, 'mouseleave', this.resetHandler);
       }
 
-      var tol = this.getTolerance(me);
-      var x = (point != null) ? point.x : me.getGraphX();
-      var y = (point != null) ? point.y : me.getGraphY();
-      var grid = new mxRectangle(x - tol, y - tol, 2 * tol, 2 * tol);
-      var mouse = new mxRectangle(me.getGraphX() - tol, me.getGraphY() - tol, 2 * tol, 2 * tol);
-      var state = this.graph.view.getState(this.getCellForEvent(me, point));
+      let tol = this.getTolerance(me);
+      let x = (point != null) ? point.x : me.getGraphX();
+      let y = (point != null) ? point.y : me.getGraphY();
+      let grid = new mxRectangle(x - tol, y - tol, 2 * tol, 2 * tol);
+      let mouse = new mxRectangle(me.getGraphX() - tol, me.getGraphY() - tol, 2 * tol, 2 * tol);
+      let state = this.graph.view.getState(this.getCellForEvent(me, point));
 
       // Keeps focus icons visible while over vertex bounds and no other cell under mouse or shift is pressed
       if (!this.isKeepFocusEvent(me) && (this.currentFocusArea == null || this.currentFocus == null ||
@@ -260,17 +260,17 @@ class mxConstraintHandler {
 
       this.currentConstraint = null;
       this.currentPoint = null;
-      var minDistSq = null;
+      let minDistSq = null;
 
       if (this.focusIcons != null && this.constraints != null &&
           (state == null || this.currentFocus == state)) {
-        var cx = mouse.getCenterX();
-        var cy = mouse.getCenterY();
+        let cx = mouse.getCenterX();
+        let cy = mouse.getCenterY();
 
-        for (var i = 0; i < this.focusIcons.length; i++) {
-          var dx = cx - this.focusIcons[i].bounds.getCenterX();
-          var dy = cy - this.focusIcons[i].bounds.getCenterY();
-          var tmp = dx * dx + dy * dy;
+        for (let i = 0; i < this.focusIcons.length; i++) {
+          let dx = cx - this.focusIcons[i].bounds.getCenterX();
+          let dy = cy - this.focusIcons[i].bounds.getCenterY();
+          let tmp = dx * dx + dy * dy;
 
           if ((this.intersects(this.focusIcons[i], mouse, source, existingEdge) || (point != null &&
               this.intersects(this.focusIcons[i], grid, source, existingEdge))) &&
@@ -279,13 +279,13 @@ class mxConstraintHandler {
             this.currentPoint = this.focusPoints[i];
             minDistSq = tmp;
 
-            var tmp = this.focusIcons[i].bounds.clone();
+            let tmp = this.focusIcons[i].bounds.clone();
             tmp.grow(mxConstants.HIGHLIGHT_SIZE + 1);
             tmp.width -= 1;
             tmp.height -= 1;
 
             if (this.focusHighlight == null) {
-              var hl = this.createHighlightShape();
+              let hl = this.createHighlightShape();
               hl.dialect = (this.graph.dialect == mxConstants.DIALECT_SVG) ?
                   mxConstants.DIALECT_SVG : mxConstants.DIALECT_VML;
               hl.pointerEvents = false;
@@ -293,7 +293,7 @@ class mxConstraintHandler {
               hl.init(this.graph.getView().getOverlayPane());
               this.focusHighlight = hl;
 
-              var getState = () => {
+              let getState = () => {
                 return (this.currentFocus != null) ? this.currentFocus : state;
               };
 
@@ -325,15 +325,15 @@ class mxConstraintHandler {
    */
   redraw = () => {
     if (this.currentFocus != null && this.constraints != null && this.focusIcons != null) {
-      var state = this.graph.view.getState(this.currentFocus.cell);
+      let state = this.graph.view.getState(this.currentFocus.cell);
       this.currentFocus = state;
       this.currentFocusArea = new mxRectangle(state.x, state.y, state.width, state.height);
 
-      for (var i = 0; i < this.constraints.length; i++) {
-        var cp = this.graph.getConnectionPoint(state, this.constraints[i]);
-        var img = this.getImageForConstraint(state, this.constraints[i], cp);
+      for (let i = 0; i < this.constraints.length; i++) {
+        let cp = this.graph.getConnectionPoint(state, this.constraints[i]);
+        let img = this.getImageForConstraint(state, this.constraints[i], cp);
 
-        var bounds = new mxRectangle(Math.round(cp.x - img.width / 2),
+        let bounds = new mxRectangle(Math.round(cp.x - img.width / 2),
             Math.round(cp.y - img.height / 2), img.width, img.height);
         this.focusIcons[i].bounds = bounds;
         this.focusIcons[i].redraw();
@@ -361,7 +361,7 @@ class mxConstraintHandler {
       this.currentFocusArea = new mxRectangle(state.x, state.y, state.width, state.height);
 
       if (this.focusIcons != null) {
-        for (var i = 0; i < this.focusIcons.length; i++) {
+        for (let i = 0; i < this.focusIcons.length; i++) {
           this.focusIcons[i].destroy();
         }
 
@@ -372,14 +372,14 @@ class mxConstraintHandler {
       this.focusPoints = [];
       this.focusIcons = [];
 
-      for (var i = 0; i < this.constraints.length; i++) {
-        var cp = this.graph.getConnectionPoint(state, this.constraints[i]);
-        var img = this.getImageForConstraint(state, this.constraints[i], cp);
+      for (let i = 0; i < this.constraints.length; i++) {
+        let cp = this.graph.getConnectionPoint(state, this.constraints[i]);
+        let img = this.getImageForConstraint(state, this.constraints[i], cp);
 
-        var src = img.src;
-        var bounds = new mxRectangle(Math.round(cp.x - img.width / 2),
+        let src = img.src;
+        let bounds = new mxRectangle(Math.round(cp.x - img.width / 2),
             Math.round(cp.y - img.height / 2), img.width, img.height);
-        var icon = new mxImageShape(bounds, src);
+        let icon = new mxImageShape(bounds, src);
         icon.dialect = (this.graph.dialect != mxConstants.DIALECT_SVG) ?
             mxConstants.DIALECT_MIXEDHTML : mxConstants.DIALECT_SVG;
         icon.preserveImageAspect = false;
@@ -390,7 +390,7 @@ class mxConstraintHandler {
           icon.node.parentNode.insertBefore(icon.node, icon.node.parentNode.firstChild);
         }
 
-        var getState = mxUtils.bind(this, () => {
+        let getState = mxUtils.bind(this, () => {
           return (this.currentFocus != null) ? this.currentFocus : state;
         });
 
@@ -417,7 +417,7 @@ class mxConstraintHandler {
    * Returns true if the given icon intersects the given point.
    */
   createHighlightShape = () => {
-    var hl = new mxRectangleShape(null, this.highlightColor, this.highlightColor, mxConstants.HIGHLIGHT_STROKEWIDTH);
+    let hl = new mxRectangleShape(null, this.highlightColor, this.highlightColor, mxConstants.HIGHLIGHT_STROKEWIDTH);
     hl.opacity = mxConstants.HIGHLIGHT_OPACITY;
 
     return hl;
diff --git a/src/js/handler/mxEdgeHandler.js b/src/js/handler/mxEdgeHandler.js
index 977057d7c..c40c2590d 100644
--- a/src/js/handler/mxEdgeHandler.js
+++ b/src/js/handler/mxEdgeHandler.js
@@ -235,7 +235,7 @@ class mxEdgeHandler {
 
       // Handles escape keystrokes
       this.escapeHandler = (sender, evt) => {
-        var dirty = this.index != null;
+        let dirty = this.index != null;
         this.reset();
 
         if (dirty) {
@@ -278,7 +278,7 @@ class mxEdgeHandler {
 
     if (!this.preferHtml) {
       // Checks source terminal
-      var sourceState = this.state.getVisibleTerminalState(true);
+      let sourceState = this.state.getVisibleTerminalState(true);
 
       if (sourceState != null) {
         this.preferHtml = sourceState.text != null &&
@@ -287,7 +287,7 @@ class mxEdgeHandler {
 
       if (!this.preferHtml) {
         // Checks target terminal
-        var targetState = this.state.getVisibleTerminalState(false);
+        let targetState = this.state.getVisibleTerminalState(false);
 
         if (targetState != null) {
           this.preferHtml = targetState.text != null &&
@@ -387,7 +387,7 @@ class mxEdgeHandler {
    * Creates the shape used to draw the selection border.
    */
   createParentHighlightShape = (bounds) => {
-    var shape = new mxRectangleShape(mxRectangle.fromRectangle(bounds),
+    let shape = new mxRectangleShape(mxRectangle.fromRectangle(bounds),
         null, this.getSelectionColor());
     shape.strokewidth = this.getSelectionStrokeWidth();
     shape.isDashed = this.isSelectionDashed();
@@ -401,7 +401,7 @@ class mxEdgeHandler {
    * Creates the shape used to draw the selection border.
    */
   createSelectionShape = (points) => {
-    var shape = new this.state.shape.constructor();
+    let shape = new this.state.shape.constructor();
     shape.outline = true;
     shape.apply(this.state);
 
@@ -464,13 +464,13 @@ class mxEdgeHandler {
    * Creates and returns the <mxCellMarker> used in <marker>.
    */
   createMarker = () => {
-    var marker = new mxCellMarker(this.graph);
-    var self = this; // closure
+    let marker = new mxCellMarker(this.graph);
+    let self = this; // closure
 
     // Only returns edges if they are connectable and never returns
     // the edge that is currently being modified
     marker.getCell = (me) => {
-      var cell = getCell.apply(this, arguments);
+      let cell = getCell.apply(this, arguments);
 
       // Checks for cell at preview point (with grid)
       if ((cell == self.state.cell || cell == null) && self.currentPoint != null) {
@@ -479,14 +479,14 @@ class mxEdgeHandler {
 
       // Uses connectable parent vertex if one exists
       if (cell != null && !this.graph.isCellConnectable(cell)) {
-        var parent = this.graph.getModel().getParent(cell);
+        let parent = this.graph.getModel().getParent(cell);
 
         if (this.graph.getModel().isVertex(parent) && this.graph.isCellConnectable(parent)) {
           cell = parent;
         }
       }
 
-      var model = self.graph.getModel();
+      let model = self.graph.getModel();
 
       if ((this.graph.isSwimlane(cell) && self.currentPoint != null &&
           this.graph.hitsSwimlaneContent(cell, self.currentPoint.x, self.currentPoint.y)) ||
@@ -505,13 +505,13 @@ class mxEdgeHandler {
 
     // Sets the highlight color according to validateConnection
     marker.isValidState = (state) => {
-      var model = self.graph.getModel();
-      var other = self.graph.view.getTerminalPort(state,
+      let model = self.graph.getModel();
+      let other = self.graph.view.getTerminalPort(state,
           self.graph.view.getState(model.getTerminal(self.state.cell,
               !self.isSource)), !self.isSource);
-      var otherCell = (other != null) ? other.cell : null;
-      var source = (self.isSource) ? state.cell : otherCell;
-      var target = (self.isSource) ? otherCell : state.cell;
+      let otherCell = (other != null) ? other.cell : null;
+      let source = (self.isSource) ? state.cell : otherCell;
+      let target = (self.isSource) ? otherCell : state.cell;
 
       // Updates the error message of the handler
       self.error = self.validateConnection(source, target);
@@ -545,18 +545,18 @@ class mxEdgeHandler {
    * typically an array of <mxRectangleShapes>.
    */
   createBends = () => {
-    var cell = this.state.cell;
-    var bends = [];
+    let cell = this.state.cell;
+    let bends = [];
 
-    for (var i = 0; i < this.abspoints.length; i++) {
+    for (let i = 0; i < this.abspoints.length; i++) {
       if (this.isHandleVisible(i)) {
-        var source = i == 0;
-        var target = i == this.abspoints.length - 1;
-        var terminal = source || target;
+        let source = i == 0;
+        let target = i == this.abspoints.length - 1;
+        let terminal = source || target;
 
         if (terminal || this.graph.isCellBendable(cell)) {
           ((index) => {
-            var bend = this.createHandleShape(index);
+            let bend = this.createHandleShape(index);
             this.initBend(bend, () => {
               if (this.dblClickRemoveEnabled) {
                 this.removePoint(this.state, index);
@@ -588,12 +588,12 @@ class mxEdgeHandler {
    * typically an array of <mxRectangleShapes>.
    */
   createVirtualBends = () => {
-    var cell = this.state.cell;
-    var last = this.abspoints[0];
-    var bends = [];
+    let cell = this.state.cell;
+    let last = this.abspoints[0];
+    let bends = [];
 
     if (this.graph.isCellBendable(cell)) {
-      for (var i = 1; i < this.abspoints.length; i++) {
+      for (let i = 1; i < this.abspoints.length; i++) {
         (mxUtils.bind(this, (bend) => {
           this.initBend(bend);
           bend.setCursor(mxConstants.CURSOR_VIRTUAL_BEND_HANDLE);
@@ -620,10 +620,10 @@ class mxEdgeHandler {
    * Returns true if the handle at the given index is visible.
    */
   isHandleVisible = (index) => {
-    var source = this.state.getVisibleTerminalState(true);
-    var target = this.state.getVisibleTerminalState(false);
-    var geo = this.graph.getCellGeometry(this.state.cell);
-    var edgeStyle = (geo != null) ? this.graph.view.getEdgeStyle(this.state, geo.points, source, target) : null;
+    let source = this.state.getVisibleTerminalState(true);
+    let target = this.state.getVisibleTerminalState(false);
+    let geo = this.graph.getCellGeometry(this.state.cell);
+    let edgeStyle = (geo != null) ? this.graph.view.getEdgeStyle(this.state, geo.points, source, target) : null;
 
     return edgeStyle != mxEdgeStyle.EntityRelation || index == 0 || index == this.abspoints.length - 1;
   };
@@ -639,14 +639,14 @@ class mxEdgeHandler {
    */
   createHandleShape = (index) => {
     if (this.handleImage != null) {
-      var shape = new mxImageShape(new mxRectangle(0, 0, this.handleImage.width, this.handleImage.height), this.handleImage.src);
+      let shape = new mxImageShape(new mxRectangle(0, 0, this.handleImage.width, this.handleImage.height), this.handleImage.src);
 
       // Allows HTML rendering of the images
       shape.preserveImageAspect = false;
 
       return shape;
     } else {
-      var s = mxConstants.HANDLE_SIZE;
+      let s = mxConstants.HANDLE_SIZE;
 
       if (this.preferHtml) {
         s -= 1;
@@ -663,14 +663,14 @@ class mxEdgeHandler {
    */
   createLabelHandleShape = () => {
     if (this.labelHandleImage != null) {
-      var shape = new mxImageShape(new mxRectangle(0, 0, this.labelHandleImage.width, this.labelHandleImage.height), this.labelHandleImage.src);
+      let shape = new mxImageShape(new mxRectangle(0, 0, this.labelHandleImage.width, this.labelHandleImage.height), this.labelHandleImage.src);
 
       // Allows HTML rendering of the images
       shape.preserveImageAspect = false;
 
       return shape;
     } else {
-      var s = mxConstants.LABEL_HANDLE_SIZE;
+      let s = mxConstants.LABEL_HANDLE_SIZE;
       return new mxRectangleShape(new mxRectangle(0, 0, s, s), mxConstants.LABEL_HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR);
     }
   };
@@ -708,22 +708,22 @@ class mxEdgeHandler {
    * Returns the index of the handle for the given event.
    */
   getHandleForEvent = (me) => {
-    var result = null;
+    let result = null;
 
     if (this.state != null) {
       // Connection highlight may consume events before they reach sizer handle
-      var tol = (!mxEvent.isMouseEvent(me.getEvent())) ? this.tolerance : 1;
-      var hit = (this.allowHandleBoundsCheck && tol > 0) ?
+      let tol = (!mxEvent.isMouseEvent(me.getEvent())) ? this.tolerance : 1;
+      let hit = (this.allowHandleBoundsCheck && tol > 0) ?
           new mxRectangle(me.getGraphX() - tol, me.getGraphY() - tol, 2 * tol, 2 * tol) : null;
-      var minDistSq = null;
+      let minDistSq = null;
 
       function checkShape(shape) {
         if (shape != null && shape.node != null && shape.node.style.display != 'none' &&
             shape.node.style.visibility != 'hidden' &&
             (me.isSource(shape) || (hit != null && mxUtils.intersects(shape.bounds, hit)))) {
-          var dx = me.getGraphX() - shape.bounds.getCenterX();
-          var dy = me.getGraphY() - shape.bounds.getCenterY();
-          var tmp = dx * dx + dy * dy;
+          let dx = me.getGraphX() - shape.bounds.getCenterX();
+          let dy = me.getGraphY() - shape.bounds.getCenterY();
+          let tmp = dx * dx + dy * dy;
 
           if (minDistSq == null || tmp <= minDistSq) {
             minDistSq = tmp;
@@ -737,7 +737,7 @@ class mxEdgeHandler {
 
       if (this.customHandles != null && this.isCustomHandleEvent(me)) {
         // Inverse loop order to match display order
-        for (var i = this.customHandles.length - 1; i >= 0; i--) {
+        for (let i = this.customHandles.length - 1; i >= 0; i--) {
           if (checkShape(this.customHandles[i].shape)) {
             // LATER: Return reference to active shape
             return mxEvent.CUSTOM_HANDLE - i;
@@ -750,7 +750,7 @@ class mxEdgeHandler {
       }
 
       if (this.bends != null) {
-        for (var i = 0; i < this.bends.length; i++) {
+        for (let i = 0; i < this.bends.length; i++) {
           if (checkShape(this.bends[i])) {
             result = i;
           }
@@ -758,7 +758,7 @@ class mxEdgeHandler {
       }
 
       if (this.virtualBends != null && this.isAddVirtualBendEvent(me)) {
-        for (var i = 0; i < this.virtualBends.length; i++) {
+        for (let i = 0; i < this.virtualBends.length; i++) {
           if (checkShape(this.virtualBends[i])) {
             result = mxEvent.VIRTUAL_HANDLE - i;
           }
@@ -799,10 +799,10 @@ class mxEdgeHandler {
    * the edge.
    */
   mouseDown = (sender, me) => {
-    var handle = this.getHandleForEvent(me);
+    let handle = this.getHandleForEvent(me);
 
     if (this.bends != null && this.bends[handle] != null) {
-      var b = this.bends[handle].bounds;
+      let b = this.bends[handle].bounds;
       this.snapPoint = new mxPoint(b.getCenterX(), b.getCenterY());
     }
 
@@ -838,8 +838,8 @@ class mxEdgeHandler {
     this.isLabel = index == mxEvent.LABEL_HANDLE;
 
     if (this.isSource || this.isTarget) {
-      var cell = this.state.cell;
-      var terminal = this.graph.model.getTerminal(cell, this.isSource);
+      let cell = this.state.cell;
+      let terminal = this.graph.model.getTerminal(cell, this.isSource);
 
       if ((terminal == null && this.graph.isTerminalPointMovable(cell, this.isSource)) ||
           (terminal != null && this.graph.isCellDisconnectable(cell, terminal, this.isSource))) {
@@ -852,7 +852,7 @@ class mxEdgeHandler {
     // Hides other custom handles
     if (this.index <= mxEvent.CUSTOM_HANDLE && this.index > mxEvent.VIRTUAL_HANDLE) {
       if (this.customHandles != null) {
-        for (var i = 0; i < this.customHandles.length; i++) {
+        for (let i = 0; i < this.customHandles.length; i++) {
           if (i != mxEvent.CUSTOM_HANDLE - this.index) {
             this.customHandles[i].setVisible(false);
           }
@@ -920,26 +920,26 @@ class mxEdgeHandler {
    * Returns the point for the given event.
    */
   getPointForEvent = (me) => {
-    var view = this.graph.getView();
-    var scale = view.scale;
-    var point = new mxPoint(this.roundLength(me.getGraphX() / scale) * scale,
+    let view = this.graph.getView();
+    let scale = view.scale;
+    let point = new mxPoint(this.roundLength(me.getGraphX() / scale) * scale,
         this.roundLength(me.getGraphY() / scale) * scale);
 
-    var tt = this.getSnapToTerminalTolerance();
-    var overrideX = false;
-    var overrideY = false;
+    let tt = this.getSnapToTerminalTolerance();
+    let overrideX = false;
+    let overrideY = false;
 
     if (tt > 0 && this.isSnapToTerminalsEvent(me)) {
       function snapToPoint(pt) {
         if (pt != null) {
-          var x = pt.x;
+          let x = pt.x;
 
           if (Math.abs(point.x - x) < tt) {
             point.x = x;
             overrideX = true;
           }
 
-          var y = pt.y;
+          let y = pt.y;
 
           if (Math.abs(point.y - y) < tt) {
             point.y = y;
@@ -960,14 +960,14 @@ class mxEdgeHandler {
       snapToTerminal.call(this, this.state.getVisibleTerminalState(false));
 
       if (this.state.absolutePoints != null) {
-        for (var i = 0; i < this.state.absolutePoints.length; i++) {
+        for (let i = 0; i < this.state.absolutePoints.length; i++) {
           snapToPoint.call(this, this.state.absolutePoints[i]);
         }
       }
     }
 
     if (this.graph.isGridEnabledEvent(me.getEvent())) {
-      var tr = view.translate;
+      let tr = view.translate;
 
       if (!overrideX) {
         point.x = (this.graph.snap(point.x / scale - tr.x) + tr.x) * scale;
@@ -1003,17 +1003,17 @@ class mxEdgeHandler {
         this.marker.markCell(this.constraintHandler.currentFocus.cell, 'transparent');
       }
 
-      var model = this.graph.getModel();
-      var other = this.graph.view.getTerminalPort(this.state,
+      let model = this.graph.getModel();
+      let other = this.graph.view.getTerminalPort(this.state,
           this.graph.view.getState(model.getTerminal(this.state.cell,
               !this.isSource)), !this.isSource);
-      var otherCell = (other != null) ? other.cell : null;
-      var source = (this.isSource) ? this.constraintHandler.currentFocus.cell : otherCell;
-      var target = (this.isSource) ? otherCell : this.constraintHandler.currentFocus.cell;
+      let otherCell = (other != null) ? other.cell : null;
+      let source = (this.isSource) ? this.constraintHandler.currentFocus.cell : otherCell;
+      let target = (this.isSource) ? otherCell : this.constraintHandler.currentFocus.cell;
 
       // Updates the error message of the handler
       this.error = this.validateConnection(source, target);
-      var result = null;
+      let result = null;
 
       if (this.error == null) {
         result = this.constraintHandler.currentFocus;
@@ -1027,7 +1027,7 @@ class mxEdgeHandler {
       return result;
     } else if (!this.graph.isIgnoreTerminalEvent(me.getEvent())) {
       this.marker.process(me);
-      var state = this.marker.getValidState();
+      let state = this.marker.getValidState();
 
       if (state != null && !this.isCellEnabled(state.cell)) {
         this.constraintHandler.reset();
@@ -1053,10 +1053,10 @@ class mxEdgeHandler {
    * me - Optional <mxMouseEvent> that contains the current event.
    */
   getPreviewPoints = (pt, me) => {
-    var geometry = this.graph.getCellGeometry(this.state.cell);
-    var points = (geometry.points != null) ? geometry.points.slice() : null;
-    var point = new mxPoint(pt.x, pt.y);
-    var result = null;
+    let geometry = this.graph.getCellGeometry(this.state.cell);
+    let points = (geometry.points != null) ? geometry.points.slice() : null;
+    let point = new mxPoint(pt.x, pt.y);
+    let result = null;
 
     if (!this.isSource && !this.isTarget) {
       this.convertPoint(point, false);
@@ -1071,9 +1071,9 @@ class mxEdgeHandler {
 
         // Removes point if dragged on terminal point
         if (!this.isSource && !this.isTarget) {
-          for (var i = 0; i < this.bends.length; i++) {
+          for (let i = 0; i < this.bends.length; i++) {
             if (i != this.index) {
-              var bend = this.bends[i];
+              let bend = this.bends[i];
 
               if (bend != null && mxUtils.contains(bend.bounds, pt.x, pt.y)) {
                 if (this.index <= mxEvent.VIRTUAL_HANDLE) {
@@ -1089,15 +1089,15 @@ class mxEdgeHandler {
 
           // Removes point if user tries to straighten a segment
           if (result == null && this.straightRemoveEnabled && (me == null || !mxEvent.isAltDown(me.getEvent()))) {
-            var tol = this.graph.tolerance * this.graph.tolerance;
-            var abs = this.state.absolutePoints.slice();
+            let tol = this.graph.tolerance * this.graph.tolerance;
+            let abs = this.state.absolutePoints.slice();
             abs[this.index] = pt;
 
             // Handes special case where removing waypoint affects tolerance (flickering)
-            var src = this.state.getVisibleTerminalState(true);
+            let src = this.state.getVisibleTerminalState(true);
 
             if (src != null) {
-              var c = this.graph.getConnectionConstraint(this.state, src, true);
+              let c = this.graph.getConnectionConstraint(this.state, src, true);
 
               // Checks if point is not fixed
               if (c == null || this.graph.getConnectionPoint(src, c) == null) {
@@ -1105,10 +1105,10 @@ class mxEdgeHandler {
               }
             }
 
-            var trg = this.state.getVisibleTerminalState(false);
+            let trg = this.state.getVisibleTerminalState(false);
 
             if (trg != null) {
-              var c = this.graph.getConnectionConstraint(this.state, trg, false);
+              let c = this.graph.getConnectionConstraint(this.state, trg, false);
 
               // Checks if point is not fixed
               if (c == null || this.graph.getConnectionPoint(trg, c) == null) {
@@ -1149,18 +1149,18 @@ class mxEdgeHandler {
    * or shift is pressed.
    */
   isOutlineConnectEvent = (me) => {
-    var offset = mxUtils.getOffset(this.graph.container);
-    var evt = me.getEvent();
+    let offset = mxUtils.getOffset(this.graph.container);
+    let evt = me.getEvent();
 
-    var clientX = mxEvent.getClientX(evt);
-    var clientY = mxEvent.getClientY(evt);
+    let clientX = mxEvent.getClientX(evt);
+    let clientY = mxEvent.getClientY(evt);
 
-    var doc = document.documentElement;
-    var left = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);
-    var top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
+    let doc = document.documentElement;
+    let left = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);
+    let top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
 
-    var gridX = this.currentPoint.x - this.graph.container.scrollLeft + offset.x - left;
-    var gridY = this.currentPoint.y - this.graph.container.scrollTop + offset.y - top;
+    let gridX = this.currentPoint.x - this.graph.container.scrollLeft + offset.x - left;
+    let gridY = this.currentPoint.y - this.graph.container.scrollTop + offset.y - top;
 
     return this.outlineConnect && !mxEvent.isShiftDown(me.getEvent()) &&
         (me.isSource(this.marker.highlight.shape) ||
@@ -1177,13 +1177,13 @@ class mxEdgeHandler {
    */
   updatePreviewState = (edge, point, terminalState, me, outline) => {
     // Computes the points for the edge style and terminals
-    var sourceState = (this.isSource) ? terminalState : this.state.getVisibleTerminalState(true);
-    var targetState = (this.isTarget) ? terminalState : this.state.getVisibleTerminalState(false);
+    let sourceState = (this.isSource) ? terminalState : this.state.getVisibleTerminalState(true);
+    let targetState = (this.isTarget) ? terminalState : this.state.getVisibleTerminalState(false);
 
-    var sourceConstraint = this.graph.getConnectionConstraint(edge, sourceState, true);
-    var targetConstraint = this.graph.getConnectionConstraint(edge, targetState, false);
+    let sourceConstraint = this.graph.getConnectionConstraint(edge, sourceState, true);
+    let targetConstraint = this.graph.getConnectionConstraint(edge, targetState, false);
 
-    var constraint = this.constraintHandler.currentConstraint;
+    let constraint = this.constraintHandler.currentConstraint;
 
     if (constraint == null && outline) {
       if (terminalState != null) {
@@ -1203,7 +1203,7 @@ class mxEdgeHandler {
     }
 
     if (this.outlineConnect && this.marker.highlight != null && this.marker.highlight.shape != null) {
-      var s = this.graph.view.scale;
+      let s = this.graph.view.scale;
 
       if (this.constraintHandler.currentConstraint != null &&
           this.constraintHandler.currentFocus != null) {
@@ -1291,7 +1291,7 @@ class mxEdgeHandler {
         this.label.y = this.currentPoint.y;
       } else {
         this.points = this.getPreviewPoints(this.currentPoint, me);
-        var terminalState = (this.isSource || this.isTarget) ? this.getPreviewTerminalState(me) : null;
+        let terminalState = (this.isSource || this.isTarget) ? this.getPreviewTerminalState(me) : null;
 
         if (this.constraintHandler.currentConstraint != null &&
             this.constraintHandler.currentFocus != null &&
@@ -1299,7 +1299,7 @@ class mxEdgeHandler {
           this.currentPoint = this.constraintHandler.currentPoint.clone();
         } else if (this.outlineConnect) {
           // Need to check outline before cloning terminal state
-          var outline = (this.isSource || this.isTarget) ? this.isOutlineConnectEvent(me) : false
+          let outline = (this.isSource || this.isTarget) ? this.isOutlineConnectEvent(me) : false
 
           if (outline) {
             terminalState = this.marker.highlight.state;
@@ -1317,12 +1317,12 @@ class mxEdgeHandler {
           this.marker.reset();
         }
 
-        var clone = this.clonePreviewState(this.currentPoint, (terminalState != null) ? terminalState.cell : null);
+        let clone = this.clonePreviewState(this.currentPoint, (terminalState != null) ? terminalState.cell : null);
         this.updatePreviewState(clone, this.currentPoint, terminalState, me, outline);
 
         // Sets the color of the preview to valid or invalid, updates the
         // points of the preview and redraws
-        var color = (this.error == null) ? this.marker.validColor : this.marker.invalidColor;
+        let color = (this.error == null) ? this.marker.validColor : this.marker.invalidColor;
         this.setPreviewColor(color);
         this.abspoints = clone.absolutePoints;
         this.active = true;
@@ -1351,13 +1351,13 @@ class mxEdgeHandler {
         this.shape.node.style.display = '';
       }
 
-      var edge = this.state.cell;
-      var index = this.index;
+      let edge = this.state.cell;
+      let index = this.index;
       this.index = null;
 
       // Ignores event if mouse has not been moved
       if (me.getX() != this.startX || me.getY() != this.startY) {
-        var clone = !this.graph.isIgnoreTerminalEvent(me.getEvent()) && this.graph.isCloneEvent(me.getEvent()) &&
+        let clone = !this.graph.isIgnoreTerminalEvent(me.getEvent()) && this.graph.isCloneEvent(me.getEvent()) &&
             this.cloneEnabled && this.graph.isCellsCloneable();
 
         // Displays the reason for not carriying out the change
@@ -1368,7 +1368,7 @@ class mxEdgeHandler {
           }
         } else if (index <= mxEvent.CUSTOM_HANDLE && index > mxEvent.VIRTUAL_HANDLE) {
           if (this.customHandles != null) {
-            var model = this.graph.getModel();
+            let model = this.graph.getModel();
 
             model.beginUpdate();
             try {
@@ -1385,7 +1385,7 @@ class mxEdgeHandler {
         } else if (this.isLabel) {
           this.moveLabel(this.state, this.label.x, this.label.y);
         } else if (this.isSource || this.isTarget) {
-          var terminal = null;
+          let terminal = null;
 
           if (this.constraintHandler.currentConstraint != null &&
               this.constraintHandler.currentFocus != null) {
@@ -1400,15 +1400,15 @@ class mxEdgeHandler {
           }
 
           if (terminal != null) {
-            var model = this.graph.getModel();
-            var parent = model.getParent(edge);
+            let model = this.graph.getModel();
+            let parent = model.getParent(edge);
 
             model.beginUpdate();
             try {
               // Clones and adds the cell
               if (clone) {
-                var geo = model.getGeometry(edge);
-                var clone = this.graph.cloneCell(edge);
+                let geo = model.getGeometry(edge);
+                let clone = this.graph.cloneCell(edge);
                 model.add(parent, clone, model.getChildCount(parent));
 
                 if (geo != null) {
@@ -1416,7 +1416,7 @@ class mxEdgeHandler {
                   model.setGeometry(clone, geo);
                 }
 
-                var other = model.getTerminal(edge, !this.isSource);
+                let other = model.getTerminal(edge, !this.isSource);
                 this.graph.connectCell(clone, other, !this.isSource);
 
                 edge = clone;
@@ -1427,11 +1427,11 @@ class mxEdgeHandler {
               model.endUpdate();
             }
           } else if (this.graph.isAllowDanglingEdges()) {
-            var pt = this.abspoints[(this.isSource) ? 0 : this.abspoints.length - 1];
+            let pt = this.abspoints[(this.isSource) ? 0 : this.abspoints.length - 1];
             pt.x = this.roundLength(pt.x / this.graph.view.scale - this.graph.view.translate.x);
             pt.y = this.roundLength(pt.y / this.graph.view.scale - this.graph.view.translate.y);
 
-            var pstate = this.graph.getView().getState(
+            let pstate = this.graph.getView().getState(
                 this.graph.getModel().getParent(edge));
 
             if (pstate != null) {
@@ -1491,7 +1491,7 @@ class mxEdgeHandler {
     this.active = false;
 
     if (this.livePreview && this.sizers != null) {
-      for (var i = 0; i < this.sizers.length; i++) {
+      for (let i = 0; i < this.sizers.length; i++) {
         if (this.sizers[i] != null) {
           this.sizers[i].node.style.display = '';
         }
@@ -1507,7 +1507,7 @@ class mxEdgeHandler {
     }
 
     if (this.customHandles != null) {
-      for (var i = 0; i < this.customHandles.length; i++) {
+      for (let i = 0; i < this.customHandles.length; i++) {
         this.customHandles[i].reset();
       }
     }
@@ -1542,8 +1542,8 @@ class mxEdgeHandler {
    * gridEnabled - Boolean that specifies if the grid should be applied.
    */
   convertPoint = (point, gridEnabled) => {
-    var scale = this.graph.getView().getScale();
-    var tr = this.graph.getView().getTranslate();
+    let scale = this.graph.getView().getScale();
+    let tr = this.graph.getView().getTranslate();
 
     if (gridEnabled) {
       point.x = this.graph.snap(point.x);
@@ -1553,7 +1553,7 @@ class mxEdgeHandler {
     point.x = Math.round(point.x / scale - tr.x);
     point.y = Math.round(point.y / scale - tr.y);
 
-    var pstate = this.graph.getView().getState(
+    let pstate = this.graph.getView().getState(
         this.graph.getModel().getParent(this.state.cell));
 
     if (pstate != null) {
@@ -1576,32 +1576,32 @@ class mxEdgeHandler {
    * y - Integer that specifies the y-coordinate of the new location.
    */
   moveLabel = (edgeState, x, y) => {
-    var model = this.graph.getModel();
-    var geometry = model.getGeometry(edgeState.cell);
+    let model = this.graph.getModel();
+    let geometry = model.getGeometry(edgeState.cell);
 
     if (geometry != null) {
-      var scale = this.graph.getView().scale;
+      let scale = this.graph.getView().scale;
       geometry = geometry.clone();
 
       if (geometry.relative) {
         // Resets the relative location stored inside the geometry
-        var pt = this.graph.getView().getRelativePoint(edgeState, x, y);
+        let pt = this.graph.getView().getRelativePoint(edgeState, x, y);
         geometry.x = Math.round(pt.x * 10000) / 10000;
         geometry.y = Math.round(pt.y);
 
         // Resets the offset inside the geometry to find the offset
         // from the resulting point
         geometry.offset = new mxPoint(0, 0);
-        var pt = this.graph.view.getPoint(edgeState, geometry);
+        let pt = this.graph.view.getPoint(edgeState, geometry);
         geometry.offset = new mxPoint(Math.round((x - pt.x) / scale), Math.round((y - pt.y) / scale));
       } else {
-        var points = edgeState.absolutePoints;
+        let points = edgeState.absolutePoints;
         var p0 = points[0];
-        var pe = points[points.length - 1];
+        let pe = points[points.length - 1];
 
         if (p0 != null && pe != null) {
-          var cx = p0.x + (pe.x - p0.x) / 2;
-          var cy = p0.y + (pe.y - p0.y) / 2;
+          let cx = p0.x + (pe.x - p0.x) / 2;
+          let cy = p0.y + (pe.y - p0.y) / 2;
 
           geometry.offset = new mxPoint(Math.round((x - cx) / scale), Math.round((y - cy) / scale));
           geometry.x = 0;
@@ -1630,12 +1630,12 @@ class mxEdgeHandler {
    * me - <mxMouseEvent> that contains the mouse up event.
    */
   connect = (edge, terminal, isSource, isClone, me) => {
-    var model = this.graph.getModel();
-    var parent = model.getParent(edge);
+    let model = this.graph.getModel();
+    let parent = model.getParent(edge);
 
     model.beginUpdate();
     try {
-      var constraint = this.constraintHandler.currentConstraint;
+      let constraint = this.constraintHandler.currentConstraint;
 
       if (constraint == null) {
         constraint = new mxConnectionConstraint();
@@ -1655,19 +1655,19 @@ class mxEdgeHandler {
    * Changes the terminal point of the given edge.
    */
   changeTerminalPoint = (edge, point, isSource, clone) => {
-    var model = this.graph.getModel();
+    let model = this.graph.getModel();
 
     model.beginUpdate();
     try {
       if (clone) {
-        var parent = model.getParent(edge);
-        var terminal = model.getTerminal(edge, !isSource);
+        let parent = model.getParent(edge);
+        let terminal = model.getTerminal(edge, !isSource);
         edge = this.graph.cloneCell(edge);
         model.add(parent, edge, model.getChildCount(parent));
         model.setTerminal(edge, terminal, !isSource);
       }
 
-      var geo = model.getGeometry(edge);
+      let geo = model.getGeometry(edge);
 
       if (geo != null) {
         geo = geo.clone();
@@ -1688,20 +1688,20 @@ class mxEdgeHandler {
    * Changes the control points of the given edge in the graph model.
    */
   changePoints = (edge, points, clone) => {
-    var model = this.graph.getModel();
+    let model = this.graph.getModel();
     model.beginUpdate();
     try {
       if (clone) {
-        var parent = model.getParent(edge);
-        var source = model.getTerminal(edge, true);
-        var target = model.getTerminal(edge, false);
+        let parent = model.getParent(edge);
+        let source = model.getTerminal(edge, true);
+        let target = model.getTerminal(edge, false);
         edge = this.graph.cloneCell(edge);
         model.add(parent, edge, model.getChildCount(parent));
         model.setTerminal(edge, source, true);
         model.setTerminal(edge, target, false);
       }
 
-      var geo = model.getGeometry(edge);
+      let geo = model.getGeometry(edge);
 
       if (geo != null) {
         geo = geo.clone();
@@ -1722,9 +1722,9 @@ class mxEdgeHandler {
    * Adds a control point for the given state and event.
    */
   addPoint = (state, evt) => {
-    var pt = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(evt),
+    let pt = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(evt),
         mxEvent.getClientY(evt));
-    var gridEnabled = this.graph.isGridEnabledEvent(evt);
+    let gridEnabled = this.graph.isGridEnabledEvent(evt);
     this.convertPoint(pt, gridEnabled);
     this.addPointAt(state, pt.x, pt.y);
     mxEvent.consume(evt);
@@ -1736,23 +1736,23 @@ class mxEdgeHandler {
    * Adds a control point at the given point.
    */
   addPointAt = (state, x, y) => {
-    var geo = this.graph.getCellGeometry(state.cell);
-    var pt = new mxPoint(x, y);
+    let geo = this.graph.getCellGeometry(state.cell);
+    let pt = new mxPoint(x, y);
 
     if (geo != null) {
       geo = geo.clone();
-      var t = this.graph.view.translate;
-      var s = this.graph.view.scale;
-      var offset = new mxPoint(t.x * s, t.y * s);
+      let t = this.graph.view.translate;
+      let s = this.graph.view.scale;
+      let offset = new mxPoint(t.x * s, t.y * s);
 
-      var parent = this.graph.model.getParent(this.state.cell);
+      let parent = this.graph.model.getParent(this.state.cell);
 
       if (this.graph.model.isVertex(parent)) {
-        var pState = this.graph.view.getState(parent);
+        let pState = this.graph.view.getState(parent);
         offset = new mxPoint(pState.x, pState.y);
       }
 
-      var index = mxUtils.findNearestSegment(state, pt.x * s + offset.x, pt.y * s + offset.y);
+      let index = mxUtils.findNearestSegment(state, pt.x * s + offset.x, pt.y * s + offset.y);
 
       if (geo.points == null) {
         geo.points = [pt];
@@ -1773,7 +1773,7 @@ class mxEdgeHandler {
    */
   removePoint = (state, index) => {
     if (index > 0 && index < this.abspoints.length - 1) {
-      var geo = this.graph.getCellGeometry(this.state.cell);
+      let geo = this.graph.getCellGeometry(this.state.cell);
 
       if (geo != null && geo.points != null) {
         geo = geo.clone();
@@ -1791,10 +1791,10 @@ class mxEdgeHandler {
    * Returns the fillcolor for the handle at the given index.
    */
   getHandleFillColor = (index) => {
-    var isSource = index == 0;
-    var cell = this.state.cell;
-    var terminal = this.graph.getModel().getTerminal(cell, isSource);
-    var color = mxConstants.HANDLE_FILLCOLOR;
+    let isSource = index == 0;
+    let cell = this.state.cell;
+    let terminal = this.graph.getModel().getTerminal(cell, isSource);
+    let color = mxConstants.HANDLE_FILLCOLOR;
 
     if ((terminal != null && !this.graph.isCellDisconnectable(cell, terminal, isSource)) ||
         (terminal == null && !this.graph.isTerminalPointMovable(cell, isSource))) {
@@ -1814,10 +1814,10 @@ class mxEdgeHandler {
   redraw = (ignoreHandles) => {
     if (this.state != null) {
       this.abspoints = this.state.absolutePoints.slice();
-      var g = this.graph.getModel().getGeometry(this.state.cell);
+      let g = this.graph.getModel().getGeometry(this.state.cell);
 
       if (g != null) {
-        var pts = g.points;
+        let pts = g.points;
 
         if (this.bends != null && this.bends.length > 0) {
           if (pts != null) {
@@ -1825,7 +1825,7 @@ class mxEdgeHandler {
               this.points = [];
             }
 
-            for (var i = 1; i < this.bends.length - 1; i++) {
+            for (let i = 1; i < this.bends.length - 1; i++) {
               if (this.bends[i] != null && this.abspoints[i] != null) {
                 this.points[i - 1] = pts[i - 1];
               }
@@ -1848,20 +1848,20 @@ class mxEdgeHandler {
    * Redraws the handles.
    */
   redrawHandles = () => {
-    var cell = this.state.cell;
+    let cell = this.state.cell;
 
     // Updates the handle for the label position
-    var b = this.labelShape.bounds;
+    let b = this.labelShape.bounds;
     this.label = new mxPoint(this.state.absoluteOffset.x, this.state.absoluteOffset.y);
     this.labelShape.bounds = new mxRectangle(Math.round(this.label.x - b.width / 2),
         Math.round(this.label.y - b.height / 2), b.width, b.height);
 
     // Shows or hides the label handle depending on the label
-    var lab = this.graph.getLabel(cell);
+    let lab = this.graph.getLabel(cell);
     this.labelShape.visible = (lab != null && lab.length > 0 && this.graph.isLabelMovable(cell));
 
     if (this.bends != null && this.bends.length > 0) {
-      var n = this.abspoints.length - 1;
+      let n = this.abspoints.length - 1;
 
       var p0 = this.abspoints[0];
       var x0 = p0.x;
@@ -1877,11 +1877,11 @@ class mxEdgeHandler {
         this.checkLabelHandle(this.bends[0].bounds);
       }
 
-      var pe = this.abspoints[n];
-      var xn = pe.x;
-      var yn = pe.y;
+      let pe = this.abspoints[n];
+      let xn = pe.x;
+      let yn = pe.y;
 
-      var bn = this.bends.length - 1;
+      let bn = this.bends.length - 1;
       b = this.bends[bn].bounds;
       this.bends[bn].bounds = new mxRectangle(Math.floor(xn - b.width / 2),
           Math.floor(yn - b.height / 2), b.width, b.height);
@@ -1896,14 +1896,14 @@ class mxEdgeHandler {
     }
 
     if (this.abspoints != null && this.virtualBends != null && this.virtualBends.length > 0) {
-      var last = this.abspoints[0];
+      let last = this.abspoints[0];
 
-      for (var i = 0; i < this.virtualBends.length; i++) {
+      for (let i = 0; i < this.virtualBends.length; i++) {
         if (this.virtualBends[i] != null && this.abspoints[i + 1] != null) {
-          var pt = this.abspoints[i + 1];
-          var b = this.virtualBends[i];
-          var x = last.x + (pt.x - last.x) / 2;
-          var y = last.y + (pt.y - last.y) / 2;
+          let pt = this.abspoints[i + 1];
+          let b = this.virtualBends[i];
+          let x = last.x + (pt.x - last.x) / 2;
+          let y = last.y + (pt.y - last.y) / 2;
           b.bounds = new mxRectangle(Math.floor(x - b.bounds.width / 2),
               Math.floor(y - b.bounds.height / 2), b.bounds.width, b.bounds.height);
           b.redraw();
@@ -1922,8 +1922,8 @@ class mxEdgeHandler {
     }
 
     if (this.customHandles != null) {
-      for (var i = 0; i < this.customHandles.length; i++) {
-        var temp = this.customHandles[i].shape.node.style.display;
+      for (let i = 0; i < this.customHandles.length; i++) {
+        let temp = this.customHandles[i].shape.node.style.display;
         this.customHandles[i].redraw();
         this.customHandles[i].shape.node.style.display = temp;
 
@@ -1951,13 +1951,13 @@ class mxEdgeHandler {
    */
   setHandlesVisible = (visible) => {
     if (this.bends != null) {
-      for (var i = 0; i < this.bends.length; i++) {
+      for (let i = 0; i < this.bends.length; i++) {
         this.bends[i].node.style.display = (visible) ? '' : 'none';
       }
     }
 
     if (this.virtualBends != null) {
-      for (var i = 0; i < this.virtualBends.length; i++) {
+      for (let i = 0; i < this.virtualBends.length; i++) {
         this.virtualBends[i].node.style.display = (visible) ? '' : 'none';
       }
     }
@@ -1967,7 +1967,7 @@ class mxEdgeHandler {
     }
 
     if (this.customHandles != null) {
-      for (var i = 0; i < this.customHandles.length; i++) {
+      for (let i = 0; i < this.customHandles.length; i++) {
         this.customHandles[i].setVisible(visible);
       }
     }
@@ -1984,13 +1984,13 @@ class mxEdgeHandler {
    * pe - <mxPoint> that represents the location of the last point.
    */
   redrawInnerBends = (p0, pe) => {
-    for (var i = 1; i < this.bends.length - 1; i++) {
+    for (let i = 1; i < this.bends.length - 1; i++) {
       if (this.bends[i] != null) {
         if (this.abspoints[i] != null) {
-          var x = this.abspoints[i].x;
-          var y = this.abspoints[i].y;
+          let x = this.abspoints[i].x;
+          let y = this.abspoints[i].y;
 
-          var b = this.bends[i].bounds;
+          let b = this.bends[i].bounds;
           this.bends[i].node.style.visibility = 'visible';
           this.bends[i].bounds = new mxRectangle(Math.round(x - b.width / 2),
               Math.round(y - b.height / 2), b.width, b.height);
@@ -2040,8 +2040,8 @@ class mxEdgeHandler {
   drawPreview = () => {
     try {
       if (this.isLabel) {
-        var b = this.labelShape.bounds;
-        var bounds = new mxRectangle(Math.round(this.label.x - b.width / 2),
+        let b = this.labelShape.bounds;
+        let bounds = new mxRectangle(Math.round(this.label.x - b.width / 2),
             Math.round(this.label.y - b.height / 2), b.width, b.height);
 
         if (!this.labelShape.bounds.equals(bounds)) {
@@ -2115,7 +2115,7 @@ class mxEdgeHandler {
    */
   destroyBends = (bends) => {
     if (bends != null) {
-      for (var i = 0; i < bends.length; i++) {
+      for (let i = 0; i < bends.length; i++) {
         if (bends[i] != null) {
           bends[i].destroy();
         }
@@ -2147,8 +2147,8 @@ class mxEdgeHandler {
     }
 
     if (this.parentHighlight != null) {
-      var parent = this.graph.model.getParent(this.state.cell);
-      var pstate = this.graph.view.getState(parent);
+      let parent = this.graph.model.getParent(this.state.cell);
+      let pstate = this.graph.view.getState(parent);
 
       if (pstate != null && pstate.parentHighlight == this.parentHighlight) {
         pstate.parentHighlight = null;
diff --git a/src/js/handler/mxEdgeSegmentHandler.js b/src/js/handler/mxEdgeSegmentHandler.js
index 7d4af197a..f530ce925 100644
--- a/src/js/handler/mxEdgeSegmentHandler.js
+++ b/src/js/handler/mxEdgeSegmentHandler.js
@@ -16,17 +16,17 @@ class mxEdgeSegmentHandler extends mxElbowEdgeHandler {
    * Returns the current absolute points.
    */
   getCurrentPoints = () => {
-    var pts = this.state.absolutePoints;
+    let pts = this.state.absolutePoints;
 
     if (pts != null) {
       // Special case for straight edges where we add a virtual middle handle for moving the edge
-      var tol = Math.max(1, this.graph.view.scale);
+      let tol = Math.max(1, this.graph.view.scale);
 
       if (pts.length == 2 || (pts.length == 3 &&
           (Math.abs(pts[0].x - pts[1].x) < tol && Math.abs(pts[1].x - pts[2].x) < tol ||
               Math.abs(pts[0].y - pts[1].y) < tol && Math.abs(pts[1].y - pts[2].y) < tol))) {
-        var cx = pts[0].x + (pts[pts.length - 1].x - pts[0].x) / 2;
-        var cy = pts[0].y + (pts[pts.length - 1].y - pts[0].y) / 2;
+        let cx = pts[0].x + (pts[pts.length - 1].x - pts[0].x) / 2;
+        let cy = pts[0].y + (pts[pts.length - 1].y - pts[0].y) / 2;
 
         pts = [pts[0], new mxPoint(cx, cy), new mxPoint(cx, cy), pts[pts.length - 1]];
       }
@@ -44,13 +44,13 @@ class mxEdgeSegmentHandler extends mxElbowEdgeHandler {
     if (this.isSource || this.isTarget) {
       return getPreviewPoints.apply(this, arguments);
     } else {
-      var pts = this.getCurrentPoints();
-      var last = this.convertPoint(pts[0].clone(), false);
+      let pts = this.getCurrentPoints();
+      let last = this.convertPoint(pts[0].clone(), false);
       point = this.convertPoint(point.clone(), false);
-      var result = [];
+      let result = [];
 
-      for (var i = 1; i < pts.length; i++) {
-        var pt = this.convertPoint(pts[i].clone(), false);
+      for (let i = 1; i < pts.length; i++) {
+        let pt = this.convertPoint(pts[i].clone(), false);
 
         if (i == this.index) {
           if (Math.round(last.x - pt.x) == 0) {
@@ -73,13 +73,13 @@ class mxEdgeSegmentHandler extends mxElbowEdgeHandler {
 
       // Replaces single point that intersects with source or target
       if (result.length == 1) {
-        var source = this.state.getVisibleTerminalState(true);
-        var target = this.state.getVisibleTerminalState(false);
-        var scale = this.state.view.getScale();
-        var tr = this.state.view.getTranslate();
+        let source = this.state.getVisibleTerminalState(true);
+        let target = this.state.getVisibleTerminalState(false);
+        let scale = this.state.view.getScale();
+        let tr = this.state.view.getTranslate();
 
-        var x = result[0].x * scale + tr.x;
-        var y = result[0].y * scale + tr.y;
+        let x = result[0].x * scale + tr.x;
+        let y = result[0].y * scale + tr.y;
 
         if ((source != null && mxUtils.contains(source, x, y)) ||
             (target != null && mxUtils.contains(target, x, y))) {
@@ -102,13 +102,13 @@ class mxEdgeSegmentHandler extends mxElbowEdgeHandler {
     // Checks and corrects preview by running edge style again
     if (!this.isSource && !this.isTarget) {
       point = this.convertPoint(point.clone(), false);
-      var pts = edge.absolutePoints;
+      let pts = edge.absolutePoints;
       var pt0 = pts[0];
       var pt1 = pts[1];
 
-      var result = [];
+      let result = [];
 
-      for (var i = 2; i < pts.length; i++) {
+      for (let i = 2; i < pts.length; i++) {
         var pt2 = pts[i];
 
         // Merges adjacent segments only if more than 2 to allow for straight edges
@@ -121,9 +121,9 @@ class mxEdgeSegmentHandler extends mxElbowEdgeHandler {
         pt1 = pt2;
       }
 
-      var source = this.state.getVisibleTerminalState(true);
-      var target = this.state.getVisibleTerminalState(false);
-      var rpts = this.state.absolutePoints;
+      let source = this.state.getVisibleTerminalState(true);
+      let target = this.state.getVisibleTerminalState(false);
+      let rpts = this.state.absolutePoints;
 
       // A straight line is represented by 3 handles
       if (result.length == 0 && (Math.round(pts[0].x - pts[pts.length - 1].x) == 0 ||
@@ -133,17 +133,17 @@ class mxEdgeSegmentHandler extends mxElbowEdgeHandler {
       // Handles special case of transitions from straight vertical to routed
       else if (pts.length == 5 && result.length == 2 && source != null && target != null &&
           rpts != null && Math.round(rpts[0].x - rpts[rpts.length - 1].x) == 0) {
-        var view = this.graph.getView();
-        var scale = view.getScale();
-        var tr = view.getTranslate();
+        let view = this.graph.getView();
+        let scale = view.getScale();
+        let tr = view.getTranslate();
 
         var y0 = view.getRoutingCenterY(source) / scale - tr.y;
 
         // Use fixed connection point y-coordinate if one exists
-        var sc = this.graph.getConnectionConstraint(edge, source, true);
+        let sc = this.graph.getConnectionConstraint(edge, source, true);
 
         if (sc != null) {
-          var pt = this.graph.getConnectionPoint(source, sc);
+          let pt = this.graph.getConnectionPoint(source, sc);
 
           if (pt != null) {
             this.convertPoint(pt, false);
@@ -151,13 +151,13 @@ class mxEdgeSegmentHandler extends mxElbowEdgeHandler {
           }
         }
 
-        var ye = view.getRoutingCenterY(target) / scale - tr.y;
+        let ye = view.getRoutingCenterY(target) / scale - tr.y;
 
         // Use fixed connection point y-coordinate if one exists
-        var tc = this.graph.getConnectionConstraint(edge, target, false);
+        let tc = this.graph.getConnectionConstraint(edge, target, false);
 
         if (tc) {
-          var pt = this.graph.getConnectionPoint(target, tc);
+          let pt = this.graph.getConnectionPoint(target, tc);
 
           if (pt != null) {
             this.convertPoint(pt, false);
@@ -181,18 +181,18 @@ class mxEdgeSegmentHandler extends mxElbowEdgeHandler {
    * Overriden to merge edge segments.
    */
   connect = (edge, terminal, isSource, isClone, me) => {
-    var model = this.graph.getModel();
-    var geo = model.getGeometry(edge);
-    var result = null;
+    let model = this.graph.getModel();
+    let geo = model.getGeometry(edge);
+    let result = null;
 
     // Merges adjacent edge segments
     if (geo != null && geo.points != null && geo.points.length > 0) {
-      var pts = this.abspoints;
+      let pts = this.abspoints;
       var pt0 = pts[0];
       var pt1 = pts[1];
       result = [];
 
-      for (var i = 2; i < pts.length; i++) {
+      for (let i = 2; i < pts.length; i++) {
         var pt2 = pts[i];
 
         // Merges adjacent segments only if more than 2 to allow for straight edges
@@ -209,7 +209,7 @@ class mxEdgeSegmentHandler extends mxElbowEdgeHandler {
     model.beginUpdate();
     try {
       if (result != null) {
-        var geo = model.getGeometry(edge);
+        let geo = model.getGeometry(edge);
 
         if (geo != null) {
           geo = geo.clone();
@@ -256,15 +256,15 @@ class mxEdgeSegmentHandler extends mxElbowEdgeHandler {
    * Adds custom bends for the center of each segment.
    */
   createBends = () => {
-    var bends = [];
+    let bends = [];
 
     // Source
-    var bend = this.createHandleShape(0);
+    let bend = this.createHandleShape(0);
     this.initBend(bend);
     bend.setCursor(mxConstants.CURSOR_TERMINAL_HANDLE);
     bends.push(bend);
 
-    var pts = this.getCurrentPoints();
+    let pts = this.getCurrentPoints();
 
     // Waypoints (segment handles)
     if (this.graph.isCellBendable(this.state.cell)) {
@@ -272,10 +272,10 @@ class mxEdgeSegmentHandler extends mxElbowEdgeHandler {
         this.points = [];
       }
 
-      for (var i = 0; i < pts.length - 1; i++) {
+      for (let i = 0; i < pts.length - 1; i++) {
         bend = this.createVirtualBend();
         bends.push(bend);
-        var horizontal = Math.round(pts[i].x - pts[i + 1].x) == 0;
+        let horizontal = Math.round(pts[i].x - pts[i + 1].x) == 0;
 
         // Special case where dy is 0 as well
         if (Math.round(pts[i].y - pts[i + 1].y) == 0 && i < pts.length - 2) {
@@ -288,7 +288,7 @@ class mxEdgeSegmentHandler extends mxElbowEdgeHandler {
     }
 
     // Target
-    var bend = this.createHandleShape(pts.length);
+    let bend = this.createHandleShape(pts.length);
     this.initBend(bend);
     bend.setCursor(mxConstants.CURSOR_TERMINAL_HANDLE);
     bends.push(bend);
@@ -313,32 +313,32 @@ class mxEdgeSegmentHandler extends mxElbowEdgeHandler {
    */
   redrawInnerBends = (p0, pe) => {
     if (this.graph.isCellBendable(this.state.cell)) {
-      var pts = this.getCurrentPoints();
+      let pts = this.getCurrentPoints();
 
       if (pts != null && pts.length > 1) {
-        var straight = false;
+        let straight = false;
 
         // Puts handle in the center of straight edges
         if (pts.length == 4 && Math.round(pts[1].x - pts[2].x) == 0 && Math.round(pts[1].y - pts[2].y) == 0) {
           straight = true;
 
           if (Math.round(pts[0].y - pts[pts.length - 1].y) == 0) {
-            var cx = pts[0].x + (pts[pts.length - 1].x - pts[0].x) / 2;
+            let cx = pts[0].x + (pts[pts.length - 1].x - pts[0].x) / 2;
             pts[1] = new mxPoint(cx, pts[1].y);
             pts[2] = new mxPoint(cx, pts[2].y);
           } else {
-            var cy = pts[0].y + (pts[pts.length - 1].y - pts[0].y) / 2;
+            let cy = pts[0].y + (pts[pts.length - 1].y - pts[0].y) / 2;
             pts[1] = new mxPoint(pts[1].x, cy);
             pts[2] = new mxPoint(pts[2].x, cy);
           }
         }
 
-        for (var i = 0; i < pts.length - 1; i++) {
+        for (let i = 0; i < pts.length - 1; i++) {
           if (this.bends[i + 1] != null) {
             var p0 = pts[i];
-            var pe = pts[i + 1];
-            var pt = new mxPoint(p0.x + (pe.x - p0.x) / 2, p0.y + (pe.y - p0.y) / 2);
-            var b = this.bends[i + 1].bounds;
+            let pe = pts[i + 1];
+            let pt = new mxPoint(p0.x + (pe.x - p0.x) / 2, p0.y + (pe.y - p0.y) / 2);
+            let b = this.bends[i + 1].bounds;
             this.bends[i + 1].bounds = new mxRectangle(Math.floor(pt.x - b.width / 2),
                 Math.floor(pt.y - b.height / 2), b.width, b.height);
             this.bends[i + 1].redraw();
diff --git a/src/js/handler/mxElbowEdgeHandler.js b/src/js/handler/mxElbowEdgeHandler.js
index 0d3912991..15ec5e592 100644
--- a/src/js/handler/mxElbowEdgeHandler.js
+++ b/src/js/handler/mxElbowEdgeHandler.js
@@ -47,10 +47,10 @@ class mxElbowEdgeHandler extends mxEdgeHandler {
    * Overrides <mxEdgeHandler.createBends> to create custom bends.
    */
   createBends = () => {
-    var bends = [];
+    let bends = [];
 
     // Source
-    var bend = this.createHandleShape(0);
+    let bend = this.createHandleShape(0);
     this.initBend(bend);
     bend.setCursor(mxConstants.CURSOR_TERMINAL_HANDLE);
     bends.push(bend);
@@ -81,7 +81,7 @@ class mxElbowEdgeHandler extends mxEdgeHandler {
    * <mxGraph.flipEdge>.
    */
   createVirtualBend = (dblClickHandler) => {
-    var bend = this.createHandleShape();
+    let bend = this.createHandleShape();
     this.initBend(bend, dblClickHandler);
 
     bend.setCursor(this.getCursorForBend());
@@ -113,7 +113,7 @@ class mxElbowEdgeHandler extends mxEdgeHandler {
    * Returns the tooltip for the given node.
    */
   getTooltipForNode = (node) => {
-    var tip = null;
+    let tip = null;
 
     if (this.bends != null && this.bends[1] != null && (node === this.bends[1].node ||
         node.parentNode === this.bends[1].node)) {
@@ -136,9 +136,9 @@ class mxElbowEdgeHandler extends mxEdgeHandler {
    * gridEnabled - Boolean that specifies if the grid should be applied.
    */
   convertPoint = (point, gridEnabled) => {
-    var scale = this.graph.getView().getScale();
-    var tr = this.graph.getView().getTranslate();
-    var origin = this.state.origin;
+    let scale = this.graph.getView().getScale();
+    let tr = this.graph.getView().getTranslate();
+    let origin = this.state.origin;
 
     if (gridEnabled) {
       point.x = this.graph.snap(point.x);
@@ -162,9 +162,9 @@ class mxElbowEdgeHandler extends mxEdgeHandler {
    * pe - <mxPoint> that represents the location of the last point.
    */
   redrawInnerBends = (p0, pe) => {
-    var g = this.graph.getModel().getGeometry(this.state.cell);
-    var pts = this.state.absolutePoints;
-    var pt = null;
+    let g = this.graph.getModel().getGeometry(this.state.cell);
+    let pts = this.state.absolutePoints;
+    let pt = null;
 
     // Keeps the virtual bend on the edge shape
     if (pts.length > 1) {
@@ -183,10 +183,10 @@ class mxElbowEdgeHandler extends mxEdgeHandler {
 
     // Makes handle slightly bigger if the yellow  label handle
     // exists and intersects this green handle
-    var b = this.bends[1].bounds;
-    var w = b.width;
-    var h = b.height;
-    var bounds = new mxRectangle(Math.round(pt.x - w / 2), Math.round(pt.y - h / 2), w, h);
+    let b = this.bends[1].bounds;
+    let w = b.width;
+    let h = b.height;
+    let bounds = new mxRectangle(Math.round(pt.x - w / 2), Math.round(pt.y - h / 2), w, h);
 
     if (this.manageLabelHandle) {
       this.checkLabelHandle(bounds);
diff --git a/src/js/handler/mxGraphHandler.js b/src/js/handler/mxGraphHandler.js
index 23abad672..41efdd234 100644
--- a/src/js/handler/mxGraphHandler.js
+++ b/src/js/handler/mxGraphHandler.js
@@ -250,8 +250,8 @@ class mxGraphHandler {
 
         if (this.first != null && !this.suspended) {
           // Updates preview with no translate to compute bounding box
-          var dx = this.currentDx;
-          var dy = this.currentDy;
+          let dx = this.currentDx;
+          let dy = this.currentDy;
           this.currentDx = 0;
           this.currentDy = 0;
           this.updatePreview();
@@ -284,7 +284,7 @@ class mxGraphHandler {
     this.keyHandler = (e) => {
       if (this.graph.container != null && this.graph.container.style.visibility != 'hidden' &&
           this.first != null && !this.suspended) {
-        var clone = this.graph.isCloneEvent(e) &&
+        let clone = this.graph.isCloneEvent(e) &&
             this.graph.isCellsCloneable() &&
             this.isCloneEnabled();
 
@@ -401,10 +401,10 @@ class mxGraphHandler {
    * selection state to the parent.
    */
   isPropagateSelectionCell = (cell, immediate, me) => {
-    var parent = this.graph.model.getParent(cell);
+    let parent = this.graph.model.getParent(cell);
 
     if (immediate) {
-      var geo = (this.graph.model.isEdge(cell)) ? null :
+      let geo = (this.graph.model.isEdge(cell)) ? null :
           this.graph.getCellGeometry(cell);
 
       return !this.graph.isSiblingSelected(cell) &&
@@ -428,12 +428,12 @@ class mxGraphHandler {
    * the topmost cell that is not a swimlane or is selected.
    */
   getInitialCellForEvent = (me) => {
-    var state = me.getState();
+    let state = me.getState();
 
     if ((!this.graph.isToggleEvent(me.getEvent()) || !mxEvent.isAltDown(me.getEvent())) &&
         state != null && !this.graph.isCellSelected(state.cell)) {
-      var model = this.graph.model;
-      var next = this.graph.view.getState(model.getParent(state.cell));
+      let model = this.graph.model;
+      let next = this.graph.view.getState(model.getParent(state.cell));
 
       while (next != null && !this.graph.isCellSelected(next.cell) &&
       (model.isVertex(next.cell) || model.isEdge(next.cell)) &&
@@ -472,7 +472,7 @@ class mxGraphHandler {
    */
   selectDelayed = (me) => {
     if (!this.graph.popupMenuHandler.isPopupTrigger(me)) {
-      var cell = me.getCell();
+      let cell = me.getCell();
 
       if (cell == null) {
         cell = this.cell;
@@ -488,7 +488,7 @@ class mxGraphHandler {
    * Selects the given cell for the given <mxMouseEvent>.
    */
   selectCellForEvent = (cell, me) => {
-    var state = this.graph.view.getState(cell);
+    let state = this.graph.view.getState(cell);
 
     if (state != null) {
       if (me.isSource(state.control)) {
@@ -496,8 +496,8 @@ class mxGraphHandler {
       } else {
         if (!this.graph.isToggleEvent(me.getEvent()) ||
             !mxEvent.isAltDown(me.getEvent())) {
-          var model = this.graph.getModel();
-          var parent = model.getParent(cell);
+          let model = this.graph.getModel();
+          let parent = model.getParent(cell);
 
           while (this.graph.view.getState(parent) != null &&
           (model.isVertex(parent) || model.isEdge(parent)) &&
@@ -524,7 +524,7 @@ class mxGraphHandler {
    * <code>
    * consumeMouseEvent = (evtName, me)=>
    * {
-   *   var source = mxEvent.getSource(me.getEvent());
+   *   let source = mxEvent.getSource(me.getEvent());
    *
    *   if (!mxEvent.isTouchEvent(me.getEvent()) || source.nodeName != 'A')
    *   {
@@ -547,7 +547,7 @@ class mxGraphHandler {
   mouseDown = (sender, me) => {
     if (!me.isConsumed() && this.isEnabled() && this.graph.isEnabled() &&
         me.getState() != null && !mxEvent.isMultiTouchEvent(me.getEvent())) {
-      var cell = this.getInitialCellForEvent(me);
+      let cell = this.getInitialCellForEvent(me);
       this.delayedSelection = this.isDelayedSelection(cell, me);
       this.cell = null;
 
@@ -556,8 +556,8 @@ class mxGraphHandler {
       }
 
       if (this.isMoveEnabled()) {
-        var model = this.graph.model;
-        var geo = model.getGeometry(cell);
+        let model = this.graph.model;
+        let geo = model.getGeometry(cell);
 
         if (this.graph.isCellMovable(cell) && ((!model.isEdge(cell) || this.graph.getSelectionCount() > 1 ||
             (geo.points != null && geo.points.length > 0) || model.getTerminal(cell, true) == null ||
@@ -580,10 +580,10 @@ class mxGraphHandler {
    * Creates an array of cell states which should be used as guides.
    */
   getGuideStates = () => {
-    var parent = this.graph.getDefaultParent();
-    var model = this.graph.getModel();
+    let parent = this.graph.getDefaultParent();
+    let model = this.graph.getModel();
 
-    var filter = mxUtils.bind(this, (cell) => {
+    let filter = mxUtils.bind(this, (cell) => {
       return this.graph.view.getState(cell) != null &&
           model.isVertex(cell) &&
           model.getGeometry(cell) != null &&
@@ -620,7 +620,7 @@ class mxGraphHandler {
    * moving the given cells.
    */
   getPreviewBounds = (cells) => {
-    var bounds = this.getBoundingBox(cells);
+    let bounds = this.getBoundingBox(cells);
 
     if (bounds != null) {
       // Corrects width and height
@@ -628,7 +628,7 @@ class mxGraphHandler {
       bounds.height = Math.max(0, bounds.height - 1);
 
       if (bounds.width < this.minimumSize) {
-        var dx = this.minimumSize - bounds.width;
+        let dx = this.minimumSize - bounds.width;
         bounds.x -= dx / 2;
         bounds.width = this.minimumSize;
       } else {
@@ -636,11 +636,11 @@ class mxGraphHandler {
         bounds.width = Math.ceil(bounds.width);
       }
 
-      var tr = this.graph.view.translate;
-      var s = this.graph.view.scale;
+      let tr = this.graph.view.translate;
+      let s = this.graph.view.scale;
 
       if (bounds.height < this.minimumSize) {
-        var dy = this.minimumSize - bounds.height;
+        let dy = this.minimumSize - bounds.height;
         bounds.y -= dy / 2;
         bounds.height = this.minimumSize;
       } else {
@@ -666,17 +666,17 @@ class mxGraphHandler {
    * cells - Array of <mxCells> whose bounding box should be returned.
    */
   getBoundingBox = (cells) => {
-    var result = null;
+    let result = null;
 
     if (cells != null && cells.length > 0) {
-      var model = this.graph.getModel();
+      let model = this.graph.getModel();
 
-      for (var i = 0; i < cells.length; i++) {
+      for (let i = 0; i < cells.length; i++) {
         if (model.isVertex(cells[i]) || model.isEdge(cells[i])) {
-          var state = this.graph.view.getState(cells[i]);
+          let state = this.graph.view.getState(cells[i]);
 
           if (state != null) {
-            var bbox = state;
+            let bbox = state;
 
             if (model.isVertex(cells[i]) && state.shape != null && state.shape.boundingBox != null) {
               bbox = state.shape.boundingBox;
@@ -701,7 +701,7 @@ class mxGraphHandler {
    * Creates the shape used to draw the preview for the given bounds.
    */
   createPreviewShape = (bounds) => {
-    var shape = new mxRectangleShape(bounds, null, this.previewColor);
+    let shape = new mxRectangleShape(bounds, null, this.previewColor);
     shape.isDashed = true;
 
     if (this.htmlPreview) {
@@ -742,21 +742,21 @@ class mxGraphHandler {
     this.cloning = false;
     this.cellCount = 0;
 
-    for (var i = 0; i < this.cells.length; i++) {
+    for (let i = 0; i < this.cells.length; i++) {
       this.cellCount += this.addStates(this.cells[i], this.allCells);
     }
 
     if (this.guidesEnabled) {
       this.guide = new mxGuide(this.graph, this.getGuideStates());
-      var parent = this.graph.model.getParent(cell);
-      var ignore = this.graph.model.getChildCount(parent) < 2;
+      let parent = this.graph.model.getParent(cell);
+      let ignore = this.graph.model.getChildCount(parent) < 2;
 
       // Uses connected states as guides
-      var connected = new mxDictionary();
-      var opps = this.graph.getOpposites(this.graph.getEdges(this.cell), this.cell);
+      let connected = new mxDictionary();
+      let opps = this.graph.getOpposites(this.graph.getEdges(this.cell), this.cell);
 
-      for (var i = 0; i < opps.length; i++) {
-        var state = this.graph.view.getState(opps[i]);
+      for (let i = 0; i < opps.length; i++) {
+        let state = this.graph.view.getState(opps[i]);
 
         if (state != null && !connected.get(state)) {
           connected.put(state, true);
@@ -764,7 +764,7 @@ class mxGraphHandler {
       }
 
       this.guide.isStateIgnored = (state) => {
-        var p = this.graph.model.getParent(state.cell);
+        let p = this.graph.model.getParent(state.cell);
 
         return state.cell != null && ((!this.cloning &&
             this.isCellMoving(state.cell)) ||
@@ -782,16 +782,16 @@ class mxGraphHandler {
    * Adds the states for the given cell recursively to the given dictionary.
    */
   addStates = (cell, dict) => {
-    var state = this.graph.view.getState(cell);
-    var count = 0;
+    let state = this.graph.view.getState(cell);
+    let count = 0;
 
     if (state != null && dict.get(cell) == null) {
       dict.put(cell, state);
       count++;
 
-      var childCount = this.graph.model.getChildCount(cell);
+      let childCount = this.graph.model.getChildCount(cell);
 
-      for (var i = 0; i < childCount; i++) {
+      for (let i = 0; i < childCount; i++) {
         count += this.addStates(this.graph.model.getChildAt(cell, i), dict);
       }
     }
@@ -826,7 +826,7 @@ class mxGraphHandler {
    * Snaps the given vector to the grid and returns the given mxPoint instance.
    */
   snap = (vector) => {
-    var scale = (this.scaleGrid) ? this.graph.view.scale : 1;
+    let scale = (this.scaleGrid) ? this.graph.view.scale : 1;
 
     vector.x = this.graph.snap(vector.x / scale) * scale;
     vector.y = this.graph.snap(vector.y / scale) * scale;
@@ -841,7 +841,7 @@ class mxGraphHandler {
    * for the given <mxMouseEvent>.
    */
   getDelta = (me) => {
-    var point = mxUtils.convertPoint(this.graph.container, me.getX(), me.getY());
+    let point = mxUtils.convertPoint(this.graph.container, me.getX(), me.getY());
 
     return new mxPoint(point.x - this.first.x - this.graph.panDx,
         point.y - this.first.y - this.graph.panDy);
@@ -909,7 +909,7 @@ class mxGraphHandler {
    * preview.
    */
   mouseMove = (sender, me) => {
-    var graph = this.graph;
+    let graph = this.graph;
 
     if (!me.isConsumed() && graph.isMouseDown && this.cell != null &&
         this.first != null && this.bounds != null && !this.suspended) {
@@ -919,8 +919,8 @@ class mxGraphHandler {
         return;
       }
 
-      var delta = this.getDelta(me);
-      var tol = graph.tolerance;
+      let delta = this.getDelta(me);
+      let tol = graph.tolerance;
 
       if (this.shape != null || this.livePreviewActive || Math.abs(delta.x) > tol || Math.abs(delta.y) > tol) {
         // Highlight is used for highlighting drop targets
@@ -929,11 +929,11 @@ class mxGraphHandler {
               mxConstants.DROP_TARGET_COLOR, 3);
         }
 
-        var clone = graph.isCloneEvent(me.getEvent()) && graph.isCellsCloneable() && this.isCloneEnabled();
-        var gridEnabled = graph.isGridEnabledEvent(me.getEvent());
-        var cell = me.getCell();
-        var hideGuide = true;
-        var target = null;
+        let clone = graph.isCloneEvent(me.getEvent()) && graph.isCellsCloneable() && this.isCloneEnabled();
+        let gridEnabled = graph.isGridEnabledEvent(me.getEvent());
+        let cell = me.getCell();
+        let hideGuide = true;
+        let target = null;
         this.cloning = clone;
 
         if (graph.isDropEnabled() && this.highlightEnabled) {
@@ -941,8 +941,8 @@ class mxGraphHandler {
           target = graph.getDropTarget(this.cells, me.getEvent(), cell, clone);
         }
 
-        var state = graph.getView().getState(target);
-        var highlight = false;
+        let state = graph.getView().getState(target);
+        let highlight = false;
 
         if (state != null && (clone || this.isValidDropTarget(target, me))) {
           if (this.target != target) {
@@ -959,8 +959,8 @@ class mxGraphHandler {
             state = graph.getView().getState(cell);
 
             if (state != null) {
-              var error = graph.getEdgeValidationError(null, this.cell, cell);
-              var color = (error == null) ?
+              let error = graph.getEdgeValidationError(null, this.cell, cell);
+              let color = (error == null) ?
                   mxConstants.VALID_COLOR :
                   mxConstants.INVALID_CONNECT_TARGET_COLOR;
               this.setHighlightColor(color);
@@ -1013,7 +1013,7 @@ class mxGraphHandler {
       mxEvent.consume(me.getEvent());
     } else if ((this.isMoveEnabled() || this.isCloneEnabled()) && this.updateCursor && !me.isConsumed() &&
         (me.getState() != null || me.sourceState != null) && !graph.isMouseDown) {
-      var cursor = graph.getCursorForMouseEvent(me);
+      let cursor = graph.getCursorForMouseEvent(me);
 
       if (cursor == null && graph.isEnabled() && graph.isCellMovable(me.getCell())) {
         if (graph.getModel().isEdge(me.getCell())) {
@@ -1068,11 +1068,11 @@ class mxGraphHandler {
    */
   updateLivePreview = (dx, dy) => {
     if (!this.suspended) {
-      var states = [];
+      let states = [];
 
       if (this.allCells != null) {
         this.allCells.visit(mxUtils.bind(this, (key, state) => {
-          var realState = this.graph.view.getState(state.cell);
+          let realState = this.graph.view.getState(state.cell);
 
           // Checks if cell was removed or replaced
           if (realState != state) {
@@ -1089,7 +1089,7 @@ class mxGraphHandler {
 
           if (state != null) {
             // Saves current state
-            var tempState = state.clone();
+            let tempState = state.clone();
             states.push([state, tempState]);
 
             // Makes transparent for events to detect drop targets
@@ -1153,17 +1153,17 @@ class mxGraphHandler {
         this.reset();
       } else {
         // Redraws connected edges
-        var s = this.graph.view.scale;
+        let s = this.graph.view.scale;
 
-        for (var i = 0; i < states.length; i++) {
-          var state = states[i][0];
+        for (let i = 0; i < states.length; i++) {
+          let state = states[i][0];
 
           if (this.graph.model.isEdge(state.cell)) {
-            var geometry = this.graph.getCellGeometry(state.cell);
-            var points = [];
+            let geometry = this.graph.getCellGeometry(state.cell);
+            let points = [];
 
             if (geometry != null && geometry.points != null) {
-              for (var j = 0; j < geometry.points.length; j++) {
+              for (let j = 0; j < geometry.points.length; j++) {
                 if (geometry.points[j] != null) {
                   points.push(new mxPoint(
                       geometry.points[j].x + dx / s,
@@ -1172,9 +1172,9 @@ class mxGraphHandler {
               }
             }
 
-            var source = state.visibleSourceState;
-            var target = state.visibleTargetState;
-            var pts = states[i][1].absolutePoints;
+            let source = state.visibleSourceState;
+            let target = state.visibleTargetState;
+            let pts = states[i][1].absolutePoints;
 
             if (source == null || !this.isCellMoving(source.cell)) {
               var pt0 = pts[0];
@@ -1186,7 +1186,7 @@ class mxGraphHandler {
             }
 
             if (target == null || !this.isCellMoving(target.cell)) {
-              var ptn = pts[pts.length - 1];
+              let ptn = pts[pts.length - 1];
               state.setAbsoluteTerminalPoint(new mxPoint(ptn.x + dx, ptn.y + dy), false);
               target = null;
             } else {
@@ -1219,8 +1219,8 @@ class mxGraphHandler {
    * Redraws the preview shape for the given states array.
    */
   redrawHandles = (states) => {
-    for (var i = 0; i < states.length; i++) {
-      var handler = this.graph.selectionCellsHandler.getHandler(states[i][0].cell);
+    for (let i = 0; i < states.length; i++) {
+      let handler = this.graph.selectionCellsHandler.getHandler(states[i][0].cell);
 
       if (handler != null) {
         handler.redraw(true);
@@ -1234,7 +1234,7 @@ class mxGraphHandler {
    * Resets the given preview states array.
    */
   resetPreviewStates = (states) => {
-    for (var i = 0; i < states.length; i++) {
+    for (let i = 0; i < states.length; i++) {
       states[i][0].setState(states[i][1]);
     }
   };
@@ -1344,8 +1344,8 @@ class mxGraphHandler {
     if (force || this.handlesVisible != visible) {
       this.handlesVisible = visible;
 
-      for (var i = 0; i < cells.length; i++) {
-        var handler = this.graph.selectionCellsHandler.getHandler(cells[i]);
+      for (let i = 0; i < cells.length; i++) {
+        let handler = this.graph.selectionCellsHandler.getHandler(cells[i]);
 
         if (handler != null) {
           handler.setHandlesVisible(visible);
@@ -1386,18 +1386,18 @@ class mxGraphHandler {
 
       if (this.cell != null && this.first != null && (this.shape != null || this.livePreviewUsed) &&
           this.currentDx != null && this.currentDy != null) {
-        var graph = this.graph;
-        var cell = me.getCell();
+        let graph = this.graph;
+        let cell = me.getCell();
 
         if (this.connectOnDrop && this.target == null && cell != null && graph.getModel().isVertex(cell) &&
             graph.isCellConnectable(cell) && graph.isEdgeValid(null, this.cell, cell)) {
           graph.connectionHandler.connect(this.cell, cell, me.getEvent());
         } else {
-          var clone = graph.isCloneEvent(me.getEvent()) && graph.isCellsCloneable() && this.isCloneEnabled();
-          var scale = graph.getView().scale;
-          var dx = this.roundLength(this.currentDx / scale);
-          var dy = this.roundLength(this.currentDy / scale);
-          var target = this.target;
+          let clone = graph.isCloneEvent(me.getEvent()) && graph.isCellsCloneable() && this.isCloneEnabled();
+          let scale = graph.getView().scale;
+          let dx = this.roundLength(this.currentDx / scale);
+          let dy = this.roundLength(this.currentDy / scale);
+          let target = this.target;
 
           if (graph.isSplitEnabled() && graph.isSplitTarget(target, this.cells, me.getEvent())) {
             graph.splitEdge(target, this.cells, null, dx, dy,
@@ -1460,17 +1460,17 @@ class mxGraphHandler {
    */
   shouldRemoveCellsFromParent = (parent, cells, evt) => {
     if (this.graph.getModel().isVertex(parent)) {
-      var pState = this.graph.getView().getState(parent);
+      let pState = this.graph.getView().getState(parent);
 
       if (pState != null) {
-        var pt = mxUtils.convertPoint(this.graph.container,
+        let pt = mxUtils.convertPoint(this.graph.container,
             mxEvent.getClientX(evt), mxEvent.getClientY(evt));
-        var alpha = mxUtils.toRadians(mxUtils.getValue(pState.style, mxConstants.STYLE_ROTATION) || 0);
+        let alpha = mxUtils.toRadians(mxUtils.getValue(pState.style, mxConstants.STYLE_ROTATION) || 0);
 
         if (alpha != 0) {
-          var cos = Math.cos(-alpha);
-          var sin = Math.sin(-alpha);
-          var cx = new mxPoint(pState.getCenterX(), pState.getCenterY());
+          let cos = Math.cos(-alpha);
+          let sin = Math.sin(-alpha);
+          let cx = new mxPoint(pState.getCenterX(), pState.getCenterY());
           pt = mxUtils.getRotatedPoint(pt, cos, sin, cx);
         }
 
@@ -1492,7 +1492,7 @@ class mxGraphHandler {
     }
 
     // Removes cells from parent
-    var parent = this.graph.getModel().getParent(this.cell);
+    let parent = this.graph.getModel().getParent(this.cell);
 
     if (target == null && this.isRemoveCellsFromParent() &&
         this.shouldRemoveCellsFromParent(parent, cells, evt)) {
@@ -1504,20 +1504,20 @@ class mxGraphHandler {
 
     this.graph.getModel().beginUpdate();
     try {
-      var parents = [];
+      let parents = [];
 
       // Removes parent if all child cells are removed
       if (!clone && target != null && this.removeEmptyParents) {
         // Collects all non-selected parents
-        var dict = new mxDictionary();
+        let dict = new mxDictionary();
 
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           dict.put(cells[i], true);
         }
 
         // LATER: Recurse up the cell hierarchy
-        for (var i = 0; i < cells.length; i++) {
-          var par = this.graph.model.getParent(cells[i]);
+        for (let i = 0; i < cells.length; i++) {
+          let par = this.graph.model.getParent(cells[i]);
 
           if (par != null && !dict.get(par)) {
             dict.put(par, true);
@@ -1531,9 +1531,9 @@ class mxGraphHandler {
       cells = this.graph.moveCells(cells, dx, dy, clone, target, evt);
 
       // Removes parent if all child cells are removed
-      var temp = [];
+      let temp = [];
 
-      for (var i = 0; i < parents.length; i++) {
+      for (let i = 0; i < parents.length; i++) {
         if (this.shouldRemoveParent(parents[i])) {
           temp.push(parents[i]);
         }
@@ -1560,7 +1560,7 @@ class mxGraphHandler {
    * Returns true if the given parent should be removed after removal of child cells.
    */
   shouldRemoveParent = (parent) => {
-    var state = this.graph.view.getState(parent);
+    let state = this.graph.view.getState(parent);
 
     return state != null && (this.graph.model.isEdge(state.cell) || this.graph.model.isVertex(state.cell)) &&
         this.graph.isCellDeletable(state.cell) && this.graph.model.getChildCount(state.cell) == 0 &&
diff --git a/src/js/handler/mxHandle.js b/src/js/handler/mxHandle.js
index ed76d774e..3b005cc63 100644
--- a/src/js/handler/mxHandle.js
+++ b/src/js/handler/mxHandle.js
@@ -87,9 +87,9 @@ class mxHandle {
    * Processes the given <mxMouseEvent> and invokes <setPosition>.
    */
   processEvent = (me) => {
-    var scale = this.graph.view.scale;
-    var tr = this.graph.view.translate;
-    var pt = new mxPoint(me.getGraphX() / scale - tr.x, me.getGraphY() / scale - tr.y);
+    let scale = this.graph.view.scale;
+    let tr = this.graph.view.translate;
+    let pt = new mxPoint(me.getGraphX() / scale - tr.x, me.getGraphY() / scale - tr.y);
 
     // Center shape on mouse cursor
     if (this.shape != null && this.shape.bounds != null) {
@@ -157,7 +157,7 @@ class mxHandle {
    * Creates and initializes the shapes required for this handle.
    */
   init = () => {
-    var html = this.isHtmlRequired();
+    let html = this.isHtmlRequired();
 
     if (this.image != null) {
       this.shape = new mxImageShape(new mxRectangle(0, 0, this.image.width, this.image.height), this.image.src);
@@ -175,7 +175,7 @@ class mxHandle {
    * Creates and returns the shape for this handle.
    */
   createShape = (html) => {
-    var bounds = new mxRectangle(0, 0, mxConstants.HANDLE_SIZE, mxConstants.HANDLE_SIZE);
+    let bounds = new mxRectangle(0, 0, mxConstants.HANDLE_SIZE, mxConstants.HANDLE_SIZE);
 
     return new mxRectangleShape(bounds, mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR);
   };
@@ -209,14 +209,14 @@ class mxHandle {
    */
   redraw = () => {
     if (this.shape != null && this.state.shape != null) {
-      var pt = this.getPosition(this.state.getPaintBounds());
+      let pt = this.getPosition(this.state.getPaintBounds());
 
       if (pt != null) {
-        var alpha = mxUtils.toRadians(this.getTotalRotation());
+        let alpha = mxUtils.toRadians(this.getTotalRotation());
         pt = this.rotatePoint(this.flipPoint(pt), alpha);
 
-        var scale = this.graph.view.scale;
-        var tr = this.graph.view.translate;
+        let scale = this.graph.view.scale;
+        let tr = this.graph.view.translate;
         this.shape.bounds.x = Math.floor((pt.x + tr.x) * scale - this.shape.bounds.width / 2);
         this.shape.bounds.y = Math.floor((pt.y + tr.y) * scale - this.shape.bounds.height / 2);
 
@@ -242,10 +242,10 @@ class mxHandle {
    * Rotates the point by the given angle.
    */
   rotatePoint = (pt, alpha) => {
-    var bounds = this.state.getCellBounds();
-    var cx = new mxPoint(bounds.getCenterX(), bounds.getCenterY());
-    var cos = Math.cos(alpha);
-    var sin = Math.sin(alpha);
+    let bounds = this.state.getCellBounds();
+    let cx = new mxPoint(bounds.getCenterX(), bounds.getCenterY());
+    let cos = Math.cos(alpha);
+    let sin = Math.sin(alpha);
 
     return mxUtils.getRotatedPoint(pt, cos, sin, cx);
   };
@@ -257,7 +257,7 @@ class mxHandle {
    */
   flipPoint = (pt) => {
     if (this.state.shape != null) {
-      var bounds = this.state.getCellBounds();
+      let bounds = this.state.getCellBounds();
 
       if (this.state.shape.flipH) {
         pt.x = 2 * bounds.x + bounds.width - pt.x;
diff --git a/src/js/handler/mxKeyHandler.js b/src/js/handler/mxKeyHandler.js
index e1f4e4943..762ab6ea8 100644
--- a/src/js/handler/mxKeyHandler.js
+++ b/src/js/handler/mxKeyHandler.js
@@ -73,7 +73,7 @@ class mxKeyHandler {
    * (46) and deletes the selection cells if the graph is enabled.
    *
    * (code)
-   * var keyHandler = new mxKeyHandler(graph);
+   * let keyHandler = new mxKeyHandler(graph);
    * keyHandler.bindKey(46, (evt)=>
    * {
    *   if (graph.isEnabled())
@@ -275,7 +275,7 @@ class mxKeyHandler {
    * evt - Key event that represents the keystroke.
    */
   isGraphEvent = (evt) => {
-    var source = mxEvent.getSource(evt);
+    let source = mxEvent.getSource(evt);
 
     // Accepts events from the target object or
     // in-place editing inside graph
@@ -309,7 +309,7 @@ class mxKeyHandler {
 
       // Invokes the function for the keystroke
       else if (!this.isEventIgnored(evt)) {
-        var boundFunction = this.getFunction(evt);
+        let boundFunction = this.getFunction(evt);
 
         if (boundFunction != null) {
           boundFunction(evt);
diff --git a/src/js/handler/mxPanningHandler.js b/src/js/handler/mxPanningHandler.js
index 079cc74e1..523b71f9f 100644
--- a/src/js/handler/mxPanningHandler.js
+++ b/src/js/handler/mxPanningHandler.js
@@ -147,8 +147,8 @@ class mxPanningHandler extends mxEventSource {
 
       // Handles force panning event
       this.forcePanningHandler = (sender, evt) => {
-        var evtName = evt.getProperty('eventName');
-        var me = evt.getProperty('event');
+        let evtName = evt.getProperty('eventName');
+        let me = evt.getProperty('event');
 
         if (evtName == mxEvent.MOUSE_DOWN && this.isForcePanningEvent(me)) {
           this.start(me);
@@ -163,7 +163,7 @@ class mxPanningHandler extends mxEventSource {
       // Handles pinch gestures
       this.gestureHandler = mxUtils.bind(this, (sender, eo) => {
         if (this.isPinchEnabled()) {
-          var evt = eo.getProperty('event');
+          let evt = eo.getProperty('event');
 
           if (!mxEvent.isConsumed(evt) && evt.type === 'gesturestart') {
             this.initialScale = this.graph.view.scale;
@@ -249,7 +249,7 @@ class mxPanningHandler extends mxEventSource {
    * <usePopupTrigger> is true and the event is a popup trigger.
    */
   isPanningTrigger = (me) => {
-    var evt = me.getEvent();
+    let evt = me.getEvent();
 
     return (this.useLeftButtonForPanning && me.getState() == null &&
         mxEvent.isLeftMouseButton(evt)) || (mxEvent.isControlDown(evt) &&
@@ -354,7 +354,7 @@ class mxPanningHandler extends mxEventSource {
 
       this.fireEvent(new mxEventObject(mxEvent.PAN, 'event', me));
     } else if (this.panningTrigger) {
-      var tmp = this.active;
+      let tmp = this.active;
 
       // Panning is activated only if the mouse is moved
       // beyond the graph tolerance
@@ -381,8 +381,8 @@ class mxPanningHandler extends mxEventSource {
       if (this.dx != null && this.dy != null) {
         // Ignores if scrollbars have been used for panning
         if (!this.graph.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.graph.container)) {
-          var scale = this.graph.getView().scale;
-          var t = this.graph.getView().translate;
+          let scale = this.graph.getView().scale;
+          let t = this.graph.getView().translate;
           this.graph.panGraph(0, 0);
           this.panGraph(t.x + this.dx / scale, t.y + this.dy / scale);
         }
@@ -402,7 +402,7 @@ class mxPanningHandler extends mxEventSource {
    * Zooms the graph to the given value and consumed the event if needed.
    */
   zoomGraph = (evt) => {
-    var value = Math.round(this.initialScale * evt.scale * 100) / 100;
+    let value = Math.round(this.initialScale * evt.scale * 100) / 100;
 
     if (this.minScale != null) {
       value = Math.max(this.minScale, value);
diff --git a/src/js/handler/mxPopupMenuHandler.js b/src/js/handler/mxPopupMenuHandler.js
index ca5217a45..6c8e99c3e 100644
--- a/src/js/handler/mxPopupMenuHandler.js
+++ b/src/js/handler/mxPopupMenuHandler.js
@@ -153,7 +153,7 @@ class mxPopupMenuHandler extends mxPopupMenu {
    */
   mouseUp = (sender, me) => {
     if (this.popupTrigger && this.inTolerance && this.triggerX != null && this.triggerY != null) {
-      var cell = this.getCellForPopupEvent(me);
+      let cell = this.getCellForPopupEvent(me);
 
       // Selects the cell for which the context menu is being displayed
       if (this.graph.isEnabled() && this.isSelectOnPopup(me) &&
@@ -168,7 +168,7 @@ class mxPopupMenuHandler extends mxPopupMenu {
 
       // Menu is shifted by 1 pixel so that the mouse up event
       // is routed via the underlying shape instead of the DIV
-      var origin = mxUtils.getScrollOrigin();
+      let origin = mxUtils.getScrollOrigin();
       this.popup(me.getX() + origin.x + 1, me.getY() + origin.y + 1, cell, me.getEvent());
       me.consume();
     }
diff --git a/src/js/handler/mxRubberband.js b/src/js/handler/mxRubberband.js
index ec8ac4a94..bba9f53a0 100644
--- a/src/js/handler/mxRubberband.js
+++ b/src/js/handler/mxRubberband.js
@@ -63,7 +63,7 @@ class mxRubberband {
    * Example:
    *
    * (code)
-   * var rubberband = new mxRubberband(graph);
+   * let rubberband = new mxRubberband(graph);
    * (end)
    *
    * Constructor: mxRubberband
@@ -78,12 +78,12 @@ class mxRubberband {
 
       // Handles force rubberband event
       this.forceRubberbandHandler = (sender, evt) => {
-        var evtName = evt.getProperty('eventName');
-        var me = evt.getProperty('event');
+        let evtName = evt.getProperty('eventName');
+        let me = evt.getProperty('event');
 
         if (evtName == mxEvent.MOUSE_DOWN && this.isForceRubberbandEvent(me)) {
-          var offset = mxUtils.getOffset(this.graph.container);
-          var origin = mxUtils.getScrollOrigin(this.graph.container);
+          let offset = mxUtils.getOffset(this.graph.container);
+          let origin = mxUtils.getScrollOrigin(this.graph.container);
           origin.x -= offset.x;
           origin.y -= offset.y;
           this.start(me.getX() + origin.x, me.getY() + origin.y);
@@ -151,8 +151,8 @@ class mxRubberband {
   mouseDown = (sender, me) => {
     if (!me.isConsumed() && this.isEnabled() && this.graph.isEnabled() &&
         me.getState() == null && !mxEvent.isMultiTouchEvent(me.getEvent())) {
-      var offset = mxUtils.getOffset(this.graph.container);
-      var origin = mxUtils.getScrollOrigin(this.graph.container);
+      let offset = mxUtils.getOffset(this.graph.container);
+      let origin = mxUtils.getScrollOrigin(this.graph.container);
       origin.x -= offset.x;
       origin.y -= offset.y;
       this.start(me.getX() + origin.x, me.getY() + origin.y);
@@ -174,11 +174,11 @@ class mxRubberband {
   start = (x, y) => {
     this.first = new mxPoint(x, y);
 
-    var container = this.graph.container;
+    let container = this.graph.container;
 
     function createMouseEvent(evt) {
-      var me = new mxMouseEvent(evt);
-      var pt = mxUtils.convertPoint(container, me.getX(), me.getY());
+      let me = new mxMouseEvent(evt);
+      let pt = mxUtils.convertPoint(container, me.getX(), me.getY());
 
       me.graphX = pt.x;
       me.graphY = pt.y;
@@ -207,15 +207,15 @@ class mxRubberband {
    */
   mouseMove = (sender, me) => {
     if (!me.isConsumed() && this.first != null) {
-      var origin = mxUtils.getScrollOrigin(this.graph.container);
-      var offset = mxUtils.getOffset(this.graph.container);
+      let origin = mxUtils.getScrollOrigin(this.graph.container);
+      let offset = mxUtils.getOffset(this.graph.container);
       origin.x -= offset.x;
       origin.y -= offset.y;
-      var x = me.getX() + origin.x;
-      var y = me.getY() + origin.y;
-      var dx = this.first.x - x;
-      var dy = this.first.y - y;
-      var tol = this.graph.tolerance;
+      let x = me.getX() + origin.x;
+      let y = me.getY() + origin.y;
+      let dx = this.first.x - x;
+      let dy = this.first.y - y;
+      let tol = this.graph.tolerance;
 
       if (this.div != null || Math.abs(dx) > tol || Math.abs(dy) > tol) {
         if (this.div == null) {
@@ -245,7 +245,7 @@ class mxRubberband {
     }
 
     this.graph.container.appendChild(this.sharedDiv);
-    var result = this.sharedDiv;
+    let result = this.sharedDiv;
 
     if (mxClient.IS_SVG && this.fadeOut) {
       this.sharedDiv = null;
@@ -270,7 +270,7 @@ class mxRubberband {
    * <mxGraph.selectRegion>.
    */
   mouseUp = (sender, me) => {
-    var active = this.isActive();
+    let active = this.isActive();
     this.reset();
 
     if (active) {
@@ -286,7 +286,7 @@ class mxRubberband {
    * for the given event.
    */
   execute = (evt) => {
-    var rect = new mxRectangle(this.x, this.y, this.width, this.height);
+    let rect = new mxRectangle(this.x, this.y, this.width, this.height);
     this.graph.selectRegion(rect, evt);
   };
 
@@ -298,7 +298,7 @@ class mxRubberband {
   reset = () => {
     if (this.div != null) {
       if (mxClient.IS_SVG && this.fadeOut) {
-        var temp = this.div;
+        let temp = this.div;
         mxUtils.setPrefixedStyle(temp.style, 'transition', 'all 0.2s linear');
         temp.style.pointerEvents = 'none';
         temp.style.opacity = 0;
@@ -340,16 +340,16 @@ class mxRubberband {
    */
   repaint = () => {
     if (this.div != null) {
-      var x = this.currentX - this.graph.panDx;
-      var y = this.currentY - this.graph.panDy;
+      let x = this.currentX - this.graph.panDx;
+      let y = this.currentY - this.graph.panDy;
 
       this.x = Math.min(this.first.x, x);
       this.y = Math.min(this.first.y, y);
       this.width = Math.max(this.first.x, x) - this.x;
       this.height = Math.max(this.first.y, y) - this.y;
 
-      var dx = 0;
-      var dy = 0;
+      let dx = 0;
+      let dy = 0;
 
       this.div.style.left = (this.x + dx) + 'px';
       this.div.style.top = (this.y + dy) + 'px';
diff --git a/src/js/handler/mxSelectionCellsHandler.js b/src/js/handler/mxSelectionCellsHandler.js
index f617f1a5b..7dfee704a 100644
--- a/src/js/handler/mxSelectionCellsHandler.js
+++ b/src/js/handler/mxSelectionCellsHandler.js
@@ -147,18 +147,18 @@ class mxSelectionCellsHandler extends mxEventSource {
    */
   refresh = () => {
     // Removes all existing handlers
-    var oldHandlers = this.handlers;
+    let oldHandlers = this.handlers;
     this.handlers = new mxDictionary();
 
     // Creates handles for all selection cells
-    var tmp = mxUtils.sortCells(this.getHandledSelectionCells(), false);
+    let tmp = mxUtils.sortCells(this.getHandledSelectionCells(), false);
 
     // Destroys or updates old handlers
-    for (var i = 0; i < tmp.length; i++) {
-      var state = this.graph.view.getState(tmp[i]);
+    for (let i = 0; i < tmp.length; i++) {
+      let state = this.graph.view.getState(tmp[i]);
 
       if (state != null) {
-        var handler = oldHandlers.remove(tmp[i]);
+        let handler = oldHandlers.remove(tmp[i]);
 
         if (handler != null) {
           if (handler.state != state) {
@@ -186,11 +186,11 @@ class mxSelectionCellsHandler extends mxEventSource {
     }));
 
     // Creates new handlers and updates parent highlight on existing handlers
-    for (var i = 0; i < tmp.length; i++) {
-      var state = this.graph.view.getState(tmp[i]);
+    for (let i = 0; i < tmp.length; i++) {
+      let state = this.graph.view.getState(tmp[i]);
 
       if (state != null) {
-        var handler = this.handlers.get(tmp[i]);
+        let handler = this.handlers.get(tmp[i]);
 
         if (handler == null) {
           handler = this.graph.createHandler(state);
@@ -218,13 +218,13 @@ class mxSelectionCellsHandler extends mxEventSource {
    * Updates the handler for the given shape if one exists.
    */
   updateHandler = (state) => {
-    var handler = this.handlers.remove(state.cell);
+    let handler = this.handlers.remove(state.cell);
 
     if (handler != null) {
       // Transfers the current state to the new handler
-      var index = handler.index;
-      var x = handler.startX;
-      var y = handler.startY;
+      let index = handler.index;
+      let x = handler.startX;
+      let y = handler.startY;
 
       handler.destroy();
       handler = this.graph.createHandler(state);
@@ -246,7 +246,7 @@ class mxSelectionCellsHandler extends mxEventSource {
    */
   mouseDown = (sender, me) => {
     if (this.graph.isEnabled() && this.isEnabled()) {
-      var args = [sender, me];
+      let args = [sender, me];
 
       this.handlers.visit((key, handler) => {
         handler.mouseDown.apply(handler, args);
@@ -261,7 +261,7 @@ class mxSelectionCellsHandler extends mxEventSource {
    */
   mouseMove = (sender, me) => {
     if (this.graph.isEnabled() && this.isEnabled()) {
-      var args = [sender, me];
+      let args = [sender, me];
 
       this.handlers.visit((key, handler) => {
         handler.mouseMove.apply(handler, args);
@@ -276,7 +276,7 @@ class mxSelectionCellsHandler extends mxEventSource {
    */
   mouseUp = (sender, me) => {
     if (this.graph.isEnabled() && this.isEnabled()) {
-      var args = [sender, me];
+      let args = [sender, me];
 
       this.handlers.visit((key, handler) => {
         handler.mouseUp.apply(handler, args);
diff --git a/src/js/handler/mxTooltipHandler.js b/src/js/handler/mxTooltipHandler.js
index ab3b22a65..2316afc79 100644
--- a/src/js/handler/mxTooltipHandler.js
+++ b/src/js/handler/mxTooltipHandler.js
@@ -133,7 +133,7 @@ class mxTooltipHandler {
       document.body.appendChild(this.div);
 
       mxEvent.addGestureListeners(this.div, (evt) => {
-        var source = mxEvent.getSource(evt);
+        let source = mxEvent.getSource(evt);
 
         if (source.nodeName != 'A') {
           this.hideTooltip();
@@ -171,7 +171,7 @@ class mxTooltipHandler {
   mouseMove = (sender, me) => {
     if (me.getX() != this.lastX || me.getY() != this.lastY) {
       this.reset(me, true);
-      var state = this.getStateForEvent(me);
+      let state = this.getStateForEvent(me);
 
       if (this.isHideOnHover() || state != this.state || (me.getSource() != this.node &&
           (!this.stateSource || (state != null && this.stateSource ==
@@ -220,17 +220,17 @@ class mxTooltipHandler {
 
       if (restart && this.isEnabled() && state != null && (this.div == null ||
           this.div.style.visibility == 'hidden')) {
-        var node = me.getSource();
-        var x = me.getX();
-        var y = me.getY();
-        var stateSource = me.isSource(state.shape) || me.isSource(state.text);
+        let node = me.getSource();
+        let x = me.getX();
+        let y = me.getY();
+        let stateSource = me.isSource(state.shape) || me.isSource(state.text);
 
         this.thread = window.setTimeout(() => {
           if (!this.graph.isEditing() && !this.graph.popupMenuHandler.isMenuShowing() && !this.graph.isMouseDown) {
             // Uses information from inside event cause using the event at
             // this (delayed) point in time is not possible in IE as it no
             // longer contains the required information (member not found)
-            var tip = this.graph.getTooltip(state, node, x, y);
+            let tip = this.graph.getTooltip(state, node, x, y);
             this.show(tip, x, y);
             this.state = state;
             this.node = node;
@@ -276,7 +276,7 @@ class mxTooltipHandler {
         this.init();
       }
 
-      var origin = mxUtils.getScrollOrigin();
+      let origin = mxUtils.getScrollOrigin();
 
       this.div.style.zIndex = this.zIndex;
       this.div.style.left = (x + origin.x) + 'px';
diff --git a/src/js/handler/mxVertexHandler.js b/src/js/handler/mxVertexHandler.js
index c2069c6dd..7103cced9 100644
--- a/src/js/handler/mxVertexHandler.js
+++ b/src/js/handler/mxVertexHandler.js
@@ -209,12 +209,12 @@ class mxVertexHandler {
 
     // Adds the sizer handles
     if (maxCells <= 0 || this.graph.getSelectionCount() < maxCells) {
-      var resizable = this.graph.isCellResizable(this.state.cell);
+      let resizable = this.graph.isCellResizable(this.state.cell);
       this.sizers = [];
 
       if (resizable || (this.graph.isLabelMovable(this.state.cell) &&
           this.state.width >= 2 && this.state.height >= 2)) {
-        var i = 0;
+        let i = 0;
 
         if (resizable) {
           if (!this.singleSizer) {
@@ -230,7 +230,7 @@ class mxVertexHandler {
           this.sizers.push(this.createSizer('se-resize', i++));
         }
 
-        var geo = this.graph.model.getGeometry(this.state.cell);
+        let geo = this.graph.model.getGeometry(this.state.cell);
 
         if (geo != null && !geo.relative && !this.graph.isSwimlane(this.state.cell) &&
             this.graph.isLabelMovable(this.state.cell)) {
@@ -305,14 +305,14 @@ class mxVertexHandler {
    * Initializes the shapes required for this vertex handler.
    */
   updateMinBounds = () => {
-    var children = this.graph.getChildCells(this.state.cell);
+    let children = this.graph.getChildCells(this.state.cell);
 
     if (children.length > 0) {
       this.minBounds = this.graph.view.getBounds(children);
 
       if (this.minBounds != null) {
-        var s = this.state.view.scale;
-        var t = this.state.view.translate;
+        let s = this.state.view.scale;
+        let t = this.state.view.translate;
 
         this.minBounds.x -= this.state.x;
         this.minBounds.y -= this.state.y;
@@ -351,7 +351,7 @@ class mxVertexHandler {
    * Creates the shape used to draw the selection border.
    */
   createSelectionShape = (bounds) => {
-    var shape = new mxRectangleShape(
+    let shape = new mxRectangleShape(
         mxRectangle.fromRectangle(bounds),
         null, this.getSelectionColor());
     shape.strokewidth = this.getSelectionStrokeWidth();
@@ -396,8 +396,8 @@ class mxVertexHandler {
   createSizer = (cursor, index, size, fillColor) => {
     size = size || mxConstants.HANDLE_SIZE;
 
-    var bounds = new mxRectangle(0, 0, size, size);
-    var sizer = this.createSizerShape(bounds, index, fillColor);
+    let bounds = new mxRectangle(0, 0, size, size);
+    let sizer = this.createSizerShape(bounds, index, fillColor);
 
     if (sizer.isHtmlAllowed() && this.state.text != null && this.state.text.node.parentNode == this.graph.container) {
       sizer.bounds.height -= 1;
@@ -443,7 +443,7 @@ class mxVertexHandler {
   createSizerShape = (bounds, index, fillColor) => {
     if (this.handleImage != null) {
       bounds = new mxRectangle(bounds.x, bounds.y, this.handleImage.width, this.handleImage.height);
-      var shape = new mxImageShape(bounds, this.handleImage.src);
+      let shape = new mxImageShape(bounds, this.handleImage.src);
 
       // Allows HTML rendering of the images
       shape.preserveImageAspect = false;
@@ -482,14 +482,14 @@ class mxVertexHandler {
    */
   getHandleForEvent = (me) => {
     // Connection highlight may consume events before they reach sizer handle
-    var tol = (!mxEvent.isMouseEvent(me.getEvent())) ? this.tolerance : 1;
-    var hit = (this.allowHandleBoundsCheck && tol > 0) ?
+    let tol = (!mxEvent.isMouseEvent(me.getEvent())) ? this.tolerance : 1;
+    let hit = (this.allowHandleBoundsCheck && tol > 0) ?
         new mxRectangle(me.getGraphX() - tol, me.getGraphY() - tol, 2 * tol, 2 * tol) : null;
 
-    var checkShape = (shape) => {
-      var st = (shape != null && shape.constructor != mxImageShape &&
+    let checkShape = (shape) => {
+      let st = (shape != null && shape.constructor != mxImageShape &&
           this.allowHandleBoundsCheck) ? shape.strokewidth + shape.svgStrokeTolerance : null;
-      var real = (st != null) ? new mxRectangle(me.getGraphX() - Math.floor(st / 2),
+      let real = (st != null) ? new mxRectangle(me.getGraphX() - Math.floor(st / 2),
           me.getGraphY() - Math.floor(st / 2), st, st) : hit;
 
       return shape != null && (me.isSource(shape) || (real != null && mxUtils.intersects(shape.bounds, real) &&
@@ -503,7 +503,7 @@ class mxVertexHandler {
     }
 
     if (this.sizers != null) {
-      for (var i = 0; i < this.sizers.length; i++) {
+      for (let i = 0; i < this.sizers.length; i++) {
         if (checkShape(this.sizers[i])) {
           return i;
         }
@@ -512,7 +512,7 @@ class mxVertexHandler {
 
     if (this.customHandles != null && this.isCustomHandleEvent(me)) {
       // Inverse loop order to match display order
-      for (var i = this.customHandles.length - 1; i >= 0; i--) {
+      for (let i = this.customHandles.length - 1; i >= 0; i--) {
         if (checkShape(this.customHandles[i].shape)) {
           // LATER: Return reference to active shape
           return mxEvent.CUSTOM_HANDLE - i;
@@ -542,7 +542,7 @@ class mxVertexHandler {
    */
   mouseDown = (sender, me) => {
     if (!me.isConsumed() && this.graph.isEnabled()) {
-      var handle = this.getHandleForEvent(me);
+      let handle = this.getHandleForEvent(me);
 
       if (handle != null) {
         this.start(me.getGraphX(), me.getGraphY(), handle);
@@ -580,8 +580,8 @@ class mxVertexHandler {
         this.ghostPreview = this.createGhostPreview();
       } else {
         // Saves reference to parent state
-        var model = this.state.view.graph.model;
-        var parent = model.getParent(this.state.cell);
+        let model = this.state.view.graph.model;
+        let parent = model.getParent(this.state.cell);
 
         if (this.state.view.currentRoot != parent && (model.isVertex(parent) || model.isEdge(parent))) {
           this.parentState = this.state.view.graph.view.getState(parent);
@@ -607,10 +607,10 @@ class mxVertexHandler {
 
         if (index == mxEvent.ROTATION_HANDLE) {
           // With the rotation handle in a corner, need the angle and distance
-          var pos = this.getRotationHandlePosition();
+          let pos = this.getRotationHandlePosition();
 
-          var dx = pos.x - this.state.getCenterX();
-          var dy = pos.y - this.state.getCenterY();
+          let dx = pos.x - this.state.getCenterX();
+          let dy = pos.y - this.state.getCenterY();
 
           this.startAngle = (dx != 0) ? Math.atan(dy / dx) * 180 / Math.PI + 90 : 0;
           this.startDist = Math.sqrt(dx * dx + dy * dy);
@@ -631,11 +631,11 @@ class mxVertexHandler {
           }
 
           // Gets the array of connected edge handlers for redrawing
-          var edges = this.graph.getEdges(this.state.cell);
+          let edges = this.graph.getEdges(this.state.cell);
           this.edgeHandlers = [];
 
-          for (var i = 0; i < edges.length; i++) {
-            var handler = this.graph.selectionCellsHandler.getHandler(edges[i]);
+          for (let i = 0; i < edges.length; i++) {
+            let handler = this.graph.selectionCellsHandler.getHandler(edges[i]);
 
             if (handler != null) {
               this.edgeHandlers.push(handler);
@@ -652,7 +652,7 @@ class mxVertexHandler {
    * Starts the handling of the mouse gesture.
    */
   createGhostPreview = () => {
-    var shape = this.graph.cellRenderer.createShape(this.state);
+    let shape = this.graph.cellRenderer.createShape(this.state);
     shape.init(this.graph.view.getOverlayPane());
     shape.scale = this.state.view.scale;
     shape.bounds = this.bounds;
@@ -670,13 +670,13 @@ class mxVertexHandler {
     this.handlesVisible = visible;
 
     if (this.sizers != null) {
-      for (var i = 0; i < this.sizers.length; i++) {
+      for (let i = 0; i < this.sizers.length; i++) {
         this.sizers[i].node.style.display = (visible) ? '' : 'none';
       }
     }
 
     if (this.customHandles != null) {
-      for (var i = 0; i < this.customHandles.length; i++) {
+      for (let i = 0; i < this.customHandles.length; i++) {
         this.customHandles[i].setVisible(visible);
       }
     }
@@ -815,16 +815,16 @@ class mxVertexHandler {
    * Moves the label.
    */
   moveLabel = (me) => {
-    var point = new mxPoint(me.getGraphX(), me.getGraphY());
-    var tr = this.graph.view.translate;
-    var scale = this.graph.view.scale;
+    let point = new mxPoint(me.getGraphX(), me.getGraphY());
+    let tr = this.graph.view.translate;
+    let scale = this.graph.view.scale;
 
     if (this.graph.isGridEnabledEvent(me.getEvent())) {
       point.x = (this.graph.snap(point.x / scale - tr.x) + tr.x) * scale;
       point.y = (this.graph.snap(point.y / scale - tr.y) + tr.y) * scale;
     }
 
-    var index = (this.rotationShape != null) ? this.sizers.length - 2 : this.sizers.length - 1;
+    let index = (this.rotationShape != null) ? this.sizers.length - 2 : this.sizers.length - 1;
     this.moveSizerTo(this.sizers[index], point.x, point.y);
   };
 
@@ -834,9 +834,9 @@ class mxVertexHandler {
    * Rotates the vertex.
    */
   rotateVertex = (me) => {
-    var point = new mxPoint(me.getGraphX(), me.getGraphY());
-    var dx = this.state.x + this.state.width / 2 - point.x;
-    var dy = this.state.y + this.state.height / 2 - point.y;
+    let point = new mxPoint(me.getGraphX(), me.getGraphY());
+    let dx = this.state.x + this.state.width / 2 - point.x;
+    let dy = this.state.y + this.state.height / 2 - point.y;
     this.currentAlpha = (dx != 0) ? Math.atan(dy / dx) * 180 / Math.PI + 90 : ((dy < 0) ? 180 : 0);
 
     if (dx > 0) {
@@ -848,9 +848,9 @@ class mxVertexHandler {
     // Rotation raster
     if (this.rotationRaster && this.graph.isGridEnabledEvent(me.getEvent())) {
       var raster;
-      var dx = point.x - this.state.getCenterX();
-      var dy = point.y - this.state.getCenterY();
-      var dist = Math.sqrt(dx * dx + dy * dy);
+      let dx = point.x - this.state.getCenterX();
+      let dy = point.y - this.state.getCenterY();
+      let dist = Math.sqrt(dx * dx + dy * dy);
 
       if (dist - this.startDist < 2) {
         raster = 15;
@@ -879,25 +879,25 @@ class mxVertexHandler {
    * Risizes the vertex.
    */
   resizeVertex = (me) => {
-    var ct = new mxPoint(this.state.getCenterX(), this.state.getCenterY());
-    var alpha = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || '0');
-    var point = new mxPoint(me.getGraphX(), me.getGraphY());
-    var tr = this.graph.view.translate;
-    var scale = this.graph.view.scale;
-    var cos = Math.cos(-alpha);
-    var sin = Math.sin(-alpha);
+    let ct = new mxPoint(this.state.getCenterX(), this.state.getCenterY());
+    let alpha = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || '0');
+    let point = new mxPoint(me.getGraphX(), me.getGraphY());
+    let tr = this.graph.view.translate;
+    let scale = this.graph.view.scale;
+    let cos = Math.cos(-alpha);
+    let sin = Math.sin(-alpha);
 
-    var dx = point.x - this.startX;
-    var dy = point.y - this.startY;
+    let dx = point.x - this.startX;
+    let dy = point.y - this.startY;
 
     // Rotates vector for mouse gesture
-    var tx = cos * dx - sin * dy;
-    var ty = sin * dx + cos * dy;
+    let tx = cos * dx - sin * dy;
+    let ty = sin * dx + cos * dy;
 
     dx = tx;
     dy = ty;
 
-    var geo = this.graph.getCellGeometry(this.state.cell);
+    let geo = this.graph.getCellGeometry(this.state.cell);
     this.unscaledBounds = this.union(geo, dx / scale, dy / scale, this.index,
         this.graph.isGridEnabledEvent(me.getEvent()), 1,
         new mxPoint(0, 0), this.isConstrainedEvent(me),
@@ -905,7 +905,7 @@ class mxVertexHandler {
 
     // Keeps vertex within maximum graph or parent bounds
     if (!geo.relative) {
-      var max = this.graph.getMaximumGraphBounds();
+      let max = this.graph.getMaximumGraphBounds();
 
       // Handles child cells
       if (max != null && this.parentState != null) {
@@ -916,10 +916,10 @@ class mxVertexHandler {
       }
 
       if (this.graph.isConstrainChild(this.state.cell)) {
-        var tmp = this.graph.getCellContainmentArea(this.state.cell);
+        let tmp = this.graph.getCellContainmentArea(this.state.cell);
 
         if (tmp != null) {
-          var overlap = this.graph.getOverlap(this.state.cell);
+          let overlap = this.graph.getOverlap(this.state.cell);
 
           if (overlap > 0) {
             tmp = mxRectangle.fromRectangle(tmp);
@@ -962,7 +962,7 @@ class mxVertexHandler {
       }
     }
 
-    var old = this.bounds;
+    let old = this.bounds;
     this.bounds = new mxRectangle(((this.parentState != null) ? this.parentState.x : tr.x * scale) +
         (this.unscaledBounds.x) * scale, ((this.parentState != null) ? this.parentState.y : tr.y * scale) +
         (this.unscaledBounds.y) * scale, this.unscaledBounds.width * scale, this.unscaledBounds.height * scale);
@@ -977,8 +977,8 @@ class mxVertexHandler {
 
     var c2 = new mxPoint(this.bounds.getCenterX(), this.bounds.getCenterY());
 
-    var dx = c2.x - ct.x;
-    var dy = c2.y - ct.y;
+    let dx = c2.x - ct.x;
+    let dy = c2.y - ct.y;
 
     var dx2 = cos * dx - sin * dy;
     var dy2 = sin * dx + cos * dy;
@@ -1030,11 +1030,11 @@ class mxVertexHandler {
    */
   updateLivePreview = (me) => {
     // TODO: Apply child offset to children in live preview
-    var scale = this.graph.view.scale;
-    var tr = this.graph.view.translate;
+    let scale = this.graph.view.scale;
+    let tr = this.graph.view.translate;
 
     // Saves current state
-    var tempState = this.state.clone();
+    let tempState = this.state.clone();
 
     // Temporarily changes size and origin
     this.state.x = this.bounds.x;
@@ -1044,16 +1044,16 @@ class mxVertexHandler {
     this.state.height = this.bounds.height;
 
     // Redraws cell and handles
-    var off = this.state.absoluteOffset;
+    let off = this.state.absoluteOffset;
     off = new mxPoint(off.x, off.y);
 
     // Required to store and reset absolute offset for updating label position
     this.state.absoluteOffset.x = 0;
     this.state.absoluteOffset.y = 0;
-    var geo = this.graph.getCellGeometry(this.state.cell);
+    let geo = this.graph.getCellGeometry(this.state.cell);
 
     if (geo != null) {
-      var offset = geo.offset || this.EMPTY_POINT;
+      let offset = geo.offset || this.EMPTY_POINT;
 
       if (offset != null && !geo.relative) {
         this.state.absoluteOffset.x = this.state.view.scale * offset.x;
@@ -1114,8 +1114,8 @@ class mxVertexHandler {
    */
   mouseUp = (sender, me) => {
     if (this.index != null && this.state != null) {
-      var point = new mxPoint(me.getGraphX(), me.getGraphY());
-      var index = this.index;
+      let point = new mxPoint(me.getGraphX(), me.getGraphY());
+      let index = this.index;
       this.index = null;
 
       if (this.ghostPreview == null) {
@@ -1129,7 +1129,7 @@ class mxVertexHandler {
         if (index <= mxEvent.CUSTOM_HANDLE) {
           if (this.customHandles != null) {
             // Creates style before changing cell state
-            var style = this.state.view.graph.getCellStyle(this.state.cell);
+            let style = this.state.view.graph.getCellStyle(this.state.cell);
 
             this.customHandles[mxEvent.CUSTOM_HANDLE - index].active = false;
             this.customHandles[mxEvent.CUSTOM_HANDLE - index].execute(me);
@@ -1144,7 +1144,7 @@ class mxVertexHandler {
           }
         } else if (index == mxEvent.ROTATION_HANDLE) {
           if (this.currentAlpha != null) {
-            var delta = this.currentAlpha - (this.state.style[mxConstants.STYLE_ROTATION] || 0);
+            let delta = this.currentAlpha - (this.state.style[mxConstants.STYLE_ROTATION] || 0);
 
             if (delta != 0) {
               this.rotateCell(this.state.cell, delta);
@@ -1153,23 +1153,23 @@ class mxVertexHandler {
             this.rotateClick();
           }
         } else {
-          var gridEnabled = this.graph.isGridEnabledEvent(me.getEvent());
-          var alpha = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || '0');
-          var cos = Math.cos(-alpha);
-          var sin = Math.sin(-alpha);
+          let gridEnabled = this.graph.isGridEnabledEvent(me.getEvent());
+          let alpha = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || '0');
+          let cos = Math.cos(-alpha);
+          let sin = Math.sin(-alpha);
 
-          var dx = point.x - this.startX;
-          var dy = point.y - this.startY;
+          let dx = point.x - this.startX;
+          let dy = point.y - this.startY;
 
           // Rotates vector for mouse gesture
-          var tx = cos * dx - sin * dy;
-          var ty = sin * dx + cos * dy;
+          let tx = cos * dx - sin * dy;
+          let ty = sin * dx + cos * dy;
 
           dx = tx;
           dy = ty;
 
-          var s = this.graph.view.scale;
-          var recurse = this.isRecursiveResize(this.state, me);
+          let s = this.graph.view.scale;
+          let recurse = this.isRecursiveResize(this.state, me);
           this.resizeCell(this.state.cell, this.roundLength(dx / s), this.roundLength(dy / s),
               index, gridEnabled, this.isConstrainedEvent(me), recurse);
         }
@@ -1220,19 +1220,19 @@ class mxVertexHandler {
    */
   rotateCell = (cell, angle, parent) => {
     if (angle != 0) {
-      var model = this.graph.getModel();
+      let model = this.graph.getModel();
 
       if (model.isVertex(cell) || model.isEdge(cell)) {
         if (!model.isEdge(cell)) {
-          var style = this.graph.getCurrentCellStyle(cell);
-          var total = (style[mxConstants.STYLE_ROTATION] || 0) + angle;
+          let style = this.graph.getCurrentCellStyle(cell);
+          let total = (style[mxConstants.STYLE_ROTATION] || 0) + angle;
           this.graph.setCellStyles(mxConstants.STYLE_ROTATION, total, [cell]);
         }
 
-        var geo = this.graph.getCellGeometry(cell);
+        let geo = this.graph.getCellGeometry(cell);
 
         if (geo != null) {
-          var pgeo = this.graph.getCellGeometry(parent);
+          let pgeo = this.graph.getCellGeometry(parent);
 
           if (pgeo != null && !model.isEdge(parent)) {
             geo = geo.clone();
@@ -1242,9 +1242,9 @@ class mxVertexHandler {
 
           if ((model.isVertex(cell) && !geo.relative) || model.isEdge(cell)) {
             // Recursive rotation
-            var childCount = model.getChildCount(cell);
+            let childCount = model.getChildCount(cell);
 
-            for (var i = 0; i < childCount; i++) {
+            for (let i = 0; i < childCount; i++) {
               this.rotateCell(model.getChildAt(cell, i), angle, cell);
             }
           }
@@ -1280,7 +1280,7 @@ class mxVertexHandler {
     }
 
     if (this.livePreviewActive && this.sizers != null) {
-      for (var i = 0; i < this.sizers.length; i++) {
+      for (let i = 0; i < this.sizers.length; i++) {
         if (this.sizers[i] != null) {
           this.sizers[i].node.style.display = '';
         }
@@ -1293,7 +1293,7 @@ class mxVertexHandler {
     }
 
     if (this.customHandles != null) {
-      for (var i = 0; i < this.customHandles.length; i++) {
+      for (let i = 0; i < this.customHandles.length; i++) {
         if (this.customHandles[i].active) {
           this.customHandles[i].active = false;
           this.customHandles[i].reset();
@@ -1327,15 +1327,15 @@ class mxVertexHandler {
    * in the graph using <mxGraph.resizeCell>.
    */
   resizeCell = (cell, dx, dy, index, gridEnabled, constrained, recurse) => {
-    var geo = this.graph.model.getGeometry(cell);
+    let geo = this.graph.model.getGeometry(cell);
 
     if (geo != null) {
       if (index == mxEvent.LABEL_HANDLE) {
-        var alpha = -mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || '0');
-        var cos = Math.cos(alpha);
-        var sin = Math.sin(alpha);
-        var scale = this.graph.view.scale;
-        var pt = mxUtils.getRotatedPoint(new mxPoint(
+        let alpha = -mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || '0');
+        let cos = Math.cos(alpha);
+        let sin = Math.sin(alpha);
+        let scale = this.graph.view.scale;
+        let pt = mxUtils.getRotatedPoint(new mxPoint(
             Math.round((this.labelShape.bounds.getCenterX() - this.startX) / scale),
             Math.round((this.labelShape.bounds.getCenterY() - this.startY) / scale)),
             cos, sin);
@@ -1351,7 +1351,7 @@ class mxVertexHandler {
 
         this.graph.model.setGeometry(cell, geo);
       } else if (this.unscaledBounds != null) {
-        var scale = this.graph.view.scale;
+        let scale = this.graph.view.scale;
 
         if (this.childOffsetX != 0 || this.childOffsetY != 0) {
           this.moveChildren(cell, Math.round(this.childOffsetX / scale), Math.round(this.childOffsetY / scale));
@@ -1368,12 +1368,12 @@ class mxVertexHandler {
    * Moves the children of the given cell by the given vector.
    */
   moveChildren = (cell, dx, dy) => {
-    var model = this.graph.getModel();
-    var childCount = model.getChildCount(cell);
+    let model = this.graph.getModel();
+    let childCount = model.getChildCount(cell);
 
-    for (var i = 0; i < childCount; i++) {
-      var child = model.getChildAt(cell, i);
-      var geo = this.graph.getCellGeometry(child);
+    for (let i = 0; i < childCount; i++) {
+      let child = model.getChildAt(cell, i);
+      let geo = this.graph.getCellGeometry(child);
 
       if (geo != null) {
         geo = geo.clone();
@@ -1392,10 +1392,10 @@ class mxVertexHandler {
    * the following code can be used.
    *
    * (code)
-   * var vertexHandlerUnion = union;
+   * let vertexHandlerUnion = union;
    * union = (bounds, dx, dy, index, gridEnabled, scale, tr, constrained)=>
    * {
-   *   var result = vertexHandlerUnion.apply(this, arguments);
+   *   let result = vertexHandlerUnion.apply(this, arguments);
    *
    *   result.width = Math.max(result.width, mxUtils.getNumber(this.state.style, 'minWidth', 0));
    *   result.height = Math.max(result.height, mxUtils.getNumber(this.state.style, 'minHeight', 0));
@@ -1414,18 +1414,18 @@ class mxVertexHandler {
    * changed, the following can be used.
    *
    * (code)
-   * var mxVertexHandlerUnion = union;
+   * let mxVertexHandlerUnion = union;
    * union = (bounds, dx, dy, index, gridEnabled, scale, tr, constrained)=>
    * {
-   *   var result = mxVertexHandlerUnion.apply(this, arguments);
-   *   var s = this.state;
+   *   let result = mxVertexHandlerUnion.apply(this, arguments);
+   *   let s = this.state;
    *
    *   if (this.graph.isHtmlLabel(s.cell) && (index == 3 || index == 4) &&
    *       s.text != null && s.style[mxConstants.STYLE_WHITE_SPACE] == 'wrap')
    *   {
-   *     var label = this.graph.getLabel(s.cell);
-   *     var fontSize = mxUtils.getNumber(s.style, mxConstants.STYLE_FONTSIZE, mxConstants.DEFAULT_FONTSIZE);
-   *     var ww = result.width / s.view.scale - s.text.spacingRight - s.text.spacingLeft
+   *     let label = this.graph.getLabel(s.cell);
+   *     let fontSize = mxUtils.getNumber(s.style, mxConstants.STYLE_FONTSIZE, mxConstants.DEFAULT_FONTSIZE);
+   *     let ww = result.width / s.view.scale - s.text.spacingRight - s.text.spacingLeft
    *
    *     result.height = mxUtils.getSizeForString(label, fontSize, s.style[mxConstants.STYLE_FONTFAMILY], ww).height;
    *   }
@@ -1438,28 +1438,28 @@ class mxVertexHandler {
     gridEnabled = (gridEnabled != null) ? gridEnabled && this.graph.gridEnabled : this.graph.gridEnabled;
 
     if (this.singleSizer) {
-      var x = bounds.x + bounds.width + dx;
-      var y = bounds.y + bounds.height + dy;
+      let x = bounds.x + bounds.width + dx;
+      let y = bounds.y + bounds.height + dy;
 
       if (gridEnabled) {
         x = this.graph.snap(x / scale) * scale;
         y = this.graph.snap(y / scale) * scale;
       }
 
-      var rect = new mxRectangle(bounds.x, bounds.y, 0, 0);
+      let rect = new mxRectangle(bounds.x, bounds.y, 0, 0);
       rect.add(new mxRectangle(x, y, 0, 0));
 
       return rect;
     } else {
       var w0 = bounds.width;
       var h0 = bounds.height;
-      var left = bounds.x - tr.x * scale;
-      var right = left + w0;
-      var top = bounds.y - tr.y * scale;
-      var bottom = top + h0;
+      let left = bounds.x - tr.x * scale;
+      let right = left + w0;
+      let top = bounds.y - tr.y * scale;
+      let bottom = top + h0;
 
-      var cx = left + w0 / 2;
-      var cy = top + h0 / 2;
+      let cx = left + w0 / 2;
+      let cy = top + h0 / 2;
 
       if (index > 4 /* Bottom Row */) {
         bottom = bottom + dy;
@@ -1497,14 +1497,14 @@ class mxVertexHandler {
         }
       }
 
-      var width = right - left;
-      var height = bottom - top;
+      let width = right - left;
+      let height = bottom - top;
 
       if (constrained) {
-        var geo = this.graph.getCellGeometry(this.state.cell);
+        let geo = this.graph.getCellGeometry(this.state.cell);
 
         if (geo != null) {
-          var aspect = geo.width / geo.height;
+          let aspect = geo.width / geo.height;
 
           if (index == 1 || index == 2 || index == 7 || index == 6) {
             width = height * aspect;
@@ -1523,8 +1523,8 @@ class mxVertexHandler {
         width += (width - w0);
         height += (height - h0);
 
-        var cdx = cx - (left + width / 2);
-        var cdy = cy - (top + height / 2);
+        let cdx = cx - (left + width / 2);
+        let cdy = cy - (top + height / 2);
 
         left += cdx;
         top += cdy;
@@ -1544,7 +1544,7 @@ class mxVertexHandler {
         height = Math.abs(height);
       }
 
-      var result = new mxRectangle(left + tr.x * scale, top + tr.y * scale, width, height);
+      let result = new mxRectangle(left + tr.x * scale, top + tr.y * scale, width, height);
 
       if (this.minBounds != null) {
         result.width = Math.max(result.width, this.minBounds.x * scale + this.minBounds.width * scale +
@@ -1578,8 +1578,8 @@ class mxVertexHandler {
    */
   getHandlePadding = () => {
     // KNOWN: Tolerance depends on event type (eg. 0 for mouse events)
-    var result = new mxPoint(0, 0);
-    var tol = this.tolerance;
+    let result = new mxPoint(0, 0);
+    let tol = this.tolerance;
 
     if (this.sizers != null && this.sizers.length > 0 && this.sizers[0] != null &&
         (this.bounds.width < 2 * this.sizers[0].bounds.width + 2 * tol ||
@@ -1621,14 +1621,14 @@ class mxVertexHandler {
    * (end)
    */
   redrawHandles = () => {
-    var s = this.getSizerBounds();
-    var tol = this.tolerance;
+    let s = this.getSizerBounds();
+    let tol = this.tolerance;
     this.horizontalOffset = 0;
     this.verticalOffset = 0;
 
     if (this.customHandles != null) {
-      for (var i = 0; i < this.customHandles.length; i++) {
-        var temp = this.customHandles[i].shape.node.style.display;
+      for (let i = 0; i < this.customHandles.length; i++) {
+        let temp = this.customHandles[i].shape.node.style.display;
         this.customHandles[i].redraw();
         this.customHandles[i].shape.node.style.display = temp;
 
@@ -1642,7 +1642,7 @@ class mxVertexHandler {
     if (this.sizers != null && this.sizers.length > 0 && this.sizers[0] != null) {
       if (this.index == null && this.manageSizers && this.sizers.length >= 8) {
         // KNOWN: Tolerance depends on event type (eg. 0 for mouse events)
-        var padding = this.getHandlePadding();
+        let padding = this.getHandlePadding();
         this.horizontalOffset = padding.x;
         this.verticalOffset = padding.y;
 
@@ -1671,26 +1671,26 @@ class mxVertexHandler {
         }
       }
 
-      var r = s.x + s.width;
-      var b = s.y + s.height;
+      let r = s.x + s.width;
+      let b = s.y + s.height;
 
       if (this.singleSizer) {
         this.moveSizerTo(this.sizers[0], r, b);
       } else {
-        var cx = s.x + s.width / 2;
-        var cy = s.y + s.height / 2;
+        let cx = s.x + s.width / 2;
+        let cy = s.y + s.height / 2;
 
         if (this.sizers.length >= 8) {
-          var crs = ['nw-resize', 'n-resize', 'ne-resize', 'e-resize', 'se-resize', 's-resize', 'sw-resize', 'w-resize'];
+          let crs = ['nw-resize', 'n-resize', 'ne-resize', 'e-resize', 'se-resize', 's-resize', 'sw-resize', 'w-resize'];
 
-          var alpha = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || '0');
-          var cos = Math.cos(alpha);
-          var sin = Math.sin(alpha);
+          let alpha = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || '0');
+          let cos = Math.cos(alpha);
+          let sin = Math.sin(alpha);
 
-          var da = Math.round(alpha * 4 / Math.PI);
+          let da = Math.round(alpha * 4 / Math.PI);
 
-          var ct = new mxPoint(s.getCenterX(), s.getCenterY());
-          var pt = mxUtils.getRotatedPoint(new mxPoint(s.x, s.y), cos, sin, ct);
+          let ct = new mxPoint(s.getCenterX(), s.getCenterY());
+          let pt = mxUtils.getRotatedPoint(new mxPoint(s.x, s.y), cos, sin, ct);
 
           this.moveSizerTo(this.sizers[0], pt.x, pt.y);
           this.sizers[0].setCursor(crs[mxUtils.mod(0 + da, crs.length)]);
@@ -1757,12 +1757,12 @@ class mxVertexHandler {
     }
 
     if (this.rotationShape != null) {
-      var alpha = mxUtils.toRadians((this.currentAlpha != null) ? this.currentAlpha : this.state.style[mxConstants.STYLE_ROTATION] || '0');
-      var cos = Math.cos(alpha);
-      var sin = Math.sin(alpha);
+      let alpha = mxUtils.toRadians((this.currentAlpha != null) ? this.currentAlpha : this.state.style[mxConstants.STYLE_ROTATION] || '0');
+      let cos = Math.cos(alpha);
+      let sin = Math.sin(alpha);
 
-      var ct = new mxPoint(this.state.getCenterX(), this.state.getCenterY());
-      var pt = mxUtils.getRotatedPoint(this.getRotationHandlePosition(), cos, sin, ct);
+      let ct = new mxPoint(this.state.getCenterX(), this.state.getCenterY());
+      let pt = mxUtils.getRotatedPoint(this.getRotationHandlePosition(), cos, sin, ct);
 
       if (this.rotationShape.node != null) {
         this.moveSizerTo(this.rotationShape, pt.x, pt.y);
@@ -1778,7 +1778,7 @@ class mxVertexHandler {
     }
 
     if (this.edgeHandlers != null) {
-      for (var i = 0; i < this.edgeHandlers.length; i++) {
+      for (let i = 0; i < this.edgeHandlers.length; i++) {
         this.edgeHandlers[i].redraw();
       }
     }
@@ -1819,13 +1819,13 @@ class mxVertexHandler {
    */
   updateParentHighlight = () => {
     if (!this.isDestroyed()) {
-      var visible = this.isParentHighlightVisible();
-      var parent = this.graph.model.getParent(this.state.cell);
-      var pstate = this.graph.view.getState(parent);
+      let visible = this.isParentHighlightVisible();
+      let parent = this.graph.model.getParent(this.state.cell);
+      let pstate = this.graph.view.getState(parent);
 
       if (this.parentHighlight != null) {
         if (this.graph.model.isVertex(parent) && visible) {
-          var b = this.parentHighlight.bounds;
+          let b = this.parentHighlight.bounds;
 
           if (pstate != null && (b.x != pstate.x || b.y != pstate.y ||
               b.width != pstate.width || b.height != pstate.height)) {
@@ -1916,8 +1916,8 @@ class mxVertexHandler {
     }
 
     if (this.parentHighlight != null) {
-      var parent = this.graph.model.getParent(this.state.cell);
-      var pstate = this.graph.view.getState(parent);
+      let parent = this.graph.model.getParent(this.state.cell);
+      let pstate = this.graph.view.getState(parent);
 
       if (pstate != null && pstate.parentHighlight == this.parentHighlight) {
         pstate.parentHighlight = null;
@@ -1941,7 +1941,7 @@ class mxVertexHandler {
     this.removeHint();
 
     if (this.sizers != null) {
-      for (var i = 0; i < this.sizers.length; i++) {
+      for (let i = 0; i < this.sizers.length; i++) {
         this.sizers[i].destroy();
       }
 
@@ -1949,7 +1949,7 @@ class mxVertexHandler {
     }
 
     if (this.customHandles != null) {
-      for (var i = 0; i < this.customHandles.length; i++) {
+      for (let i = 0; i < this.customHandles.length; i++) {
         this.customHandles[i].destroy();
       }
 
diff --git a/src/js/index.txt b/src/js/index.txt
index d4c246187..428c4b98e 100644
--- a/src/js/index.txt
+++ b/src/js/index.txt
@@ -148,7 +148,7 @@ Images:
   prefetched using the following code:
   
   (code)
-  var image = new Image();
+  let image = new Image();
   image.src = url_to_image;
   (end)
 
@@ -236,7 +236,7 @@ Constructor:
   same codec is used to encode instances of mxGraph and MyGraph.
 
   (code)
-  var codec = mxCodecRegistry.getCodec(mxGraph);
+  let codec = mxCodecRegistry.getCodec(mxGraph);
   codec.template = new MyGraph();
   mxCodecRegistry.register(codec);
   (end)
@@ -249,9 +249,9 @@ Functions:
   (code)
   isCellSelectable = (cell)=>
   {
-    var selectable = isSelectable.apply(this, arguments);
+    let selectable = isSelectable.apply(this, arguments);
 
-    var geo = this.model.getGeometry(cell);
+    let geo = this.model.getGeometry(cell);
     return selectable && (geo == null || !geo.relative);
   }
   (end)
@@ -265,7 +265,7 @@ Functions:
   (code)
   isCellSelectable = (cell)=>
   {
-    var geo = this.model.getGeometry(cell);
+    let geo = this.model.getGeometry(cell);
     return selectable &&
         (geo == null ||
         !geo.relative);
@@ -282,7 +282,7 @@ Functions:
   (code)
   getXml = ()=>
   {
-    var enc = new mxCodec();
+    let enc = new mxCodec();
     return enc.encode(this.getModel());
   }
   (end)
@@ -312,5 +312,5 @@ Variables:
   container is a DOM node that acts as a container for the graph view:
 
   (code)
-  var graph = new MyGraph(container);
+  let graph = new MyGraph(container);
   (end)
diff --git a/src/js/io/mxCellCodec.js b/src/js/io/mxCellCodec.js
index 5d4cbe049..101b32143 100644
--- a/src/js/io/mxCellCodec.js
+++ b/src/js/io/mxCellCodec.js
@@ -93,13 +93,13 @@ class mxCellCodec extends mxObjectCodec {
       // Wraps the graphical annotation up in the user object (inversion)
       // by putting the result of the default encoding into a clone of the
       // user object (node type 1) and returning this cloned user object.
-      var tmp = node;
+      let tmp = node;
       node = mxUtils.importNode(enc.document, obj.value, true);
       node.appendChild(tmp);
 
       // Moves the id attribute to the outermost XML node, namely the
       // node which denotes the object boundaries in the file.
-      var id = tmp.getAttribute('id');
+      let id = tmp.getAttribute('id');
       node.setAttribute('id', id);
       tmp.removeAttribute('id');
     }
@@ -114,13 +114,13 @@ class mxCellCodec extends mxObjectCodec {
    * the user object for the cell (inversion).
    */
   beforeDecode = (dec, node, obj) => {
-    var inner = node.cloneNode(true);
-    var classname = this.getName();
+    let inner = node.cloneNode(true);
+    let classname = this.getName();
 
     if (node.nodeName !== classname) {
       // Passes the inner graphical annotation node to the
       // object codec for further processing of the cell.
-      var tmp = node.getElementsByTagName(classname)[0];
+      let tmp = node.getElementsByTagName(classname)[0];
 
       if (tmp != null && tmp.parentNode === node) {
         mxUtils.removeWhitespace(tmp, true);
@@ -133,7 +133,7 @@ class mxCellCodec extends mxObjectCodec {
 
       // Creates the user object out of the XML node
       obj.value = node.cloneNode(true);
-      var id = obj.value.getAttribute('id');
+      let id = obj.value.getAttribute('id');
 
       if (id != null) {
         obj.setId(id);
@@ -147,20 +147,20 @@ class mxCellCodec extends mxObjectCodec {
     // Preprocesses and removes all Id-references in order to use the
     // correct encoder (this) for the known references to cells (all).
     if (inner != null) {
-      for (var i = 0; i < this.idrefs.length; i++) {
-        var attr = this.idrefs[i];
-        var ref = inner.getAttribute(attr);
+      for (let i = 0; i < this.idrefs.length; i++) {
+        let attr = this.idrefs[i];
+        let ref = inner.getAttribute(attr);
 
         if (ref != null) {
           inner.removeAttribute(attr);
-          var object = dec.objects[ref] || dec.lookup(ref);
+          let object = dec.objects[ref] || dec.lookup(ref);
 
           if (object == null) {
             // Needs to decode forward reference
-            var element = dec.getElementById(ref);
+            let element = dec.getElementById(ref);
 
             if (element != null) {
-              var decoder = mxCodecRegistry.codecs[element.nodeName] || this;
+              let decoder = mxCodecRegistry.codecs[element.nodeName] || this;
               object = decoder.decode(dec, element);
             }
           }
diff --git a/src/js/io/mxChildChangeCodec.js b/src/js/io/mxChildChangeCodec.js
index 520f11955..092168da7 100644
--- a/src/js/io/mxChildChangeCodec.js
+++ b/src/js/io/mxChildChangeCodec.js
@@ -92,7 +92,7 @@ class mxChildChangeCodec extends mxObjectCodec {
       // Makes sure the original node isn't modified
       node = node.cloneNode(true);
 
-      var tmp = node.firstChild;
+      let tmp = node.firstChild;
       obj.child = dec.decodeCell(tmp, false);
 
       var tmp2 = tmp.nextSibling;
@@ -108,7 +108,7 @@ class mxChildChangeCodec extends mxObjectCodec {
           // of these cells contains the new parent, this would leave
           // to an inconsistent state on the model (ie. a parent
           // change without a call to parentForCellChanged).
-          var id = tmp.getAttribute('id');
+          let id = tmp.getAttribute('id');
 
           if (dec.lookup(id) == null) {
             dec.decodeCell(tmp);
@@ -119,7 +119,7 @@ class mxChildChangeCodec extends mxObjectCodec {
         tmp = tmp2;
       }
     } else {
-      var childRef = node.getAttribute('child');
+      let childRef = node.getAttribute('child');
       obj.child = dec.getObject(childRef);
     }
 
diff --git a/src/js/io/mxCodec.js b/src/js/io/mxCodec.js
index 7e8211773..d2e7cc8a9 100644
--- a/src/js/io/mxCodec.js
+++ b/src/js/io/mxCodec.js
@@ -54,9 +54,9 @@ class mxCodec {
    * The following code is used to encode a graph model.
    *
    * (code)
-   * var encoder = new mxCodec();
-   * var result = encoder.encode(graph.getModel());
-   * var xml = mxUtils.getXml(result);
+   * let encoder = new mxCodec();
+   * let result = encoder.encode(graph.getModel());
+   * let xml = mxUtils.getXml(result);
    * (end)
    *
    * Example:
@@ -67,8 +67,8 @@ class mxCodec {
    * XML string.
    *
    * (code)
-   * var doc = mxUtils.parseXml(xmlString);
-   * var codec = new mxCodec(doc);
+   * let doc = mxUtils.parseXml(xmlString);
+   * let codec = new mxCodec(doc);
    * codec.decode(doc.documentElement, graph.getModel());
    * (end)
    *
@@ -79,11 +79,11 @@ class mxCodec {
    * be added anywhere in the cell hierarchy after parsing.
    *
    * (code)
-   * var xml = '<root><mxCell id="2" value="Hello," vertex="1"><mxGeometry x="20" y="20" width="80" height="30" as="geometry"/></mxCell><mxCell id="3" value="World!" vertex="1"><mxGeometry x="200" y="150" width="80" height="30" as="geometry"/></mxCell><mxCell id="4" value="" edge="1" source="2" target="3"><mxGeometry relative="1" as="geometry"/></mxCell></root>';
-   * var doc = mxUtils.parseXml(xml);
-   * var codec = new mxCodec(doc);
-   * var elt = doc.documentElement.firstChild;
-   * var cells = [];
+   * let xml = '<root><mxCell id="2" value="Hello," vertex="1"><mxGeometry x="20" y="20" width="80" height="30" as="geometry"/></mxCell><mxCell id="3" value="World!" vertex="1"><mxGeometry x="200" y="150" width="80" height="30" as="geometry"/></mxCell><mxCell id="4" value="" edge="1" source="2" target="3"><mxGeometry relative="1" as="geometry"/></mxCell></root>';
+   * let doc = mxUtils.parseXml(xml);
+   * let codec = new mxCodec(doc);
+   * let elt = doc.documentElement.firstChild;
+   * let cells = [];
    *
    * while (elt != null)
    * {
@@ -100,8 +100,8 @@ class mxCodec {
    * output is displayed in a dialog box.
    *
    * (code)
-   * var enc = new mxCodec();
-   * var cells = graph.getSelectionCells();
+   * let enc = new mxCodec();
+   * let cells = graph.getSelectionCells();
    * mxUtils.alert(mxUtils.getPrettyXml(enc.encode(cells)));
    * (end)
    *
@@ -114,7 +114,7 @@ class mxCodec {
    * encoded objects:
    *
    * (code)
-   * var oldEncode = encode;
+   * let oldEncode = encode;
    * encode = (obj)=>
    * {
    *   mxLog.show();
@@ -128,7 +128,7 @@ class mxCodec {
    * decoding those objects, the constructor should be written as follows:
    *
    * (code)
-   * var MyObj = (name)=>
+   * let MyObj = (name)=>
    * {
    *   // ...
    * };
@@ -175,7 +175,7 @@ class mxCodec {
    * from the document is parsed using <decode>.
    */
   getObject = (id) => {
-    var obj = null;
+    let obj = null;
 
     if (id != null) {
       obj = this.objects[id];
@@ -184,7 +184,7 @@ class mxCodec {
         obj = this.lookup(id);
 
         if (obj == null) {
-          var node = this.getElementById(id);
+          let node = this.getElementById(id);
 
           if (node != null) {
             obj = this.decode(node);
@@ -205,7 +205,7 @@ class mxCodec {
    * Example:
    *
    * (code)
-   * var codec = new mxCodec();
+   * let codec = new mxCodec();
    * codec.lookup = (id)=>
    * {
    *   return model.getCell(id);
@@ -261,7 +261,7 @@ class mxCodec {
    */
   addElement = (node) => {
     if (node.nodeType === mxConstants.NODETYPE_ELEMENT) {
-      var id = node.getAttribute('id');
+      let id = node.getAttribute('id');
 
       if (id != null) {
         if (this.elements[id] == null) {
@@ -294,7 +294,7 @@ class mxCodec {
    * obj - Object to return the ID for.
    */
   getId = (obj) => {
-    var id = null;
+    let id = null;
 
     if (obj != null) {
       id = this.reference(obj);
@@ -326,7 +326,7 @@ class mxCodec {
    * Example:
    *
    * (code)
-   * var codec = new mxCodec();
+   * let codec = new mxCodec();
    * codec.reference = (obj)=>
    * {
    *   return obj.getCustomId();
@@ -352,10 +352,10 @@ class mxCodec {
    * obj - Object to be encoded.
    */
   encode = (obj) => {
-    var node = null;
+    let node = null;
 
     if (obj != null && obj.constructor != null) {
-      var enc = mxCodecRegistry.getCodec(obj.constructor);
+      let enc = mxCodecRegistry.getCodec(obj.constructor);
 
       if (enc != null) {
         node = enc.encode(this, obj);
@@ -389,10 +389,10 @@ class mxCodec {
    */
   decode = (node, into) => {
     this.updateElements();
-    var obj = null;
+    let obj = null;
 
     if (node != null && node.nodeType === mxConstants.NODETYPE_ELEMENT) {
-      var ctor = null;
+      let ctor = null;
 
       try {
         ctor = window[node.nodeName];
@@ -400,7 +400,7 @@ class mxCodec {
         // ignore
       }
 
-      var dec = mxCodecRegistry.getCodec(ctor);
+      let dec = mxCodecRegistry.getCodec(ctor);
 
       if (dec != null) {
         obj = dec.decode(this, node, into);
@@ -437,9 +437,9 @@ class mxCodec {
     node.appendChild(this.encode(cell));
 
     if (includeChildren == null || includeChildren) {
-      var childCount = cell.getChildCount();
+      let childCount = cell.getChildCount();
 
-      for (var i = 0; i < childCount; i++) {
+      for (let i = 0; i < childCount; i++) {
         this.encodeCell(cell.getChildAt(i), node);
       }
     }
@@ -479,19 +479,19 @@ class mxCodec {
    */
   decodeCell = (node, restoreStructures) => {
     restoreStructures = (restoreStructures != null) ? restoreStructures : true;
-    var cell = null;
+    let cell = null;
 
     if (node != null && node.nodeType === mxConstants.NODETYPE_ELEMENT) {
       // Tries to find a codec for the given node name. If that does
       // not return a codec then the node is the user object (an XML node
       // that contains the mxCell, aka inversion).
-      var decoder = mxCodecRegistry.getCodec(node.nodeName);
+      let decoder = mxCodecRegistry.getCodec(node.nodeName);
 
       // Tries to find the codec for the cell inside the user object.
       // This assumes all node names inside the user object are either
       // not registered or they correspond to a class for cells.
       if (!this.isCellCodec(decoder)) {
-        var child = node.firstChild;
+        let child = node.firstChild;
 
         while (child != null && !this.isCellCodec(decoder)) {
           decoder = mxCodecRegistry.getCodec(child.nodeName);
@@ -519,9 +519,9 @@ class mxCodec {
    * Inserts the given cell into its parent and terminal cells.
    */
   insertIntoGraph = (cell) => {
-    var parent = cell.parent;
-    var source = cell.getTerminal(true);
-    var target = cell.getTerminal(false);
+    let parent = cell.parent;
+    let source = cell.getTerminal(true);
+    let target = cell.getTerminal(false);
 
     // Fixes possible inconsistencies during insert into graph
     cell.setTerminal(null, false);
diff --git a/src/js/io/mxCodecRegistry.js b/src/js/io/mxCodecRegistry.js
index b6a633456..537bd8518 100644
--- a/src/js/io/mxCodecRegistry.js
+++ b/src/js/io/mxCodecRegistry.js
@@ -7,7 +7,7 @@
 import mxUtils from "../util/mxUtils";
 import mxObjectCodec from "./mxObjectCodec";
 
-var mxCodecRegistry = {
+let mxCodecRegistry = {
   /**
    * Class: mxCodecRegistry
    *
@@ -19,7 +19,7 @@ var mxCodecRegistry = {
    * object to be handled.
    *
    * (code)
-   * var codec = new mxObjectCodec(new mxGraphModel());
+   * let codec = new mxObjectCodec(new mxGraphModel());
    * (end)
    *
    * 2. Define the functions required for encoding and decoding
@@ -67,10 +67,10 @@ var mxCodecRegistry = {
    */
   register: (codec) => {
     if (codec != null) {
-      var name = codec.getName();
+      let name = codec.getName();
       mxCodecRegistry.codecs[name] = codec;
 
-      var classname = mxUtils.getFunctionName(codec.template.constructor);
+      let classname = mxUtils.getFunctionName(codec.template.constructor);
 
       if (classname !== name) {
         mxCodecRegistry.addAlias(classname, name);
@@ -100,11 +100,11 @@ var mxCodecRegistry = {
    * ctor - JavaScript constructor function.
    */
   getCodec: (ctor) => {
-    var codec = null;
+    let codec = null;
 
     if (ctor != null) {
-      var name = mxUtils.getFunctionName(ctor);
-      var tmp = mxCodecRegistry.aliases[name];
+      let name = mxUtils.getFunctionName(ctor);
+      let tmp = mxCodecRegistry.aliases[name];
 
       if (tmp != null) {
         name = tmp;
diff --git a/src/js/io/mxDefaultKeyHandlerCodec.js b/src/js/io/mxDefaultKeyHandlerCodec.js
index e7672ca49..d513a63a2 100644
--- a/src/js/io/mxDefaultKeyHandlerCodec.js
+++ b/src/js/io/mxDefaultKeyHandlerCodec.js
@@ -64,15 +64,15 @@ class mxDefaultKeyHandlerCodec extends mxObjectCodec {
    */
   decode = (dec, node, into) => {
     if (into != null) {
-      var editor = into.editor;
+      let editor = into.editor;
       node = node.firstChild;
 
       while (node != null) {
         if (!this.processInclude(dec, node, into) &&
             node.nodeName === 'add') {
-          var as = node.getAttribute('as');
-          var action = node.getAttribute('action');
-          var control = node.getAttribute('control');
+          let as = node.getAttribute('as');
+          let action = node.getAttribute('action');
+          let control = node.getAttribute('control');
 
           into.bindAction(as, action, control);
         }
diff --git a/src/js/io/mxDefaultPopupMenuCodec.js b/src/js/io/mxDefaultPopupMenuCodec.js
index cb43ebcfa..fed5ad3f2 100644
--- a/src/js/io/mxDefaultPopupMenuCodec.js
+++ b/src/js/io/mxDefaultPopupMenuCodec.js
@@ -38,7 +38,7 @@ class mxDefaultPopupMenuCodec extends mxObjectCodec {
    * Uses the given node as the config for <mxDefaultPopupMenu>.
    */
   decode = (dec, node, into) => {
-    var inc = node.getElementsByTagName('include')[0];
+    let inc = node.getElementsByTagName('include')[0];
 
     if (inc != null) {
       this.processInclude(dec, inc, into);
diff --git a/src/js/io/mxDefaultToolbarCodec.js b/src/js/io/mxDefaultToolbarCodec.js
index 5627a17ca..22945b9f7 100644
--- a/src/js/io/mxDefaultToolbarCodec.js
+++ b/src/js/io/mxDefaultToolbarCodec.js
@@ -71,7 +71,7 @@ class mxDefaultToolbarCodec extends mxObjectCodec {
    * <add as="Swimlane" template="swimlane" icon="images/swimlane.gif"><![CDATA[
    *   function (editor, cell, evt, targetCell)
    *   {
-   *     var pt = mxUtils.convertPoint(
+   *     let pt = mxUtils.convertPoint(
    *       editor.graph.container, mxEvent.getClientX(evt),
    *         mxEvent.getClientY(evt));
    *     return editor.addVertex(targetCell, cell, pt.x, pt.y);
@@ -124,7 +124,7 @@ class mxDefaultToolbarCodec extends mxObjectCodec {
    */
   decode = (dec, node, into) => {
     if (into != null) {
-      var editor = into.editor;
+      let editor = into.editor;
       node = node.firstChild;
 
       while (node != null) {
@@ -137,32 +137,32 @@ class mxDefaultToolbarCodec extends mxObjectCodec {
             } else if (node.nodeName === 'hr') {
               into.toolbar.addLine();
             } else if (node.nodeName === 'add') {
-              var as = node.getAttribute('as');
+              let as = node.getAttribute('as');
               as = mxResources.get(as) || as;
-              var icon = node.getAttribute('icon');
-              var pressedIcon = node.getAttribute('pressedIcon');
-              var action = node.getAttribute('action');
-              var mode = node.getAttribute('mode');
-              var template = node.getAttribute('template');
-              var toggle = node.getAttribute('toggle') != '0';
-              var text = mxUtils.getTextContent(node);
-              var elt = null;
+              let icon = node.getAttribute('icon');
+              let pressedIcon = node.getAttribute('pressedIcon');
+              let action = node.getAttribute('action');
+              let mode = node.getAttribute('mode');
+              let template = node.getAttribute('template');
+              let toggle = node.getAttribute('toggle') != '0';
+              let text = mxUtils.getTextContent(node);
+              let elt = null;
 
               if (action != null) {
                 elt = into.addItem(as, icon, action, pressedIcon);
               } else if (mode != null) {
-                var funct = (mxDefaultToolbarCodec.allowEval) ? mxUtils.eval(text) : null;
+                let funct = (mxDefaultToolbarCodec.allowEval) ? mxUtils.eval(text) : null;
                 elt = into.addMode(as, icon, mode, pressedIcon, funct);
               } else if (template != null || (text != null && text.length > 0)) {
-                var cell = editor.templates[template];
-                var style = node.getAttribute('style');
+                let cell = editor.templates[template];
+                let style = node.getAttribute('style');
 
                 if (cell != null && style != null) {
                   cell = editor.graph.cloneCell(cell);
                   cell.setStyle(style);
                 }
 
-                var insertFunction = null;
+                let insertFunction = null;
 
                 if (text != null && text.length > 0 && mxDefaultToolbarCodec.allowEval) {
                   insertFunction = mxUtils.eval(text);
@@ -170,31 +170,31 @@ class mxDefaultToolbarCodec extends mxObjectCodec {
 
                 elt = into.addPrototype(as, icon, cell, pressedIcon, insertFunction, toggle);
               } else {
-                var children = mxUtils.getChildNodes(node);
+                let children = mxUtils.getChildNodes(node);
 
                 if (children.length > 0) {
                   if (icon == null) {
-                    var combo = into.addActionCombo(as);
+                    let combo = into.addActionCombo(as);
 
-                    for (var i = 0; i < children.length; i++) {
-                      var child = children[i];
+                    for (let i = 0; i < children.length; i++) {
+                      let child = children[i];
 
                       if (child.nodeName === 'separator') {
                         into.addOption(combo, '---');
                       } else if (child.nodeName === 'add') {
-                        var lab = child.getAttribute('as');
-                        var act = child.getAttribute('action');
+                        let lab = child.getAttribute('as');
+                        let act = child.getAttribute('action');
                         into.addActionOption(combo, lab, act);
                       }
                     }
                   } else {
-                    var select = null;
-                    var create = () => {
-                      var template = editor.templates[select.value];
+                    let select = null;
+                    let create = () => {
+                      let template = editor.templates[select.value];
 
                       if (template != null) {
-                        var clone = template.clone();
-                        var style = select.options[select.selectedIndex].cellStyle;
+                        let clone = template.clone();
+                        let style = select.options[select.selectedIndex].cellStyle;
 
                         if (style != null) {
                           clone.setStyle(style);
@@ -208,14 +208,14 @@ class mxDefaultToolbarCodec extends mxObjectCodec {
                       return null;
                     };
 
-                    var img = into.addPrototype(as, icon, create, null, null, toggle);
+                    let img = into.addPrototype(as, icon, create, null, null, toggle);
                     select = into.addCombo();
 
                     // Selects the toolbar icon if a selection change
                     // is made in the corresponding combobox.
                     mxEvent.addListener(select, 'change', () => {
                       into.toolbar.selectMode(img, (evt) => {
-                        var pt = mxUtils.convertPoint(editor.graph.container,
+                        let pt = mxUtils.convertPoint(editor.graph.container,
                             mxEvent.getClientX(evt), mxEvent.getClientY(evt));
 
                         return editor.addVertex(null, funct(), pt.x, pt.y);
@@ -225,15 +225,15 @@ class mxDefaultToolbarCodec extends mxObjectCodec {
                     });
 
                     // Adds the entries to the combobox
-                    for (var i = 0; i < children.length; i++) {
-                      var child = children[i];
+                    for (let i = 0; i < children.length; i++) {
+                      let child = children[i];
 
                       if (child.nodeName === 'separator') {
                         into.addOption(select, '---');
                       } else if (child.nodeName === 'add') {
-                        var lab = child.getAttribute('as');
-                        var tmp = child.getAttribute('template');
-                        var option = into.addOption(select, lab, tmp || template);
+                        let lab = child.getAttribute('as');
+                        let tmp = child.getAttribute('template');
+                        let option = into.addOption(select, lab, tmp || template);
                         option.cellStyle = child.getAttribute('style');
                       }
                     }
@@ -244,7 +244,7 @@ class mxDefaultToolbarCodec extends mxObjectCodec {
 
               // Assigns an ID to the created element to access it later.
               if (elt != null) {
-                var id = node.getAttribute('id');
+                let id = node.getAttribute('id');
 
                 if (id != null && id.length > 0) {
                   elt.setAttribute('id', id);
diff --git a/src/js/io/mxEditorCodec.js b/src/js/io/mxEditorCodec.js
index 443c6c8d1..e59f36b0c 100644
--- a/src/js/io/mxEditorCodec.js
+++ b/src/js/io/mxEditorCodec.js
@@ -88,7 +88,7 @@ class mxEditorCodec extends mxObjectCodec {
    */
   afterDecode = (dec, node, obj) => {
     // Assigns the specified templates for edges
-    var defaultEdge = node.getAttribute('defaultEdge');
+    let defaultEdge = node.getAttribute('defaultEdge');
 
     if (defaultEdge != null) {
       node.removeAttribute('defaultEdge');
@@ -96,7 +96,7 @@ class mxEditorCodec extends mxObjectCodec {
     }
 
     // Assigns the specified templates for groups
-    var defaultGroup = node.getAttribute('defaultGroup');
+    let defaultGroup = node.getAttribute('defaultGroup');
 
     if (defaultGroup != null) {
       node.removeAttribute('defaultGroup');
@@ -113,7 +113,7 @@ class mxEditorCodec extends mxObjectCodec {
    */
   decodeChild = (dec, child, obj) => {
     if (child.nodeName === 'Array') {
-      var role = child.getAttribute('as');
+      let role = child.getAttribute('as');
 
       if (role === 'templates') {
         this.decodeTemplates(dec, child, obj);
@@ -133,13 +133,13 @@ class mxEditorCodec extends mxObjectCodec {
    * Decodes the ui elements from the given node.
    */
   decodeUi = (dec, node, editor) => {
-    var tmp = node.firstChild;
+    let tmp = node.firstChild;
     while (tmp != null) {
       if (tmp.nodeName === 'add') {
-        var as = tmp.getAttribute('as');
-        var elt = tmp.getAttribute('element');
-        var style = tmp.getAttribute('style');
-        var element = null;
+        let as = tmp.getAttribute('as');
+        let elt = tmp.getAttribute('element');
+        let style = tmp.getAttribute('style');
+        let element = null;
 
         if (elt != null) {
           element = document.getElementById(elt);
@@ -148,16 +148,16 @@ class mxEditorCodec extends mxObjectCodec {
             element.style.cssText += ';' + style;
           }
         } else {
-          var x = parseInt(tmp.getAttribute('x'));
-          var y = parseInt(tmp.getAttribute('y'));
-          var width = tmp.getAttribute('width');
-          var height = tmp.getAttribute('height');
+          let x = parseInt(tmp.getAttribute('x'));
+          let y = parseInt(tmp.getAttribute('y'));
+          let width = tmp.getAttribute('width');
+          let height = tmp.getAttribute('height');
 
           // Creates a new window around the element
           element = document.createElement('div');
           element.style.cssText = style;
 
-          var wnd = new mxWindow(mxResources.get(as) || as,
+          let wnd = new mxWindow(mxResources.get(as) || as,
               element, x, y, width, height, false, true);
           wnd.setVisible(true);
         }
@@ -194,10 +194,10 @@ class mxEditorCodec extends mxObjectCodec {
       editor.templates = [];
     }
 
-    var children = mxUtils.getChildNodes(node);
-    for (var j = 0; j < children.length; j++) {
-      var name = children[j].getAttribute('as');
-      var child = children[j].firstChild;
+    let children = mxUtils.getChildNodes(node);
+    for (let j = 0; j < children.length; j++) {
+      let name = children[j].getAttribute('as');
+      let child = children[j].firstChild;
 
       while (child != null && child.nodeType !== 1) {
         child = child.nextSibling;
diff --git a/src/js/io/mxGraphViewCodec.js b/src/js/io/mxGraphViewCodec.js
index 1a4fd23be..678fcc1c6 100644
--- a/src/js/io/mxGraphViewCodec.js
+++ b/src/js/io/mxGraphViewCodec.js
@@ -56,14 +56,14 @@ class mxGraphViewCodec extends mxObjectCodec {
    * values to the node.
    */
   encodeCell = (enc, view, cell) => {
-    var model = view.graph.getModel();
-    var state = view.getState(cell);
-    var parent = model.getParent(cell);
+    let model = view.graph.getModel();
+    let state = view.getState(cell);
+    let parent = model.getParent(cell);
 
     if (parent == null || state != null) {
-      var childCount = model.getChildCount(cell);
-      var geo = view.graph.getCellGeometry(cell);
-      var name = null;
+      let childCount = model.getChildCount(cell);
+      let geo = view.graph.getCellGeometry(cell);
+      let name = null;
 
       if (parent === model.getRoot()) {
         name = 'layer';
@@ -78,8 +78,8 @@ class mxGraphViewCodec extends mxObjectCodec {
       }
 
       if (name != null) {
-        var node = enc.document.createElement(name);
-        var lab = view.graph.getLabel(cell);
+        let node = enc.document.createElement(name);
+        let lab = view.graph.getLabel(cell);
 
         if (lab != null) {
           node.setAttribute('label', view.graph.getLabel(cell));
@@ -90,7 +90,7 @@ class mxGraphViewCodec extends mxObjectCodec {
         }
 
         if (parent == null) {
-          var bounds = view.getGraphBounds();
+          let bounds = view.getGraphBounds();
 
           if (bounds != null) {
             node.setAttribute('x', Math.round(bounds.x));
@@ -103,7 +103,7 @@ class mxGraphViewCodec extends mxObjectCodec {
         } else if (state != null && geo != null) {
           // Writes each key, value in the style pair to an attribute
           for (var i in state.style) {
-            var value = state.style[i];
+            let value = state.style[i];
 
             // Tries to turn objects and functions into strings
             if (typeof (value) == 'function' &&
@@ -118,13 +118,13 @@ class mxGraphViewCodec extends mxObjectCodec {
             }
           }
 
-          var abs = state.absolutePoints;
+          let abs = state.absolutePoints;
 
           // Writes the list of points into one attribute
           if (abs != null && abs.length > 0) {
-            var pts = Math.round(abs[0].x) + ',' + Math.round(abs[0].y);
+            let pts = Math.round(abs[0].x) + ',' + Math.round(abs[0].y);
 
-            for (var i = 1; i < abs.length; i++) {
+            for (let i = 1; i < abs.length; i++) {
               pts += ' ' + Math.round(abs[i].x) + ',' +
                   Math.round(abs[i].y);
             }
@@ -140,7 +140,7 @@ class mxGraphViewCodec extends mxObjectCodec {
             node.setAttribute('height', Math.round(state.height));
           }
 
-          var offset = state.absoluteOffset;
+          let offset = state.absoluteOffset;
 
           // Writes the offset into 2 attributes
           if (offset != null) {
@@ -154,8 +154,8 @@ class mxGraphViewCodec extends mxObjectCodec {
           }
         }
 
-        for (var i = 0; i < childCount; i++) {
-          var childNode = this.encodeCell(enc,
+        for (let i = 0; i < childCount; i++) {
+          let childNode = this.encodeCell(enc,
               view, model.getChildAt(cell, i));
 
           if (childNode != null) {
diff --git a/src/js/io/mxModelCodec.js b/src/js/io/mxModelCodec.js
index 9eab2d8be..baf3f521b 100644
--- a/src/js/io/mxModelCodec.js
+++ b/src/js/io/mxModelCodec.js
@@ -28,7 +28,7 @@ class mxModelCodec extends mxObjectCodec {
    * wrapped-up in a node with the name root.
    */
   encodeObject = (enc, obj, node) => {
-    var rootNode = enc.document.createElement('root');
+    let rootNode = enc.document.createElement('root');
     enc.encodeCell(obj.getRoot(), rootNode);
     node.appendChild(rootNode);
   };
@@ -53,11 +53,11 @@ class mxModelCodec extends mxObjectCodec {
    * are children of the root element in the node.
    */
   decodeRoot = (dec, root, model) => {
-    var rootCell = null;
-    var tmp = root.firstChild;
+    let rootCell = null;
+    let tmp = root.firstChild;
 
     while (tmp != null) {
-      var cell = dec.decodeCell(tmp);
+      let cell = dec.decodeCell(tmp);
 
       if (cell != null && cell.getParent() == null) {
         rootCell = cell;
diff --git a/src/js/io/mxObjectCodec.js b/src/js/io/mxObjectCodec.js
index 41ac1a128..a952d70c6 100644
--- a/src/js/io/mxObjectCodec.js
+++ b/src/js/io/mxObjectCodec.js
@@ -63,7 +63,7 @@ class mxObjectCodec {
    * Consider the following example.
    *
    * (code)
-   * var obj = {};
+   * let obj = {};
    * obj.foo = "Foo";
    * obj.bar = "Bar";
    * (end)
@@ -71,8 +71,8 @@ class mxObjectCodec {
    * This object is encoded into an XML node using the following.
    *
    * (code)
-   * var enc = new mxCodec();
-   * var node = enc.encode(obj);
+   * let enc = new mxCodec();
+   * let node = enc.encode(obj);
    * (end)
    *
    * The output of the encoding may be viewed using <mxLog> as follows.
@@ -110,7 +110,7 @@ class mxObjectCodec {
    * property of foo.
    *
    * (code)
-   * var obj = {foo: {bar: "Bar"}};
+   * let obj = {foo: {bar: "Bar"}};
    * (end)
    *
    * This will be mapped to the following XML structure by mxObjectCodec.
@@ -140,7 +140,7 @@ class mxObjectCodec {
    * called bar with an atomic value, and foo with an object value.
    *
    * (code)
-   * var obj = ["Bar", {bar: "Bar"}];
+   * let obj = ["Bar", {bar: "Bar"}];
    * obj["bar"] = "Bar";
    * obj["foo"] = {bar: "Bar"};
    * (end)
@@ -233,7 +233,7 @@ class mxObjectCodec {
    * The argument is created as follows:
    *
    * (code)
-   * var mapping = {};
+   * let mapping = {};
    * mapping['variableName'] = 'attribute-name';
    * (end)
    *
@@ -292,7 +292,7 @@ class mxObjectCodec {
    */
   getFieldName = (attributename) => {
     if (attributename != null) {
-      var mapped = this.reverse[attributename];
+      let mapped = this.reverse[attributename];
 
       if (mapped != null) {
         attributename = mapped;
@@ -312,7 +312,7 @@ class mxObjectCodec {
    */
   getAttributeName = (fieldname) => {
     if (fieldname != null) {
-      var mapped = this.mapping[fieldname];
+      let mapped = this.mapping[fieldname];
 
       if (mapped != null) {
         fieldname = mapped;
@@ -404,7 +404,7 @@ class mxObjectCodec {
    * obj - Object to be encoded.
    */
   encode = (enc, obj) => {
-    var node = enc.document.createElement(this.getName());
+    let node = enc.document.createElement(this.getName());
 
     obj = this.beforeEncode(enc, obj, node);
     this.encodeObject(enc, obj, node);
@@ -428,8 +428,8 @@ class mxObjectCodec {
     enc.setAttribute(node, 'id', enc.getId(obj));
 
     for (var i in obj) {
-      var name = i;
-      var value = obj[name];
+      let name = i;
+      let value = obj[name];
 
       if (value != null && !this.isExcluded(obj, name, value, true)) {
         if (mxUtils.isInteger(name)) {
@@ -459,7 +459,7 @@ class mxObjectCodec {
   encodeValue = (enc, obj, name, value, node) => {
     if (value != null) {
       if (this.isReference(obj, name, value, true)) {
-        var tmp = enc.getId(value);
+        let tmp = enc.getId(value);
 
         if (tmp == null) {
           mxLog.warn('mxObjectCodec.encode: No ID for ' +
@@ -470,7 +470,7 @@ class mxObjectCodec {
         value = tmp;
       }
 
-      var defaultValue = this.template[name];
+      let defaultValue = this.template[name];
 
       // Checks if the value is a default value and
       // the name is correct
@@ -505,7 +505,7 @@ class mxObjectCodec {
     value = this.convertAttributeToXml(enc, obj, name, value, node);
 
     if (name == null) {
-      var child = enc.document.createElement('add');
+      let child = enc.document.createElement('add');
 
       if (typeof (value) == 'function') {
         child.appendChild(enc.document.createTextNode(value));
@@ -525,7 +525,7 @@ class mxObjectCodec {
    * Writes the given value as a child node of the given node.
    */
   writeComplexAttribute = (enc, obj, name, value, node) => {
-    var child = enc.encode(value);
+    let child = enc.encode(value);
 
     if (child != null) {
       if (name != null) {
@@ -591,7 +591,7 @@ class mxObjectCodec {
    * obj - Objec to convert the attribute for.
    */
   convertAttributeFromXml = (dec, attr, obj) => {
-    var value = attr.value;
+    let value = attr.value;
 
     if (this.isNumericAttribute(dec, attr, obj)) {
       value = parseFloat(value);
@@ -617,7 +617,7 @@ class mxObjectCodec {
    */
   isNumericAttribute = (dec, attr, obj) => {
     // Handles known numeric attributes for generic objects
-    var result = (obj.constructor === mxGeometry &&
+    let result = (obj.constructor === mxGeometry &&
         (attr.name === 'x' || attr.name === 'y' ||
             attr.name === 'width' || attr.name === 'height')) ||
         (obj.constructor === mxPoint &&
@@ -719,8 +719,8 @@ class mxObjectCodec {
    * into - Optional objec to encode the node into.
    */
   decode = (dec, node, into) => {
-    var id = node.getAttribute('id');
-    var obj = dec.objects[id];
+    let id = node.getAttribute('id');
+    let obj = dec.objects[id];
 
     if (obj == null) {
       obj = into || this.cloneTemplate();
@@ -766,10 +766,10 @@ class mxObjectCodec {
    * obj - Objec to encode the node into.
    */
   decodeAttributes = (dec, node, obj) => {
-    var attrs = node.attributes;
+    let attrs = node.attributes;
 
     if (attrs != null) {
-      for (var i = 0; i < attrs.length; i++) {
+      for (let i = 0; i < attrs.length; i++) {
         this.decodeAttribute(dec, attrs[i], obj);
       }
     }
@@ -804,17 +804,17 @@ class mxObjectCodec {
    */
   decodeAttribute = (dec, attr, obj) => {
     if (!this.isIgnoredAttribute(dec, attr, obj)) {
-      var name = attr.nodeName;
+      let name = attr.nodeName;
 
       // Converts the string true and false to their boolean values.
       // This may require an additional check on the obj to see if
       // the existing field is a boolean value or uninitialized, in
       // which case we may want to convert true and false to a string.
-      var value = this.convertAttributeFromXml(dec, attr, obj);
-      var fieldname = this.getFieldName(name);
+      let value = this.convertAttributeFromXml(dec, attr, obj);
+      let fieldname = this.getFieldName(name);
 
       if (this.isReference(obj, fieldname, value, false)) {
-        var tmp = dec.getObject(value);
+        let tmp = dec.getObject(value);
 
         if (tmp == null) {
           mxLog.warn('mxObjectCodec.decode: No object for ' +
@@ -844,10 +844,10 @@ class mxObjectCodec {
    * obj - Objec to encode the node into.
    */
   decodeChildren = (dec, node, obj) => {
-    var child = node.firstChild;
+    let child = node.firstChild;
 
     while (child != null) {
-      var tmp = child.nextSibling;
+      let tmp = child.nextSibling;
 
       if (child.nodeType == mxConstants.NODETYPE_ELEMENT &&
           !this.processInclude(dec, child, obj)) {
@@ -870,11 +870,11 @@ class mxObjectCodec {
    * obj - Objec to encode the node into.
    */
   decodeChild = (dec, child, obj) => {
-    var fieldname = this.getFieldName(child.getAttribute('as'));
+    let fieldname = this.getFieldName(child.getAttribute('as'));
 
     if (fieldname == null || !this.isExcluded(obj, fieldname, child, false)) {
-      var template = this.getFieldTemplate(obj, fieldname, child);
-      var value = null;
+      let template = this.getFieldTemplate(obj, fieldname, child);
+      let value = null;
 
       if (child.nodeName === 'add') {
         value = child.getAttribute('value');
@@ -905,7 +905,7 @@ class mxObjectCodec {
    * based on the encoded child.
    */
   getFieldTemplate = (obj, fieldname, child) => {
-    var template = obj[fieldname];
+    let template = obj[fieldname];
 
     // Non-empty arrays are replaced completely
     if (template instanceof Array && template.length > 0) {
@@ -951,11 +951,11 @@ class mxObjectCodec {
    */
   processInclude = (dec, node, into) => {
     if (node.nodeName === 'include') {
-      var name = node.getAttribute('name');
+      let name = node.getAttribute('name');
 
       if (name != null) {
         try {
-          var xml = mxUtils.load(name).getDocumentElement();
+          let xml = mxUtils.load(name).getDocumentElement();
 
           if (xml != null) {
             dec.decode(xml, into);
diff --git a/src/js/io/mxRootChangeCodec.js b/src/js/io/mxRootChangeCodec.js
index b5d6b4fa9..639946656 100644
--- a/src/js/io/mxRootChangeCodec.js
+++ b/src/js/io/mxRootChangeCodec.js
@@ -48,7 +48,7 @@ class mxRootChangeCodec extends mxObjectCodec {
       // Makes sure the original node isn't modified
       node = node.cloneNode(true);
 
-      var tmp = node.firstChild;
+      let tmp = node.firstChild;
       obj.root = dec.decodeCell(tmp, false);
 
       var tmp2 = tmp.nextSibling;
diff --git a/src/js/io/mxStylesheetCodec.js b/src/js/io/mxStylesheetCodec.js
index af6002243..ee3ab8dff 100644
--- a/src/js/io/mxStylesheetCodec.js
+++ b/src/js/io/mxStylesheetCodec.js
@@ -36,20 +36,20 @@ class mxStylesheetCodec extends mxObjectCodec {
    * format.
    */
   encode = (enc, obj) => {
-    var node = enc.document.createElement(this.getName());
+    let node = enc.document.createElement(this.getName());
 
     for (var i in obj.styles) {
-      var style = obj.styles[i];
-      var styleNode = enc.document.createElement('add');
+      let style = obj.styles[i];
+      let styleNode = enc.document.createElement('add');
 
       if (i != null) {
         styleNode.setAttribute('as', i);
 
         for (var j in style) {
-          var value = this.getStringValue(j, style[j]);
+          let value = this.getStringValue(j, style[j]);
 
           if (value != null) {
-            var entry = enc.document.createElement('add');
+            let entry = enc.document.createElement('add');
             entry.setAttribute('value', value);
             entry.setAttribute('as', j);
             styleNode.appendChild(entry);
@@ -71,7 +71,7 @@ class mxStylesheetCodec extends mxObjectCodec {
    * Returns the string for encoding the given value.
    */
   getStringValue = (key, value) => {
-    var type = typeof (value);
+    let type = typeof (value);
 
     if (type === 'function') {
       value = mxStyleRegistry.getName(value);
@@ -124,8 +124,8 @@ class mxStylesheetCodec extends mxObjectCodec {
    * (end)
    */
   decode = (dec, node, into) => {
-    var obj = into || new this.template.constructor();
-    var id = node.getAttribute('id');
+    let obj = into || new this.template.constructor();
+    let id = node.getAttribute('id');
 
     if (id != null) {
       dec.objects[id] = obj;
@@ -135,11 +135,11 @@ class mxStylesheetCodec extends mxObjectCodec {
 
     while (node != null) {
       if (!this.processInclude(dec, node, obj) && node.nodeName === 'add') {
-        var as = node.getAttribute('as');
+        let as = node.getAttribute('as');
 
         if (as != null) {
-          var extend = node.getAttribute('extend');
-          var style = (extend != null) ? mxUtils.clone(obj.styles[extend]) : null;
+          let extend = node.getAttribute('extend');
+          let style = (extend != null) ? mxUtils.clone(obj.styles[extend]) : null;
 
           if (style == null) {
             if (extend != null) {
@@ -150,15 +150,15 @@ class mxStylesheetCodec extends mxObjectCodec {
             style = {};
           }
 
-          var entry = node.firstChild;
+          let entry = node.firstChild;
 
           while (entry != null) {
             if (entry.nodeType === mxConstants.NODETYPE_ELEMENT) {
-              var key = entry.getAttribute('as');
+              let key = entry.getAttribute('as');
 
               if (entry.nodeName === 'add') {
-                var text = mxUtils.getTextContent(entry);
-                var value = null;
+                let text = mxUtils.getTextContent(entry);
+                let value = null;
 
                 if (text != null && text.length > 0 && mxStylesheetCodec.allowEval) {
                   value = mxUtils.eval(text);
diff --git a/src/js/layout/hierarchical/model/mxGraphHierarchyEdge.js b/src/js/layout/hierarchical/model/mxGraphHierarchyEdge.js
index 7516c4e78..b1704c2f7 100644
--- a/src/js/layout/hierarchical/model/mxGraphHierarchyEdge.js
+++ b/src/js/layout/hierarchical/model/mxGraphHierarchyEdge.js
@@ -60,7 +60,7 @@ class mxGraphHierarchyEdge extends mxGraphAbstractHierarchyCell {
     this.edges = edges;
     this.ids = [];
 
-    for (var i = 0; i < edges.length; i++) {
+    for (let i = 0; i < edges.length; i++) {
       this.ids.push(mxObjectIdentity.get(edges[i]));
     }
   };
@@ -71,7 +71,7 @@ class mxGraphHierarchyEdge extends mxGraphAbstractHierarchyCell {
    * Inverts the direction of this internal edge(s)
    */
   invert = (layer) => {
-    var temp = this.source;
+    let temp = this.source;
     this.source = this.target;
     this.target = temp;
     this.isReversed = !this.isReversed;
@@ -86,7 +86,7 @@ class mxGraphHierarchyEdge extends mxGraphAbstractHierarchyCell {
     if (this.nextLayerConnectedCells == null) {
       this.nextLayerConnectedCells = [];
 
-      for (var i = 0; i < this.temp.length; i++) {
+      for (let i = 0; i < this.temp.length; i++) {
         this.nextLayerConnectedCells[i] = [];
 
         if (i === this.temp.length - 1) {
@@ -109,7 +109,7 @@ class mxGraphHierarchyEdge extends mxGraphAbstractHierarchyCell {
     if (this.previousLayerConnectedCells == null) {
       this.previousLayerConnectedCells = [];
 
-      for (var i = 0; i < this.temp.length; i++) {
+      for (let i = 0; i < this.temp.length; i++) {
         this.previousLayerConnectedCells[i] = [];
 
         if (i === 0) {
diff --git a/src/js/layout/hierarchical/model/mxGraphHierarchyModel.js b/src/js/layout/hierarchical/model/mxGraphHierarchyModel.js
index 9cf710389..06bb70eae 100644
--- a/src/js/layout/hierarchical/model/mxGraphHierarchyModel.js
+++ b/src/js/layout/hierarchical/model/mxGraphHierarchyModel.js
@@ -97,7 +97,7 @@ class mxGraphHierarchyModel {
    * usage
    */
   constructor(layout, vertices, roots, parent, tightenToSource) {
-    var graph = layout.getGraph();
+    let graph = layout.getGraph();
     this.tightenToSource = tightenToSource;
     this.roots = roots;
     this.parent = parent;
@@ -107,7 +107,7 @@ class mxGraphHierarchyModel {
     this.vertexMapper = new mxDictionary();
     this.edgeMapper = new mxDictionary();
     this.maxRank = 0;
-    var internalVertices = [];
+    let internalVertices = [];
 
     if (vertices == null) {
       vertices = this.graph.getChildVertices(parent);
@@ -121,20 +121,20 @@ class mxGraphHierarchyModel {
 
     // Go through edges set their sink values. Also check the
     // ordering if and invert edges if necessary
-    for (var i = 0; i < vertices.length; i++) {
-      var edges = internalVertices[i].connectsAsSource;
+    for (let i = 0; i < vertices.length; i++) {
+      let edges = internalVertices[i].connectsAsSource;
 
-      for (var j = 0; j < edges.length; j++) {
-        var internalEdge = edges[j];
-        var realEdges = internalEdge.edges;
+      for (let j = 0; j < edges.length; j++) {
+        let internalEdge = edges[j];
+        let realEdges = internalEdge.edges;
 
         // Only need to process the first real edge, since
         // all the edges connect to the same other vertex
         if (realEdges != null && realEdges.length > 0) {
-          var realEdge = realEdges[0];
-          var targetCell = layout.getVisibleTerminal(
+          let realEdge = realEdges[0];
+          let targetCell = layout.getVisibleTerminal(
               realEdge, false);
-          var internalTargetCell = this.vertexMapper.get(targetCell);
+          let internalTargetCell = this.vertexMapper.get(targetCell);
 
           if (internalVertices[i] == internalTargetCell) {
             // If there are parallel edges going between two vertices and not all are in the same direction
@@ -182,23 +182,23 @@ class mxGraphHierarchyModel {
    * information filled in using the real vertices.
    */
   createInternalCells = (layout, vertices, internalVertices) => {
-    var graph = layout.getGraph();
+    let graph = layout.getGraph();
 
     // Create internal edges
-    for (var i = 0; i < vertices.length; i++) {
+    for (let i = 0; i < vertices.length; i++) {
       internalVertices[i] = new mxGraphHierarchyNode(vertices[i]);
       this.vertexMapper.put(vertices[i], internalVertices[i]);
 
       // If the layout is deterministic, order the cells
       //List outgoingCells = graph.getNeighbours(vertices[i], deterministic);
-      var conns = layout.getEdges(vertices[i]);
+      let conns = layout.getEdges(vertices[i]);
       internalVertices[i].connectsAsSource = [];
 
       // Create internal edges, but don't do any rank assignment yet
       // First use the information from the greedy cycle remover to
       // invert the leftward edges internally
-      for (var j = 0; j < conns.length; j++) {
-        var cell = layout.getVisibleTerminal(conns[j], false);
+      for (let j = 0; j < conns.length; j++) {
+        let cell = layout.getVisibleTerminal(conns[j], false);
 
         // Looking for outgoing edges only
         if (cell != vertices[i] && layout.graph.model.isVertex(cell) &&
@@ -216,19 +216,19 @@ class mxGraphHierarchyModel {
           // are the same. All the graph edges will have been assigned to
           // an internal edge going the other way, so we don't want to
           // process them again
-          var undirectedEdges = layout.getEdgesBetween(vertices[i],
+          let undirectedEdges = layout.getEdgesBetween(vertices[i],
               cell, false);
-          var directedEdges = layout.getEdgesBetween(vertices[i],
+          let directedEdges = layout.getEdgesBetween(vertices[i],
               cell, true);
 
           if (undirectedEdges != null &&
               undirectedEdges.length > 0 &&
               this.edgeMapper.get(undirectedEdges[0]) == null &&
               directedEdges.length * 2 >= undirectedEdges.length) {
-            var internalEdge = new mxGraphHierarchyEdge(undirectedEdges);
+            let internalEdge = new mxGraphHierarchyEdge(undirectedEdges);
 
-            for (var k = 0; k < undirectedEdges.length; k++) {
-              var edge = undirectedEdges[k];
+            for (let k = 0; k < undirectedEdges.length; k++) {
+              let edge = undirectedEdges[k];
               this.edgeMapper.put(edge, internalEdge);
 
               // Resets all point on the edge and disables the edge style
@@ -263,11 +263,11 @@ class mxGraphHierarchyModel {
    * Starting at the sinks is basically a longest path layering algorithm.
    */
   initialRank = () => {
-    var startNodes = [];
+    let startNodes = [];
 
     if (this.roots != null) {
-      for (var i = 0; i < this.roots.length; i++) {
-        var internalNode = this.vertexMapper.get(this.roots[i]);
+      for (let i = 0; i < this.roots.length; i++) {
+        let internalNode = this.vertexMapper.get(this.roots[i]);
 
         if (internalNode != null) {
           startNodes.push(internalNode);
@@ -275,17 +275,17 @@ class mxGraphHierarchyModel {
       }
     }
 
-    var internalNodes = this.vertexMapper.getValues();
+    let internalNodes = this.vertexMapper.getValues();
 
-    for (var i = 0; i < internalNodes.length; i++) {
+    for (let i = 0; i < internalNodes.length; i++) {
       // Mark the node as not having had a layer assigned
       internalNodes[i].temp[0] = -1;
     }
 
-    var startNodesCopy = startNodes.slice();
+    let startNodesCopy = startNodes.slice();
 
     while (startNodes.length > 0) {
-      var internalNode = startNodes[0];
+      let internalNode = startNodes[0];
       var layerDeterminingEdges;
       var edgesToBeMarked;
 
@@ -294,20 +294,20 @@ class mxGraphHierarchyModel {
 
       // flag to keep track of whether or not all layer determining
       // edges have been scanned
-      var allEdgesScanned = true;
+      let allEdgesScanned = true;
 
       // Work out the layer of this node from the layer determining
       // edges. The minimum layer number of any node connected by one of
       // the layer determining edges variable
-      var minimumLayer = this.SOURCESCANSTARTRANK;
+      let minimumLayer = this.SOURCESCANSTARTRANK;
 
-      for (var i = 0; i < layerDeterminingEdges.length; i++) {
-        var internalEdge = layerDeterminingEdges[i];
+      for (let i = 0; i < layerDeterminingEdges.length; i++) {
+        let internalEdge = layerDeterminingEdges[i];
 
         if (internalEdge.temp[0] == 5270620) {
           // This edge has been scanned, get the layer of the
           // node on the other end
-          var otherNode = internalEdge.source;
+          let otherNode = internalEdge.source;
           minimumLayer = Math.min(minimumLayer, otherNode.temp[0] - 1);
         } else {
           allEdgesScanned = false;
@@ -323,15 +323,15 @@ class mxGraphHierarchyModel {
         this.maxRank = Math.min(this.maxRank, minimumLayer);
 
         if (edgesToBeMarked != null) {
-          for (var i = 0; i < edgesToBeMarked.length; i++) {
-            var internalEdge = edgesToBeMarked[i];
+          for (let i = 0; i < edgesToBeMarked.length; i++) {
+            let internalEdge = edgesToBeMarked[i];
 
             // Assign unique stamp ( y/m/d/h )
             internalEdge.temp[0] = 5270620;
 
             // Add node on other end of edge to LinkedList of
             // nodes to be analysed
-            var otherNode = internalEdge.target;
+            let otherNode = internalEdge.target;
 
             // Only add node if it hasn't been assigned a layer
             if (otherNode.temp[0] == -1) {
@@ -350,7 +350,7 @@ class mxGraphHierarchyModel {
       } else {
         // Not all the edges have been scanned, get to the back of
         // the class and put the dunces cap on
-        var removedCell = startNodes.shift();
+        let removedCell = startNodes.shift();
         startNodes.push(internalNode);
 
         if (removedCell == internalNode && startNodes.length == 1) {
@@ -365,20 +365,20 @@ class mxGraphHierarchyModel {
 
     // Normalize the ranks down from their large starting value to place
     // at least 1 sink on layer 0
-    for (var i = 0; i < internalNodes.length; i++) {
+    for (let i = 0; i < internalNodes.length; i++) {
       // Mark the node as not having had a layer assigned
       internalNodes[i].temp[0] -= this.maxRank;
     }
 
     // Tighten the rank 0 nodes as far as possible
-    for (var i = 0; i < startNodesCopy.length; i++) {
-      var internalNode = startNodesCopy[i];
-      var currentMaxLayer = 0;
-      var layerDeterminingEdges = internalNode.connectsAsSource;
+    for (let i = 0; i < startNodesCopy.length; i++) {
+      let internalNode = startNodesCopy[i];
+      let currentMaxLayer = 0;
+      let layerDeterminingEdges = internalNode.connectsAsSource;
 
-      for (var j = 0; j < layerDeterminingEdges.length; j++) {
-        var internalEdge = layerDeterminingEdges[j];
-        var otherNode = internalEdge.target;
+      for (let j = 0; j < layerDeterminingEdges.length; j++) {
+        let internalEdge = layerDeterminingEdges[j];
+        let otherNode = internalEdge.target;
         internalNode.temp[0] = Math.max(currentMaxLayer,
             otherNode.temp[0] + 1);
         currentMaxLayer = internalNode.temp[0];
@@ -397,10 +397,10 @@ class mxGraphHierarchyModel {
    * to create dummy nodes for edges that cross layers.
    */
   fixRanks = () => {
-    var rankList = [];
+    let rankList = [];
     this.ranks = [];
 
-    for (var i = 0; i < this.maxRank + 1; i++) {
+    for (let i = 0; i < this.maxRank + 1; i++) {
       rankList[i] = [];
       this.ranks[i] = rankList[i];
     }
@@ -408,15 +408,15 @@ class mxGraphHierarchyModel {
     // Perform a DFS to obtain an initial ordering for each rank.
     // Without doing this you would end up having to process
     // crossings for a standard tree.
-    var rootsArray = null;
+    let rootsArray = null;
 
     if (this.roots != null) {
-      var oldRootsArray = this.roots;
+      let oldRootsArray = this.roots;
       rootsArray = [];
 
-      for (var i = 0; i < oldRootsArray.length; i++) {
-        var cell = oldRootsArray[i];
-        var internalNode = this.vertexMapper.get(cell);
+      for (let i = 0; i < oldRootsArray.length; i++) {
+        let cell = oldRootsArray[i];
+        let internalNode = this.vertexMapper.get(cell);
         rootsArray[i] = internalNode;
       }
     }
@@ -432,7 +432,7 @@ class mxGraphHierarchyModel {
       }
 
       if (parent != null && edge != null) {
-        var parentToCellRankDifference = parent.maxRank - node.maxRank;
+        let parentToCellRankDifference = parent.maxRank - node.maxRank;
 
         if (parentToCellRankDifference > 1) {
           // There are ranks in between the parent and current cell
@@ -442,7 +442,7 @@ class mxGraphHierarchyModel {
           edge.x = [];
           edge.y = [];
 
-          for (var i = edge.minRank + 1; i < edge.maxRank; i++) {
+          for (let i = edge.minRank + 1; i < edge.maxRank; i++) {
             // The connecting edge must be added to the
             // appropriate ranks
             rankList[i].push(edge);
@@ -468,8 +468,8 @@ class mxGraphHierarchyModel {
   visit = (visitor, dfsRoots, trackAncestors, seenNodes) => {
     // Run dfs through on all roots
     if (dfsRoots != null) {
-      for (var i = 0; i < dfsRoots.length; i++) {
-        var internalNode = dfsRoots[i];
+      for (let i = 0; i < dfsRoots.length; i++) {
+        let internalNode = dfsRoots[i];
 
         if (internalNode != null) {
           if (seenNodes == null) {
@@ -511,7 +511,7 @@ class mxGraphHierarchyModel {
    */
   dfs = (parent, root, connectingEdge, visitor, seen, layer) => {
     if (root != null) {
-      var rootId = root.id;
+      let rootId = root.id;
 
       if (seen[rootId] == null) {
         seen[rootId] = root;
@@ -519,11 +519,11 @@ class mxGraphHierarchyModel {
 
         // Copy the connects as source list so that visitors
         // can change the original for edge direction inversions
-        var outgoingEdges = root.connectsAsSource.slice();
+        let outgoingEdges = root.connectsAsSource.slice();
 
-        for (var i = 0; i < outgoingEdges.length; i++) {
-          var internalEdge = outgoingEdges[i];
-          var targetNode = internalEdge.target;
+        for (let i = 0; i < outgoingEdges.length; i++) {
+          let internalEdge = outgoingEdges[i];
+          let targetNode = internalEdge.target;
 
           // Root check is O(|roots|)
           this.dfs(root, targetNode, internalEdge, visitor, seen,
@@ -586,13 +586,13 @@ class mxGraphHierarchyModel {
         // previous run of this dfs.
         if (root.hashCode == null ||
             root.hashCode[0] != parent.hashCode[0]) {
-          var hashCodeLength = parent.hashCode.length + 1;
+          let hashCodeLength = parent.hashCode.length + 1;
           root.hashCode = parent.hashCode.slice();
           root.hashCode[hashCodeLength - 1] = childHash;
         }
       }
 
-      var rootId = root.id;
+      let rootId = root.id;
 
       if (seen[rootId] == null) {
         seen[rootId] = root;
@@ -600,11 +600,11 @@ class mxGraphHierarchyModel {
 
         // Copy the connects as source list so that visitors
         // can change the original for edge direction inversions
-        var outgoingEdges = root.connectsAsSource.slice();
+        let outgoingEdges = root.connectsAsSource.slice();
 
-        for (var i = 0; i < outgoingEdges.length; i++) {
-          var internalEdge = outgoingEdges[i];
-          var targetNode = internalEdge.target;
+        for (let i = 0; i < outgoingEdges.length; i++) {
+          let internalEdge = outgoingEdges[i];
+          let targetNode = internalEdge.target;
 
           // Root check is O(|roots|)
           this.extendedDfs(root, targetNode, internalEdge, visitor, seen,
diff --git a/src/js/layout/hierarchical/model/mxGraphHierarchyNode.js b/src/js/layout/hierarchical/model/mxGraphHierarchyNode.js
index 2cfd1adf3..e651639b1 100644
--- a/src/js/layout/hierarchical/model/mxGraphHierarchyNode.js
+++ b/src/js/layout/hierarchical/model/mxGraphHierarchyNode.js
@@ -81,8 +81,8 @@ class mxGraphHierarchyNode extends mxGraphAbstractHierarchyCell {
       this.nextLayerConnectedCells = [];
       this.nextLayerConnectedCells[0] = [];
 
-      for (var i = 0; i < this.connectsAsTarget.length; i++) {
-        var edge = this.connectsAsTarget[i];
+      for (let i = 0; i < this.connectsAsTarget.length; i++) {
+        let edge = this.connectsAsTarget[i];
 
         if (edge.maxRank == -1 || edge.maxRank == layer + 1) {
           // Either edge is not in any rank or
@@ -108,8 +108,8 @@ class mxGraphHierarchyNode extends mxGraphAbstractHierarchyCell {
       this.previousLayerConnectedCells = [];
       this.previousLayerConnectedCells[0] = [];
 
-      for (var i = 0; i < this.connectsAsSource.length; i++) {
-        var edge = this.connectsAsSource[i];
+      for (let i = 0; i < this.connectsAsSource.length; i++) {
+        let edge = this.connectsAsSource[i];
 
         if (edge.minRank == -1 || edge.minRank == layer - 1) {
           // No dummy nodes in edge, add node of other side of edge
@@ -171,7 +171,7 @@ class mxGraphHierarchyNode extends mxGraphAbstractHierarchyCell {
       // node's hash code. Arrays.equals cannot be used here since
       // the arrays are different length, and we do not want to
       // perform another array copy.
-      for (var i = 0; i < this.hashCode.length; i++) {
+      for (let i = 0; i < this.hashCode.length; i++) {
         if (this.hashCode[i] != otherNode.hashCode[i]) {
           return false;
         }
diff --git a/src/js/layout/hierarchical/model/mxSwimlaneModel.js b/src/js/layout/hierarchical/model/mxSwimlaneModel.js
index 83c6af308..ba288e0d3 100644
--- a/src/js/layout/hierarchical/model/mxSwimlaneModel.js
+++ b/src/js/layout/hierarchical/model/mxSwimlaneModel.js
@@ -102,7 +102,7 @@ class mxSwimlaneModel {
    * usage
    */
   constructor(layout, vertices, roots, parent, tightenToSource) {
-    var graph = layout.getGraph();
+    let graph = layout.getGraph();
     this.tightenToSource = tightenToSource;
     this.roots = roots;
     this.parent = parent;
@@ -112,7 +112,7 @@ class mxSwimlaneModel {
     this.vertexMapper = new mxDictionary();
     this.edgeMapper = new mxDictionary();
     this.maxRank = 0;
-    var internalVertices = [];
+    let internalVertices = [];
 
     if (vertices == null) {
       vertices = this.graph.getChildVertices(parent);
@@ -126,20 +126,20 @@ class mxSwimlaneModel {
 
     // Go through edges set their sink values. Also check the
     // ordering if and invert edges if necessary
-    for (var i = 0; i < vertices.length; i++) {
-      var edges = internalVertices[i].connectsAsSource;
+    for (let i = 0; i < vertices.length; i++) {
+      let edges = internalVertices[i].connectsAsSource;
 
-      for (var j = 0; j < edges.length; j++) {
-        var internalEdge = edges[j];
-        var realEdges = internalEdge.edges;
+      for (let j = 0; j < edges.length; j++) {
+        let internalEdge = edges[j];
+        let realEdges = internalEdge.edges;
 
         // Only need to process the first real edge, since
         // all the edges connect to the same other vertex
         if (realEdges != null && realEdges.length > 0) {
-          var realEdge = realEdges[0];
-          var targetCell = layout.getVisibleTerminal(
+          let realEdge = realEdges[0];
+          let targetCell = layout.getVisibleTerminal(
               realEdge, false);
-          var internalTargetCell = this.vertexMapper.get(targetCell);
+          let internalTargetCell = this.vertexMapper.get(targetCell);
 
           if (internalVertices[i] == internalTargetCell) {
             // If there are parallel edges going between two vertices and not all are in the same direction
@@ -187,16 +187,16 @@ class mxSwimlaneModel {
    * information filled in using the real vertices.
    */
   createInternalCells = (layout, vertices, internalVertices) => {
-    var graph = layout.getGraph();
-    var swimlanes = layout.swimlanes;
+    let graph = layout.getGraph();
+    let swimlanes = layout.swimlanes;
 
     // Create internal edges
-    for (var i = 0; i < vertices.length; i++) {
+    for (let i = 0; i < vertices.length; i++) {
       internalVertices[i] = new mxGraphHierarchyNode(vertices[i]);
       this.vertexMapper.put(vertices[i], internalVertices[i]);
       internalVertices[i].swimlaneIndex = -1;
 
-      for (var ii = 0; ii < swimlanes.length; ii++) {
+      for (let ii = 0; ii < swimlanes.length; ii++) {
         if (graph.model.getParent(vertices[i]) == swimlanes[ii]) {
           internalVertices[i].swimlaneIndex = ii;
           break;
@@ -205,14 +205,14 @@ class mxSwimlaneModel {
 
       // If the layout is deterministic, order the cells
       //List outgoingCells = graph.getNeighbours(vertices[i], deterministic);
-      var conns = layout.getEdges(vertices[i]);
+      let conns = layout.getEdges(vertices[i]);
       internalVertices[i].connectsAsSource = [];
 
       // Create internal edges, but don't do any rank assignment yet
       // First use the information from the greedy cycle remover to
       // invert the leftward edges internally
-      for (var j = 0; j < conns.length; j++) {
-        var cell = layout.getVisibleTerminal(conns[j], false);
+      for (let j = 0; j < conns.length; j++) {
+        let cell = layout.getVisibleTerminal(conns[j], false);
 
         // Looking for outgoing edges only
         if (cell != vertices[i] && layout.graph.model.isVertex(cell) &&
@@ -230,19 +230,19 @@ class mxSwimlaneModel {
           // are the same. All the graph edges will have been assigned to
           // an internal edge going the other way, so we don't want to
           // process them again
-          var undirectedEdges = layout.getEdgesBetween(vertices[i],
+          let undirectedEdges = layout.getEdgesBetween(vertices[i],
               cell, false);
-          var directedEdges = layout.getEdgesBetween(vertices[i],
+          let directedEdges = layout.getEdgesBetween(vertices[i],
               cell, true);
 
           if (undirectedEdges != null &&
               undirectedEdges.length > 0 &&
               this.edgeMapper.get(undirectedEdges[0]) == null &&
               directedEdges.length * 2 >= undirectedEdges.length) {
-            var internalEdge = new mxGraphHierarchyEdge(undirectedEdges);
+            let internalEdge = new mxGraphHierarchyEdge(undirectedEdges);
 
-            for (var k = 0; k < undirectedEdges.length; k++) {
-              var edge = undirectedEdges[k];
+            for (let k = 0; k < undirectedEdges.length; k++) {
+              let edge = undirectedEdges[k];
               this.edgeMapper.put(edge, internalEdge);
 
               // Resets all point on the edge and disables the edge style
@@ -279,12 +279,12 @@ class mxSwimlaneModel {
   initialRank = () => {
     this.ranksPerGroup = [];
 
-    var startNodes = [];
-    var seen = {};
+    let startNodes = [];
+    let seen = {};
 
     if (this.roots != null) {
-      for (var i = 0; i < this.roots.length; i++) {
-        var internalNode = this.vertexMapper.get(this.roots[i]);
+      for (let i = 0; i < this.roots.length; i++) {
+        let internalNode = this.vertexMapper.get(this.roots[i]);
         this.maxChainDfs(null, internalNode, null, seen, 0);
 
         if (internalNode != null) {
@@ -294,10 +294,10 @@ class mxSwimlaneModel {
     }
 
     // Calculate the lower and upper rank bounds of each swimlane
-    var lowerRank = [];
-    var upperRank = [];
+    let lowerRank = [];
+    let upperRank = [];
 
-    for (var i = this.ranksPerGroup.length - 1; i >= 0; i--) {
+    for (let i = this.ranksPerGroup.length - 1; i >= 0; i--) {
       if (i == this.ranksPerGroup.length - 1) {
         lowerRank[i] = 0;
       } else {
@@ -309,17 +309,17 @@ class mxSwimlaneModel {
 
     this.maxRank = upperRank[0];
 
-    var internalNodes = this.vertexMapper.getValues();
+    let internalNodes = this.vertexMapper.getValues();
 
-    for (var i = 0; i < internalNodes.length; i++) {
+    for (let i = 0; i < internalNodes.length; i++) {
       // Mark the node as not having had a layer assigned
       internalNodes[i].temp[0] = -1;
     }
 
-    var startNodesCopy = startNodes.slice();
+    let startNodesCopy = startNodes.slice();
 
     while (startNodes.length > 0) {
-      var internalNode = startNodes[0];
+      let internalNode = startNodes[0];
       var layerDeterminingEdges;
       var edgesToBeMarked;
 
@@ -328,20 +328,20 @@ class mxSwimlaneModel {
 
       // flag to keep track of whether or not all layer determining
       // edges have been scanned
-      var allEdgesScanned = true;
+      let allEdgesScanned = true;
 
       // Work out the layer of this node from the layer determining
       // edges. The minimum layer number of any node connected by one of
       // the layer determining edges variable
-      var minimumLayer = upperRank[0];
+      let minimumLayer = upperRank[0];
 
-      for (var i = 0; i < layerDeterminingEdges.length; i++) {
-        var internalEdge = layerDeterminingEdges[i];
+      for (let i = 0; i < layerDeterminingEdges.length; i++) {
+        let internalEdge = layerDeterminingEdges[i];
 
         if (internalEdge.temp[0] == 5270620) {
           // This edge has been scanned, get the layer of the
           // node on the other end
-          var otherNode = internalEdge.source;
+          let otherNode = internalEdge.source;
           minimumLayer = Math.min(minimumLayer, otherNode.temp[0] - 1);
         } else {
           allEdgesScanned = false;
@@ -360,15 +360,15 @@ class mxSwimlaneModel {
         internalNode.temp[0] = minimumLayer;
 
         if (edgesToBeMarked != null) {
-          for (var i = 0; i < edgesToBeMarked.length; i++) {
-            var internalEdge = edgesToBeMarked[i];
+          for (let i = 0; i < edgesToBeMarked.length; i++) {
+            let internalEdge = edgesToBeMarked[i];
 
             // Assign unique stamp ( y/m/d/h )
             internalEdge.temp[0] = 5270620;
 
             // Add node on other end of edge to LinkedList of
             // nodes to be analysed
-            var otherNode = internalEdge.target;
+            let otherNode = internalEdge.target;
 
             // Only add node if it hasn't been assigned a layer
             if (otherNode.temp[0] == -1) {
@@ -387,7 +387,7 @@ class mxSwimlaneModel {
       } else {
         // Not all the edges have been scanned, get to the back of
         // the class and put the dunces cap on
-        var removedCell = startNodes.shift();
+        let removedCell = startNodes.shift();
         startNodes.push(internalNode);
 
         if (removedCell == internalNode && startNodes.length == 1) {
@@ -404,22 +404,22 @@ class mxSwimlaneModel {
     // at least 1 sink on layer 0
 //  for (var key in this.vertexMapper)
 //  {
-//    var internalNode = this.vertexMapper[key];
+//    let internalNode = this.vertexMapper[key];
 //    // Mark the node as not having had a layer assigned
 //    internalNode.temp[0] -= this.maxRank;
 //  }
 
     // Tighten the rank 0 nodes as far as possible
-//  for ( var i = 0; i < startNodesCopy.length; i++)
+//  for ( let i = 0; i < startNodesCopy.length; i++)
 //  {
-//    var internalNode = startNodesCopy[i];
-//    var currentMaxLayer = 0;
-//    var layerDeterminingEdges = internalNode.connectsAsSource;
+//    let internalNode = startNodesCopy[i];
+//    let currentMaxLayer = 0;
+//    let layerDeterminingEdges = internalNode.connectsAsSource;
 //
-//    for ( var j = 0; j < layerDeterminingEdges.length; j++)
+//    for ( let j = 0; j < layerDeterminingEdges.length; j++)
 //    {
-//      var internalEdge = layerDeterminingEdges[j];
-//      var otherNode = internalEdge.target;
+//      let internalEdge = layerDeterminingEdges[j];
+//      let otherNode = internalEdge.target;
 //      internalNode.temp[0] = Math.max(currentMaxLayer,
 //          otherNode.temp[0] + 1);
 //      currentMaxLayer = internalNode.temp[0];
@@ -447,11 +447,11 @@ class mxSwimlaneModel {
    */
   maxChainDfs = (parent, root, connectingEdge, seen, chainCount) => {
     if (root != null) {
-      var rootId = mxCellPath.create(root.cell);
+      let rootId = mxCellPath.create(root.cell);
 
       if (seen[rootId] == null) {
         seen[rootId] = root;
-        var slIndex = root.swimlaneIndex;
+        let slIndex = root.swimlaneIndex;
 
         if (this.ranksPerGroup[slIndex] == null || this.ranksPerGroup[slIndex] < chainCount) {
           this.ranksPerGroup[slIndex] = chainCount;
@@ -459,11 +459,11 @@ class mxSwimlaneModel {
 
         // Copy the connects as source list so that visitors
         // can change the original for edge direction inversions
-        var outgoingEdges = root.connectsAsSource.slice();
+        let outgoingEdges = root.connectsAsSource.slice();
 
-        for (var i = 0; i < outgoingEdges.length; i++) {
-          var internalEdge = outgoingEdges[i];
-          var targetNode = internalEdge.target;
+        for (let i = 0; i < outgoingEdges.length; i++) {
+          let internalEdge = outgoingEdges[i];
+          let targetNode = internalEdge.target;
 
           // Only navigate in source->target direction within the same
           // swimlane, or from a lower index swimlane to a higher one
@@ -484,10 +484,10 @@ class mxSwimlaneModel {
    * to create dummy nodes for edges that cross layers.
    */
   fixRanks = () => {
-    var rankList = [];
+    let rankList = [];
     this.ranks = [];
 
-    for (var i = 0; i < this.maxRank + 1; i++) {
+    for (let i = 0; i < this.maxRank + 1; i++) {
       rankList[i] = [];
       this.ranks[i] = rankList[i];
     }
@@ -495,15 +495,15 @@ class mxSwimlaneModel {
     // Perform a DFS to obtain an initial ordering for each rank.
     // Without doing this you would end up having to process
     // crossings for a standard tree.
-    var rootsArray = null;
+    let rootsArray = null;
 
     if (this.roots != null) {
-      var oldRootsArray = this.roots;
+      let oldRootsArray = this.roots;
       rootsArray = [];
 
-      for (var i = 0; i < oldRootsArray.length; i++) {
-        var cell = oldRootsArray[i];
-        var internalNode = this.vertexMapper.get(cell);
+      for (let i = 0; i < oldRootsArray.length; i++) {
+        let cell = oldRootsArray[i];
+        let internalNode = this.vertexMapper.get(cell);
         rootsArray[i] = internalNode;
       }
     }
@@ -519,7 +519,7 @@ class mxSwimlaneModel {
       }
 
       if (parent != null && edge != null) {
-        var parentToCellRankDifference = parent.maxRank - node.maxRank;
+        let parentToCellRankDifference = parent.maxRank - node.maxRank;
 
         if (parentToCellRankDifference > 1) {
           // There are ranks in between the parent and current cell
@@ -529,7 +529,7 @@ class mxSwimlaneModel {
           edge.x = [];
           edge.y = [];
 
-          for (var i = edge.minRank + 1; i < edge.maxRank; i++) {
+          for (let i = edge.minRank + 1; i < edge.maxRank; i++) {
             // The connecting edge must be added to the
             // appropriate ranks
             rankList[i].push(edge);
@@ -555,8 +555,8 @@ class mxSwimlaneModel {
   visit = (visitor, dfsRoots, trackAncestors, seenNodes) => {
     // Run dfs through on all roots
     if (dfsRoots != null) {
-      for (var i = 0; i < dfsRoots.length; i++) {
-        var internalNode = dfsRoots[i];
+      for (let i = 0; i < dfsRoots.length; i++) {
+        let internalNode = dfsRoots[i];
 
         if (internalNode != null) {
           if (seenNodes == null) {
@@ -598,7 +598,7 @@ class mxSwimlaneModel {
    */
   dfs = (parent, root, connectingEdge, visitor, seen, layer) => {
     if (root != null) {
-      var rootId = root.id;
+      let rootId = root.id;
 
       if (seen[rootId] == null) {
         seen[rootId] = root;
@@ -606,11 +606,11 @@ class mxSwimlaneModel {
 
         // Copy the connects as source list so that visitors
         // can change the original for edge direction inversions
-        var outgoingEdges = root.connectsAsSource.slice();
+        let outgoingEdges = root.connectsAsSource.slice();
 
-        for (var i = 0; i < outgoingEdges.length; i++) {
-          var internalEdge = outgoingEdges[i];
-          var targetNode = internalEdge.target;
+        for (let i = 0; i < outgoingEdges.length; i++) {
+          let internalEdge = outgoingEdges[i];
+          let targetNode = internalEdge.target;
 
           // Root check is O(|roots|)
           this.dfs(root, targetNode, internalEdge, visitor, seen,
@@ -673,13 +673,13 @@ class mxSwimlaneModel {
         // previous run of this dfs.
         if (root.hashCode == null ||
             root.hashCode[0] != parent.hashCode[0]) {
-          var hashCodeLength = parent.hashCode.length + 1;
+          let hashCodeLength = parent.hashCode.length + 1;
           root.hashCode = parent.hashCode.slice();
           root.hashCode[hashCodeLength - 1] = childHash;
         }
       }
 
-      var rootId = root.id;
+      let rootId = root.id;
 
       if (seen[rootId] == null) {
         seen[rootId] = root;
@@ -687,12 +687,12 @@ class mxSwimlaneModel {
 
         // Copy the connects as source list so that visitors
         // can change the original for edge direction inversions
-        var outgoingEdges = root.connectsAsSource.slice();
-        var incomingEdges = root.connectsAsTarget.slice();
+        let outgoingEdges = root.connectsAsSource.slice();
+        let incomingEdges = root.connectsAsTarget.slice();
 
-        for (var i = 0; i < outgoingEdges.length; i++) {
-          var internalEdge = outgoingEdges[i];
-          var targetNode = internalEdge.target;
+        for (let i = 0; i < outgoingEdges.length; i++) {
+          let internalEdge = outgoingEdges[i];
+          let targetNode = internalEdge.target;
 
           // Only navigate in source->target direction within the same
           // swimlane, or from a lower index swimlane to a higher one
@@ -702,9 +702,9 @@ class mxSwimlaneModel {
           }
         }
 
-        for (var i = 0; i < incomingEdges.length; i++) {
-          var internalEdge = incomingEdges[i];
-          var targetNode = internalEdge.source;
+        for (let i = 0; i < incomingEdges.length; i++) {
+          let internalEdge = incomingEdges[i];
+          let targetNode = internalEdge.source;
 
           // Only navigate in target->source direction from a lower index
           // swimlane to a higher one
diff --git a/src/js/layout/hierarchical/mxHierarchicalLayout.js b/src/js/layout/hierarchical/mxHierarchicalLayout.js
index a0cc8e340..4e7fd13ea 100644
--- a/src/js/layout/hierarchical/mxHierarchicalLayout.js
+++ b/src/js/layout/hierarchical/mxHierarchicalLayout.js
@@ -197,7 +197,7 @@ class mxHierarchicalLayout extends mxGraphLayout {
    */
   execute = (parent, roots) => {
     this.parent = parent;
-    var model = this.graph.model;
+    let model = this.graph.model;
     this.edgesCache = new mxDictionary();
     this.edgeSourceTermCache = new mxDictionary();
     this.edgesTargetTermCache = new mxDictionary();
@@ -223,7 +223,7 @@ class mxHierarchicalLayout extends mxGraphLayout {
     this.parentY = null;
 
     if (parent != this.root && model.isVertex(parent) != null && this.maintainParentLocation) {
-      var geo = this.graph.getCellGeometry(parent);
+      let geo = this.graph.getCellGeometry(parent);
 
       if (geo != null) {
         this.parentX = geo.x;
@@ -232,10 +232,10 @@ class mxHierarchicalLayout extends mxGraphLayout {
     }
 
     if (roots != null) {
-      var rootsCopy = [];
+      let rootsCopy = [];
 
-      for (var i = 0; i < roots.length; i++) {
-        var ancestor = parent != null ? model.isAncestor(parent, roots[i]) : true;
+      for (let i = 0; i < roots.length; i++) {
+        let ancestor = parent != null ? model.isAncestor(parent, roots[i]) : true;
 
         if (ancestor && model.isVertex(roots[i])) {
           rootsCopy.push(roots[i]);
@@ -255,7 +255,7 @@ class mxHierarchicalLayout extends mxGraphLayout {
 
       // Maintaining parent location
       if (this.parentX != null && this.parentY != null) {
-        var geo = this.graph.getCellGeometry(parent);
+        let geo = this.graph.getCellGeometry(parent);
 
         if (geo != null) {
           geo = geo.clone();
@@ -284,23 +284,23 @@ class mxHierarchicalLayout extends mxGraphLayout {
    * vertices - array of vertices to limit search to
    */
   findRoots = (parent, vertices) => {
-    var roots = [];
+    let roots = [];
 
     if (parent != null && vertices != null) {
-      var model = this.graph.model;
-      var best = null;
-      var maxDiff = -100000;
+      let model = this.graph.model;
+      let best = null;
+      let maxDiff = -100000;
 
       for (var i in vertices) {
-        var cell = vertices[i];
+        let cell = vertices[i];
 
         if (model.isVertex(cell) && this.graph.isCellVisible(cell)) {
-          var conns = this.getEdges(cell);
-          var fanOut = 0;
-          var fanIn = 0;
+          let conns = this.getEdges(cell);
+          let fanOut = 0;
+          let fanIn = 0;
 
-          for (var k = 0; k < conns.length; k++) {
-            var src = this.getVisibleTerminal(conns[k], true);
+          for (let k = 0; k < conns.length; k++) {
+            let src = this.getVisibleTerminal(conns[k], true);
 
             if (src == cell) {
               fanOut++;
@@ -313,7 +313,7 @@ class mxHierarchicalLayout extends mxGraphLayout {
             roots.push(cell);
           }
 
-          var diff = fanOut - fanIn;
+          let diff = fanOut - fanIn;
 
           if (diff > maxDiff) {
             maxDiff = diff;
@@ -340,19 +340,19 @@ class mxHierarchicalLayout extends mxGraphLayout {
    * cell - <mxCell> whose edges should be returned.
    */
   getEdges = (cell) => {
-    var cachedEdges = this.edgesCache.get(cell);
+    let cachedEdges = this.edgesCache.get(cell);
 
     if (cachedEdges != null) {
       return cachedEdges;
     }
 
-    var model = this.graph.model;
-    var edges = [];
-    var isCollapsed = this.graph.isCellCollapsed(cell);
-    var childCount = model.getChildCount(cell);
+    let model = this.graph.model;
+    let edges = [];
+    let isCollapsed = this.graph.isCellCollapsed(cell);
+    let childCount = model.getChildCount(cell);
 
-    for (var i = 0; i < childCount; i++) {
-      var child = model.getChildAt(cell, i);
+    for (let i = 0; i < childCount; i++) {
+      let child = model.getChildAt(cell, i);
 
       if (this.isPort(child)) {
         edges = edges.concat(model.getEdges(child, true, true));
@@ -362,11 +362,11 @@ class mxHierarchicalLayout extends mxGraphLayout {
     }
 
     edges = edges.concat(model.getEdges(cell, true, true));
-    var result = [];
+    let result = [];
 
-    for (var i = 0; i < edges.length; i++) {
-      var source = this.getVisibleTerminal(edges[i], true);
-      var target = this.getVisibleTerminal(edges[i], false);
+    for (let i = 0; i < edges.length; i++) {
+      let source = this.getVisibleTerminal(edges[i], true);
+      let target = this.getVisibleTerminal(edges[i], false);
 
       if ((source == target) ||
           ((source != target) &&
@@ -392,21 +392,21 @@ class mxHierarchicalLayout extends mxGraphLayout {
    * source - Boolean that specifies whether the source or target terminal is to be returned
    */
   getVisibleTerminal = (edge, source) => {
-    var terminalCache = this.edgesTargetTermCache;
+    let terminalCache = this.edgesTargetTermCache;
 
     if (source) {
       terminalCache = this.edgeSourceTermCache;
     }
 
-    var term = terminalCache.get(edge);
+    let term = terminalCache.get(edge);
 
     if (term != null) {
       return term;
     }
 
-    var state = this.graph.view.getState(edge);
+    let state = this.graph.view.getState(edge);
 
-    var terminal = (state != null) ? state.getVisibleTerminal(source) : this.graph.view.getVisibleTerminal(edge, source);
+    let terminal = (state != null) ? state.getVisibleTerminal(source) : this.graph.view.getVisibleTerminal(edge, source);
 
     if (terminal == null) {
       terminal = (state != null) ? state.getVisibleTerminal(source) : this.graph.view.getVisibleTerminal(edge, source);
@@ -433,15 +433,15 @@ class mxHierarchicalLayout extends mxGraphLayout {
    */
   run = (parent) => {
     // Separate out unconnected hierarchies
-    var hierarchyVertices = [];
-    var allVertexSet = [];
+    let hierarchyVertices = [];
+    let allVertexSet = [];
 
     if (this.roots == null && parent != null) {
-      var filledVertexSet = Object();
+      let filledVertexSet = Object();
       this.filterDescendants(parent, filledVertexSet);
 
       this.roots = [];
-      var filledVertexSetEmpty = true;
+      let filledVertexSetEmpty = true;
 
       // Poor man's isSetEmpty
       for (var key in filledVertexSet) {
@@ -452,22 +452,22 @@ class mxHierarchicalLayout extends mxGraphLayout {
       }
 
       while (!filledVertexSetEmpty) {
-        var candidateRoots = this.findRoots(parent, filledVertexSet);
+        let candidateRoots = this.findRoots(parent, filledVertexSet);
 
         // If the candidate root is an unconnected group cell, remove it from
         // the layout. We may need a custom set that holds such groups and forces
         // them to be processed for resizing and/or moving.
 
 
-        for (var i = 0; i < candidateRoots.length; i++) {
-          var vertexSet = Object();
+        for (let i = 0; i < candidateRoots.length; i++) {
+          let vertexSet = Object();
           hierarchyVertices.push(vertexSet);
 
           this.traverse(candidateRoots[i], true, null, allVertexSet, vertexSet,
               hierarchyVertices, filledVertexSet);
         }
 
-        for (var i = 0; i < candidateRoots.length; i++) {
+        for (let i = 0; i < candidateRoots.length; i++) {
           this.roots.push(candidateRoots[i]);
         }
 
@@ -484,8 +484,8 @@ class mxHierarchicalLayout extends mxGraphLayout {
     } else {
       // Find vertex set as directed traversal from roots
 
-      for (var i = 0; i < this.roots.length; i++) {
-        var vertexSet = Object();
+      for (let i = 0; i < this.roots.length; i++) {
+        let vertexSet = Object();
         hierarchyVertices.push(vertexSet);
 
         this.traverse(this.roots[i], true, null, allVertexSet, vertexSet,
@@ -497,11 +497,11 @@ class mxHierarchicalLayout extends mxGraphLayout {
 
     // Perform a layout for each seperate hierarchy
     // Track initial coordinate x-positioning
-    var initialX = 0;
+    let initialX = 0;
 
-    for (var i = 0; i < hierarchyVertices.length; i++) {
-      var vertexSet = hierarchyVertices[i];
-      var tmp = [];
+    for (let i = 0; i < hierarchyVertices.length; i++) {
+      let vertexSet = hierarchyVertices[i];
+      let tmp = [];
 
       for (var key in vertexSet) {
         tmp.push(vertexSet[key]);
@@ -524,7 +524,7 @@ class mxHierarchicalLayout extends mxGraphLayout {
    * Creates an array of descendant cells
    */
   filterDescendants = (cell, result) => {
-    var model = this.graph.model;
+    let model = this.graph.model;
 
     if (model.isVertex(cell) && cell != this.parent && this.graph.isCellVisible(cell)) {
       result[mxObjectIdentity.get(cell)] = cell;
@@ -532,10 +532,10 @@ class mxHierarchicalLayout extends mxGraphLayout {
 
     if (this.traverseAncestors || cell == this.parent
         && this.graph.isCellVisible(cell)) {
-      var childCount = model.getChildCount(cell);
+      let childCount = model.getChildCount(cell);
 
-      for (var i = 0; i < childCount; i++) {
-        var child = model.getChildAt(cell, i);
+      for (let i = 0; i < childCount; i++) {
+        let child = model.getChildAt(cell, i);
 
         // Ignore ports in the layout vertex list, they are dealt with
         // in the traversal mechanisms
@@ -578,14 +578,14 @@ class mxHierarchicalLayout extends mxGraphLayout {
    */
   getEdgesBetween = (source, target, directed) => {
     directed = (directed != null) ? directed : false;
-    var edges = this.getEdges(source);
-    var result = [];
+    let edges = this.getEdges(source);
+    let result = [];
 
     // Checks if the edge is connected to the correct
     // cell and returns the first match
-    for (var i = 0; i < edges.length; i++) {
-      var src = this.getVisibleTerminal(edges[i], true);
-      var trg = this.getVisibleTerminal(edges[i], false);
+    for (let i = 0; i < edges.length; i++) {
+      let src = this.getVisibleTerminal(edges[i], true);
+      let trg = this.getVisibleTerminal(edges[i], false);
 
       if ((src == source && trg == target) || (!directed && src == target && trg == source)) {
         result.push(edges[i]);
@@ -617,7 +617,7 @@ class mxHierarchicalLayout extends mxGraphLayout {
       // Has this vertex been seen before in any traversal
       // And if the filled vertex set is populated, only
       // process vertices in that it contains
-      var vertexID = mxObjectIdentity.get(vertex);
+      let vertexID = mxObjectIdentity.get(vertex);
 
       if ((allVertices[vertexID] == null)
           && (filledVertexSet == null ? true : filledVertexSet[vertexID] != null)) {
@@ -632,30 +632,30 @@ class mxHierarchicalLayout extends mxGraphLayout {
           delete filledVertexSet[vertexID];
         }
 
-        var edges = this.getEdges(vertex);
-        var edgeIsSource = [];
+        let edges = this.getEdges(vertex);
+        let edgeIsSource = [];
 
-        for (var i = 0; i < edges.length; i++) {
+        for (let i = 0; i < edges.length; i++) {
           edgeIsSource[i] = (this.getVisibleTerminal(edges[i], true) == vertex);
         }
 
-        for (var i = 0; i < edges.length; i++) {
+        for (let i = 0; i < edges.length; i++) {
           if (!directed || edgeIsSource[i]) {
-            var next = this.getVisibleTerminal(edges[i], !edgeIsSource[i]);
+            let next = this.getVisibleTerminal(edges[i], !edgeIsSource[i]);
 
             // Check whether there are more edges incoming from the target vertex than outgoing
             // The hierarchical model treats bi-directional parallel edges as being sourced
             // from the more "sourced" terminal. If the directions are equal in number, the direction
             // is that of the natural direction from the roots of the layout.
             // The checks below are slightly more verbose than need be for performance reasons
-            var netCount = 1;
+            let netCount = 1;
 
-            for (var j = 0; j < edges.length; j++) {
+            for (let j = 0; j < edges.length; j++) {
               if (j == i) {
 
               } else {
                 var isSource2 = edgeIsSource[j];
-                var otherTerm = this.getVisibleTerminal(edges[j], !isSource2);
+                let otherTerm = this.getVisibleTerminal(edges[j], !isSource2);
 
                 if (otherTerm == next) {
                   if (isSource2) {
@@ -679,8 +679,8 @@ class mxHierarchicalLayout extends mxGraphLayout {
           // We've seen this vertex before, but not in the current component
           // This component and the one it's in need to be merged
 
-          for (var i = 0; i < hierarchyVertices.length; i++) {
-            var comp = hierarchyVertices[i];
+          for (let i = 0; i < hierarchyVertices.length; i++) {
+            let comp = hierarchyVertices[i];
 
             if (comp[vertexID] != null) {
               for (var key in comp) {
@@ -705,7 +705,7 @@ class mxHierarchicalLayout extends mxGraphLayout {
    * Executes the cycle stage using mxMinimumCycleRemover.
    */
   cycleStage = (parent) => {
-    var cycleStage = new mxMinimumCycleRemover(this);
+    let cycleStage = new mxMinimumCycleRemover(this);
     cycleStage.execute(parent);
   };
 
@@ -725,7 +725,7 @@ class mxHierarchicalLayout extends mxGraphLayout {
    * Executes the crossing stage using mxMedianHybridCrossingReduction.
    */
   crossingStage = (parent) => {
-    var crossingStage = new mxMedianHybridCrossingReduction(this);
+    let crossingStage = new mxMedianHybridCrossingReduction(this);
     crossingStage.execute(parent);
   };
 
@@ -735,7 +735,7 @@ class mxHierarchicalLayout extends mxGraphLayout {
    * Executes the placement stage using mxCoordinateAssignment.
    */
   placementStage = (initialX, parent) => {
-    var placementStage = new mxCoordinateAssignment(this, this.intraCellSpacing,
+    let placementStage = new mxCoordinateAssignment(this, this.intraCellSpacing,
         this.interRankCellSpacing, this.orientation, initialX,
         this.parallelEdgeSpacing);
     placementStage.fineTuning = this.fineTuning;
diff --git a/src/js/layout/hierarchical/mxSwimlaneLayout.js b/src/js/layout/hierarchical/mxSwimlaneLayout.js
index 3f643e85e..31a51bdc2 100644
--- a/src/js/layout/hierarchical/mxSwimlaneLayout.js
+++ b/src/js/layout/hierarchical/mxSwimlaneLayout.js
@@ -210,7 +210,7 @@ class mxSwimlaneLayout extends mxGraphLayout {
    */
   execute = (parent, swimlanes) => {
     this.parent = parent;
-    var model = this.graph.model;
+    let model = this.graph.model;
     this.edgesCache = new mxDictionary();
     this.edgeSourceTermCache = new mxDictionary();
     this.edgesTargetTermCache = new mxDictionary();
@@ -236,7 +236,7 @@ class mxSwimlaneLayout extends mxGraphLayout {
     this.parentY = null;
 
     if (parent != this.root && model.isVertex(parent) != null && this.maintainParentLocation) {
-      var geo = this.graph.getCellGeometry(parent);
+      let geo = this.graph.getCellGeometry(parent);
 
       if (geo != null) {
         this.parentX = geo.x;
@@ -245,14 +245,14 @@ class mxSwimlaneLayout extends mxGraphLayout {
     }
 
     this.swimlanes = swimlanes;
-    var dummyVertices = [];
+    let dummyVertices = [];
     // Check the swimlanes all have vertices
     // in them
-    for (var i = 0; i < swimlanes.length; i++) {
-      var children = this.graph.getChildCells(swimlanes[i]);
+    for (let i = 0; i < swimlanes.length; i++) {
+      let children = this.graph.getChildCells(swimlanes[i]);
 
       if (children == null || children.length == 0) {
-        var vertex = this.graph.insertVertex(swimlanes[i], null, null, 0, 0, this.dummyVertexWidth, 0);
+        let vertex = this.graph.insertVertex(swimlanes[i], null, null, 0, 0, this.dummyVertexWidth, 0);
         dummyVertices.push(vertex);
       }
     }
@@ -267,7 +267,7 @@ class mxSwimlaneLayout extends mxGraphLayout {
 
       // Maintaining parent location
       if (this.parentX != null && this.parentY != null) {
-        var geo = this.graph.getCellGeometry(parent);
+        let geo = this.graph.getCellGeometry(parent);
 
         if (geo != null) {
           geo = geo.clone();
@@ -292,62 +292,62 @@ class mxSwimlaneLayout extends mxGraphLayout {
    */
   updateGroupBounds = () => {
     // Get all vertices and edge in the layout
-    var cells = [];
-    var model = this.model;
+    let cells = [];
+    let model = this.model;
 
     for (var key in model.edgeMapper) {
-      var edge = model.edgeMapper[key];
+      let edge = model.edgeMapper[key];
 
-      for (var i = 0; i < edge.edges.length; i++) {
+      for (let i = 0; i < edge.edges.length; i++) {
         cells.push(edge.edges[i]);
       }
     }
 
-    var layoutBounds = this.graph.getBoundingBoxFromGeometry(cells, true);
-    var childBounds = [];
+    let layoutBounds = this.graph.getBoundingBoxFromGeometry(cells, true);
+    let childBounds = [];
 
-    for (var i = 0; i < this.swimlanes.length; i++) {
-      var lane = this.swimlanes[i];
-      var geo = this.graph.getCellGeometry(lane);
+    for (let i = 0; i < this.swimlanes.length; i++) {
+      let lane = this.swimlanes[i];
+      let geo = this.graph.getCellGeometry(lane);
 
       if (geo != null) {
-        var children = this.graph.getChildCells(lane);
+        let children = this.graph.getChildCells(lane);
 
-        var size = (this.graph.isSwimlane(lane)) ?
+        let size = (this.graph.isSwimlane(lane)) ?
             this.graph.getStartSize(lane) : new mxRectangle();
 
-        var bounds = this.graph.getBoundingBoxFromGeometry(children);
+        let bounds = this.graph.getBoundingBoxFromGeometry(children);
         childBounds[i] = bounds;
-        var childrenY = bounds.y + geo.y - size.height - this.parentBorder;
-        var maxChildrenY = bounds.y + geo.y + bounds.height;
+        let childrenY = bounds.y + geo.y - size.height - this.parentBorder;
+        let maxChildrenY = bounds.y + geo.y + bounds.height;
 
         if (layoutBounds == null) {
           layoutBounds = new mxRectangle(0, childrenY, 0, maxChildrenY - childrenY);
         } else {
           layoutBounds.y = Math.min(layoutBounds.y, childrenY);
-          var maxY = Math.max(layoutBounds.y + layoutBounds.height, maxChildrenY);
+          let maxY = Math.max(layoutBounds.y + layoutBounds.height, maxChildrenY);
           layoutBounds.height = maxY - layoutBounds.y;
         }
       }
     }
 
 
-    for (var i = 0; i < this.swimlanes.length; i++) {
-      var lane = this.swimlanes[i];
-      var geo = this.graph.getCellGeometry(lane);
+    for (let i = 0; i < this.swimlanes.length; i++) {
+      let lane = this.swimlanes[i];
+      let geo = this.graph.getCellGeometry(lane);
 
       if (geo != null) {
-        var children = this.graph.getChildCells(lane);
+        let children = this.graph.getChildCells(lane);
 
-        var size = (this.graph.isSwimlane(lane)) ?
+        let size = (this.graph.isSwimlane(lane)) ?
             this.graph.getStartSize(lane) : new mxRectangle();
 
-        var newGeo = geo.clone();
+        let newGeo = geo.clone();
 
-        var leftGroupBorder = (i == 0) ? this.parentBorder : this.interRankCellSpacing / 2;
-        var w = size.width + leftGroupBorder;
-        var x = childBounds[i].x - w;
-        var y = layoutBounds.y - this.parentBorder;
+        let leftGroupBorder = (i == 0) ? this.parentBorder : this.interRankCellSpacing / 2;
+        let w = size.width + leftGroupBorder;
+        let x = childBounds[i].x - w;
+        let y = layoutBounds.y - this.parentBorder;
 
         newGeo.x += x;
         newGeo.y = y;
@@ -376,27 +376,27 @@ class mxSwimlaneLayout extends mxGraphLayout {
    * vertices - array of vertices to limit search to
    */
   findRoots = (parent, vertices) => {
-    var roots = [];
+    let roots = [];
 
     if (parent != null && vertices != null) {
-      var model = this.graph.model;
-      var best = null;
-      var maxDiff = -100000;
+      let model = this.graph.model;
+      let best = null;
+      let maxDiff = -100000;
 
       for (var i in vertices) {
-        var cell = vertices[i];
+        let cell = vertices[i];
 
         if (cell != null && model.isVertex(cell) && this.graph.isCellVisible(cell) && model.isAncestor(parent, cell)) {
-          var conns = this.getEdges(cell);
-          var fanOut = 0;
-          var fanIn = 0;
+          let conns = this.getEdges(cell);
+          let fanOut = 0;
+          let fanIn = 0;
 
-          for (var k = 0; k < conns.length; k++) {
-            var src = this.getVisibleTerminal(conns[k], true);
+          for (let k = 0; k < conns.length; k++) {
+            let src = this.getVisibleTerminal(conns[k], true);
 
             if (src == cell) {
               // Only count connection within this swimlane
-              var other = this.getVisibleTerminal(conns[k], false);
+              let other = this.getVisibleTerminal(conns[k], false);
 
               if (model.isAncestor(parent, other)) {
                 fanOut++;
@@ -410,7 +410,7 @@ class mxSwimlaneLayout extends mxGraphLayout {
             roots.push(cell);
           }
 
-          var diff = fanOut - fanIn;
+          let diff = fanOut - fanIn;
 
           if (diff > maxDiff) {
             maxDiff = diff;
@@ -437,19 +437,19 @@ class mxSwimlaneLayout extends mxGraphLayout {
    * cell - <mxCell> whose edges should be returned.
    */
   getEdges = (cell) => {
-    var cachedEdges = this.edgesCache.get(cell);
+    let cachedEdges = this.edgesCache.get(cell);
 
     if (cachedEdges != null) {
       return cachedEdges;
     }
 
-    var model = this.graph.model;
-    var edges = [];
-    var isCollapsed = this.graph.isCellCollapsed(cell);
-    var childCount = model.getChildCount(cell);
+    let model = this.graph.model;
+    let edges = [];
+    let isCollapsed = this.graph.isCellCollapsed(cell);
+    let childCount = model.getChildCount(cell);
 
-    for (var i = 0; i < childCount; i++) {
-      var child = model.getChildAt(cell, i);
+    for (let i = 0; i < childCount; i++) {
+      let child = model.getChildAt(cell, i);
 
       if (this.isPort(child)) {
         edges = edges.concat(model.getEdges(child, true, true));
@@ -459,11 +459,11 @@ class mxSwimlaneLayout extends mxGraphLayout {
     }
 
     edges = edges.concat(model.getEdges(cell, true, true));
-    var result = [];
+    let result = [];
 
-    for (var i = 0; i < edges.length; i++) {
-      var source = this.getVisibleTerminal(edges[i], true);
-      var target = this.getVisibleTerminal(edges[i], false);
+    for (let i = 0; i < edges.length; i++) {
+      let source = this.getVisibleTerminal(edges[i], true);
+      let target = this.getVisibleTerminal(edges[i], false);
 
       if ((source == target) || ((source != target) && ((target == cell && (this.parent == null || this.graph.isValidAncestor(source, this.parent, this.traverseAncestors))) ||
           (source == cell && (this.parent == null ||
@@ -488,21 +488,21 @@ class mxSwimlaneLayout extends mxGraphLayout {
    * source - Boolean that specifies whether the source or target terminal is to be returned
    */
   getVisibleTerminal = (edge, source) => {
-    var terminalCache = this.edgesTargetTermCache;
+    let terminalCache = this.edgesTargetTermCache;
 
     if (source) {
       terminalCache = this.edgeSourceTermCache;
     }
 
-    var term = terminalCache.get(edge);
+    let term = terminalCache.get(edge);
 
     if (term != null) {
       return term;
     }
 
-    var state = this.graph.view.getState(edge);
+    let state = this.graph.view.getState(edge);
 
-    var terminal = (state != null) ? state.getVisibleTerminal(source) : this.graph.view.getVisibleTerminal(edge, source);
+    let terminal = (state != null) ? state.getVisibleTerminal(source) : this.graph.view.getVisibleTerminal(edge, source);
 
     if (terminal == null) {
       terminal = (state != null) ? state.getVisibleTerminal(source) : this.graph.view.getVisibleTerminal(edge, source);
@@ -529,18 +529,18 @@ class mxSwimlaneLayout extends mxGraphLayout {
    */
   run = (parent) => {
     // Separate out unconnected hierarchies
-    var hierarchyVertices = [];
-    var allVertexSet = Object();
+    let hierarchyVertices = [];
+    let allVertexSet = Object();
 
     if (this.swimlanes != null && this.swimlanes.length > 0 && parent != null) {
-      var filledVertexSet = Object();
+      let filledVertexSet = Object();
 
-      for (var i = 0; i < this.swimlanes.length; i++) {
+      for (let i = 0; i < this.swimlanes.length; i++) {
         this.filterDescendants(this.swimlanes[i], filledVertexSet);
       }
 
       this.roots = [];
-      var filledVertexSetEmpty = true;
+      let filledVertexSetEmpty = true;
 
       // Poor man's isSetEmpty
       for (var key in filledVertexSet) {
@@ -551,10 +551,10 @@ class mxSwimlaneLayout extends mxGraphLayout {
       }
 
       // Only test for candidates in each swimlane in order
-      var laneCounter = 0;
+      let laneCounter = 0;
 
       while (!filledVertexSetEmpty && laneCounter < this.swimlanes.length) {
-        var candidateRoots = this.findRoots(this.swimlanes[laneCounter], filledVertexSet);
+        let candidateRoots = this.findRoots(this.swimlanes[laneCounter], filledVertexSet);
 
         if (candidateRoots.length == 0) {
           laneCounter++;
@@ -564,15 +564,15 @@ class mxSwimlaneLayout extends mxGraphLayout {
         // If the candidate root is an unconnected group cell, remove it from
         // the layout. We may need a custom set that holds such groups and forces
         // them to be processed for resizing and/or moving.
-        for (var i = 0; i < candidateRoots.length; i++) {
-          var vertexSet = Object();
+        for (let i = 0; i < candidateRoots.length; i++) {
+          let vertexSet = Object();
           hierarchyVertices.push(vertexSet);
 
           this.traverse(candidateRoots[i], true, null, allVertexSet, vertexSet,
               hierarchyVertices, filledVertexSet, laneCounter);
         }
 
-        for (var i = 0; i < candidateRoots.length; i++) {
+        for (let i = 0; i < candidateRoots.length; i++) {
           this.roots.push(candidateRoots[i]);
         }
 
@@ -589,8 +589,8 @@ class mxSwimlaneLayout extends mxGraphLayout {
     } else {
       // Find vertex set as directed traversal from roots
 
-      for (var i = 0; i < this.roots.length; i++) {
-        var vertexSet = Object();
+      for (let i = 0; i < this.roots.length; i++) {
+        let vertexSet = Object();
         hierarchyVertices.push(vertexSet);
 
         this.traverse(this.roots[i], true, null, allVertexSet, vertexSet,
@@ -598,7 +598,7 @@ class mxSwimlaneLayout extends mxGraphLayout {
       }
     }
 
-    var tmp = [];
+    let tmp = [];
 
     for (var key in allVertexSet) {
       tmp.push(allVertexSet[key]);
@@ -620,7 +620,7 @@ class mxSwimlaneLayout extends mxGraphLayout {
    * Creates an array of descendant cells
    */
   filterDescendants = (cell, result) => {
-    var model = this.graph.model;
+    let model = this.graph.model;
 
     if (model.isVertex(cell) && cell != this.parent && model.getParent(cell) != this.parent && this.graph.isCellVisible(cell)) {
       result[mxObjectIdentity.get(cell)] = cell;
@@ -628,10 +628,10 @@ class mxSwimlaneLayout extends mxGraphLayout {
 
     if (this.traverseAncestors || cell == this.parent
         && this.graph.isCellVisible(cell)) {
-      var childCount = model.getChildCount(cell);
+      let childCount = model.getChildCount(cell);
 
-      for (var i = 0; i < childCount; i++) {
-        var child = model.getChildAt(cell, i);
+      for (let i = 0; i < childCount; i++) {
+        let child = model.getChildAt(cell, i);
 
         // Ignore ports in the layout vertex list, they are dealt with
         // in the traversal mechanisms
@@ -674,14 +674,14 @@ class mxSwimlaneLayout extends mxGraphLayout {
    */
   getEdgesBetween = (source, target, directed) => {
     directed = (directed != null) ? directed : false;
-    var edges = this.getEdges(source);
-    var result = [];
+    let edges = this.getEdges(source);
+    let result = [];
 
     // Checks if the edge is connected to the correct
     // cell and returns the first match
-    for (var i = 0; i < edges.length; i++) {
-      var src = this.getVisibleTerminal(edges[i], true);
-      var trg = this.getVisibleTerminal(edges[i], false);
+    for (let i = 0; i < edges.length; i++) {
+      let src = this.getVisibleTerminal(edges[i], true);
+      let trg = this.getVisibleTerminal(edges[i], false);
 
       if ((src == source && trg == target) || (!directed && src == target && trg == source)) {
         result.push(edges[i]);
@@ -714,7 +714,7 @@ class mxSwimlaneLayout extends mxGraphLayout {
       // Has this vertex been seen before in any traversal
       // And if the filled vertex set is populated, only
       // process vertices in that it contains
-      var vertexID = mxObjectIdentity.get(vertex);
+      let vertexID = mxObjectIdentity.get(vertex);
 
       if ((allVertices[vertexID] == null)
           && (filledVertexSet == null ? true : filledVertexSet[vertexID] != null)) {
@@ -729,18 +729,18 @@ class mxSwimlaneLayout extends mxGraphLayout {
           delete filledVertexSet[vertexID];
         }
 
-        var edges = this.getEdges(vertex);
-        var model = this.graph.model;
+        let edges = this.getEdges(vertex);
+        let model = this.graph.model;
 
-        for (var i = 0; i < edges.length; i++) {
-          var otherVertex = this.getVisibleTerminal(edges[i], true);
-          var isSource = otherVertex == vertex;
+        for (let i = 0; i < edges.length; i++) {
+          let otherVertex = this.getVisibleTerminal(edges[i], true);
+          let isSource = otherVertex == vertex;
 
           if (isSource) {
             otherVertex = this.getVisibleTerminal(edges[i], false);
           }
 
-          var otherIndex = 0;
+          let otherIndex = 0;
           // Get the swimlane index of the other terminal
           for (otherIndex = 0; otherIndex < this.swimlanes.length; otherIndex++) {
             if (model.isAncestor(this.swimlanes[otherIndex], otherVertex)) {
@@ -766,8 +766,8 @@ class mxSwimlaneLayout extends mxGraphLayout {
         if (currentComp[vertexID] == null) {
           // We've seen this vertex before, but not in the current component
           // This component and the one it's in need to be merged
-          for (var i = 0; i < hierarchyVertices.length; i++) {
-            var comp = hierarchyVertices[i];
+          for (let i = 0; i < hierarchyVertices.length; i++) {
+            let comp = hierarchyVertices[i];
 
             if (comp[vertexID] != null) {
               for (var key in comp) {
@@ -792,7 +792,7 @@ class mxSwimlaneLayout extends mxGraphLayout {
    * Executes the cycle stage using mxMinimumCycleRemover.
    */
   cycleStage = (parent) => {
-    var cycleStage = new mxSwimlaneOrdering(this);
+    let cycleStage = new mxSwimlaneOrdering(this);
     cycleStage.execute(parent);
   };
 
@@ -812,7 +812,7 @@ class mxSwimlaneLayout extends mxGraphLayout {
    * Executes the crossing stage using mxMedianHybridCrossingReduction.
    */
   crossingStage = (parent) => {
-    var crossingStage = new mxMedianHybridCrossingReduction(this);
+    let crossingStage = new mxMedianHybridCrossingReduction(this);
     crossingStage.execute(parent);
   };
 
@@ -822,7 +822,7 @@ class mxSwimlaneLayout extends mxGraphLayout {
    * Executes the placement stage using mxCoordinateAssignment.
    */
   placementStage = (initialX, parent) => {
-    var placementStage = new mxCoordinateAssignment(this, this.intraCellSpacing,
+    let placementStage = new mxCoordinateAssignment(this, this.intraCellSpacing,
         this.interRankCellSpacing, this.orientation, initialX,
         this.parallelEdgeSpacing);
     placementStage.fineTuning = this.fineTuning;
diff --git a/src/js/layout/hierarchical/stage/mxCoordinateAssignment.js b/src/js/layout/hierarchical/stage/mxCoordinateAssignment.js
index 7988a0027..e17807437 100644
--- a/src/js/layout/hierarchical/stage/mxCoordinateAssignment.js
+++ b/src/js/layout/hierarchical/stage/mxCoordinateAssignment.js
@@ -218,17 +218,17 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
    * Utility method to display current positions
    */
   printStatus = () => {
-    var model = this.layout.getModel();
+    let model = this.layout.getModel();
     mxLog.show();
 
     mxLog.writeln('======Coord assignment debug=======');
 
-    for (var j = 0; j < model.ranks.length; j++) {
+    for (let j = 0; j < model.ranks.length; j++) {
       mxLog.write('Rank ', j, ' : ');
-      var rank = model.ranks[j];
+      let rank = model.ranks[j];
 
-      for (var k = 0; k < rank.length; k++) {
-        var cell = rank[k];
+      for (let k = 0; k < rank.length; k++) {
+        let cell = rank[k];
 
         mxLog.write(cell.getGeneralPurposeVariable(j), '  ');
       }
@@ -245,7 +245,7 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
    */
   execute = (parent) => {
     this.jettyPositions = Object();
-    var model = this.layout.getModel();
+    let model = this.layout.getModel();
     this.currentXDelta = 0.0;
 
     this.initialCoords(this.layout.getGraph(), model);
@@ -256,10 +256,10 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
       this.minNode(model);
     }
 
-    var bestXDelta = 100000000.0;
+    let bestXDelta = 100000000.0;
 
     if (this.fineTuning) {
-      for (var i = 0; i < this.maxIterations; i++) {
+      for (let i = 0; i < this.maxIterations; i++) {
 //      this.printStatus();
 
         // Median Heuristic
@@ -272,11 +272,11 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
         // there are less heavily angled edges and so the current
         // positioning is used
         if (this.currentXDelta < bestXDelta) {
-          for (var j = 0; j < model.ranks.length; j++) {
-            var rank = model.ranks[j];
+          for (let j = 0; j < model.ranks.length; j++) {
+            let rank = model.ranks[j];
 
-            for (var k = 0; k < rank.length; k++) {
-              var cell = rank[k];
+            for (let k = 0; k < rank.length; k++) {
+              let cell = rank[k];
               cell.setX(j, cell.getGeneralPurposeVariable(j));
             }
           }
@@ -284,11 +284,11 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
           bestXDelta = this.currentXDelta;
         } else {
           // Restore the best positions
-          for (var j = 0; j < model.ranks.length; j++) {
-            var rank = model.ranks[j];
+          for (let j = 0; j < model.ranks.length; j++) {
+            let rank = model.ranks[j];
 
-            for (var k = 0; k < rank.length; k++) {
-              var cell = rank[k];
+            for (let k = 0; k < rank.length; k++) {
+              let cell = rank[k];
               cell.setGeneralPurposeVariable(j, cell.getX(j));
             }
           }
@@ -310,20 +310,20 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
    */
   minNode = (model) => {
     // Queue all nodes
-    var nodeList = [];
+    let nodeList = [];
 
     // Need to be able to map from cell to cellWrapper
-    var map = new mxDictionary();
-    var rank = [];
+    let map = new mxDictionary();
+    let rank = [];
 
-    for (var i = 0; i <= model.maxRank; i++) {
+    for (let i = 0; i <= model.maxRank; i++) {
       rank[i] = model.ranks[i];
 
-      for (var j = 0; j < rank[i].length; j++) {
+      for (let j = 0; j < rank[i].length; j++) {
         // Use the weight to store the rank and visited to store whether
         // or not the cell is in the list
-        var node = rank[i][j];
-        var nodeWrapper = new WeightedCellSorter(node, i);
+        let node = rank[i][j];
+        let nodeWrapper = new WeightedCellSorter(node, i);
         nodeWrapper.rankIndex = j;
         nodeWrapper.visited = true;
         nodeList.push(nodeWrapper);
@@ -334,34 +334,34 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
 
     // Set a limit of the maximum number of times we will access the queue
     // in case a loop appears
-    var maxTries = nodeList.length * 10;
-    var count = 0;
+    let maxTries = nodeList.length * 10;
+    let count = 0;
 
     // Don't move cell within this value of their median
-    var tolerance = 1;
+    let tolerance = 1;
 
     while (nodeList.length > 0 && count <= maxTries) {
-      var cellWrapper = nodeList.shift();
-      var cell = cellWrapper.cell;
+      let cellWrapper = nodeList.shift();
+      let cell = cellWrapper.cell;
 
-      var rankValue = cellWrapper.weightedValue;
-      var rankIndex = parseInt(cellWrapper.rankIndex);
+      let rankValue = cellWrapper.weightedValue;
+      let rankIndex = parseInt(cellWrapper.rankIndex);
 
-      var nextLayerConnectedCells = cell.getNextLayerConnectedCells(rankValue);
-      var previousLayerConnectedCells = cell.getPreviousLayerConnectedCells(rankValue);
+      let nextLayerConnectedCells = cell.getNextLayerConnectedCells(rankValue);
+      let previousLayerConnectedCells = cell.getPreviousLayerConnectedCells(rankValue);
 
-      var numNextLayerConnected = nextLayerConnectedCells.length;
-      var numPreviousLayerConnected = previousLayerConnectedCells.length;
+      let numNextLayerConnected = nextLayerConnectedCells.length;
+      let numPreviousLayerConnected = previousLayerConnectedCells.length;
 
-      var medianNextLevel = this.medianXValue(nextLayerConnectedCells,
+      let medianNextLevel = this.medianXValue(nextLayerConnectedCells,
           rankValue + 1);
-      var medianPreviousLevel = this.medianXValue(previousLayerConnectedCells,
+      let medianPreviousLevel = this.medianXValue(previousLayerConnectedCells,
           rankValue - 1);
 
-      var numConnectedNeighbours = numNextLayerConnected
+      let numConnectedNeighbours = numNextLayerConnected
           + numPreviousLayerConnected;
-      var currentPosition = cell.getGeneralPurposeVariable(rankValue);
-      var cellMedian = currentPosition;
+      let currentPosition = cell.getGeneralPurposeVariable(rankValue);
+      let cellMedian = currentPosition;
 
       if (numConnectedNeighbours > 0) {
         cellMedian = (medianNextLevel * numNextLayerConnected + medianPreviousLevel
@@ -370,15 +370,15 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
       }
 
       // Flag storing whether or not position has changed
-      var positionChanged = false;
+      let positionChanged = false;
 
       if (cellMedian < currentPosition - tolerance) {
         if (rankIndex == 0) {
           cell.setGeneralPurposeVariable(rankValue, cellMedian);
           positionChanged = true;
         } else {
-          var leftCell = rank[rankValue][rankIndex - 1];
-          var leftLimit = leftCell
+          let leftCell = rank[rankValue][rankIndex - 1];
+          let leftLimit = leftCell
               .getGeneralPurposeVariable(rankValue);
           leftLimit = leftLimit + leftCell.width / 2
               + this.intraCellSpacing + cell.width / 2;
@@ -394,14 +394,14 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
           }
         }
       } else if (cellMedian > currentPosition + tolerance) {
-        var rankSize = rank[rankValue].length;
+        let rankSize = rank[rankValue].length;
 
         if (rankIndex == rankSize - 1) {
           cell.setGeneralPurposeVariable(rankValue, cellMedian);
           positionChanged = true;
         } else {
-          var rightCell = rank[rankValue][rankIndex + 1];
-          var rightLimit = rightCell
+          let rightCell = rank[rankValue][rankIndex + 1];
+          let rightLimit = rightCell
               .getGeneralPurposeVariable(rankValue);
           rightLimit = rightLimit - rightCell.width / 2
               - this.intraCellSpacing - cell.width / 2;
@@ -420,9 +420,9 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
 
       if (positionChanged) {
         // Add connected nodes to map and list
-        for (var i = 0; i < nextLayerConnectedCells.length; i++) {
-          var connectedCell = nextLayerConnectedCells[i];
-          var connectedCellWrapper = map.get(connectedCell);
+        for (let i = 0; i < nextLayerConnectedCells.length; i++) {
+          let connectedCell = nextLayerConnectedCells[i];
+          let connectedCellWrapper = map.get(connectedCell);
 
           if (connectedCellWrapper != null) {
             if (connectedCellWrapper.visited == false) {
@@ -433,9 +433,9 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
         }
 
         // Add connected nodes to map and list
-        for (var i = 0; i < previousLayerConnectedCells.length; i++) {
-          var connectedCell = previousLayerConnectedCells[i];
-          var connectedCellWrapper = map.get(connectedCell);
+        for (let i = 0; i < previousLayerConnectedCells.length; i++) {
+          let connectedCell = previousLayerConnectedCells[i];
+          let connectedCellWrapper = map.get(connectedCell);
 
           if (connectedCellWrapper != null) {
             if (connectedCellWrapper.visited == false) {
@@ -463,14 +463,14 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
    */
   medianPos = (i, model) => {
     // Reverse sweep direction each time through this method
-    var downwardSweep = (i % 2 == 0);
+    let downwardSweep = (i % 2 == 0);
 
     if (downwardSweep) {
-      for (var j = model.maxRank; j > 0; j--) {
+      for (let j = model.maxRank; j > 0; j--) {
         this.rankMedianPosition(j - 1, model, j);
       }
     } else {
-      for (var j = 0; j < model.maxRank - 1; j++) {
+      for (let j = 0; j < model.maxRank - 1; j++) {
         this.rankMedianPosition(j + 1, model, j);
       }
     }
@@ -489,21 +489,21 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
    * relative to
    */
   rankMedianPosition = (rankValue, model, nextRankValue) => {
-    var rank = model.ranks[rankValue];
+    let rank = model.ranks[rankValue];
 
     // Form an array of the order in which the cell are to be processed
     // , the order is given by the weighted sum of the in or out edges,
     // depending on whether we're traveling up or down the hierarchy.
-    var weightedValues = [];
-    var cellMap = {};
+    let weightedValues = [];
+    let cellMap = {};
 
-    for (var i = 0; i < rank.length; i++) {
-      var currentCell = rank[i];
+    for (let i = 0; i < rank.length; i++) {
+      let currentCell = rank[i];
       weightedValues[i] = new WeightedCellSorter();
       weightedValues[i].cell = currentCell;
       weightedValues[i].rankIndex = i;
       cellMap[currentCell.id] = weightedValues[i];
-      var nextLayerConnectedCells = null;
+      let nextLayerConnectedCells = null;
 
       if (nextRankValue < rankValue) {
         nextLayerConnectedCells = currentCell
@@ -524,11 +524,11 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
     // Set the new position of each node within the rank using
     // its temp variable
 
-    for (var i = 0; i < weightedValues.length; i++) {
-      var numConnectionsNextLevel = 0;
-      var cell = weightedValues[i].cell;
-      var nextLayerConnectedCells = null;
-      var medianNextLevel = 0;
+    for (let i = 0; i < weightedValues.length; i++) {
+      let numConnectionsNextLevel = 0;
+      let cell = weightedValues[i].cell;
+      let nextLayerConnectedCells = null;
+      let medianNextLevel = 0;
 
       if (nextRankValue < rankValue) {
         nextLayerConnectedCells = cell.getPreviousLayerConnectedCells(
@@ -552,14 +552,14 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
         }
       }
 
-      var leftBuffer = 0.0;
-      var leftLimit = -100000000.0;
+      let leftBuffer = 0.0;
+      let leftLimit = -100000000.0;
 
-      for (var j = weightedValues[i].rankIndex - 1; j >= 0;) {
-        var weightedValue = cellMap[rank[j].id];
+      for (let j = weightedValues[i].rankIndex - 1; j >= 0;) {
+        let weightedValue = cellMap[rank[j].id];
 
         if (weightedValue != null) {
-          var leftCell = weightedValue.cell;
+          let leftCell = weightedValue.cell;
 
           if (weightedValue.visited) {
             // The left limit is the right hand limit of that
@@ -579,14 +579,14 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
         }
       }
 
-      var rightBuffer = 0.0;
-      var rightLimit = 100000000.0;
+      let rightBuffer = 0.0;
+      let rightLimit = 100000000.0;
 
-      for (var j = weightedValues[i].rankIndex + 1; j < weightedValues.length;) {
-        var weightedValue = cellMap[rank[j].id];
+      for (let j = weightedValues[i].rankIndex + 1; j < weightedValues.length;) {
+        let weightedValue = cellMap[rank[j].id];
 
         if (weightedValue != null) {
-          var rightCell = weightedValue.cell;
+          let rightCell = weightedValue.cell;
 
           if (weightedValue.visited) {
             // The left limit is the right hand limit of that
@@ -636,10 +636,10 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
    * collection - the cells the specified cell is connected to
    */
   calculatedWeightedValue = (currentCell, collection) => {
-    var totalWeight = 0;
+    let totalWeight = 0;
 
-    for (var i = 0; i < collection.length; i++) {
-      var cell = collection[i];
+    for (let i = 0; i < collection.length; i++) {
+      let cell = collection[i];
 
       if (currentCell.isVertex() && cell.isVertex()) {
         totalWeight++;
@@ -669,9 +669,9 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
       return 0;
     }
 
-    var medianValues = [];
+    let medianValues = [];
 
-    for (var i = 0; i < connectedCells.length; i++) {
+    for (let i = 0; i < connectedCells.length; i++) {
       medianValues[i] = connectedCells[i].getGeneralPurposeVariable(rankValue);
     }
 
@@ -683,9 +683,9 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
       // For odd numbers of adjacent vertices return the median
       return medianValues[Math.floor(connectedCells.length / 2)];
     } else {
-      var medianPoint = connectedCells.length / 2;
-      var leftMedian = medianValues[medianPoint - 1];
-      var rightMedian = medianValues[medianPoint];
+      let medianPoint = connectedCells.length / 2;
+      let leftMedian = medianValues[medianPoint - 1];
+      let rightMedian = medianValues[medianPoint];
 
       return ((leftMedian + rightMedian) / 2);
     }
@@ -707,13 +707,13 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
     this.calculateWidestRank(facade, model);
 
     // Sweep up and down from the widest rank
-    for (var i = this.widestRank; i >= 0; i--) {
+    for (let i = this.widestRank; i >= 0; i--) {
       if (i < model.maxRank) {
         this.rankCoordinates(i, facade, model);
       }
     }
 
-    for (var i = this.widestRank + 1; i <= model.maxRank; i++) {
+    for (let i = this.widestRank + 1; i <= model.maxRank; i++) {
       if (i > 0) {
         this.rankCoordinates(i, facade, model);
       }
@@ -735,20 +735,20 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
    * model - an internal model of the hierarchical layout
    */
   rankCoordinates = (rankValue, graph, model) => {
-    var rank = model.ranks[rankValue];
-    var maxY = 0.0;
-    var localX = this.initialX + (this.widestRankValue - this.rankWidths[rankValue])
+    let rank = model.ranks[rankValue];
+    let maxY = 0.0;
+    let localX = this.initialX + (this.widestRankValue - this.rankWidths[rankValue])
         / 2;
 
     // Store whether or not any of the cells' bounds were unavailable so
     // to only issue the warning once for all cells
-    var boundsWarning = false;
+    let boundsWarning = false;
 
-    for (var i = 0; i < rank.length; i++) {
-      var node = rank[i];
+    for (let i = 0; i < rank.length; i++) {
+      let node = rank[i];
 
       if (node.isVertex()) {
-        var bounds = this.layout.getVertexBounds(node.cell);
+        let bounds = this.layout.getVertexBounds(node.cell);
 
         if (bounds != null) {
           if (this.orientation == mxConstants.DIRECTION_NORTH ||
@@ -767,7 +767,7 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
       } else if (node.isEdge()) {
         // The width is the number of additional parallel edges
         // time the parallel edge spacing
-        var numEdges = 1;
+        let numEdges = 1;
 
         if (node.edges != null) {
           numEdges = node.edges.length;
@@ -804,29 +804,29 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
    */
   calculateWidestRank = (graph, model) => {
     // Starting y co-ordinate
-    var y = -this.interRankCellSpacing;
+    let y = -this.interRankCellSpacing;
 
     // Track the widest cell on the last rank since the y
     // difference depends on it
-    var lastRankMaxCellHeight = 0.0;
+    let lastRankMaxCellHeight = 0.0;
     this.rankWidths = [];
     this.rankY = [];
 
-    for (var rankValue = model.maxRank; rankValue >= 0; rankValue--) {
+    for (let rankValue = model.maxRank; rankValue >= 0; rankValue--) {
       // Keep track of the widest cell on this rank
-      var maxCellHeight = 0.0;
-      var rank = model.ranks[rankValue];
-      var localX = this.initialX;
+      let maxCellHeight = 0.0;
+      let rank = model.ranks[rankValue];
+      let localX = this.initialX;
 
       // Store whether or not any of the cells' bounds were unavailable so
       // to only issue the warning once for all cells
-      var boundsWarning = false;
+      let boundsWarning = false;
 
-      for (var i = 0; i < rank.length; i++) {
-        var node = rank[i];
+      for (let i = 0; i < rank.length; i++) {
+        let node = rank[i];
 
         if (node.isVertex()) {
-          var bounds = this.layout.getVertexBounds(node.cell);
+          let bounds = this.layout.getVertexBounds(node.cell);
 
           if (bounds != null) {
             if (this.orientation == mxConstants.DIRECTION_NORTH ||
@@ -845,7 +845,7 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
         } else if (node.isEdge()) {
           // The width is the number of additional parallel edges
           // time the parallel edge spacing
-          var numEdges = 1;
+          let numEdges = 1;
 
           if (node.edges != null) {
             numEdges = node.edges.length;
@@ -876,7 +876,7 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
       }
 
       this.rankY[rankValue] = y;
-      var distanceToNextRank = maxCellHeight / 2.0
+      let distanceToNextRank = maxCellHeight / 2.0
           + lastRankMaxCellHeight / 2.0 + this.interRankCellSpacing;
       lastRankMaxCellHeight = maxCellHeight;
 
@@ -887,8 +887,8 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
         y -= distanceToNextRank;
       }
 
-      for (var i = 0; i < rank.length; i++) {
-        var cell = rank[i];
+      for (let i = 0; i < rank.length; i++) {
+        let cell = rank[i];
         cell.setY(rankValue, y);
       }
     }
@@ -912,10 +912,10 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
     // preferred direction used is the one where the final
     // control points have the least offset from the connectable
     // region of the terminating vertices
-    var edges = model.edgeMapper.getValues();
+    let edges = model.edgeMapper.getValues();
 
-    for (var j = 0; j < edges.length; j++) {
-      var cell = edges[j];
+    for (let j = 0; j < edges.length; j++) {
+      let cell = edges[j];
 
       if (cell.maxRank - cell.minRank - 1 < 1) {
         continue;
@@ -923,13 +923,13 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
 
       // At least two virtual nodes in the edge
       // Check first whether the edge is already straight
-      var referenceX = cell
+      let referenceX = cell
           .getGeneralPurposeVariable(cell.minRank + 1);
-      var edgeStraight = true;
-      var refSegCount = 0;
+      let edgeStraight = true;
+      let refSegCount = 0;
 
-      for (var i = cell.minRank + 2; i < cell.maxRank; i++) {
-        var x = cell.getGeneralPurposeVariable(i);
+      for (let i = cell.minRank + 2; i < cell.maxRank; i++) {
+        let x = cell.getGeneralPurposeVariable(i);
 
         if (referenceX != x) {
           edgeStraight = false;
@@ -940,17 +940,17 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
       }
 
       if (!edgeStraight) {
-        var upSegCount = 0;
-        var downSegCount = 0;
-        var upXPositions = [];
-        var downXPositions = [];
+        let upSegCount = 0;
+        let downSegCount = 0;
+        let upXPositions = [];
+        let downXPositions = [];
 
-        var currentX = cell.getGeneralPurposeVariable(cell.minRank + 1);
+        let currentX = cell.getGeneralPurposeVariable(cell.minRank + 1);
 
-        for (var i = cell.minRank + 1; i < cell.maxRank - 1; i++) {
+        for (let i = cell.minRank + 1; i < cell.maxRank - 1; i++) {
           // Attempt to straight out the control point on the
           // next segment up with the current control point.
-          var nextX = cell.getX(i + 1);
+          let nextX = cell.getX(i + 1);
 
           if (currentX == nextX) {
             upXPositions[i - cell.minRank - 1] = currentX;
@@ -967,10 +967,10 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
 
         currentX = cell.getX(i);
 
-        for (var i = cell.maxRank - 1; i > cell.minRank + 1; i--) {
+        for (let i = cell.maxRank - 1; i > cell.minRank + 1; i--) {
           // Attempt to straight out the control point on the
           // next segment down with the current control point.
-          var nextX = cell.getX(i - 1);
+          let nextX = cell.getX(i - 1);
 
           if (currentX == nextX) {
             downXPositions[i - cell.minRank - 2] = currentX;
@@ -988,12 +988,12 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
         if (downSegCount > refSegCount || upSegCount > refSegCount) {
           if (downSegCount >= upSegCount) {
             // Apply down calculation values
-            for (var i = cell.maxRank - 2; i > cell.minRank; i--) {
+            for (let i = cell.maxRank - 2; i > cell.minRank; i--) {
               cell.setX(i, downXPositions[i - cell.minRank - 1]);
             }
           } else if (upSegCount > downSegCount) {
             // Apply up calculation values
-            for (var i = cell.minRank + 2; i < cell.maxRank; i++) {
+            for (let i = cell.minRank + 2; i < cell.maxRank; i++) {
               cell.setX(i, upXPositions[i - cell.minRank - 2]);
             }
           } else {
@@ -1021,10 +1021,10 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
    * position - the x position being sought
    */
   repositionValid = (model, cell, rank, position) => {
-    var rankArray = model.ranks[rank];
-    var rankIndex = -1;
+    let rankArray = model.ranks[rank];
+    let rankIndex = -1;
 
-    for (var i = 0; i < rankArray.length; i++) {
+    for (let i = 0; i < rankArray.length; i++) {
       if (cell == rankArray[i]) {
         rankIndex = i;
         break;
@@ -1035,7 +1035,7 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
       return false;
     }
 
-    var currentX = cell.getGeneralPurposeVariable(rank);
+    let currentX = cell.getGeneralPurposeVariable(rank);
 
     if (position < currentX) {
       // Trying to move node to the left.
@@ -1044,8 +1044,8 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
         return true;
       }
 
-      var leftCell = rankArray[rankIndex - 1];
-      var leftLimit = leftCell.getGeneralPurposeVariable(rank);
+      let leftCell = rankArray[rankIndex - 1];
+      let leftLimit = leftCell.getGeneralPurposeVariable(rank);
       leftLimit = leftLimit + leftCell.width / 2
           + this.intraCellSpacing + cell.width / 2;
 
@@ -1061,8 +1061,8 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
         return true;
       }
 
-      var rightCell = rankArray[rankIndex + 1];
-      var rightLimit = rightCell.getGeneralPurposeVariable(rank);
+      let rightCell = rankArray[rankIndex + 1];
+      let rightLimit = rightCell.getGeneralPurposeVariable(rank);
       rightLimit = rightLimit - rightCell.width / 2
           - this.intraCellSpacing - cell.width / 2;
 
@@ -1091,18 +1091,18 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
     this.rankTopY = [];
     this.rankBottomY = [];
 
-    for (var i = 0; i < model.ranks.length; i++) {
+    for (let i = 0; i < model.ranks.length; i++) {
       this.rankTopY[i] = Number.MAX_VALUE;
       this.rankBottomY[i] = -Number.MAX_VALUE;
     }
 
-    var vertices = model.vertexMapper.getValues();
+    let vertices = model.vertexMapper.getValues();
 
     // Process vertices all first, since they define the lower and
     // limits of each rank. Between these limits lie the channels
     // where the edges can be routed across the graph
 
-    for (var i = 0; i < vertices.length; i++) {
+    for (let i = 0; i < vertices.length; i++) {
       this.setVertexLocation(vertices[i]);
     }
 
@@ -1114,9 +1114,9 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
       this.localEdgeProcessing(model);
     }
 
-    var edges = model.edgeMapper.getValues();
+    let edges = model.edgeMapper.getValues();
 
-    for (var i = 0; i < edges.length; i++) {
+    for (let i = 0; i < edges.length; i++) {
       this.setEdgePosition(edges[i]);
     }
   };
@@ -1133,44 +1133,44 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
   localEdgeProcessing = (model) => {
     // Iterate through each vertex, look at the edges connected in
     // both directions.
-    for (var rankIndex = 0; rankIndex < model.ranks.length; rankIndex++) {
-      var rank = model.ranks[rankIndex];
+    for (let rankIndex = 0; rankIndex < model.ranks.length; rankIndex++) {
+      let rank = model.ranks[rankIndex];
 
-      for (var cellIndex = 0; cellIndex < rank.length; cellIndex++) {
-        var cell = rank[cellIndex];
+      for (let cellIndex = 0; cellIndex < rank.length; cellIndex++) {
+        let cell = rank[cellIndex];
 
         if (cell.isVertex()) {
-          var currentCells = cell.getPreviousLayerConnectedCells(rankIndex);
+          let currentCells = cell.getPreviousLayerConnectedCells(rankIndex);
 
-          var currentRank = rankIndex - 1;
+          let currentRank = rankIndex - 1;
 
           // Two loops, last connected cells, and next
-          for (var k = 0; k < 2; k++) {
+          for (let k = 0; k < 2; k++) {
             if (currentRank > -1
                 && currentRank < model.ranks.length
                 && currentCells != null
                 && currentCells.length > 0) {
-              var sortedCells = [];
+              let sortedCells = [];
 
-              for (var j = 0; j < currentCells.length; j++) {
-                var sorter = new WeightedCellSorter(
+              for (let j = 0; j < currentCells.length; j++) {
+                let sorter = new WeightedCellSorter(
                     currentCells[j], currentCells[j].getX(currentRank));
                 sortedCells.push(sorter);
               }
 
               sortedCells.sort(compare);
 
-              var leftLimit = cell.x[0] - cell.width / 2;
-              var rightLimit = leftLimit + cell.width;
+              let leftLimit = cell.x[0] - cell.width / 2;
+              let rightLimit = leftLimit + cell.width;
 
               // Connected edge count starts at 1 to allow for buffer
               // with edge of vertex
-              var connectedEdgeCount = 0;
-              var connectedEdgeGroupCount = 0;
-              var connectedEdges = [];
+              let connectedEdgeCount = 0;
+              let connectedEdgeGroupCount = 0;
+              let connectedEdges = [];
               // Calculate width requirements for all connected edges
-              for (var j = 0; j < sortedCells.length; j++) {
-                var innerCell = sortedCells[j].cell;
+              for (let j = 0; j < sortedCells.length; j++) {
+                let innerCell = sortedCells[j].cell;
                 var connections;
 
                 if (innerCell.isVertex()) {
@@ -1182,7 +1182,7 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
                     connections = cell.connectsAsTarget;
                   }
 
-                  for (var connIndex = 0; connIndex < connections.length; connIndex++) {
+                  for (let connIndex = 0; connIndex < connections.length; connIndex++) {
                     if (connections[connIndex].source == innerCell
                         || connections[connIndex].target == innerCell) {
                       connectedEdgeCount += connections[connIndex].edges
@@ -1199,7 +1199,7 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
                 }
               }
 
-              var requiredWidth = (connectedEdgeCount + 1)
+              let requiredWidth = (connectedEdgeCount + 1)
                   * this.prefHozEdgeSep;
 
               // Add a buffer on the edges of the vertex if the edge count allows
@@ -1209,17 +1209,17 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
                 rightLimit -= this.prefHozEdgeSep;
               }
 
-              var availableWidth = rightLimit - leftLimit;
-              var edgeSpacing = availableWidth / connectedEdgeCount;
+              let availableWidth = rightLimit - leftLimit;
+              let edgeSpacing = availableWidth / connectedEdgeCount;
 
-              var currentX = leftLimit + edgeSpacing / 2.0;
-              var currentYOffset = this.minEdgeJetty - this.prefVertEdgeOff;
-              var maxYOffset = 0;
+              let currentX = leftLimit + edgeSpacing / 2.0;
+              let currentYOffset = this.minEdgeJetty - this.prefVertEdgeOff;
+              let maxYOffset = 0;
 
-              for (var j = 0; j < connectedEdges.length; j++) {
-                var numActualEdges = connectedEdges[j].edges
+              for (let j = 0; j < connectedEdges.length; j++) {
+                let numActualEdges = connectedEdges[j].edges
                     .length;
-                var pos = this.jettyPositions[connectedEdges[j].ids[0]];
+                let pos = this.jettyPositions[connectedEdges[j].ids[0]];
 
                 if (pos == null) {
                   pos = [];
@@ -1234,7 +1234,7 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
                 // Ignore the case if equals, this means the second of 2
                 // jettys with the same y (even number of edges)
 
-                for (var m = 0; m < numActualEdges; m++) {
+                for (let m = 0; m < numActualEdges; m++) {
                   pos[m * 4 + k * 2] = currentX;
                   currentX += edgeSpacing;
                   pos[m * 4 + k * 2 + 1] = currentYOffset;
@@ -1262,37 +1262,37 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
   setEdgePosition = (cell) => {
     // For parallel edges we need to seperate out the points a
     // little
-    var offsetX = 0;
+    let offsetX = 0;
     // Only set the edge control points once
 
     if (cell.temp[0] != 101207) {
-      var maxRank = cell.maxRank;
-      var minRank = cell.minRank;
+      let maxRank = cell.maxRank;
+      let minRank = cell.minRank;
 
       if (maxRank == minRank) {
         maxRank = cell.source.maxRank;
         minRank = cell.target.minRank;
       }
 
-      var parallelEdgeCount = 0;
-      var jettys = this.jettyPositions[cell.ids[0]];
+      let parallelEdgeCount = 0;
+      let jettys = this.jettyPositions[cell.ids[0]];
 
-      var source = cell.isReversed ? cell.target.cell : cell.source.cell;
-      var graph = this.layout.graph;
-      var layoutReversed = this.orientation == mxConstants.DIRECTION_EAST
+      let source = cell.isReversed ? cell.target.cell : cell.source.cell;
+      let graph = this.layout.graph;
+      let layoutReversed = this.orientation == mxConstants.DIRECTION_EAST
           || this.orientation == mxConstants.DIRECTION_SOUTH;
 
-      for (var i = 0; i < cell.edges.length; i++) {
-        var realEdge = cell.edges[i];
-        var realSource = this.layout.getVisibleTerminal(realEdge, true);
+      for (let i = 0; i < cell.edges.length; i++) {
+        let realEdge = cell.edges[i];
+        let realSource = this.layout.getVisibleTerminal(realEdge, true);
 
         //List oldPoints = graph.getPoints(realEdge);
-        var newPoints = [];
+        let newPoints = [];
 
         // Single length reversed edges end up with the jettys in the wrong
         // places. Since single length edges only have jettys, not segment
         // control points, we just say the edge isn't reversed in this section
-        var reversed = cell.isReversed;
+        let reversed = cell.isReversed;
 
         if (realSource != source) {
           // The real edges include all core model edges and these can go
@@ -1304,23 +1304,23 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
 
         // First jetty of edge
         if (jettys != null) {
-          var arrayOffset = reversed ? 2 : 0;
-          var y = reversed ?
+          let arrayOffset = reversed ? 2 : 0;
+          let y = reversed ?
               (layoutReversed ? this.rankBottomY[minRank] : this.rankTopY[minRank]) :
               (layoutReversed ? this.rankTopY[maxRank] : this.rankBottomY[maxRank]);
-          var jetty = jettys[parallelEdgeCount * 4 + 1 + arrayOffset];
+          let jetty = jettys[parallelEdgeCount * 4 + 1 + arrayOffset];
 
           if (reversed != layoutReversed) {
             jetty = -jetty;
           }
 
           y += jetty;
-          var x = jettys[parallelEdgeCount * 4 + arrayOffset];
+          let x = jettys[parallelEdgeCount * 4 + arrayOffset];
 
-          var modelSource = graph.model.getTerminal(realEdge, true);
+          let modelSource = graph.model.getTerminal(realEdge, true);
 
           if (this.layout.isPort(modelSource) && graph.model.getParent(modelSource) == realSource) {
-            var state = graph.view.getState(modelSource);
+            let state = graph.view.getState(modelSource);
 
             if (state != null) {
               x = state.x;
@@ -1348,10 +1348,10 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
         // Declare variables to define loop through edge points and
         // change direction if edge is reversed
 
-        var loopStart = cell.x.length - 1;
-        var loopLimit = -1;
-        var loopDelta = -1;
-        var currentRank = cell.maxRank - 1;
+        let loopStart = cell.x.length - 1;
+        let loopLimit = -1;
+        let loopDelta = -1;
+        let currentRank = cell.maxRank - 1;
 
         if (reversed) {
           loopStart = 0;
@@ -1361,17 +1361,17 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
         }
         // Reversed edges need the points inserted in
         // reverse order
-        for (var j = loopStart; (cell.maxRank != cell.minRank) && j != loopLimit; j += loopDelta) {
+        for (let j = loopStart; (cell.maxRank != cell.minRank) && j != loopLimit; j += loopDelta) {
           // The horizontal position in a vertical layout
-          var positionX = cell.x[j] + offsetX;
+          let positionX = cell.x[j] + offsetX;
 
           // Work out the vertical positions in a vertical layout
           // in the edge buffer channels above and below this rank
-          var topChannelY = (this.rankTopY[currentRank] + this.rankBottomY[currentRank + 1]) / 2.0;
-          var bottomChannelY = (this.rankTopY[currentRank - 1] + this.rankBottomY[currentRank]) / 2.0;
+          let topChannelY = (this.rankTopY[currentRank] + this.rankBottomY[currentRank + 1]) / 2.0;
+          let bottomChannelY = (this.rankTopY[currentRank - 1] + this.rankBottomY[currentRank]) / 2.0;
 
           if (reversed) {
-            var tmp = topChannelY;
+            let tmp = topChannelY;
             topChannelY = bottomChannelY;
             bottomChannelY = tmp;
           }
@@ -1391,23 +1391,23 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
 
         // Second jetty of edge
         if (jettys != null) {
-          var arrayOffset = reversed ? 2 : 0;
-          var rankY = reversed ?
+          let arrayOffset = reversed ? 2 : 0;
+          let rankY = reversed ?
               (layoutReversed ? this.rankTopY[maxRank] : this.rankBottomY[maxRank]) :
               (layoutReversed ? this.rankBottomY[minRank] : this.rankTopY[minRank]);
-          var jetty = jettys[parallelEdgeCount * 4 + 3 - arrayOffset];
+          let jetty = jettys[parallelEdgeCount * 4 + 3 - arrayOffset];
 
           if (reversed != layoutReversed) {
             jetty = -jetty;
           }
-          var y = rankY - jetty;
-          var x = jettys[parallelEdgeCount * 4 + 2 - arrayOffset];
+          let y = rankY - jetty;
+          let x = jettys[parallelEdgeCount * 4 + 2 - arrayOffset];
 
-          var modelTarget = graph.model.getTerminal(realEdge, false);
-          var realTarget = this.layout.getVisibleTerminal(realEdge, false);
+          let modelTarget = graph.model.getTerminal(realEdge, false);
+          let realTarget = this.layout.getVisibleTerminal(realEdge, false);
 
           if (this.layout.isPort(modelTarget) && graph.model.getParent(modelTarget) == realTarget) {
-            var state = graph.view.getState(modelTarget);
+            let state = graph.view.getState(modelTarget);
 
             if (state != null) {
               x = state.x;
@@ -1466,9 +1466,9 @@ class mxCoordinateAssignment extends mxHierarchicalLayoutStage {
    * cell - the vertex to position
    */
   setVertexLocation = (cell) => {
-    var realCell = cell.cell;
-    var positionX = cell.x[0] - cell.width / 2;
-    var positionY = cell.y[0] - cell.height / 2;
+    let realCell = cell.cell;
+    let positionX = cell.x[0] - cell.width / 2;
+    let positionY = cell.y[0] - cell.height / 2;
 
     this.rankTopY[cell.minRank] = Math.min(this.rankTopY[cell.minRank], positionY);
     this.rankBottomY[cell.minRank] = Math.max(this.rankBottomY[cell.minRank],
diff --git a/src/js/layout/hierarchical/stage/mxMedianHybridCrossingReduction.js b/src/js/layout/hierarchical/stage/mxMedianHybridCrossingReduction.js
index ce7f50a27..8ccc0a915 100644
--- a/src/js/layout/hierarchical/stage/mxMedianHybridCrossingReduction.js
+++ b/src/js/layout/hierarchical/stage/mxMedianHybridCrossingReduction.js
@@ -99,34 +99,34 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
    * 1993
    */
   execute = (parent) => {
-    var model = this.layout.getModel();
+    let model = this.layout.getModel();
 
     // Stores initial ordering as being the best one found so far
     this.nestedBestRanks = [];
 
-    for (var i = 0; i < model.ranks.length; i++) {
+    for (let i = 0; i < model.ranks.length; i++) {
       this.nestedBestRanks[i] = model.ranks[i].slice();
     }
 
-    var iterationsWithoutImprovement = 0;
-    var currentBestCrossings = this.calculateCrossings(model);
+    let iterationsWithoutImprovement = 0;
+    let currentBestCrossings = this.calculateCrossings(model);
 
-    for (var i = 0; i < this.maxIterations &&
+    for (let i = 0; i < this.maxIterations &&
     iterationsWithoutImprovement < this.maxNoImprovementIterations; i++) {
       this.weightedMedian(i, model);
       this.transpose(i, model);
-      var candidateCrossings = this.calculateCrossings(model);
+      let candidateCrossings = this.calculateCrossings(model);
 
       if (candidateCrossings < currentBestCrossings) {
         currentBestCrossings = candidateCrossings;
         iterationsWithoutImprovement = 0;
 
         // Store the current rankings as the best ones
-        for (var j = 0; j < this.nestedBestRanks.length; j++) {
-          var rank = model.ranks[j];
+        for (let j = 0; j < this.nestedBestRanks.length; j++) {
+          let rank = model.ranks[j];
 
-          for (var k = 0; k < rank.length; k++) {
-            var cell = rank[k];
+          for (let k = 0; k < rank.length; k++) {
+            let cell = rank[k];
             this.nestedBestRanks[j][cell.getGeneralPurposeVariable(j)] = cell;
           }
         }
@@ -136,11 +136,11 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
         iterationsWithoutImprovement++;
 
         // Restore the best values to the cells
-        for (var j = 0; j < this.nestedBestRanks.length; j++) {
-          var rank = model.ranks[j];
+        for (let j = 0; j < this.nestedBestRanks.length; j++) {
+          let rank = model.ranks[j];
 
-          for (var k = 0; k < rank.length; k++) {
-            var cell = rank[k];
+          for (let k = 0; k < rank.length; k++) {
+            let cell = rank[k];
             cell.setGeneralPurposeVariable(j, k);
           }
         }
@@ -153,16 +153,16 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
     }
 
     // Store the best rankings but in the model
-    var ranks = [];
-    var rankList = [];
+    let ranks = [];
+    let rankList = [];
 
-    for (var i = 0; i < model.maxRank + 1; i++) {
+    for (let i = 0; i < model.maxRank + 1; i++) {
       rankList[i] = [];
       ranks[i] = rankList[i];
     }
 
-    for (var i = 0; i < this.nestedBestRanks.length; i++) {
-      for (var j = 0; j < this.nestedBestRanks[i].length; j++) {
+    for (let i = 0; i < this.nestedBestRanks.length; i++) {
+      for (let j = 0; j < this.nestedBestRanks[i].length; j++) {
         rankList[i].push(this.nestedBestRanks[i][j]);
       }
     }
@@ -182,10 +182,10 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
    * model - the internal model describing the hierarchy
    */
   calculateCrossings = (model) => {
-    var numRanks = model.ranks.length;
-    var totalCrossings = 0;
+    let numRanks = model.ranks.length;
+    let totalCrossings = 0;
 
-    for (var i = 1; i < numRanks; i++) {
+    for (let i = 1; i < numRanks; i++) {
       totalCrossings += this.calculateRankCrossing(i, model);
     }
 
@@ -205,22 +205,22 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
    * model - the internal model describing the hierarchy
    */
   calculateRankCrossing = (i, model) => {
-    var totalCrossings = 0;
-    var rank = model.ranks[i];
-    var previousRank = model.ranks[i - 1];
+    let totalCrossings = 0;
+    let rank = model.ranks[i];
+    let previousRank = model.ranks[i - 1];
 
-    var tmpIndices = [];
+    let tmpIndices = [];
 
     // Iterate over the top rank and fill in the connection information
-    for (var j = 0; j < rank.length; j++) {
-      var node = rank[j];
-      var rankPosition = node.getGeneralPurposeVariable(i);
-      var connectedCells = node.getPreviousLayerConnectedCells(i);
-      var nodeIndices = [];
+    for (let j = 0; j < rank.length; j++) {
+      let node = rank[j];
+      let rankPosition = node.getGeneralPurposeVariable(i);
+      let connectedCells = node.getPreviousLayerConnectedCells(i);
+      let nodeIndices = [];
 
-      for (var k = 0; k < connectedCells.length; k++) {
-        var connectedNode = connectedCells[k];
-        var otherCellRankPosition = connectedNode.getGeneralPurposeVariable(i - 1);
+      for (let k = 0; k < connectedCells.length; k++) {
+        let connectedNode = connectedCells[k];
+        let otherCellRankPosition = connectedNode.getGeneralPurposeVariable(i - 1);
         nodeIndices.push(otherCellRankPosition);
       }
 
@@ -230,30 +230,30 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
       tmpIndices[rankPosition] = nodeIndices;
     }
 
-    var indices = [];
+    let indices = [];
 
-    for (var j = 0; j < tmpIndices.length; j++) {
+    for (let j = 0; j < tmpIndices.length; j++) {
       indices = indices.concat(tmpIndices[j]);
     }
 
-    var firstIndex = 1;
+    let firstIndex = 1;
 
     while (firstIndex < previousRank.length) {
       firstIndex <<= 1;
     }
 
-    var treeSize = 2 * firstIndex - 1;
+    let treeSize = 2 * firstIndex - 1;
     firstIndex -= 1;
 
-    var tree = [];
+    let tree = [];
 
-    for (var j = 0; j < treeSize; ++j) {
+    for (let j = 0; j < treeSize; ++j) {
       tree[j] = 0;
     }
 
-    for (var j = 0; j < indices.length; j++) {
-      var index = indices[j];
-      var treeIndex = index + firstIndex;
+    for (let j = 0; j < indices.length; j++) {
+      let index = indices[j];
+      let treeIndex = index + firstIndex;
       ++tree[treeIndex];
 
       while (treeIndex > 0) {
@@ -281,25 +281,25 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
    * model - the internal model describing the hierarchy
    */
   transpose = (mainLoopIteration, model) => {
-    var improved = true;
+    let improved = true;
 
     // Track the number of iterations in case of looping
-    var count = 0;
-    var maxCount = 10;
+    let count = 0;
+    let maxCount = 10;
     while (improved && count++ < maxCount) {
       // On certain iterations allow allow swapping of cell pairs with
       // equal edge crossings switched or not switched. This help to
       // nudge a stuck layout into a lower crossing total.
-      var nudge = mainLoopIteration % 2 == 1 && count % 2 == 1;
+      let nudge = mainLoopIteration % 2 == 1 && count % 2 == 1;
       improved = false;
 
-      for (var i = 0; i < model.ranks.length; i++) {
-        var rank = model.ranks[i];
-        var orderedCells = [];
+      for (let i = 0; i < model.ranks.length; i++) {
+        let rank = model.ranks[i];
+        let orderedCells = [];
 
-        for (var j = 0; j < rank.length; j++) {
-          var cell = rank[j];
-          var tempRank = cell.getGeneralPurposeVariable(i);
+        for (let j = 0; j < rank.length; j++) {
+          let cell = rank[j];
+          let tempRank = cell.getGeneralPurposeVariable(i);
 
           // FIXME: Workaround to avoid negative tempRanks
           if (tempRank < 0) {
@@ -308,20 +308,20 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
           orderedCells[tempRank] = cell;
         }
 
-        var leftCellAboveConnections = null;
-        var leftCellBelowConnections = null;
-        var rightCellAboveConnections = null;
-        var rightCellBelowConnections = null;
+        let leftCellAboveConnections = null;
+        let leftCellBelowConnections = null;
+        let rightCellAboveConnections = null;
+        let rightCellBelowConnections = null;
 
-        var leftAbovePositions = null;
-        var leftBelowPositions = null;
-        var rightAbovePositions = null;
-        var rightBelowPositions = null;
+        let leftAbovePositions = null;
+        let leftBelowPositions = null;
+        let rightAbovePositions = null;
+        let rightBelowPositions = null;
 
-        var leftCell = null;
-        var rightCell = null;
+        let leftCell = null;
+        let rightCell = null;
 
-        for (var j = 0; j < (rank.length - 1); j++) {
+        for (let j = 0; j < (rank.length - 1); j++) {
           // For each intra-rank adjacent pair of cells
           // see if swapping them around would reduce the
           // number of edges crossing they cause in total
@@ -337,11 +337,11 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
             leftAbovePositions = [];
             leftBelowPositions = [];
 
-            for (var k = 0; k < leftCellAboveConnections.length; k++) {
+            for (let k = 0; k < leftCellAboveConnections.length; k++) {
               leftAbovePositions[k] = leftCellAboveConnections[k].getGeneralPurposeVariable(i + 1);
             }
 
-            for (var k = 0; k < leftCellBelowConnections.length; k++) {
+            for (let k = 0; k < leftCellBelowConnections.length; k++) {
               leftBelowPositions[k] = leftCellBelowConnections[k].getGeneralPurposeVariable(i - 1);
             }
           } else {
@@ -361,19 +361,19 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
           rightAbovePositions = [];
           rightBelowPositions = [];
 
-          for (var k = 0; k < rightCellAboveConnections.length; k++) {
+          for (let k = 0; k < rightCellAboveConnections.length; k++) {
             rightAbovePositions[k] = rightCellAboveConnections[k].getGeneralPurposeVariable(i + 1);
           }
 
-          for (var k = 0; k < rightCellBelowConnections.length; k++) {
+          for (let k = 0; k < rightCellBelowConnections.length; k++) {
             rightBelowPositions[k] = rightCellBelowConnections[k].getGeneralPurposeVariable(i - 1);
           }
 
-          var totalCurrentCrossings = 0;
-          var totalSwitchedCrossings = 0;
+          let totalCurrentCrossings = 0;
+          let totalSwitchedCrossings = 0;
 
-          for (var k = 0; k < leftAbovePositions.length; k++) {
-            for (var ik = 0; ik < rightAbovePositions.length; ik++) {
+          for (let k = 0; k < leftAbovePositions.length; k++) {
+            for (let ik = 0; ik < rightAbovePositions.length; ik++) {
               if (leftAbovePositions[k] > rightAbovePositions[ik]) {
                 totalCurrentCrossings++;
               }
@@ -384,8 +384,8 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
             }
           }
 
-          for (var k = 0; k < leftBelowPositions.length; k++) {
-            for (var ik = 0; ik < rightBelowPositions.length; ik++) {
+          for (let k = 0; k < leftBelowPositions.length; k++) {
+            for (let ik = 0; ik < rightBelowPositions.length; ik++) {
               if (leftBelowPositions[k] > rightBelowPositions[ik]) {
                 totalCurrentCrossings++;
               }
@@ -399,7 +399,7 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
           if ((totalSwitchedCrossings < totalCurrentCrossings) ||
               (totalSwitchedCrossings == totalCurrentCrossings &&
                   nudge)) {
-            var temp = leftCell.getGeneralPurposeVariable(i);
+            let temp = leftCell.getGeneralPurposeVariable(i);
             leftCell.setGeneralPurposeVariable(i, rightCell
                 .getGeneralPurposeVariable(i));
             rightCell.setGeneralPurposeVariable(i, temp);
@@ -439,13 +439,13 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
    */
   weightedMedian = (iteration, model) => {
     // Reverse sweep direction each time through this method
-    var downwardSweep = (iteration % 2 == 0);
+    let downwardSweep = (iteration % 2 == 0);
     if (downwardSweep) {
-      for (var j = model.maxRank - 1; j >= 0; j--) {
+      for (let j = model.maxRank - 1; j >= 0; j--) {
         this.medianRank(j, downwardSweep);
       }
     } else {
-      for (var j = 1; j < model.maxRank; j++) {
+      for (let j = 1; j < model.maxRank; j++) {
         this.medianRank(j, downwardSweep);
       }
     }
@@ -463,13 +463,13 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
    * downwardSweep - whether or not this is a downward sweep through the graph
    */
   medianRank = (rankValue, downwardSweep) => {
-    var numCellsForRank = this.nestedBestRanks[rankValue].length;
-    var medianValues = [];
-    var reservedPositions = [];
+    let numCellsForRank = this.nestedBestRanks[rankValue].length;
+    let medianValues = [];
+    let reservedPositions = [];
 
-    for (var i = 0; i < numCellsForRank; i++) {
-      var cell = this.nestedBestRanks[rankValue][i];
-      var sorterEntry = new MedianCellSorter();
+    for (let i = 0; i < numCellsForRank; i++) {
+      let cell = this.nestedBestRanks[rankValue][i];
+      let sorterEntry = new MedianCellSorter();
       sorterEntry.cell = cell;
 
       // Flip whether or not equal medians are flipped on up and down
@@ -510,9 +510,9 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
 
     // Set the new position of each node within the rank using
     // its temp variable
-    for (var i = 0; i < numCellsForRank; i++) {
+    for (let i = 0; i < numCellsForRank; i++) {
       if (reservedPositions[i] == null) {
-        var cell = medianValues.shift().cell;
+        let cell = medianValues.shift().cell;
         cell.setGeneralPurposeVariable(rankValue, i);
       }
     }
@@ -532,11 +532,11 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
    * rankValue - the rank that the connected cell lie upon
    */
   medianValue = (connectedCells, rankValue) => {
-    var medianValues = [];
-    var arrayCount = 0;
+    let medianValues = [];
+    let arrayCount = 0;
 
-    for (var i = 0; i < connectedCells.length; i++) {
-      var cell = connectedCells[i];
+    for (let i = 0; i < connectedCells.length; i++) {
+      let cell = connectedCells[i];
       medianValues[arrayCount++] = cell.getGeneralPurposeVariable(rankValue);
     }
 
@@ -552,9 +552,9 @@ class mxMedianHybridCrossingReduction extends mxHierarchicalLayoutStage {
     } else if (arrayCount == 2) {
       return ((medianValues[0] + medianValues[1]) / 2.0);
     } else {
-      var medianPoint = arrayCount / 2;
-      var leftMedian = medianValues[medianPoint - 1] - medianValues[0];
-      var rightMedian = medianValues[arrayCount - 1]
+      let medianPoint = arrayCount / 2;
+      let leftMedian = medianValues[medianPoint - 1] - medianValues[0];
+      let rightMedian = medianValues[arrayCount - 1]
           - medianValues[medianPoint];
 
       return (medianValues[medianPoint - 1] * rightMedian + medianValues[medianPoint]
diff --git a/src/js/layout/hierarchical/stage/mxMinimumCycleRemover.js b/src/js/layout/hierarchical/stage/mxMinimumCycleRemover.js
index caae8ffc7..ab2c7e36b 100644
--- a/src/js/layout/hierarchical/stage/mxMinimumCycleRemover.js
+++ b/src/js/layout/hierarchical/stage/mxMinimumCycleRemover.js
@@ -37,24 +37,24 @@ class mxMinimumCycleRemover extends mxHierarchicalLayoutStage {
    * use.
    */
   execute = (parent) => {
-    var model = this.layout.getModel();
-    var seenNodes = {};
-    var unseenNodesArray = model.vertexMapper.getValues();
-    var unseenNodes = {};
+    let model = this.layout.getModel();
+    let seenNodes = {};
+    let unseenNodesArray = model.vertexMapper.getValues();
+    let unseenNodes = {};
 
-    for (var i = 0; i < unseenNodesArray.length; i++) {
+    for (let i = 0; i < unseenNodesArray.length; i++) {
       unseenNodes[unseenNodesArray[i].id] = unseenNodesArray[i];
     }
 
     // Perform a dfs through the internal model. If a cycle is found,
     // reverse it.
-    var rootsArray = null;
+    let rootsArray = null;
 
     if (model.roots != null) {
-      var modelRoots = model.roots;
+      let modelRoots = model.roots;
       rootsArray = [];
 
-      for (var i = 0; i < modelRoots.length; i++) {
+      for (let i = 0; i < modelRoots.length; i++) {
         rootsArray[i] = model.vertexMapper.get(modelRoots[i]);
       }
     }
@@ -78,7 +78,7 @@ class mxMinimumCycleRemover extends mxHierarchicalLayoutStage {
     // If there are any nodes that should be nodes that the dfs can miss
     // these need to be processed with the dfs and the roots assigned
     // correctly to form a correct internal model
-    var seenNodesCopy = mxUtils.clone(seenNodes, null, true);
+    let seenNodesCopy = mxUtils.clone(seenNodes, null, true);
 
     // Pick a random cell and dfs from it
     model.visit((parent, node, connectingEdge, layer, seen) => {
diff --git a/src/js/layout/hierarchical/stage/mxSwimlaneOrdering.js b/src/js/layout/hierarchical/stage/mxSwimlaneOrdering.js
index ffc3be240..1d2f6f73d 100644
--- a/src/js/layout/hierarchical/stage/mxSwimlaneOrdering.js
+++ b/src/js/layout/hierarchical/stage/mxSwimlaneOrdering.js
@@ -37,19 +37,19 @@ class mxSwimlaneOrdering extends mxHierarchicalLayoutStage {
    * use.
    */
   execute = (parent) => {
-    var model = this.layout.getModel();
-    var seenNodes = {};
-    var unseenNodes = mxUtils.clone(model.vertexMapper, null, true);
+    let model = this.layout.getModel();
+    let seenNodes = {};
+    let unseenNodes = mxUtils.clone(model.vertexMapper, null, true);
 
     // Perform a dfs through the internal model. If a cycle is found,
     // reverse it.
-    var rootsArray = null;
+    let rootsArray = null;
 
     if (model.roots != null) {
-      var modelRoots = model.roots;
+      let modelRoots = model.roots;
       rootsArray = [];
 
-      for (var i = 0; i < modelRoots.length; i++) {
+      for (let i = 0; i < modelRoots.length; i++) {
         rootsArray[i] = model.vertexMapper.get(modelRoots[i]);
       }
     }
@@ -59,11 +59,11 @@ class mxSwimlaneOrdering extends mxHierarchicalLayoutStage {
       // invert the connecting edge and reverse the target/source
       // relationship to that edge in the parent and the cell
       // Ancestor hashes only line up within a swimlane
-      var isAncestor = parent != null && parent.swimlaneIndex == node.swimlaneIndex && node.isAncestor(parent);
+      let isAncestor = parent != null && parent.swimlaneIndex == node.swimlaneIndex && node.isAncestor(parent);
 
       // If the source->target swimlane indices go from higher to
       // lower, the edge is reverse
-      var reversedOverSwimlane = parent != null && connectingEdge != null &&
+      let reversedOverSwimlane = parent != null && connectingEdge != null &&
           parent.swimlaneIndex < node.swimlaneIndex && connectingEdge.source == node;
 
       if (isAncestor) {
@@ -80,7 +80,7 @@ class mxSwimlaneOrdering extends mxHierarchicalLayoutStage {
         mxUtils.remove(connectingEdge, node.connectsAsSource);
       }
 
-      var cellId = mxCellPath.create(node.cell);
+      let cellId = mxCellPath.create(node.cell);
       seenNodes[cellId] = node;
       delete unseenNodes[cellId];
     }, rootsArray, true, null);
diff --git a/src/js/layout/mxCompactTreeLayout.js b/src/js/layout/mxCompactTreeLayout.js
index 58d317e42..0b375b927 100644
--- a/src/js/layout/mxCompactTreeLayout.js
+++ b/src/js/layout/mxCompactTreeLayout.js
@@ -205,7 +205,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
    * Example:
    *
    * (code)
-   * var layout = new mxCompactTreeLayout(graph);
+   * let layout = new mxCompactTreeLayout(graph);
    * layout.execute(graph.getDefaultParent());
    * (end)
    *
@@ -261,7 +261,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
    */
   execute = (parent, root) => {
     this.parent = parent;
-    var model = this.graph.getModel();
+    let model = this.graph.getModel();
 
     if (root == null) {
       // Takes the parent as the root if it has outgoing edges
@@ -273,10 +273,10 @@ class mxCompactTreeLayout extends mxGraphLayout {
           // Tries to find a suitable root in the parent's
       // children
       else {
-        var roots = this.graph.findTreeRoots(parent, true, this.invert);
+        let roots = this.graph.findTreeRoots(parent, true, this.invert);
 
         if (roots.length > 0) {
-          for (var i = 0; i < roots.length; i++) {
+          for (let i = 0; i < roots.length; i++) {
             if (!this.isVertexIgnored(roots[i]) &&
                 this.graph.getEdges(roots[i], null,
                     this.invert, !this.invert, false).length > 0) {
@@ -302,7 +302,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
       this.parentY = null;
 
       if (parent != this.root && model.isVertex(parent) != null && this.maintainParentLocation) {
-        var geo = this.graph.getCellGeometry(parent);
+        let geo = this.graph.getCellGeometry(parent);
 
         if (geo != null) {
           this.parentX = geo.x;
@@ -328,7 +328,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
           var y0 = x0;
 
           if (!this.moveTree) {
-            var g = this.getVertexBounds(this.root);
+            let g = this.getVertexBounds(this.root);
 
             if (g != null) {
               x0 = g.x;
@@ -336,7 +336,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
             }
           }
 
-          var bounds = null;
+          let bounds = null;
 
           if (this.isHorizontal()) {
             bounds = this.horizontalLayout(this.node, x0, y0);
@@ -345,8 +345,8 @@ class mxCompactTreeLayout extends mxGraphLayout {
           }
 
           if (bounds != null) {
-            var dx = 0;
-            var dy = 0;
+            let dx = 0;
+            let dy = 0;
 
             if (bounds.x < 0) {
               dx = Math.abs(x0 - bounds.x);
@@ -372,7 +372,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
 
           // Maintaining parent location
           if (this.parentX != null && this.parentY != null) {
-            var geo = this.graph.getCellGeometry(parent);
+            let geo = this.graph.getCellGeometry(parent);
 
             if (geo != null) {
               geo = geo.clone();
@@ -398,7 +398,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
     node.y += dy;
     this.apply(node);
 
-    var child = node.child;
+    let child = node.child;
 
     while (child != null) {
       this.moveNode(child, dx, dy);
@@ -413,7 +413,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
    * Called if <sortEdges> is true to sort the array of outgoing edges in place.
    */
   sortOutgoingEdges = (source, edges) => {
-    var lookup = new mxDictionary();
+    let lookup = new mxDictionary();
 
     edges.sort((e1, e2) => {
       var end1 = e1.getTerminal(e1.getTerminal(false) == source);
@@ -447,7 +447,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
       this.maxRankHeight[rank] = node.height;
     }
 
-    var child = node.child;
+    let child = node.child;
 
     while (child != null) {
       this.findRankHeights(child, rank + 1);
@@ -466,7 +466,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
       node.height = this.maxRankHeight[rank];
     }
 
-    var child = node.child;
+    let child = node.child;
 
     while (child != null) {
       this.setCellHeights(child, rank + 1);
@@ -482,24 +482,24 @@ class mxCompactTreeLayout extends mxGraphLayout {
    * algorithm.
    */
   dfs = (cell, parent) => {
-    var id = mxCellPath.create(cell);
-    var node = null;
+    let id = mxCellPath.create(cell);
+    let node = null;
 
     if (cell != null && this.visited[id] == null && !this.isVertexIgnored(cell)) {
       this.visited[id] = cell;
       node = this.createNode(cell);
 
-      var model = this.graph.getModel();
-      var prev = null;
-      var out = this.graph.getEdges(cell, parent, this.invert, !this.invert, false, true);
-      var view = this.graph.getView();
+      let model = this.graph.getModel();
+      let prev = null;
+      let out = this.graph.getEdges(cell, parent, this.invert, !this.invert, false, true);
+      let view = this.graph.getView();
 
       if (this.sortEdges) {
         this.sortOutgoingEdges(cell, out);
       }
 
-      for (var i = 0; i < out.length; i++) {
-        var edge = out[i];
+      for (let i = 0; i < out.length; i++) {
+        let edge = out[i];
 
         if (!this.isEdgeIgnored(edge)) {
           // Resets the points on the traversed edge
@@ -513,9 +513,9 @@ class mxCompactTreeLayout extends mxGraphLayout {
           }
 
           // Checks if terminal in same swimlane
-          var state = view.getState(edge);
-          var target = (state != null) ? state.getVisibleTerminal(this.invert) : view.getVisibleTerminal(edge, this.invert);
-          var tmp = this.dfs(target, parent);
+          let state = view.getState(edge);
+          let target = (state != null) ? state.getVisibleTerminal(this.invert) : view.getVisibleTerminal(edge, this.invert);
+          let tmp = this.dfs(target, parent);
 
           if (tmp != null && model.getGeometry(target) != null) {
             if (prev == null) {
@@ -541,7 +541,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
    */
   layout = (node) => {
     if (node != null) {
-      var child = node.child;
+      let child = node.child;
 
       while (child != null) {
         this.layout(child);
@@ -563,12 +563,12 @@ class mxCompactTreeLayout extends mxGraphLayout {
     node.x += x0 + node.offsetX;
     node.y += y0 + node.offsetY;
     bounds = this.apply(node, bounds);
-    var child = node.child;
+    let child = node.child;
 
     if (child != null) {
       bounds = this.horizontalLayout(child, node.x, node.y, bounds);
-      var siblingOffset = node.y + child.offsetY;
-      var s = child.next;
+      let siblingOffset = node.y + child.offsetY;
+      let s = child.next;
 
       while (s != null) {
         bounds = this.horizontalLayout(s, node.x + child.offsetX, siblingOffset, bounds);
@@ -587,12 +587,12 @@ class mxCompactTreeLayout extends mxGraphLayout {
     node.x += x0 + node.offsetY;
     node.y += y0 + node.offsetX;
     bounds = this.apply(node, bounds);
-    var child = node.child;
+    let child = node.child;
 
     if (child != null) {
       bounds = this.verticalLayout(child, node, node.x, node.y, bounds);
-      var siblingOffset = node.x + child.offsetY;
-      var s = child.next;
+      let siblingOffset = node.x + child.offsetY;
+      let s = child.next;
 
       while (s != null) {
         bounds = this.verticalLayout(s, node, siblingOffset, node.y + child.offsetX, bounds);
@@ -608,7 +608,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
    * Function: attachParent
    */
   attachParent = (node, height) => {
-    var x = this.nodeDistance + this.levelDistance;
+    let x = this.nodeDistance + this.levelDistance;
     var y2 = (height - node.width) / 2 - this.nodeDistance;
     var y1 = y2 + node.width + 2 * this.nodeDistance - height;
 
@@ -625,7 +625,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
    * Function: layoutLeaf
    */
   layoutLeaf = (node) => {
-    var dist = 2 * this.nodeDistance;
+    let dist = 2 * this.nodeDistance;
 
     node.contour.upperTail = this.createLine(
         node.height + dist, 0);
@@ -640,16 +640,16 @@ class mxCompactTreeLayout extends mxGraphLayout {
    * Function: join
    */
   join = (node) => {
-    var dist = 2 * this.nodeDistance;
+    let dist = 2 * this.nodeDistance;
 
-    var child = node.child;
+    let child = node.child;
     node.contour = child.contour;
-    var h = child.width + dist;
-    var sum = h;
+    let h = child.width + dist;
+    let sum = h;
     child = child.next;
 
     while (child != null) {
-      var d = this.merge(node.contour, child.contour);
+      let d = this.merge(node.contour, child.contour);
       child.offsetY = d + h;
       child.offsetX = 0;
       h = child.width + dist;
@@ -664,15 +664,15 @@ class mxCompactTreeLayout extends mxGraphLayout {
    * Function: merge
    */
   merge = (p1, p2) => {
-    var x = 0;
-    var y = 0;
-    var total = 0;
+    let x = 0;
+    let y = 0;
+    let total = 0;
 
-    var upper = p1.lowerHead;
-    var lower = p2.upperHead;
+    let upper = p1.lowerHead;
+    let lower = p2.upperHead;
 
     while (lower != null && upper != null) {
-      var d = this.offset(x, y, lower.dx, lower.dy,
+      let d = this.offset(x, y, lower.dx, lower.dy,
           upper.dx, upper.dy);
       y += d;
       total += d;
@@ -689,11 +689,11 @@ class mxCompactTreeLayout extends mxGraphLayout {
     }
 
     if (lower != null) {
-      var b = this.bridge(p1.upperTail, 0, 0, lower, x, y);
+      let b = this.bridge(p1.upperTail, 0, 0, lower, x, y);
       p1.upperTail = (b.next != null) ? p2.upperTail : b;
       p1.lowerTail = p2.lowerTail;
     } else {
-      var b = this.bridge(p2.lowerTail, x, y, upper, 0, 0);
+      let b = this.bridge(p2.lowerTail, x, y, upper, 0, 0);
 
       if (b.next == null) {
         p1.lowerTail = b;
@@ -709,29 +709,29 @@ class mxCompactTreeLayout extends mxGraphLayout {
    * Function: offset
    */
   offset = (p1, p2, a1, a2, b1, b2) => {
-    var d = 0;
+    let d = 0;
 
     if (b1 <= p1 || p1 + a1 <= 0) {
       return 0;
     }
 
-    var t = b1 * a2 - a1 * b2;
+    let t = b1 * a2 - a1 * b2;
 
     if (t > 0) {
       if (p1 < 0) {
-        var s = p1 * a2;
+        let s = p1 * a2;
         d = s / a1 - p2;
       } else if (p1 > 0) {
-        var s = p1 * b2;
+        let s = p1 * b2;
         d = s / b1 - p2;
       } else {
         d = -p2;
       }
     } else if (b1 < p1 + a1) {
-      var s = (b1 - p1) * a2;
+      let s = (b1 - p1) * a2;
       d = b2 - (p2 + s / a1);
     } else if (b1 > p1 + a1) {
-      var s = (a1 + p1) * b2;
+      let s = (a1 + p1) * b2;
       d = s / b1 - (p2 + a2);
     } else {
       d = b2 - (p2 + a2);
@@ -748,9 +748,9 @@ class mxCompactTreeLayout extends mxGraphLayout {
    * Function: bridge
    */
   bridge = (line1, x1, y1, line2, x2, y2) => {
-    var dx = x2 + line2.dx - x1;
-    var dy = 0;
-    var s = 0;
+    let dx = x2 + line2.dx - x1;
+    let dy = 0;
+    let s = 0;
 
     if (line2.dx == 0) {
       dy = line2.dy;
@@ -759,7 +759,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
       dy = s / line2.dx;
     }
 
-    var r = this.createLine(dx, dy, line2.next);
+    let r = this.createLine(dx, dy, line2.next);
     line1.next = this.createLine(0, y2 + line2.dy - dy - y1, r);
 
     return r;
@@ -769,14 +769,14 @@ class mxCompactTreeLayout extends mxGraphLayout {
    * Function: createNode
    */
   createNode = (cell) => {
-    var node = {};
+    let node = {};
     node.cell = cell;
     node.x = 0;
     node.y = 0;
     node.width = 0;
     node.height = 0;
 
-    var geo = this.getVertexBounds(cell);
+    let geo = this.getVertexBounds(cell);
 
     if (geo != null) {
       if (this.isHorizontal()) {
@@ -799,17 +799,17 @@ class mxCompactTreeLayout extends mxGraphLayout {
    * Function: apply
    */
   apply = (node, bounds) => {
-    var model = this.graph.getModel();
-    var cell = node.cell;
-    var g = model.getGeometry(cell);
+    let model = this.graph.getModel();
+    let cell = node.cell;
+    let g = model.getGeometry(cell);
 
     if (cell != null && g != null) {
       if (this.isVertexMovable(cell)) {
         g = this.setVertexLocation(cell, node.x, node.y);
 
         if (this.resizeParent) {
-          var parent = model.getParent(cell);
-          var id = mxCellPath.create(parent);
+          let parent = model.getParent(cell);
+          let id = mxCellPath.create(parent);
 
           // Implements set semantic
           if (this.parentsChanged[id] == null) {
@@ -835,7 +835,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
    * Function: createLine
    */
   createLine = (dx, dy, next) => {
-    var line = {};
+    let line = {};
     line.dx = dx;
     line.dy = dy;
     line.next = next;
@@ -851,7 +851,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
    * a padding.
    */
   adjustParents = () => {
-    var tmp = [];
+    let tmp = [];
 
     for (var id in this.parentsChanged) {
       tmp.push(this.parentsChanged[id]);
@@ -868,7 +868,7 @@ class mxCompactTreeLayout extends mxGraphLayout {
    */
   localEdgeProcessing = (node) => {
     this.processNodeOutgoing(node);
-    var child = node.child;
+    let child = node.child;
 
     while (child != null) {
       this.localEdgeProcessing(child);
@@ -882,16 +882,16 @@ class mxCompactTreeLayout extends mxGraphLayout {
    * Separates the x position of edges as they connect to vertices
    */
   processNodeOutgoing = (node) => {
-    var child = node.child;
-    var parentCell = node.cell;
+    let child = node.child;
+    let parentCell = node.cell;
 
-    var childCount = 0;
-    var sortedCells = [];
+    let childCount = 0;
+    let sortedCells = [];
 
     while (child != null) {
       childCount++;
 
-      var sortingCriterion = child.x;
+      let sortingCriterion = child.x;
 
       if (this.horizontal) {
         sortingCriterion = child.y;
@@ -903,41 +903,41 @@ class mxCompactTreeLayout extends mxGraphLayout {
 
     sortedCells.sort(compare);
 
-    var availableWidth = node.width;
+    let availableWidth = node.width;
 
-    var requiredWidth = (childCount + 1) * this.prefHozEdgeSep;
+    let requiredWidth = (childCount + 1) * this.prefHozEdgeSep;
 
     // Add a buffer on the edges of the vertex if the edge count allows
     if (availableWidth > requiredWidth + (2 * this.prefHozEdgeSep)) {
       availableWidth -= 2 * this.prefHozEdgeSep;
     }
 
-    var edgeSpacing = availableWidth / childCount;
+    let edgeSpacing = availableWidth / childCount;
 
-    var currentXOffset = edgeSpacing / 2.0;
+    let currentXOffset = edgeSpacing / 2.0;
 
     if (availableWidth > requiredWidth + (2 * this.prefHozEdgeSep)) {
       currentXOffset += this.prefHozEdgeSep;
     }
 
-    var currentYOffset = this.minEdgeJetty - this.prefVertEdgeOff;
-    var maxYOffset = 0;
+    let currentYOffset = this.minEdgeJetty - this.prefVertEdgeOff;
+    let maxYOffset = 0;
 
-    var parentBounds = this.getVertexBounds(parentCell);
+    let parentBounds = this.getVertexBounds(parentCell);
     child = node.child;
 
-    for (var j = 0; j < sortedCells.length; j++) {
-      var childCell = sortedCells[j].cell.cell;
-      var childBounds = this.getVertexBounds(childCell);
+    for (let j = 0; j < sortedCells.length; j++) {
+      let childCell = sortedCells[j].cell.cell;
+      let childBounds = this.getVertexBounds(childCell);
 
-      var edges = this.graph.getEdgesBetween(parentCell,
+      let edges = this.graph.getEdgesBetween(parentCell,
           childCell, false);
 
-      var newPoints = [];
-      var x = 0;
-      var y = 0;
+      let newPoints = [];
+      let x = 0;
+      let y = 0;
 
-      for (var i = 0; i < edges.length; i++) {
+      for (let i = 0; i < edges.length; i++) {
         if (this.horizontal) {
           // Use opposite co-ords, calculation was done for
           //
diff --git a/src/js/layout/mxCompositeLayout.js b/src/js/layout/mxCompositeLayout.js
index 95bf6ab99..3b9a86751 100644
--- a/src/js/layout/mxCompositeLayout.js
+++ b/src/js/layout/mxCompositeLayout.js
@@ -30,9 +30,9 @@ class mxCompositeLayout extends mxGraphLayout {
    *
    * Example:
    * (code)
-   * var first = new mxFastOrganicLayout(graph);
-   * var second = new mxParallelEdgeLayout(graph);
-   * var layout = new mxCompositeLayout(graph, [first, second], first);
+   * let first = new mxFastOrganicLayout(graph);
+   * let second = new mxParallelEdgeLayout(graph);
+   * let layout = new mxCompositeLayout(graph, [first, second], first);
    * layout.execute(graph.getDefaultParent());
    * (end)
    *
@@ -75,11 +75,11 @@ class mxCompositeLayout extends mxGraphLayout {
    * single transaction.
    */
   execute = (parent) => {
-    var model = this.graph.getModel();
+    let model = this.graph.getModel();
 
     model.beginUpdate();
     try {
-      for (var i = 0; i < this.layouts.length; i++) {
+      for (let i = 0; i < this.layouts.length; i++) {
         this.layouts[i].execute.apply(this.layouts[i], arguments);
       }
     } finally {
diff --git a/src/js/layout/mxEdgeLabelLayout.js b/src/js/layout/mxEdgeLabelLayout.js
index 4d22c0402..bdc657539 100644
--- a/src/js/layout/mxEdgeLabelLayout.js
+++ b/src/js/layout/mxEdgeLabelLayout.js
@@ -18,7 +18,7 @@ class mxEdgeLabelLayout extends mxGraphLayout {
    * Example:
    *
    * (code)
-   * var layout = new mxEdgeLabelLayout(graph);
+   * let layout = new mxEdgeLabelLayout(graph);
    * layout.execute(graph.getDefaultParent());
    * (end)
    *
@@ -40,17 +40,17 @@ class mxEdgeLabelLayout extends mxGraphLayout {
    * Implements <mxGraphLayout.execute>.
    */
   execute = (parent) => {
-    var view = this.graph.view;
-    var model = this.graph.getModel();
+    let view = this.graph.view;
+    let model = this.graph.getModel();
 
     // Gets all vertices and edges inside the parent
-    var edges = [];
-    var vertices = [];
-    var childCount = model.getChildCount(parent);
+    let edges = [];
+    let vertices = [];
+    let childCount = model.getChildCount(parent);
 
-    for (var i = 0; i < childCount; i++) {
-      var cell = model.getChildAt(parent, i);
-      var state = view.getState(cell);
+    for (let i = 0; i < childCount; i++) {
+      let cell = model.getChildAt(parent, i);
+      let state = view.getState(cell);
 
       if (state != null) {
         if (!this.isVertexIgnored(cell)) {
@@ -70,20 +70,20 @@ class mxEdgeLabelLayout extends mxGraphLayout {
    * Places the labels of the given edges.
    */
   placeLabels = (v, e) => {
-    var model = this.graph.getModel();
+    let model = this.graph.getModel();
 
     // Moves the vertices to build a circle. Makes sure the
     // radius is large enough for the vertices to not
     // overlap
     model.beginUpdate();
     try {
-      for (var i = 0; i < e.length; i++) {
-        var edge = e[i];
+      for (let i = 0; i < e.length; i++) {
+        let edge = e[i];
 
         if (edge != null && edge.text != null &&
             edge.text.boundingBox != null) {
-          for (var j = 0; j < v.length; j++) {
-            var vertex = v[j];
+          for (let j = 0; j < v.length; j++) {
+            let vertex = v[j];
 
             if (vertex != null) {
               this.avoid(edge, vertex);
@@ -102,19 +102,19 @@ class mxEdgeLabelLayout extends mxGraphLayout {
    * Places the labels of the given edges.
    */
   avoid = (edge, vertex) => {
-    var model = this.graph.getModel();
-    var labRect = edge.text.boundingBox;
+    let model = this.graph.getModel();
+    let labRect = edge.text.boundingBox;
 
     if (mxUtils.intersects(labRect, vertex)) {
       var dy1 = -labRect.y - labRect.height + vertex.y;
       var dy2 = -labRect.y + vertex.y + vertex.height;
 
-      var dy = (Math.abs(dy1) < Math.abs(dy2)) ? dy1 : dy2;
+      let dy = (Math.abs(dy1) < Math.abs(dy2)) ? dy1 : dy2;
 
       var dx1 = -labRect.x - labRect.width + vertex.x;
       var dx2 = -labRect.x + vertex.x + vertex.width;
 
-      var dx = (Math.abs(dx1) < Math.abs(dx2)) ? dx1 : dx2;
+      let dx = (Math.abs(dx1) < Math.abs(dx2)) ? dx1 : dx2;
 
       if (Math.abs(dx) < Math.abs(dy)) {
         dy = 0;
@@ -122,7 +122,7 @@ class mxEdgeLabelLayout extends mxGraphLayout {
         dx = 0;
       }
 
-      var g = model.getGeometry(edge.cell);
+      let g = model.getGeometry(edge.cell);
 
       if (g != null) {
         g = g.clone();
diff --git a/src/js/layout/mxFastOrganicLayout.js b/src/js/layout/mxFastOrganicLayout.js
index 0c66dc582..631ca1121 100644
--- a/src/js/layout/mxFastOrganicLayout.js
+++ b/src/js/layout/mxFastOrganicLayout.js
@@ -179,7 +179,7 @@ class mxFastOrganicLayout extends mxGraphLayout {
    * Example:
    *
    * (code)
-   * var layout = new mxFastOrganicLayout(graph);
+   * let layout = new mxFastOrganicLayout(graph);
    * layout.execute(graph.getDefaultParent());
    * (end)
    *
@@ -213,20 +213,20 @@ class mxFastOrganicLayout extends mxGraphLayout {
    * given parent where <isVertexIgnored> returns false.
    */
   execute = (parent) => {
-    var model = this.graph.getModel();
+    let model = this.graph.getModel();
     this.vertexArray = [];
-    var cells = this.graph.getChildVertices(parent);
+    let cells = this.graph.getChildVertices(parent);
 
-    for (var i = 0; i < cells.length; i++) {
+    for (let i = 0; i < cells.length; i++) {
       if (!this.isVertexIgnored(cells[i])) {
         this.vertexArray.push(cells[i]);
       }
     }
 
-    var initialBounds = (this.useInputOrigin) ?
+    let initialBounds = (this.useInputOrigin) ?
         this.graph.getBoundingBoxFromGeometry(this.vertexArray) :
         null;
-    var n = this.vertexArray.length;
+    let n = this.vertexArray.length;
 
     this.indices = [];
     this.dispX = [];
@@ -247,23 +247,23 @@ class mxFastOrganicLayout extends mxGraphLayout {
     // arrays called neighbours which holds, for each vertex, a list of
     // ints which represents the neighbours cells to that vertex as
     // the indices into vertexArray
-    for (var i = 0; i < this.vertexArray.length; i++) {
-      var vertex = this.vertexArray[i];
+    for (let i = 0; i < this.vertexArray.length; i++) {
+      let vertex = this.vertexArray[i];
       this.cellLocation[i] = [];
 
       // Set up the mapping from array indices to cells
-      var id = mxObjectIdentity.get(vertex);
+      let id = mxObjectIdentity.get(vertex);
       this.indices[id] = i;
-      var bounds = this.getVertexBounds(vertex);
+      let bounds = this.getVertexBounds(vertex);
 
       // Set the X,Y value of the internal version of the cell to
       // the center point of the vertex for better positioning
-      var width = bounds.width;
-      var height = bounds.height;
+      let width = bounds.width;
+      let height = bounds.height;
 
       // Randomize (0, 0) locations
-      var x = bounds.x;
-      var y = bounds.y;
+      let x = bounds.x;
+      let y = bounds.y;
 
       this.cellLocation[i][0] = x + width / 2.0;
       this.cellLocation[i][1] = y + height / 2.0;
@@ -275,7 +275,7 @@ class mxFastOrganicLayout extends mxGraphLayout {
     // algorithm, resetting the edge points is part of the transaction
     model.beginUpdate();
     try {
-      for (var i = 0; i < n; i++) {
+      for (let i = 0; i < n; i++) {
         this.dispX[i] = 0;
         this.dispY[i] = 0;
         this.isMoveable[i] = this.isVertexMovable(this.vertexArray[i]);
@@ -283,11 +283,11 @@ class mxFastOrganicLayout extends mxGraphLayout {
         // Get lists of neighbours to all vertices, translate the cells
         // obtained in indices into vertexArray and store as an array
         // against the orginial cell index
-        var edges = this.graph.getConnections(this.vertexArray[i], parent);
-        var cells = this.graph.getOpposites(edges, this.vertexArray[i]);
+        let edges = this.graph.getConnections(this.vertexArray[i], parent);
+        let cells = this.graph.getOpposites(edges, this.vertexArray[i]);
         this.neighbours[i] = [];
 
-        for (var j = 0; j < cells.length; j++) {
+        for (let j = 0; j < cells.length; j++) {
           // Resets the points on the traversed edge
           if (this.resetEdges) {
             this.graph.resetEdge(edges[j]);
@@ -298,8 +298,8 @@ class mxFastOrganicLayout extends mxGraphLayout {
           }
 
           // Looks the cell up in the indices dictionary
-          var id = mxObjectIdentity.get(cells[j]);
-          var index = this.indices[id];
+          let id = mxObjectIdentity.get(cells[j]);
+          let index = this.indices[id];
 
           // Check the connected cell in part of the vertex list to be
           // acted on by this layout
@@ -339,21 +339,21 @@ class mxFastOrganicLayout extends mxGraphLayout {
         this.reduceTemperature();
       }
 
-      var minx = null;
-      var miny = null;
+      let minx = null;
+      let miny = null;
 
-      for (var i = 0; i < this.vertexArray.length; i++) {
-        var vertex = this.vertexArray[i];
+      for (let i = 0; i < this.vertexArray.length; i++) {
+        let vertex = this.vertexArray[i];
 
         if (this.isVertexMovable(vertex)) {
-          var bounds = this.getVertexBounds(vertex);
+          let bounds = this.getVertexBounds(vertex);
 
           if (bounds != null) {
             this.cellLocation[i][0] -= bounds.width / 2.0;
             this.cellLocation[i][1] -= bounds.height / 2.0;
 
-            var x = this.graph.snap(Math.round(this.cellLocation[i][0]));
-            var y = this.graph.snap(Math.round(this.cellLocation[i][1]));
+            let x = this.graph.snap(Math.round(this.cellLocation[i][0]));
+            let y = this.graph.snap(Math.round(this.cellLocation[i][1]));
 
             this.setVertexLocation(vertex, x, y);
 
@@ -375,8 +375,8 @@ class mxFastOrganicLayout extends mxGraphLayout {
       // Modifies the cloned geometries in-place. Not needed
       // to clone the geometries again as we're in the same
       // undoable change.
-      var dx = -(minx || 0) + 1;
-      var dy = -(miny || 0) + 1;
+      let dx = -(minx || 0) + 1;
+      let dy = -(miny || 0) + 1;
 
       if (initialBounds != null) {
         dx += initialBounds.x;
@@ -397,11 +397,11 @@ class mxFastOrganicLayout extends mxGraphLayout {
    * temperature.
    */
   calcPositions = () => {
-    for (var index = 0; index < this.vertexArray.length; index++) {
+    for (let index = 0; index < this.vertexArray.length; index++) {
       if (this.isMoveable[index]) {
         // Get the distance of displacement for this node for this
         // iteration
-        var deltaLength = Math.sqrt(this.dispX[index] * this.dispX[index] +
+        let deltaLength = Math.sqrt(this.dispX[index] * this.dispX[index] +
             this.dispY[index] * this.dispY[index]);
 
         if (deltaLength < 0.001) {
@@ -410,10 +410,10 @@ class mxFastOrganicLayout extends mxGraphLayout {
 
         // Scale down by the current temperature if less than the
         // displacement distance
-        var newXDisp = this.dispX[index] / deltaLength
+        let newXDisp = this.dispX[index] / deltaLength
             * Math.min(deltaLength, this.temperature);
 
-        var newYDisp = this.dispY[index] / deltaLength
+        let newYDisp = this.dispY[index] / deltaLength
             * Math.min(deltaLength, this.temperature);
 
         // reset displacements
@@ -436,31 +436,31 @@ class mxFastOrganicLayout extends mxGraphLayout {
   calcAttraction = () => {
     // Check the neighbours of each vertex and calculate the attractive
     // force of the edge connecting them
-    for (var i = 0; i < this.vertexArray.length; i++) {
-      for (var k = 0; k < this.neighbours[i].length; k++) {
+    for (let i = 0; i < this.vertexArray.length; i++) {
+      for (let k = 0; k < this.neighbours[i].length; k++) {
         // Get the index of the othe cell in the vertex array
-        var j = this.neighbours[i][k];
+        let j = this.neighbours[i][k];
 
         // Do not proceed self-loops
         if (i != j &&
             this.isMoveable[i] &&
             this.isMoveable[j]) {
-          var xDelta = this.cellLocation[i][0] - this.cellLocation[j][0];
-          var yDelta = this.cellLocation[i][1] - this.cellLocation[j][1];
+          let xDelta = this.cellLocation[i][0] - this.cellLocation[j][0];
+          let yDelta = this.cellLocation[i][1] - this.cellLocation[j][1];
 
           // The distance between the nodes
-          var deltaLengthSquared = xDelta * xDelta + yDelta
+          let deltaLengthSquared = xDelta * xDelta + yDelta
               * yDelta - this.radiusSquared[i] - this.radiusSquared[j];
 
           if (deltaLengthSquared < this.minDistanceLimitSquared) {
             deltaLengthSquared = this.minDistanceLimitSquared;
           }
 
-          var deltaLength = Math.sqrt(deltaLengthSquared);
-          var force = (deltaLengthSquared) / this.forceConstant;
+          let deltaLength = Math.sqrt(deltaLengthSquared);
+          let force = (deltaLengthSquared) / this.forceConstant;
 
-          var displacementX = (xDelta / deltaLength) * force;
-          var displacementY = (yDelta / deltaLength) * force;
+          let displacementX = (xDelta / deltaLength) * force;
+          let displacementY = (yDelta / deltaLength) * force;
 
           this.dispX[i] -= displacementX;
           this.dispY[i] -= displacementY;
@@ -478,10 +478,10 @@ class mxFastOrganicLayout extends mxGraphLayout {
    * Calculates the repulsive forces between all laid out nodes
    */
   calcRepulsion = () => {
-    var vertexCount = this.vertexArray.length;
+    let vertexCount = this.vertexArray.length;
 
-    for (var i = 0; i < vertexCount; i++) {
-      for (var j = i; j < vertexCount; j++) {
+    for (let i = 0; i < vertexCount; i++) {
+      for (let j = i; j < vertexCount; j++) {
         // Exits if the layout is no longer allowed to run
         if (!this.allowedToRun) {
           return;
@@ -490,8 +490,8 @@ class mxFastOrganicLayout extends mxGraphLayout {
         if (j != i &&
             this.isMoveable[i] &&
             this.isMoveable[j]) {
-          var xDelta = this.cellLocation[i][0] - this.cellLocation[j][0];
-          var yDelta = this.cellLocation[i][1] - this.cellLocation[j][1];
+          let xDelta = this.cellLocation[i][0] - this.cellLocation[j][0];
+          let yDelta = this.cellLocation[i][1] - this.cellLocation[j][1];
 
           if (xDelta == 0) {
             xDelta = 0.01 + Math.random();
@@ -502,9 +502,9 @@ class mxFastOrganicLayout extends mxGraphLayout {
           }
 
           // Distance between nodes
-          var deltaLength = Math.sqrt((xDelta * xDelta)
+          let deltaLength = Math.sqrt((xDelta * xDelta)
               + (yDelta * yDelta));
-          var deltaLengthWithRadius = deltaLength - this.radius[i]
+          let deltaLengthWithRadius = deltaLength - this.radius[i]
               - this.radius[j];
 
           if (deltaLengthWithRadius > this.maxDistanceLimit) {
@@ -516,10 +516,10 @@ class mxFastOrganicLayout extends mxGraphLayout {
             deltaLengthWithRadius = this.minDistanceLimit;
           }
 
-          var force = this.forceConstantSquared / deltaLengthWithRadius;
+          let force = this.forceConstantSquared / deltaLengthWithRadius;
 
-          var displacementX = (xDelta / deltaLength) * force;
-          var displacementY = (yDelta / deltaLength) * force;
+          let displacementX = (xDelta / deltaLength) * force;
+          let displacementY = (yDelta / deltaLength) * force;
 
           this.dispX[i] += displacementX;
           this.dispY[i] += displacementY;
diff --git a/src/js/layout/mxGraphLayout.js b/src/js/layout/mxGraphLayout.js
index 50498f9f0..c3836921d 100644
--- a/src/js/layout/mxGraphLayout.js
+++ b/src/js/layout/mxGraphLayout.js
@@ -145,7 +145,7 @@ class mxGraphLayout {
    *
    * (code)
    * mxLog.show();
-   * var cell = graph.getSelectionCell();
+   * let cell = graph.getSelectionCell();
    * graph.traverse(cell, false, (vertex, edge)=>
    * {
    *   mxLog.debug(graph.getLabel(vertex));
@@ -170,18 +170,18 @@ class mxGraphLayout {
 
       if (!visited.get(vertex)) {
         visited.put(vertex, true);
-        var result = func(vertex, edge);
+        let result = func(vertex, edge);
 
         if (result == null || result) {
-          var edgeCount = this.graph.model.getEdgeCount(vertex);
+          let edgeCount = this.graph.model.getEdgeCount(vertex);
 
           if (edgeCount > 0) {
-            for (var i = 0; i < edgeCount; i++) {
-              var e = this.graph.model.getEdgeAt(vertex, i);
-              var isSource = this.graph.model.getTerminal(e, true) == vertex;
+            for (let i = 0; i < edgeCount; i++) {
+              let e = this.graph.model.getEdgeAt(vertex, i);
+              let isSource = this.graph.model.getTerminal(e, true) == vertex;
 
               if (!directed || isSource) {
-                var next = this.graph.view.getVisibleTerminal(e, !isSource);
+                let next = this.graph.view.getVisibleTerminal(e, !isSource);
                 this.traverse(next, directed, func, e, visited);
               }
             }
@@ -259,7 +259,7 @@ class mxGraphLayout {
    * cell - <mxCell> whose ignored state should be returned.
    */
   isEdgeIgnored = (edge) => {
-    var model = this.graph.getModel();
+    let model = this.graph.getModel();
 
     return !model.isEdge(edge) ||
         !this.graph.isCellVisible(edge) ||
@@ -294,13 +294,13 @@ class mxGraphLayout {
    * of the layout
    */
   getParentOffset = (parent) => {
-    var result = new mxPoint();
+    let result = new mxPoint();
 
     if (parent != null && parent != this.parent) {
-      var model = this.graph.getModel();
+      let model = this.graph.getModel();
 
       if (model.isAncestor(this.parent, parent)) {
-        var parentGeo = model.getGeometry(parent);
+        let parentGeo = model.getGeometry(parent);
 
         while (parent != this.parent) {
           result.x = result.x + parentGeo.x;
@@ -324,8 +324,8 @@ class mxGraphLayout {
    */
   setEdgePoints = (edge, points) => {
     if (edge != null) {
-      var model = this.graph.model;
-      var geometry = model.getGeometry(edge);
+      let model = this.graph.model;
+      let geometry = model.getGeometry(edge);
 
       if (geometry == null) {
         geometry = new mxGeometry();
@@ -335,11 +335,11 @@ class mxGraphLayout {
       }
 
       if (this.parent != null && points != null) {
-        var parent = model.getParent(edge);
+        let parent = model.getParent(edge);
 
-        var parentOffset = this.getParentOffset(parent);
+        let parentOffset = this.getParentOffset(parent);
 
-        for (var i = 0; i < points.length; i++) {
+        for (let i = 0; i < points.length; i++) {
           points[i].x = points[i].x - parentOffset.x;
           points[i].y = points[i].y - parentOffset.y;
         }
@@ -366,9 +366,9 @@ class mxGraphLayout {
    * y - Integer that defines the y-coordinate of the new location.
    */
   setVertexLocation = (cell, x, y) => {
-    var model = this.graph.getModel();
-    var geometry = model.getGeometry(cell);
-    var result = null;
+    let model = this.graph.getModel();
+    let geometry = model.getGeometry(cell);
+    let result = null;
 
     if (geometry != null) {
       result = new mxRectangle(x, y, geometry.width, geometry.height);
@@ -376,11 +376,11 @@ class mxGraphLayout {
       // Checks for oversize labels and shifts the result
       // TODO: Use mxUtils.getStringSize for label bounds
       if (this.useBoundingBox) {
-        var state = this.graph.getView().getState(cell);
+        let state = this.graph.getView().getState(cell);
 
         if (state != null && state.text != null && state.text.boundingBox != null) {
-          var scale = this.graph.getView().scale;
-          var box = state.text.boundingBox;
+          let scale = this.graph.getView().scale;
+          let box = state.text.boundingBox;
 
           if (state.text.boundingBox.x < state.x) {
             x += (state.x - box.x) / scale;
@@ -395,10 +395,10 @@ class mxGraphLayout {
       }
 
       if (this.parent != null) {
-        var parent = model.getParent(cell);
+        let parent = model.getParent(cell);
 
         if (parent != null && parent != this.parent) {
-          var parentOffset = this.getParentOffset(parent);
+          let parentOffset = this.getParentOffset(parent);
 
           x = x - parentOffset.x;
           y = y - parentOffset.y;
@@ -424,17 +424,17 @@ class mxGraphLayout {
    * the bounding box if <useBoundingBox> is true.
    */
   getVertexBounds = (cell) => {
-    var geo = this.graph.getModel().getGeometry(cell);
+    let geo = this.graph.getModel().getGeometry(cell);
 
     // Checks for oversize label bounding box and corrects
     // the return value accordingly
     // TODO: Use mxUtils.getStringSize for label bounds
     if (this.useBoundingBox) {
-      var state = this.graph.getView().getState(cell);
+      let state = this.graph.getView().getState(cell);
 
       if (state != null && state.text != null && state.text.boundingBox != null) {
-        var scale = this.graph.getView().scale;
-        var tmp = state.text.boundingBox;
+        let scale = this.graph.getView().scale;
+        let tmp = state.text.boundingBox;
 
         var dx0 = Math.max(state.x - tmp.x, 0) / scale;
         var dy0 = Math.max(state.y - tmp.y, 0) / scale;
@@ -446,11 +446,11 @@ class mxGraphLayout {
     }
 
     if (this.parent != null) {
-      var parent = this.graph.getModel().getParent(cell);
+      let parent = this.graph.getModel().getParent(cell);
       geo = geo.clone();
 
       if (parent != null && parent != this.parent) {
-        var parentOffset = this.getParentOffset(parent);
+        let parentOffset = this.getParentOffset(parent);
         geo.x = geo.x + parentOffset.x;
         geo.y = geo.y + parentOffset.y;
       }
diff --git a/src/js/layout/mxParallelEdgeLayout.js b/src/js/layout/mxParallelEdgeLayout.js
index 6aeb941b4..159a9c35e 100644
--- a/src/js/layout/mxParallelEdgeLayout.js
+++ b/src/js/layout/mxParallelEdgeLayout.js
@@ -32,7 +32,7 @@ class mxParallelEdgeLayout extends mxGraphLayout {
    * Example:
    *
    * (code)
-   * var layout = new mxParallelEdgeLayout(graph);
+   * let layout = new mxParallelEdgeLayout(graph);
    * layout.execute(graph.getDefaultParent());
    * (end)
    *
@@ -40,14 +40,14 @@ class mxParallelEdgeLayout extends mxGraphLayout {
    * following code can be used.
    *
    * (code)
-   * var layout = new mxParallelEdgeLayout(graph);
+   * let layout = new mxParallelEdgeLayout(graph);
    *
    * graph.addListener(mxEvent.CELL_CONNECTED, (sender, evt)=>
    * {
-   *   var model = graph.getModel();
-   *   var edge = evt.getProperty('edge');
-   *   var src = model.getTerminal(edge, true);
-   *   var trg = model.getTerminal(edge, false);
+   *   let model = graph.getModel();
+   *   let edge = evt.getProperty('edge');
+   *   let src = model.getTerminal(edge, true);
+   *   let trg = model.getTerminal(edge, false);
    *
    *   layout.isEdgeIgnored = (edge2)=>
    *   {
@@ -75,12 +75,12 @@ class mxParallelEdgeLayout extends mxGraphLayout {
    * Implements <mxGraphLayout.execute>.
    */
   execute = (parent, cells) => {
-    var lookup = this.findParallels(parent, cells);
+    let lookup = this.findParallels(parent, cells);
 
     this.graph.model.beginUpdate();
     try {
       for (var i in lookup) {
-        var parallels = lookup[i];
+        let parallels = lookup[i];
 
         if (parallels.length > 1) {
           this.layout(parallels);
@@ -97,11 +97,11 @@ class mxParallelEdgeLayout extends mxGraphLayout {
    * Finds the parallel edges in the given parent.
    */
   findParallels = (parent, cells) => {
-    var lookup = [];
+    let lookup = [];
 
-    var addCell = (cell) => {
+    let addCell = (cell) => {
       if (!this.isEdgeIgnored(cell)) {
-        var id = this.getEdgeId(cell);
+        let id = this.getEdgeId(cell);
 
         if (id != null) {
           if (lookup[id] == null) {
@@ -114,14 +114,14 @@ class mxParallelEdgeLayout extends mxGraphLayout {
     };
 
     if (cells != null) {
-      for (var i = 0; i < cells.length; i++) {
+      for (let i = 0; i < cells.length; i++) {
         addCell(cells[i]);
       }
     } else {
-      var model = this.graph.getModel();
-      var childCount = model.getChildCount(parent);
+      let model = this.graph.getModel();
+      let childCount = model.getChildCount(parent);
 
-      for (var i = 0; i < childCount; i++) {
+      for (let i = 0; i < childCount; i++) {
         addCell(model.getChildAt(parent, i));
       }
     }
@@ -137,25 +137,25 @@ class mxParallelEdgeLayout extends mxGraphLayout {
    * edge.
    */
   getEdgeId = (edge) => {
-    var view = this.graph.getView();
+    let view = this.graph.getView();
 
     // Cannot used cached visible terminal because this could be triggered in BEFORE_UNDO
-    var src = view.getVisibleTerminal(edge, true);
-    var trg = view.getVisibleTerminal(edge, false);
-    var pts = '';
+    let src = view.getVisibleTerminal(edge, true);
+    let trg = view.getVisibleTerminal(edge, false);
+    let pts = '';
 
     if (src != null && trg != null) {
       src = mxObjectIdentity.get(src);
       trg = mxObjectIdentity.get(trg);
 
       if (this.checkOverlap) {
-        var state = this.graph.view.getState(edge);
+        let state = this.graph.view.getState(edge);
 
         if (state != null && state.absolutePoints != null) {
-          var tmp = [];
+          let tmp = [];
 
-          for (var i = 0; i < state.absolutePoints.length; i++) {
-            var pt = state.absolutePoints[i];
+          for (let i = 0; i < state.absolutePoints.length; i++) {
+            let pt = state.absolutePoints[i];
 
             if (pt != null) {
               tmp.push(pt.x, pt.y);
@@ -179,45 +179,45 @@ class mxParallelEdgeLayout extends mxGraphLayout {
    * Lays out the parallel edges in the given array.
    */
   layout = (parallels) => {
-    var edge = parallels[0];
-    var view = this.graph.getView();
-    var model = this.graph.getModel();
-    var src = model.getGeometry(view.getVisibleTerminal(edge, true));
-    var trg = model.getGeometry(view.getVisibleTerminal(edge, false));
+    let edge = parallels[0];
+    let view = this.graph.getView();
+    let model = this.graph.getModel();
+    let src = model.getGeometry(view.getVisibleTerminal(edge, true));
+    let trg = model.getGeometry(view.getVisibleTerminal(edge, false));
 
     // Routes multiple loops
     if (src == trg) {
       var x0 = src.x + src.width + this.spacing;
       var y0 = src.y + src.height / 2;
 
-      for (var i = 0; i < parallels.length; i++) {
+      for (let i = 0; i < parallels.length; i++) {
         this.route(parallels[i], x0, y0);
         x0 += this.spacing;
       }
     } else if (src != null && trg != null) {
       // Routes parallel edges
-      var scx = src.x + src.width / 2;
-      var scy = src.y + src.height / 2;
+      let scx = src.x + src.width / 2;
+      let scy = src.y + src.height / 2;
 
-      var tcx = trg.x + trg.width / 2;
-      var tcy = trg.y + trg.height / 2;
+      let tcx = trg.x + trg.width / 2;
+      let tcy = trg.y + trg.height / 2;
 
-      var dx = tcx - scx;
-      var dy = tcy - scy;
+      let dx = tcx - scx;
+      let dy = tcy - scy;
 
-      var len = Math.sqrt(dx * dx + dy * dy);
+      let len = Math.sqrt(dx * dx + dy * dy);
 
       if (len > 0) {
         var x0 = scx + dx / 2;
         var y0 = scy + dy / 2;
 
-        var nx = dy * this.spacing / len;
-        var ny = dx * this.spacing / len;
+        let nx = dy * this.spacing / len;
+        let ny = dx * this.spacing / len;
 
         x0 += nx * (parallels.length - 1) / 2;
         y0 -= ny * (parallels.length - 1) / 2;
 
-        for (var i = 0; i < parallels.length; i++) {
+        for (let i = 0; i < parallels.length; i++) {
           this.route(parallels[i], x0, y0);
           x0 -= nx;
           y0 += ny;
diff --git a/src/js/layout/mxPartitionLayout.js b/src/js/layout/mxPartitionLayout.js
index a66aba161..b635a3cd1 100644
--- a/src/js/layout/mxPartitionLayout.js
+++ b/src/js/layout/mxPartitionLayout.js
@@ -51,7 +51,7 @@ class mxPartitionLayout extends mxGraphLayout {
    * Example:
    *
    * (code)
-   * var layout = new mxPartitionLayout(graph, true, 10, 20);
+   * let layout = new mxPartitionLayout(graph, true, 10, 20);
    * layout.execute(graph.getDefaultParent());
    * (end)
    *
@@ -82,23 +82,23 @@ class mxPartitionLayout extends mxGraphLayout {
    * Implements <mxGraphLayout.moveCell>.
    */
   moveCell = (cell, x, y) => {
-    var model = this.graph.getModel();
-    var parent = model.getParent(cell);
+    let model = this.graph.getModel();
+    let parent = model.getParent(cell);
 
     if (cell != null &&
         parent != null) {
-      var i = 0;
-      var last = 0;
-      var childCount = model.getChildCount(parent);
+      let i = 0;
+      let last = 0;
+      let childCount = model.getChildCount(parent);
 
       // Finds index of the closest swimlane
       // TODO: Take into account the orientation
       for (i = 0; i < childCount; i++) {
-        var child = model.getChildAt(parent, i);
-        var bounds = this.getVertexBounds(child);
+        let child = model.getChildAt(parent, i);
+        let bounds = this.getVertexBounds(child);
 
         if (bounds != null) {
-          var tmp = bounds.x + bounds.width / 2;
+          let tmp = bounds.x + bounds.width / 2;
 
           if (last < x && tmp > x) {
             break;
@@ -109,7 +109,7 @@ class mxPartitionLayout extends mxGraphLayout {
       }
 
       // Changes child order in parent
-      var idx = parent.getIndex(cell);
+      let idx = parent.getIndex(cell);
       idx = Math.max(0, i - ((i > idx) ? 1 : 0));
 
       model.add(parent, cell, idx);
@@ -123,9 +123,9 @@ class mxPartitionLayout extends mxGraphLayout {
    * returns false and <isVertexMovable> returns true are modified.
    */
   execute = (parent) => {
-    var horizontal = this.isHorizontal();
-    var model = this.graph.getModel();
-    var pgeo = model.getGeometry(parent);
+    let horizontal = this.isHorizontal();
+    let model = this.graph.getModel();
+    let pgeo = model.getGeometry(parent);
 
     // Handles special case where the parent is either a layer with no
     // geometry or the current root of the view in which case the size
@@ -134,17 +134,17 @@ class mxPartitionLayout extends mxGraphLayout {
         ((pgeo == null &&
             model.isLayer(parent)) ||
             parent == this.graph.getView().currentRoot)) {
-      var width = this.graph.container.offsetWidth - 1;
-      var height = this.graph.container.offsetHeight - 1;
+      let width = this.graph.container.offsetWidth - 1;
+      let height = this.graph.container.offsetHeight - 1;
       pgeo = new mxRectangle(0, 0, width, height);
     }
 
     if (pgeo != null) {
-      var children = [];
-      var childCount = model.getChildCount(parent);
+      let children = [];
+      let childCount = model.getChildCount(parent);
 
-      for (var i = 0; i < childCount; i++) {
-        var child = model.getChildAt(parent, i);
+      for (let i = 0; i < childCount; i++) {
+        let child = model.getChildAt(parent, i);
 
         if (!this.isVertexIgnored(child) &&
             this.isVertexMovable(child)) {
@@ -152,15 +152,15 @@ class mxPartitionLayout extends mxGraphLayout {
         }
       }
 
-      var n = children.length;
+      let n = children.length;
 
       if (n > 0) {
         var x0 = this.border;
         var y0 = this.border;
-        var other = (horizontal) ? pgeo.height : pgeo.width;
+        let other = (horizontal) ? pgeo.height : pgeo.width;
         other -= 2 * this.border;
 
-        var size = (this.graph.isSwimlane(parent)) ?
+        let size = (this.graph.isSwimlane(parent)) ?
             this.graph.getStartSize(parent) :
             new mxRectangle();
 
@@ -168,8 +168,8 @@ class mxPartitionLayout extends mxGraphLayout {
         x0 = x0 + size.width;
         y0 = y0 + size.height;
 
-        var tmp = this.border + (n - 1) * this.spacing;
-        var value = (horizontal) ?
+        let tmp = this.border + (n - 1) * this.spacing;
+        let value = (horizontal) ?
             ((pgeo.width - x0 - tmp) / n) :
             ((pgeo.height - y0 - tmp) / n);
 
@@ -178,9 +178,9 @@ class mxPartitionLayout extends mxGraphLayout {
         if (value > 0) {
           model.beginUpdate();
           try {
-            for (var i = 0; i < n; i++) {
-              var child = children[i];
-              var geo = model.getGeometry(child);
+            for (let i = 0; i < n; i++) {
+              let child = children[i];
+              let geo = model.getGeometry(child);
 
               if (geo != null) {
                 geo = geo.clone();
diff --git a/src/js/layout/mxRadialTreeLayout.js b/src/js/layout/mxRadialTreeLayout.js
index 58b8e784a..60c9cfde4 100644
--- a/src/js/layout/mxRadialTreeLayout.js
+++ b/src/js/layout/mxRadialTreeLayout.js
@@ -107,7 +107,7 @@ class mxRadialTreeLayout extends mxCompactTreeLayout {
    * Example:
    *
    * (code)
-   * var layout = new mxRadialTreeLayout(graph);
+   * let layout = new mxRadialTreeLayout(graph);
    * layout.execute(graph.getDefaultParent());
    * (end)
    *
@@ -157,57 +157,57 @@ class mxRadialTreeLayout extends mxCompactTreeLayout {
 
     execute.apply(this, arguments);
 
-    var bounds = null;
-    var rootBounds = this.getVertexBounds(this.root);
+    let bounds = null;
+    let rootBounds = this.getVertexBounds(this.root);
     this.centerX = rootBounds.x + rootBounds.width / 2;
     this.centerY = rootBounds.y + rootBounds.height / 2;
 
     // Calculate the bounds of the involved vertices directly from the values set in the compact tree
     for (var vertex in this.visited) {
-      var vertexBounds = this.getVertexBounds(this.visited[vertex]);
+      let vertexBounds = this.getVertexBounds(this.visited[vertex]);
       bounds = (bounds != null) ? bounds : vertexBounds.clone();
       bounds.add(vertexBounds);
     }
 
     this.calcRowDims([this.node], 0);
 
-    var maxLeftGrad = 0;
-    var maxRightGrad = 0;
+    let maxLeftGrad = 0;
+    let maxRightGrad = 0;
 
     // Find the steepest left and right gradients
-    for (var i = 0; i < this.row.length; i++) {
-      var leftGrad = (this.centerX - this.rowMinX[i] - this.nodeDistance) / this.rowRadi[i];
-      var rightGrad = (this.rowMaxX[i] - this.centerX - this.nodeDistance) / this.rowRadi[i];
+    for (let i = 0; i < this.row.length; i++) {
+      let leftGrad = (this.centerX - this.rowMinX[i] - this.nodeDistance) / this.rowRadi[i];
+      let rightGrad = (this.rowMaxX[i] - this.centerX - this.nodeDistance) / this.rowRadi[i];
 
       maxLeftGrad = Math.max(maxLeftGrad, leftGrad);
       maxRightGrad = Math.max(maxRightGrad, rightGrad);
     }
 
     // Extend out row so they meet the maximum gradient and convert to polar co-ords
-    for (var i = 0; i < this.row.length; i++) {
-      var xLeftLimit = this.centerX - this.nodeDistance - maxLeftGrad * this.rowRadi[i];
-      var xRightLimit = this.centerX + this.nodeDistance + maxRightGrad * this.rowRadi[i];
-      var fullWidth = xRightLimit - xLeftLimit;
+    for (let i = 0; i < this.row.length; i++) {
+      let xLeftLimit = this.centerX - this.nodeDistance - maxLeftGrad * this.rowRadi[i];
+      let xRightLimit = this.centerX + this.nodeDistance + maxRightGrad * this.rowRadi[i];
+      let fullWidth = xRightLimit - xLeftLimit;
 
-      for (var j = 0; j < this.row[i].length; j++) {
-        var row = this.row[i];
-        var node = row[j];
-        var vertexBounds = this.getVertexBounds(node.cell);
-        var xProportion = (vertexBounds.x + vertexBounds.width / 2 - xLeftLimit) / (fullWidth);
-        var theta = 2 * Math.PI * xProportion;
+      for (let j = 0; j < this.row[i].length; j++) {
+        let row = this.row[i];
+        let node = row[j];
+        let vertexBounds = this.getVertexBounds(node.cell);
+        let xProportion = (vertexBounds.x + vertexBounds.width / 2 - xLeftLimit) / (fullWidth);
+        let theta = 2 * Math.PI * xProportion;
         node.theta = theta;
       }
     }
 
     // Post-process from outside inwards to try to align parents with children
-    for (var i = this.row.length - 2; i >= 0; i--) {
-      var row = this.row[i];
+    for (let i = this.row.length - 2; i >= 0; i--) {
+      let row = this.row[i];
 
-      for (var j = 0; j < row.length; j++) {
-        var node = row[j];
-        var child = node.child;
-        var counter = 0;
-        var totalTheta = 0;
+      for (let j = 0; j < row.length; j++) {
+        let node = row[j];
+        let child = node.child;
+        let counter = 0;
+        let totalTheta = 0;
 
         while (child != null) {
           totalTheta += child.theta;
@@ -216,13 +216,13 @@ class mxRadialTreeLayout extends mxCompactTreeLayout {
         }
 
         if (counter > 0) {
-          var averTheta = totalTheta / counter;
+          let averTheta = totalTheta / counter;
 
           if (averTheta > node.theta && j < row.length - 1) {
-            var nextTheta = row[j + 1].theta;
+            let nextTheta = row[j + 1].theta;
             node.theta = Math.min(averTheta, nextTheta - Math.PI / 10);
           } else if (averTheta < node.theta && j > 0) {
-            var lastTheta = row[j - 1].theta;
+            let lastTheta = row[j - 1].theta;
             node.theta = Math.max(averTheta, lastTheta + Math.PI / 10);
           }
         }
@@ -230,11 +230,11 @@ class mxRadialTreeLayout extends mxCompactTreeLayout {
     }
 
     // Set locations
-    for (var i = 0; i < this.row.length; i++) {
-      for (var j = 0; j < this.row[i].length; j++) {
-        var row = this.row[i];
-        var node = row[j];
-        var vertexBounds = this.getVertexBounds(node.cell);
+    for (let i = 0; i < this.row.length; i++) {
+      for (let j = 0; j < this.row[i].length; j++) {
+        let row = this.row[i];
+        let node = row[j];
+        let vertexBounds = this.getVertexBounds(node.cell);
         this.setVertexLocation(node.cell,
             this.centerX - vertexBounds.width / 2 + this.rowRadi[i] * Math.cos(node.theta),
             this.centerY - vertexBounds.height / 2 + this.rowRadi[i] * Math.sin(node.theta));
@@ -264,14 +264,14 @@ class mxRadialTreeLayout extends mxCompactTreeLayout {
     this.rowMaxCenX[rowNum] = this.centerX;
     this.row[rowNum] = [];
 
-    var rowHasChildren = false;
+    let rowHasChildren = false;
 
-    for (var i = 0; i < row.length; i++) {
-      var child = row[i] != null ? row[i].child : null;
+    for (let i = 0; i < row.length; i++) {
+      let child = row[i] != null ? row[i].child : null;
 
       while (child != null) {
-        var cell = child.cell;
-        var vertexBounds = this.getVertexBounds(cell);
+        let cell = child.cell;
+        let vertexBounds = this.getVertexBounds(cell);
 
         this.rowMinX[rowNum] = Math.min(vertexBounds.x, this.rowMinX[rowNum]);
         this.rowMaxX[rowNum] = Math.max(vertexBounds.x + vertexBounds.width, this.rowMaxX[rowNum]);
diff --git a/src/js/layout/mxStackLayout.js b/src/js/layout/mxStackLayout.js
index 2f8240a2c..9be83b4b1 100644
--- a/src/js/layout/mxStackLayout.js
+++ b/src/js/layout/mxStackLayout.js
@@ -146,7 +146,7 @@ class mxStackLayout extends mxGraphLayout {
    * Example:
    *
    * (code)
-   * var layout = new mxStackLayout(graph, true);
+   * let layout = new mxStackLayout(graph, true);
    * layout.execute(graph.getDefaultParent());
    * (end)
    *
@@ -179,16 +179,16 @@ class mxStackLayout extends mxGraphLayout {
    * Implements <mxGraphLayout.moveCell>.
    */
   moveCell = (cell, x, y) => {
-    var model = this.graph.getModel();
-    var parent = model.getParent(cell);
-    var horizontal = this.isHorizontal();
+    let model = this.graph.getModel();
+    let parent = model.getParent(cell);
+    let horizontal = this.isHorizontal();
 
     if (cell != null && parent != null) {
-      var i = 0;
-      var last = 0;
-      var childCount = model.getChildCount(parent);
-      var value = (horizontal) ? x : y;
-      var pstate = this.graph.getView().getState(parent);
+      let i = 0;
+      let last = 0;
+      let childCount = model.getChildCount(parent);
+      let value = (horizontal) ? x : y;
+      let pstate = this.graph.getView().getState(parent);
 
       if (pstate != null) {
         value -= (horizontal) ? pstate.x : pstate.y;
@@ -197,13 +197,13 @@ class mxStackLayout extends mxGraphLayout {
       value /= this.graph.view.scale;
 
       for (i = 0; i < childCount; i++) {
-        var child = model.getChildAt(parent, i);
+        let child = model.getChildAt(parent, i);
 
         if (child != cell) {
-          var bounds = model.getGeometry(child);
+          let bounds = model.getGeometry(child);
 
           if (bounds != null) {
-            var tmp = (horizontal) ?
+            let tmp = (horizontal) ?
                 bounds.x + bounds.width / 2 :
                 bounds.y + bounds.height / 2;
 
@@ -217,7 +217,7 @@ class mxStackLayout extends mxGraphLayout {
       }
 
       // Changes child order in parent
-      var idx = parent.getIndex(cell);
+      let idx = parent.getIndex(cell);
       idx = Math.max(0, i - ((i > idx) ? 1 : 0));
 
       model.add(parent, cell, idx);
@@ -231,16 +231,16 @@ class mxStackLayout extends mxGraphLayout {
    * container if the parent is a layer or the root of the model.
    */
   getParentSize = (parent) => {
-    var model = this.graph.getModel();
-    var pgeo = model.getGeometry(parent);
+    let model = this.graph.getModel();
+    let pgeo = model.getGeometry(parent);
 
     // Handles special case where the parent is either a layer with no
     // geometry or the current root of the view in which case the size
     // of the graph's container will be used.
     if (this.graph.container != null && ((pgeo == null &&
         model.isLayer(parent)) || parent == this.graph.getView().currentRoot)) {
-      var width = this.graph.container.offsetWidth - 1;
-      var height = this.graph.container.offsetHeight - 1;
+      let width = this.graph.container.offsetWidth - 1;
+      let height = this.graph.container.offsetHeight - 1;
       pgeo = new mxRectangle(0, 0, width, height);
     }
 
@@ -253,12 +253,12 @@ class mxStackLayout extends mxGraphLayout {
    * Returns the cells to be layouted.
    */
   getLayoutCells = (parent) => {
-    var model = this.graph.getModel();
-    var childCount = model.getChildCount(parent);
-    var cells = [];
+    let model = this.graph.getModel();
+    let childCount = model.getChildCount(parent);
+    let cells = [];
 
-    for (var i = 0; i < childCount; i++) {
-      var child = model.getChildAt(parent, i);
+    for (let i = 0; i < childCount; i++) {
+      let child = model.getChildAt(parent, i);
 
       if (!this.isVertexIgnored(child) && this.isVertexMovable(child)) {
         cells.push(child);
@@ -289,7 +289,7 @@ class mxStackLayout extends mxGraphLayout {
       value = Math.max(value, this.gridSize);
 
       if (value / this.gridSize > 1) {
-        var mod = value % this.gridSize;
+        let mod = value % this.gridSize;
         value += mod > this.gridSize / 2 ? (this.gridSize - mod) : -mod;
       }
     }
@@ -307,10 +307,10 @@ class mxStackLayout extends mxGraphLayout {
    */
   execute = (parent) => {
     if (parent != null) {
-      var pgeo = this.getParentSize(parent);
-      var horizontal = this.isHorizontal();
-      var model = this.graph.getModel();
-      var fillValue = null;
+      let pgeo = this.getParentSize(parent);
+      let horizontal = this.isHorizontal();
+      let model = this.graph.getModel();
+      let fillValue = null;
 
       if (pgeo != null) {
         fillValue = (horizontal) ? pgeo.height - this.marginTop - this.marginBottom :
@@ -324,9 +324,9 @@ class mxStackLayout extends mxGraphLayout {
       // Handles swimlane start size
       if (this.graph.isSwimlane(parent)) {
         // Uses computed style to get latest
-        var style = this.graph.getCellStyle(parent);
-        var start = mxUtils.getNumber(style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE);
-        var horz = mxUtils.getValue(style, mxConstants.STYLE_HORIZONTAL, true) == 1;
+        let style = this.graph.getCellStyle(parent);
+        let start = mxUtils.getNumber(style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE);
+        let horz = mxUtils.getValue(style, mxConstants.STYLE_HORIZONTAL, true) == 1;
 
         if (pgeo != null) {
           if (horz) {
@@ -349,15 +349,15 @@ class mxStackLayout extends mxGraphLayout {
 
       model.beginUpdate();
       try {
-        var tmp = 0;
-        var last = null;
-        var lastValue = 0;
-        var lastChild = null;
-        var cells = this.getLayoutCells(parent);
+        let tmp = 0;
+        let last = null;
+        let lastValue = 0;
+        let lastChild = null;
+        let cells = this.getLayoutCells(parent);
 
-        for (var i = 0; i < cells.length; i++) {
-          var child = cells[i];
-          var geo = model.getGeometry(child);
+        for (let i = 0; i < cells.length; i++) {
+          let child = cells[i];
+          let geo = model.getGeometry(child);
 
           if (geo != null) {
             geo = geo.clone();
@@ -380,15 +380,15 @@ class mxStackLayout extends mxGraphLayout {
             }
 
             tmp = Math.max(tmp, (horizontal) ? geo.height : geo.width);
-            var sw = 0;
+            let sw = 0;
 
             if (!this.borderCollapse) {
-              var childStyle = this.graph.getCellStyle(child);
+              let childStyle = this.graph.getCellStyle(child);
               sw = mxUtils.getNumber(childStyle, mxConstants.STYLE_STROKEWIDTH, 1);
             }
 
             if (last != null) {
-              var temp = lastValue + this.spacing + Math.floor(sw / 2);
+              let temp = lastValue + this.spacing + Math.floor(sw / 2);
 
               if (horizontal) {
                 geo.x = this.snap(((this.allowGaps) ? Math.max(temp, geo.x) :
@@ -487,13 +487,13 @@ class mxStackLayout extends mxGraphLayout {
    * last - The last <mxGeometry>.
    */
   updateParentGeometry = (parent, pgeo, last) => {
-    var horizontal = this.isHorizontal();
-    var model = this.graph.getModel();
+    let horizontal = this.isHorizontal();
+    let model = this.graph.getModel();
 
     var pgeo2 = pgeo.clone();
 
     if (horizontal) {
-      var tmp = last.x + last.width + this.marginRight + this.border;
+      let tmp = last.x + last.width + this.marginRight + this.border;
 
       if (this.resizeParentMax) {
         pgeo2.width = Math.max(pgeo2.width, tmp);
@@ -501,7 +501,7 @@ class mxStackLayout extends mxGraphLayout {
         pgeo2.width = tmp;
       }
     } else {
-      var tmp = last.y + last.height + this.marginBottom + this.border;
+      let tmp = last.y + last.height + this.marginBottom + this.border;
 
       if (this.resizeParentMax) {
         pgeo2.height = Math.max(pgeo2.height, tmp);
diff --git a/src/js/model/mxCell.js b/src/js/model/mxCell.js
index a6b62ef9c..be5e068e8 100644
--- a/src/js/model/mxCell.js
+++ b/src/js/model/mxCell.js
@@ -129,8 +129,8 @@ class mxCell {
    * value:
    *
    * (code)
-   * var doc = mxUtils.createXmlDocument();
-   * var node = doc.createElement('MyNode')
+   * let doc = mxUtils.createXmlDocument();
+   * let node = doc.createElement('MyNode')
    * node.setAttribute('label', 'MyLabel');
    * node.setAttribute('attribute1', 'value1');
    * graph.insertVertex(graph.getDefaultParent(), null, node, 40, 40, 80, 30);
@@ -148,13 +148,13 @@ class mxCell {
    *   }
    * };
    *
-   * var cellLabelChanged = graph.cellLabelChanged;
+   * let cellLabelChanged = graph.cellLabelChanged;
    * graph.cellLabelChanged = (cell, newValue, autoSize)=>
    * {
    *   if (mxUtils.isNode(cell.value))
    *   {
    *     // Clones the value for correct undo/redo
-   *     var elt = cell.value.cloneNode(true);
+   *     let elt = cell.value.cloneNode(true);
    *     elt.setAttribute('label', newValue);
    *     newValue = elt;
    *   }
@@ -235,7 +235,7 @@ class mxCell {
    * returns the old user object.
    */
   valueChanged = (newValue) => {
-    var previous = this.getValue();
+    let previous = this.getValue();
     this.setValue(newValue);
 
     return previous;
@@ -532,7 +532,7 @@ class mxCell {
    * removed.
    */
   remove = (index) => {
-    var child = null;
+    let child = null;
 
     if (this.children != null && index >= 0) {
       child = this.getChildAt(index);
@@ -553,7 +553,7 @@ class mxCell {
    */
   removeFromParent = () => {
     if (this.parent != null) {
-      var index = this.parent.getIndex(this);
+      let index = this.parent.getIndex(this);
       this.parent.remove(index);
     }
   };
@@ -638,7 +638,7 @@ class mxCell {
     if (edge != null) {
       if (edge.getTerminal(!isOutgoing) != this &&
           this.edges != null) {
-        var index = this.getEdgeIndex(edge);
+        let index = this.getEdgeIndex(edge);
 
         if (index >= 0) {
           this.edges.splice(index, 1);
@@ -662,7 +662,7 @@ class mxCell {
    * source or target terminal.
    */
   removeFromTerminal = (isSource) => {
-    var terminal = this.getTerminal(isSource);
+    let terminal = this.getTerminal(isSource);
 
     if (terminal != null) {
       terminal.removeEdge(this, isSource);
@@ -680,7 +680,7 @@ class mxCell {
    * name - Name of the attribute.
    */
   hasAttribute = (name) => {
-    var userObject = this.getValue();
+    let userObject = this.getValue();
 
     return (userObject != null &&
         userObject.nodeType == mxConstants.NODETYPE_ELEMENT && userObject.hasAttribute) ?
@@ -700,9 +700,9 @@ class mxCell {
    * value.
    */
   getAttribute = (name, defaultValue) => {
-    var userObject = this.getValue();
+    let userObject = this.getValue();
 
-    var val = (userObject != null &&
+    let val = (userObject != null &&
         userObject.nodeType == mxConstants.NODETYPE_ELEMENT) ?
         userObject.getAttribute(name) : null;
 
@@ -720,7 +720,7 @@ class mxCell {
    * value - New value of the attribute.
    */
   setAttribute = (name, value) => {
-    var userObject = this.getValue();
+    let userObject = this.getValue();
 
     if (userObject != null &&
         userObject.nodeType == mxConstants.NODETYPE_ELEMENT) {
@@ -736,7 +736,7 @@ class mxCell {
    * during the cloning.
    */
   clone = () => {
-    var clone = mxUtils.clone(this, this.mxTransient);
+    let clone = mxUtils.clone(this, this.mxTransient);
     clone.setValue(this.cloneValue());
 
     return clone;
@@ -748,7 +748,7 @@ class mxCell {
    * Returns a clone of the cell's user object.
    */
   cloneValue = () => {
-    var value = this.getValue();
+    let value = this.getValue();
 
     if (value != null) {
       if (typeof (value.clone) == 'function') {
diff --git a/src/js/model/mxCellPath.js b/src/js/model/mxCellPath.js
index ad919c07a..05de16a05 100644
--- a/src/js/model/mxCellPath.js
+++ b/src/js/model/mxCellPath.js
@@ -3,7 +3,7 @@
  * Copyright (c) 2006-2015, Gaudenz Alder
  * Updated to ES9 syntax by David Morrissey 2021
  */
-var mxCellPath = {
+let mxCellPath = {
   /**
    * Class: mxCellPath
    *
@@ -27,13 +27,13 @@ var mxCellPath = {
    * cell - Cell whose path should be returned.
    */
   create: (cell) => {
-    var result = '';
+    let result = '';
 
     if (cell != null) {
-      var parent = cell.getParent();
+      let parent = cell.getParent();
 
       while (parent != null) {
-        var index = parent.getIndex(cell);
+        let index = parent.getIndex(cell);
         result = index + mxCellPath.PATH_SEPARATOR + result;
 
         cell = parent;
@@ -42,7 +42,7 @@ var mxCellPath = {
     }
 
     // Removes trailing separator
-    var n = result.length;
+    let n = result.length;
 
     if (n > 1) {
       result = result.substring(0, n - 1);
@@ -63,7 +63,7 @@ var mxCellPath = {
    */
   getParentPath: (path) => {
     if (path != null) {
-      var index = path.lastIndexOf(mxCellPath.PATH_SEPARATOR);
+      let index = path.lastIndexOf(mxCellPath.PATH_SEPARATOR);
 
       if (index >= 0) {
         return path.substring(0, index);
@@ -87,12 +87,12 @@ var mxCellPath = {
    * path - String that defines the path.
    */
   resolve: (root, path) => {
-    var parent = root;
+    let parent = root;
 
     if (path != null) {
-      var tokens = path.split(mxCellPath.PATH_SEPARATOR);
+      let tokens = path.split(mxCellPath.PATH_SEPARATOR);
 
-      for (var i = 0; i < tokens.length; i++) {
+      for (let i = 0; i < tokens.length; i++) {
         parent = parent.getChildAt(parseInt(tokens[i]));
       }
     }
@@ -107,10 +107,10 @@ var mxCellPath = {
    * p1 is equal and 1 if p1 is greater than p2.
    */
   compare: (p1, p2) => {
-    var min = Math.min(p1.length, p2.length);
-    var comp = 0;
+    let min = Math.min(p1.length, p2.length);
+    let comp = 0;
 
-    for (var i = 0; i < min; i++) {
+    for (let i = 0; i < min; i++) {
       if (p1[i] != p2[i]) {
         if (p1[i].length == 0 ||
             p2[i].length == 0) {
diff --git a/src/js/model/mxGeometry.js b/src/js/model/mxGeometry.js
index 650793bcf..995a6cb09 100644
--- a/src/js/model/mxGeometry.js
+++ b/src/js/model/mxGeometry.js
@@ -164,7 +164,7 @@ class mxGeometry extends mxRectangle {
    */
   swap = () => {
     if (this.alternateBounds != null) {
-      var old = new mxRectangle(
+      let old = new mxRectangle(
           this.x, this.y, this.width, this.height);
 
       this.x = this.alternateBounds.x;
@@ -227,14 +227,14 @@ class mxGeometry extends mxRectangle {
    * cx - <mxPoint> that specifies the center of the rotation.
    */
   rotate = (angle, cx) => {
-    var rad = mxUtils.toRadians(angle);
-    var cos = Math.cos(rad);
-    var sin = Math.sin(rad);
+    let rad = mxUtils.toRadians(angle);
+    let cos = Math.cos(rad);
+    let sin = Math.sin(rad);
 
     // Rotates the geometry
     if (!this.relative) {
-      var ct = new mxPoint(this.getCenterX(), this.getCenterY());
-      var pt = mxUtils.getRotatedPoint(ct, cos, sin, cx);
+      let ct = new mxPoint(this.getCenterX(), this.getCenterY());
+      let pt = mxUtils.getRotatedPoint(ct, cos, sin, cx);
 
       this.x = Math.round(pt.x - this.width / 2);
       this.y = Math.round(pt.y - this.height / 2);
@@ -242,23 +242,23 @@ class mxGeometry extends mxRectangle {
 
     // Rotates the source point
     if (this.sourcePoint != null) {
-      var pt = mxUtils.getRotatedPoint(this.sourcePoint, cos, sin, cx);
+      let pt = mxUtils.getRotatedPoint(this.sourcePoint, cos, sin, cx);
       this.sourcePoint.x = Math.round(pt.x);
       this.sourcePoint.y = Math.round(pt.y);
     }
 
     // Translates the target point
     if (this.targetPoint != null) {
-      var pt = mxUtils.getRotatedPoint(this.targetPoint, cos, sin, cx);
+      let pt = mxUtils.getRotatedPoint(this.targetPoint, cos, sin, cx);
       this.targetPoint.x = Math.round(pt.x);
       this.targetPoint.y = Math.round(pt.y);
     }
 
     // Translate the control points
     if (this.points != null) {
-      for (var i = 0; i < this.points.length; i++) {
+      for (let i = 0; i < this.points.length; i++) {
         if (this.points[i] != null) {
-          var pt = mxUtils.getRotatedPoint(this.points[i], cos, sin, cx);
+          let pt = mxUtils.getRotatedPoint(this.points[i], cos, sin, cx);
           this.points[i].x = Math.round(pt.x);
           this.points[i].y = Math.round(pt.y);
         }
@@ -304,7 +304,7 @@ class mxGeometry extends mxRectangle {
 
     // Translate the control points
     if (this.TRANSLATE_CONTROL_POINTS && this.points != null) {
-      for (var i = 0; i < this.points.length; i++) {
+      for (let i = 0; i < this.points.length; i++) {
         if (this.points[i] != null) {
           this.points[i].x = parseFloat(this.points[i].x) + dx;
           this.points[i].y = parseFloat(this.points[i].y) + dy;
@@ -346,7 +346,7 @@ class mxGeometry extends mxRectangle {
 
     // Translate the control points
     if (this.points != null) {
-      for (var i = 0; i < this.points.length; i++) {
+      for (let i = 0; i < this.points.length; i++) {
         if (this.points[i] != null) {
           this.points[i].x = parseFloat(this.points[i].x) * sx;
           this.points[i].y = parseFloat(this.points[i].y) * sy;
diff --git a/src/js/model/mxGraphModel.js b/src/js/model/mxGraphModel.js
index a94fc5d61..11a0bf616 100644
--- a/src/js/model/mxGraphModel.js
+++ b/src/js/model/mxGraphModel.js
@@ -118,8 +118,8 @@ class mxGraphModel extends mxEventSource {
    * To encode a graph model, use the following code:
    *
    * (code)
-   * var enc = new mxCodec();
-   * var node = enc.encode(graph.getModel());
+   * let enc = new mxCodec();
+   * let node = enc.encode(graph.getModel());
    * (end)
    *
    * This will create an XML node that contains all the model information.
@@ -132,11 +132,11 @@ class mxGraphModel extends mxEventSource {
    * (code)
    * model.addListener(mxEvent.CHANGE, (sender, evt)=>
    * {
-   *   var changes = evt.getProperty('edit').changes;
-   *   var nodes = [];
-   *   var codec = new mxCodec();
+   *   let changes = evt.getProperty('edit').changes;
+   *   let nodes = [];
+   *   let codec = new mxCodec();
    *
-   *   for (var i = 0; i < changes.length; i++)
+   *   for (let i = 0; i < changes.length; i++)
    *   {
    *     nodes.push(codec.encode(changes[i]));
    *   }
@@ -148,7 +148,7 @@ class mxGraphModel extends mxEventSource {
    * that allows it to resolve cell IDs as follows:
    *
    * (code)
-   * var codec = new mxCodec();
+   * let codec = new mxCodec();
    * codec.lookup = (id)=>
    * {
    *   return model.getCell(id);
@@ -159,8 +159,8 @@ class mxGraphModel extends mxEventSource {
    * used to carry out the decoding and create a change object.
    *
    * (code)
-   * var changes = [];
-   * var change = codec.decode(node);
+   * let changes = [];
+   * let change = codec.decode(node);
    * change.model = model;
    * change.execute();
    * changes.push(change);
@@ -169,7 +169,7 @@ class mxGraphModel extends mxEventSource {
    * The changes can then be dispatched using the model as follows.
    *
    * (code)
-   * var edit = new mxUndoableEdit(model, false);
+   * let edit = new mxUndoableEdit(model, false);
    * edit.changes = changes;
    *
    * edit.notify = ()=>
@@ -199,11 +199,11 @@ class mxGraphModel extends mxEventSource {
    * (code)
    * graph.model.addListener(mxEvent.CHANGE, (sender, evt)=>
    * {
-   *   var changes = evt.getProperty('edit').changes;
+   *   let changes = evt.getProperty('edit').changes;
    *
-   *   for (var i = 0; i < changes.length; i++)
+   *   for (let i = 0; i < changes.length; i++)
    *   {
-   *     var change = changes[i];
+   *     let change = changes[i];
    *
    *     if (change instanceof mxChildChange &&
    *       change.change.previous == null)
@@ -318,7 +318,7 @@ class mxGraphModel extends mxEventSource {
    * Creates a new root cell with a default layer (child 0).
    */
   createRoot = () => {
-    var cell = new mxCell();
+    let cell = new mxCell();
     cell.insert(new mxCell());
 
     return cell;
@@ -345,12 +345,12 @@ class mxGraphModel extends mxEventSource {
    * returns true.
    */
   filterCells = (cells, filter) => {
-    var result = null;
+    let result = null;
 
     if (cells != null) {
       result = [];
 
-      for (var i = 0; i < cells.length; i++) {
+      for (let i = 0; i < cells.length; i++) {
         if (filter(cells[i])) {
           result.push(cells[i]);
         }
@@ -384,11 +384,11 @@ class mxGraphModel extends mxEventSource {
    * Example:
    * The following example extracts all vertices from a given model:
    * (code)
-   * var filter = (cell)=>
+   * let filter = (cell)=>
    * {
    *   return model.isVertex(cell);
    * }
-   * var vertices = model.filterDescendants(filter);
+   * let vertices = model.filterDescendants(filter);
    * (end)
    *
    * Parameters:
@@ -399,7 +399,7 @@ class mxGraphModel extends mxEventSource {
    */
   filterDescendants = (filter, parent) => {
     // Creates a new array for storing the result
-    var result = [];
+    let result = [];
 
     // Recursion starts at the root of the model
     parent = parent || this.getRoot();
@@ -411,10 +411,10 @@ class mxGraphModel extends mxEventSource {
     }
 
     // Visits the children of the cell
-    var childCount = this.getChildCount(parent);
+    let childCount = this.getChildCount(parent);
 
-    for (var i = 0; i < childCount; i++) {
-      var child = this.getChildAt(parent, i);
+    for (let i = 0; i < childCount; i++) {
+      let child = this.getChildAt(parent, i);
       result = result.concat(this.filterDescendants(filter, child));
     }
 
@@ -431,7 +431,7 @@ class mxGraphModel extends mxEventSource {
    * cell - Optional <mxCell> that specifies the child.
    */
   getRoot = (cell) => {
-    var root = cell || this.root;
+    let root = cell || this.root;
 
     if (cell != null) {
       while (cell != null) {
@@ -454,7 +454,7 @@ class mxGraphModel extends mxEventSource {
    * Example:
    *
    * (code)
-   * var root = new mxCell();
+   * let root = new mxCell();
    * root.insert(new mxCell());
    * model.setRoot(root);
    * (end)
@@ -480,7 +480,7 @@ class mxGraphModel extends mxEventSource {
    * root - <mxCell> that specifies the new root.
    */
   rootChanged = (root) => {
-    var oldRoot = this.root;
+    let oldRoot = this.root;
     this.root = root;
 
     // Resets counters and datastructures
@@ -584,7 +584,7 @@ class mxGraphModel extends mxEventSource {
         index = this.getChildCount(parent);
       }
 
-      var parentChanged = parent != this.getParent(child);
+      let parentChanged = parent != this.getParent(child);
       this.execute(new mxChildChange(this, parent, child, index));
 
       // Maintains the edges parents by moving the edges
@@ -627,7 +627,7 @@ class mxGraphModel extends mxEventSource {
       }
 
       if (cell.getId() != null) {
-        var collision = this.getCell(cell.getId());
+        let collision = this.getCell(cell.getId());
 
         if (collision != cell) {
           // Creates new Id for the cell
@@ -652,9 +652,9 @@ class mxGraphModel extends mxEventSource {
       }
 
       // Recursively processes child cells
-      var childCount = this.getChildCount(cell);
+      let childCount = this.getChildCount(cell);
 
-      for (var i = 0; i < childCount; i++) {
+      for (let i = 0; i < childCount; i++) {
         this.cellAdded(this.getChildAt(cell, i));
       }
     }
@@ -673,7 +673,7 @@ class mxGraphModel extends mxEventSource {
    * cell - <mxCell> to create the Id for.
    */
   createId = (cell) => {
-    var id = this.nextId;
+    let id = this.nextId;
     this.nextId++;
 
     return this.prefix + id + this.postfix;
@@ -690,23 +690,23 @@ class mxGraphModel extends mxEventSource {
     root = root || this.getRoot(cell);
 
     // Updates edges on children first
-    var childCount = this.getChildCount(cell);
+    let childCount = this.getChildCount(cell);
 
-    for (var i = 0; i < childCount; i++) {
-      var child = this.getChildAt(cell, i);
+    for (let i = 0; i < childCount; i++) {
+      let child = this.getChildAt(cell, i);
       this.updateEdgeParents(child, root);
     }
 
     // Updates the parents of all connected edges
-    var edgeCount = this.getEdgeCount(cell);
-    var edges = [];
+    let edgeCount = this.getEdgeCount(cell);
+    let edges = [];
 
-    for (var i = 0; i < edgeCount; i++) {
+    for (let i = 0; i < edgeCount; i++) {
       edges.push(this.getEdgeAt(cell, i));
     }
 
-    for (var i = 0; i < edges.length; i++) {
-      var edge = edges[i];
+    for (let i = 0; i < edges.length; i++) {
+      let edge = edges[i];
 
       // Updates edge parent if edge and child have
       // a common root node (does not need to be the
@@ -729,9 +729,9 @@ class mxGraphModel extends mxEventSource {
    * root - <mxCell> that represents the current root of the model.
    */
   updateEdgeParent = (edge, root) => {
-    var source = this.getTerminal(edge, true);
-    var target = this.getTerminal(edge, false);
-    var cell = null;
+    let source = this.getTerminal(edge, true);
+    let target = this.getTerminal(edge, false);
+    let cell = null;
 
     // Uses the first non-relative descendants of the source terminal
     while (source != null && !this.isEdge(source) &&
@@ -755,14 +755,14 @@ class mxGraphModel extends mxEventSource {
 
       if (cell != null && (this.getParent(cell) != this.root ||
           this.isAncestor(cell, edge)) && this.getParent(edge) != cell) {
-        var geo = this.getGeometry(edge);
+        let geo = this.getGeometry(edge);
 
         if (geo != null) {
           var origin1 = this.getOrigin(this.getParent(edge));
           var origin2 = this.getOrigin(cell);
 
-          var dx = origin2.x - origin1.x;
-          var dy = origin2.y - origin1.y;
+          let dx = origin2.x - origin1.x;
+          let dy = origin2.y - origin1.y;
 
           geo = geo.clone();
           geo.translate(-dx, -dy);
@@ -781,13 +781,13 @@ class mxGraphModel extends mxEventSource {
    * given parent as an <mxPoint>.
    */
   getOrigin = (cell) => {
-    var result = null;
+    let result = null;
 
     if (cell != null) {
       result = this.getOrigin(this.getParent(cell));
 
       if (!this.isEdge(cell)) {
-        var geo = this.getGeometry(cell);
+        let geo = this.getGeometry(cell);
 
         if (geo != null) {
           result.x += geo.x;
@@ -814,24 +814,24 @@ class mxGraphModel extends mxEventSource {
   getNearestCommonAncestor = (cell1, cell2) => {
     if (cell1 != null && cell2 != null) {
       // Creates the cell path for the second cell
-      var path = mxCellPath.create(cell2);
+      let path = mxCellPath.create(cell2);
 
       if (path != null && path.length > 0) {
         // Bubbles through the ancestors of the first
         // cell to find the nearest common ancestor.
-        var cell = cell1;
-        var current = mxCellPath.create(cell);
+        let cell = cell1;
+        let current = mxCellPath.create(cell);
 
         // Inverts arguments
         if (path.length < current.length) {
           cell = cell2;
-          var tmp = current;
+          let tmp = current;
           current = path;
           path = tmp;
         }
 
         while (cell != null) {
-          var parent = this.getParent(cell);
+          let parent = this.getParent(cell);
 
           // Checks if the cell path is equal to the beginning of the given cell path
           if (path.indexOf(current + mxCellPath.PATH_SEPARATOR) == 0 && parent != null) {
@@ -880,9 +880,9 @@ class mxGraphModel extends mxEventSource {
   cellRemoved = (cell) => {
     if (cell != null && this.cells != null) {
       // Recursively processes child cells
-      var childCount = this.getChildCount(cell);
+      let childCount = this.getChildCount(cell);
 
-      for (var i = childCount - 1; i >= 0; i--) {
+      for (let i = childCount - 1; i >= 0; i--) {
         this.cellRemoved(this.getChildAt(cell, i));
       }
 
@@ -907,20 +907,20 @@ class mxGraphModel extends mxEventSource {
    * in the parent's child array.
    */
   parentForCellChanged = (cell, parent, index) => {
-    var previous = this.getParent(cell);
+    let previous = this.getParent(cell);
 
     if (parent != null) {
       if (parent != previous || previous.getIndex(cell) != index) {
         parent.insert(cell, index);
       }
     } else if (previous != null) {
-      var oldIndex = previous.getIndex(cell);
+      let oldIndex = previous.getIndex(cell);
       previous.remove(oldIndex);
     }
 
     // Adds or removes the cell from the model
-    var par = this.contains(parent);
-    var pre = this.contains(previous);
+    let par = this.contains(parent);
+    let pre = this.contains(previous);
 
     if (par && !pre) {
       this.cellAdded(cell);
@@ -1016,11 +1016,11 @@ class mxGraphModel extends mxEventSource {
     vertices = (vertices != null) ? vertices : false;
     edges = (edges != null) ? edges : false;
 
-    var childCount = this.getChildCount(parent);
-    var result = [];
+    let childCount = this.getChildCount(parent);
+    let result = [];
 
-    for (var i = 0; i < childCount; i++) {
-      var child = this.getChildAt(parent, i);
+    for (let i = 0; i < childCount; i++) {
+      let child = this.getChildAt(parent, i);
 
       if ((!edges && !vertices) || (edges && this.isEdge(child)) ||
           (vertices && this.isVertex(child))) {
@@ -1062,7 +1062,7 @@ class mxGraphModel extends mxEventSource {
    * target terminal of the edge.
    */
   setTerminal = (edge, terminal, isSource) => {
-    var terminalChanged = terminal != this.getTerminal(edge, isSource);
+    let terminalChanged = terminal != this.getTerminal(edge, isSource);
     this.execute(new mxTerminalChange(this, edge, terminal, isSource));
 
     if (this.maintainEdgeParent && terminalChanged) {
@@ -1108,7 +1108,7 @@ class mxGraphModel extends mxEventSource {
    * target terminal of the edge.
    */
   terminalForCellChanged = (edge, terminal, isSource) => {
-    var previous = this.getTerminal(edge, isSource);
+    let previous = this.getTerminal(edge, isSource);
 
     if (terminal != null) {
       terminal.insertEdge(edge, isSource);
@@ -1161,11 +1161,11 @@ class mxGraphModel extends mxEventSource {
    * ignoredEdge - <mxCell> that represents an edge to be ignored.
    */
   getDirectedEdgeCount = (cell, outgoing, ignoredEdge) => {
-    var count = 0;
-    var edgeCount = this.getEdgeCount(cell);
+    let count = 0;
+    let edgeCount = this.getEdgeCount(cell);
 
-    for (var i = 0; i < edgeCount; i++) {
-      var edge = this.getEdgeAt(cell, i);
+    for (let i = 0; i < edgeCount; i++) {
+      let edge = this.getEdgeAt(cell, i);
 
       if (edge != ignoredEdge && this.getTerminal(edge, outgoing) == cell) {
         count++;
@@ -1240,13 +1240,13 @@ class mxGraphModel extends mxEventSource {
     outgoing = (outgoing != null) ? outgoing : true;
     includeLoops = (includeLoops != null) ? includeLoops : true;
 
-    var edgeCount = this.getEdgeCount(cell);
-    var result = [];
+    let edgeCount = this.getEdgeCount(cell);
+    let result = [];
 
-    for (var i = 0; i < edgeCount; i++) {
-      var edge = this.getEdgeAt(cell, i);
-      var source = this.getTerminal(edge, true);
-      var target = this.getTerminal(edge, false);
+    for (let i = 0; i < edgeCount; i++) {
+      let edge = this.getEdgeAt(cell, i);
+      let source = this.getTerminal(edge, true);
+      let target = this.getTerminal(edge, false);
 
       if ((includeLoops && source == target) || ((source != target) && ((incoming && target == cell) ||
           (outgoing && source == cell)))) {
@@ -1280,8 +1280,8 @@ class mxGraphModel extends mxEventSource {
     var tmp2 = this.getEdgeCount(target);
 
     // Assumes the source has less connected edges
-    var terminal = source;
-    var edgeCount = tmp1;
+    let terminal = source;
+    let edgeCount = tmp1;
 
     // Uses the smaller array of connected edges
     // for searching the edge
@@ -1290,16 +1290,16 @@ class mxGraphModel extends mxEventSource {
       terminal = target;
     }
 
-    var result = [];
+    let result = [];
 
     // Checks if the edge is connected to the correct
     // cell and returns the first match
-    for (var i = 0; i < edgeCount; i++) {
-      var edge = this.getEdgeAt(terminal, i);
-      var src = this.getTerminal(edge, true);
-      var trg = this.getTerminal(edge, false);
-      var directedMatch = (src == source) && (trg == target);
-      var oppositeMatch = (trg == source) && (src == target);
+    for (let i = 0; i < edgeCount; i++) {
+      let edge = this.getEdgeAt(terminal, i);
+      let src = this.getTerminal(edge, true);
+      let trg = this.getTerminal(edge, false);
+      let directedMatch = (src == source) && (trg == target);
+      let oppositeMatch = (trg == source) && (src == target);
 
       if (directedMatch || (!directed && oppositeMatch)) {
         result.push(edge);
@@ -1329,12 +1329,12 @@ class mxGraphModel extends mxEventSource {
     sources = (sources != null) ? sources : true;
     targets = (targets != null) ? targets : true;
 
-    var terminals = [];
+    let terminals = [];
 
     if (edges != null) {
-      for (var i = 0; i < edges.length; i++) {
-        var source = this.getTerminal(edges[i], true);
-        var target = this.getTerminal(edges[i], false);
+      for (let i = 0; i < edges.length; i++) {
+        let source = this.getTerminal(edges[i], true);
+        let target = this.getTerminal(edges[i], false);
 
         // Checks if the terminal is the source of
         // the edge and if the target should be
@@ -1367,17 +1367,17 @@ class mxGraphModel extends mxEventSource {
    * cells - Array of <mxCells> whose topmost ancestors should be returned.
    */
   getTopmostCells = (cells) => {
-    var dict = new mxDictionary();
-    var tmp = [];
+    let dict = new mxDictionary();
+    let tmp = [];
 
-    for (var i = 0; i < cells.length; i++) {
+    for (let i = 0; i < cells.length; i++) {
       dict.put(cells[i], true);
     }
 
-    for (var i = 0; i < cells.length; i++) {
-      var cell = cells[i];
-      var topmost = true;
-      var parent = this.getParent(cell);
+    for (let i = 0; i < cells.length; i++) {
+      let cell = cells[i];
+      let topmost = true;
+      let parent = this.getParent(cell);
 
       while (parent != null) {
         if (dict.get(parent)) {
@@ -1480,7 +1480,7 @@ class mxGraphModel extends mxEventSource {
    * (code)
    * graph.getModel().valueForCellChanged = (cell, value)=>
    * {
-   *   var previous = cell.value.getAttribute('label');
+   *   let previous = cell.value.getAttribute('label');
    *   cell.value.setAttribute('label', value);
    *
    *   return previous;
@@ -1531,7 +1531,7 @@ class mxGraphModel extends mxEventSource {
    * <mxCell.setGeometry> and return the previous <mxGeometry>.
    */
   geometryForCellChanged = (cell, geometry) => {
-    var previous = this.getGeometry(cell);
+    let previous = this.getGeometry(cell);
     cell.setGeometry(geometry);
 
     return previous;
@@ -1583,7 +1583,7 @@ class mxGraphModel extends mxEventSource {
    * the new cell style.
    */
   styleForCellChanged = (cell, style) => {
-    var previous = this.getStyle(cell);
+    let previous = this.getStyle(cell);
     cell.setStyle(style);
 
     return previous;
@@ -1634,7 +1634,7 @@ class mxGraphModel extends mxEventSource {
    * collapsed - Boolean that specifies the new collpased state.
    */
   collapsedStateForCellChanged = (cell, collapsed) => {
-    var previous = this.isCollapsed(cell);
+    let previous = this.isCollapsed(cell);
     cell.setCollapsed(collapsed);
 
     return previous;
@@ -1685,7 +1685,7 @@ class mxGraphModel extends mxEventSource {
    * visible - Boolean that specifies the new visible state.
    */
   visibleStateForCellChanged = (cell, visible) => {
-    var previous = this.isVisible(cell);
+    let previous = this.isVisible(cell);
     cell.setVisible(visible);
 
     return previous;
@@ -1743,9 +1743,9 @@ class mxGraphModel extends mxEventSource {
    * and <endUpdate> calls as shown here:
    *
    * (code)
-   * var model = graph.getModel();
-   * var parent = graph.getDefaultParent();
-   * var index = model.getChildCount(parent);
+   * let model = graph.getModel();
+   * let parent = graph.getDefaultParent();
+   * let index = model.getChildCount(parent);
    * model.beginUpdate();
    * try
    * {
@@ -1802,7 +1802,7 @@ class mxGraphModel extends mxEventSource {
       try {
         if (this.endingUpdate && !this.currentEdit.isEmpty()) {
           this.fireEvent(new mxEventObject(mxEvent.BEFORE_UNDO, 'edit', this.currentEdit));
-          var tmp = this.currentEdit;
+          let tmp = this.currentEdit;
           this.currentEdit = this.createUndoableEdit();
           tmp.notify();
           this.fireEvent(new mxEventObject(mxEvent.UNDO, 'edit', tmp));
@@ -1826,7 +1826,7 @@ class mxGraphModel extends mxEventSource {
    * significant. Default is true.
    */
   createUndoableEdit = (significant) => {
-    var edit = new mxUndoableEdit(this, (significant != null) ? significant : true);
+    let edit = new mxUndoableEdit(this, (significant != null) ? significant : true);
 
     edit.notify = () => {
       // LATER: Remove changes property (deprecated)
@@ -1856,15 +1856,15 @@ class mxGraphModel extends mxEventSource {
 
     this.beginUpdate();
     try {
-      var mapping = {};
+      let mapping = {};
       this.mergeChildrenImpl(from, to, cloneAllEdges, mapping);
 
       // Post-processes all edges in the mapping and
       // reconnects the terminals to the corresponding
       // cells in the target model
       for (var key in mapping) {
-        var cell = mapping[key];
-        var terminal = this.getTerminal(cell, true);
+        let cell = mapping[key];
+        let terminal = this.getTerminal(cell, true);
 
         if (terminal != null) {
           terminal = mapping[mxCellPath.create(terminal)];
@@ -1894,19 +1894,19 @@ class mxGraphModel extends mxEventSource {
   mergeChildrenImpl = (from, to, cloneAllEdges, mapping) => {
     this.beginUpdate();
     try {
-      var childCount = from.getChildCount();
+      let childCount = from.getChildCount();
 
-      for (var i = 0; i < childCount; i++) {
-        var cell = from.getChildAt(i);
+      for (let i = 0; i < childCount; i++) {
+        let cell = from.getChildAt(i);
 
         if (typeof (cell.getId) == 'function') {
-          var id = cell.getId();
-          var target = (id != null && (!this.isEdge(cell) || !cloneAllEdges)) ?
+          let id = cell.getId();
+          let target = (id != null && (!this.isEdge(cell) || !cloneAllEdges)) ?
               this.getCell(id) : null;
 
           // Clones and adds the child if no cell exists for the id
           if (target == null) {
-            var clone = cell.clone();
+            let clone = cell.clone();
             clone.setId(id);
 
             // Sets the terminals from the original cell to the clone
@@ -1944,13 +1944,13 @@ class mxGraphModel extends mxEventSource {
    * cells - Array of cells whose parents should be returned.
    */
   getParents = (cells) => {
-    var parents = [];
+    let parents = [];
 
     if (cells != null) {
-      var dict = new mxDictionary();
+      let dict = new mxDictionary();
 
-      for (var i = 0; i < cells.length; i++) {
-        var parent = this.getParent(cells[i]);
+      for (let i = 0; i < cells.length; i++) {
+        let parent = this.getParent(cells[i]);
 
         if (parent != null && !dict.get(parent)) {
           dict.put(parent, true);
@@ -2004,9 +2004,9 @@ class mxGraphModel extends mxEventSource {
   cloneCells = (cells, includeChildren, mapping) => {
     includeChildren = (includeChildren != null) ? includeChildren : true;
     mapping = (mapping != null) ? mapping : {};
-    var clones = [];
+    let clones = [];
 
-    for (var i = 0; i < cells.length; i++) {
+    for (let i = 0; i < cells.length; i++) {
       if (cells[i] != null) {
         clones.push(this.cloneCellImpl(cells[i], mapping, includeChildren));
       } else {
@@ -2014,7 +2014,7 @@ class mxGraphModel extends mxEventSource {
       }
     }
 
-    for (var i = 0; i < clones.length; i++) {
+    for (let i = 0; i < clones.length; i++) {
       if (clones[i] != null) {
         this.restoreClone(clones[i], cells[i], mapping);
       }
@@ -2029,18 +2029,18 @@ class mxGraphModel extends mxEventSource {
    * Inner helper method for cloning cells recursively.
    */
   cloneCellImpl = (cell, mapping, includeChildren) => {
-    var ident = mxObjectIdentity.get(cell);
-    var clone = mapping[ident];
+    let ident = mxObjectIdentity.get(cell);
+    let clone = mapping[ident];
 
     if (clone == null) {
       clone = this.cellCloned(cell);
       mapping[ident] = clone;
 
       if (includeChildren) {
-        var childCount = this.getChildCount(cell);
+        let childCount = this.getChildCount(cell);
 
-        for (var i = 0; i < childCount; i++) {
-          var cloneChild = this.cloneCellImpl(
+        for (let i = 0; i < childCount; i++) {
+          let cloneChild = this.cloneCellImpl(
               this.getChildAt(cell, i), mapping, true);
           clone.insert(cloneChild);
         }
@@ -2067,29 +2067,29 @@ class mxGraphModel extends mxEventSource {
    * a network of cloned cells.
    */
   restoreClone = (clone, cell, mapping) => {
-    var source = this.getTerminal(cell, true);
+    let source = this.getTerminal(cell, true);
 
     if (source != null) {
-      var tmp = mapping[mxObjectIdentity.get(source)];
+      let tmp = mapping[mxObjectIdentity.get(source)];
 
       if (tmp != null) {
         tmp.insertEdge(clone, true);
       }
     }
 
-    var target = this.getTerminal(cell, false);
+    let target = this.getTerminal(cell, false);
 
     if (target != null) {
-      var tmp = mapping[mxObjectIdentity.get(target)];
+      let tmp = mapping[mxObjectIdentity.get(target)];
 
       if (tmp != null) {
         tmp.insertEdge(clone, false);
       }
     }
 
-    var childCount = this.getChildCount(clone);
+    let childCount = this.getChildCount(clone);
 
-    for (var i = 0; i < childCount; i++) {
+    for (let i = 0; i < childCount; i++) {
       this.restoreClone(this.getChildAt(clone, i),
           this.getChildAt(cell, i), mapping);
     }
@@ -2155,7 +2155,7 @@ class mxGraphModel extends mxEventSource {
    */
   execute = () => {
     if (this.child != null) {
-      var tmp = this.model.getParent(this.child);
+      let tmp = this.model.getParent(this.child);
       var tmp2 = (tmp != null) ? tmp.getIndex(this.child) : 0;
 
       if (this.previous == null) {
@@ -2186,8 +2186,8 @@ class mxGraphModel extends mxEventSource {
   connect = (cell, isConnect) => {
     isConnect = (isConnect != null) ? isConnect : true;
 
-    var source = cell.getTerminal(true);
-    var target = cell.getTerminal(false);
+    let source = cell.getTerminal(true);
+    let target = cell.getTerminal(false);
 
     if (source != null) {
       if (isConnect) {
@@ -2208,9 +2208,9 @@ class mxGraphModel extends mxEventSource {
     cell.setTerminal(source, true);
     cell.setTerminal(target, false);
 
-    var childCount = this.model.getChildCount(cell);
+    let childCount = this.model.getChildCount(cell);
 
-    for (var i = 0; i < childCount; i++) {
+    for (let i = 0; i < childCount; i++) {
       this.connect(this.model.getChildAt(cell, i), isConnect);
     }
   };
@@ -2419,7 +2419,7 @@ class mxGraphModel extends mxEventSource {
    * model.beginUpdate();
    * try
    * {
-   *   var edit = new mxCellAttributeChange(
+   *   let edit = new mxCellAttributeChange(
    *     cell, attributeName, attributeValue);
    *   model.execute(edit);
    * }
@@ -2449,7 +2449,7 @@ class mxGraphModel extends mxEventSource {
    */
   execute = () => {
     if (this.cell != null) {
-      var tmp = this.cell.getAttribute(this.attribute);
+      let tmp = this.cell.getAttribute(this.attribute);
 
       if (this.previous == null) {
         this.cell.value.removeAttribute(this.attribute);
diff --git a/src/js/mxClient.js b/src/js/mxClient.js
index 67ce9ba5b..0484b28a0 100644
--- a/src/js/mxClient.js
+++ b/src/js/mxClient.js
@@ -2,7 +2,7 @@
  * Copyright (c) 2006-2017, JGraph Ltd
  * Copyright (c) 2006-2017, Gaudenz Alder
  */
-var mxClient = {
+let mxClient = {
   /**
    * Class: mxClient
    *
@@ -210,7 +210,7 @@ var mxClient = {
     doc = doc || document;
 
     // Workaround for Operation Aborted in IE6 if base tag is used in head
-    var link = doc.createElement('link');
+    let link = doc.createElement('link');
 
     link.setAttribute('rel', rel);
     link.setAttribute('href', href);
@@ -221,7 +221,7 @@ var mxClient = {
       link.setAttribute('id', id);
     }
 
-    var head = doc.getElementsByTagName('head')[0];
+    let head = doc.getElementsByTagName('head')[0];
     head.appendChild(link);
   },
 
@@ -236,7 +236,7 @@ var mxClient = {
    * lan - Optional string to pass to <mxResources.add>.
    */
   loadResources: (fn, lan) => {
-    var pending = mxClient.defaultBundles.length;
+    let pending = mxClient.defaultBundles.length;
 
     function callback() {
       if (--pending == 0) {
@@ -244,7 +244,7 @@ var mxClient = {
       }
     }
 
-    for (var i = 0; i < mxClient.defaultBundles.length; i++) {
+    for (let i = 0; i < mxClient.defaultBundles.length; i++) {
       mxResources.add(mxClient.defaultBundles[i], lan, callback);
     }
   }
@@ -260,7 +260,7 @@ var mxClient = {
  *
  * (code)
  * <script type="text/javascript">
- *     var mxLoadResources = false;
+ *     let mxLoadResources = false;
  * </script>
  * <script type="text/javascript" src="/path/to/core/directory/js/mxClient.js"></script>
  * (end)
@@ -278,7 +278,7 @@ if (typeof(mxLoadResources) == 'undefined') {
  *
  * (code)
  * <script type="text/javascript">
- *     var mxLoadResources = true;
+ *     let mxLoadResources = true;
  * </script>
  * <script type="text/javascript" src="/path/to/core/directory/js/mxClient.js"></script>
  * (end)
@@ -295,7 +295,7 @@ if (typeof(mxForceIncludes) == 'undefined') {
  *
  * (code)
  * <script type="text/javascript">
- *     var mxResourceExtension = '.txt';
+ *     let mxResourceExtension = '.txt';
  * </script>
  * <script type="text/javascript" src="/path/to/core/directory/js/mxClient.js"></script>
  * (end)
@@ -313,7 +313,7 @@ if (typeof(mxResourceExtension) == 'undefined') {
  *
  * (code)
  * <script type="text/javascript">
- *     var mxLoadStylesheets = false;
+ *     let mxLoadStylesheets = false;
  * </script>
  * <script type="text/javascript" src="/path/to/core/directory/js/mxClient.js"></script>
  * (end)
diff --git a/src/js/shape/mxActor.js b/src/js/shape/mxActor.js
index c012b8350..6b27818a7 100644
--- a/src/js/shape/mxActor.js
+++ b/src/js/shape/mxActor.js
@@ -71,7 +71,7 @@ class mxActor extends mxShape {
    * Draws the path for this shape.
    */
   redrawPath = (c, x, y, w, h) => {
-    var width = w / 3;
+    let width = w / 3;
     c.moveTo(0, h);
     c.curveTo(0, 3 * h / 5, 0, 2 * h / 5, w / 2, 2 * h / 5);
     c.curveTo(w / 2 - width, 2 * h / 5, w / 2 - width, 0, w / 2, 0);
diff --git a/src/js/shape/mxArrow.js b/src/js/shape/mxArrow.js
index 148033af8..48b78bbcc 100644
--- a/src/js/shape/mxArrow.js
+++ b/src/js/shape/mxArrow.js
@@ -52,7 +52,7 @@ class mxArrow extends mxShape {
   augmentBoundingBox = (bbox) => {
     super.augmentBoundingBox.apply(bbox);
 
-    var w = Math.max(this.arrowWidth, this.endSize);
+    let w = Math.max(this.arrowWidth, this.endSize);
     bbox.grow((w / 2 + this.strokewidth) * this.scale);
   };
 
@@ -63,25 +63,25 @@ class mxArrow extends mxShape {
    */
   paintEdgeShape = (c, pts) => {
     // Geometry of arrow
-    var spacing = mxConstants.ARROW_SPACING;
-    var width = mxConstants.ARROW_WIDTH;
-    var arrow = mxConstants.ARROW_SIZE;
+    let spacing = mxConstants.ARROW_SPACING;
+    let width = mxConstants.ARROW_WIDTH;
+    let arrow = mxConstants.ARROW_SIZE;
 
     // Base vector (between end points)
     var p0 = pts[0];
-    var pe = pts[pts.length - 1];
-    var dx = pe.x - p0.x;
-    var dy = pe.y - p0.y;
-    var dist = Math.sqrt(dx * dx + dy * dy);
-    var length = dist - 2 * spacing - arrow;
+    let pe = pts[pts.length - 1];
+    let dx = pe.x - p0.x;
+    let dy = pe.y - p0.y;
+    let dist = Math.sqrt(dx * dx + dy * dy);
+    let length = dist - 2 * spacing - arrow;
 
     // Computes the norm and the inverse norm
-    var nx = dx / dist;
-    var ny = dy / dist;
-    var basex = length * nx;
-    var basey = length * ny;
-    var floorx = width * ny / 3;
-    var floory = -width * nx / 3;
+    let nx = dx / dist;
+    let ny = dy / dist;
+    let basex = length * nx;
+    let basey = length * ny;
+    let floorx = width * ny / 3;
+    let floory = -width * nx / 3;
 
     // Computes points
     var p0x = p0.x - floorx / 2 + spacing * nx;
diff --git a/src/js/shape/mxArrowConnector.js b/src/js/shape/mxArrowConnector.js
index 9f6630ceb..31b0ff68e 100644
--- a/src/js/shape/mxArrowConnector.js
+++ b/src/js/shape/mxArrowConnector.js
@@ -93,7 +93,7 @@ class mxArrowConnector extends mxShape {
   augmentBoundingBox = (bbox) => {
     augmentBoundingBox.apply(this, arguments);
 
-    var w = this.getEdgeWidth();
+    let w = this.getEdgeWidth();
 
     if (this.isMarkerStart()) {
       w = Math.max(w, this.getStartArrowWidth());
@@ -113,25 +113,25 @@ class mxArrowConnector extends mxShape {
    */
   paintEdgeShape = (c, pts) => {
     // Geometry of arrow
-    var strokeWidth = this.strokewidth;
+    let strokeWidth = this.strokewidth;
 
     if (this.outline) {
       strokeWidth = Math.max(1, mxUtils.getNumber(this.style, mxConstants.STYLE_STROKEWIDTH, this.strokewidth));
     }
 
-    var startWidth = this.getStartArrowWidth() + strokeWidth;
-    var endWidth = this.getEndArrowWidth() + strokeWidth;
-    var edgeWidth = this.outline ? this.getEdgeWidth() + strokeWidth : this.getEdgeWidth();
-    var openEnded = this.isOpenEnded();
-    var markerStart = this.isMarkerStart();
-    var markerEnd = this.isMarkerEnd();
-    var spacing = (openEnded) ? 0 : this.arrowSpacing + strokeWidth / 2;
-    var startSize = this.startSize + strokeWidth;
-    var endSize = this.endSize + strokeWidth;
-    var isRounded = this.isArrowRounded();
+    let startWidth = this.getStartArrowWidth() + strokeWidth;
+    let endWidth = this.getEndArrowWidth() + strokeWidth;
+    let edgeWidth = this.outline ? this.getEdgeWidth() + strokeWidth : this.getEdgeWidth();
+    let openEnded = this.isOpenEnded();
+    let markerStart = this.isMarkerStart();
+    let markerEnd = this.isMarkerEnd();
+    let spacing = (openEnded) ? 0 : this.arrowSpacing + strokeWidth / 2;
+    let startSize = this.startSize + strokeWidth;
+    let endSize = this.endSize + strokeWidth;
+    let isRounded = this.isArrowRounded();
 
     // Base vector (between first points)
-    var pe = pts[pts.length - 1];
+    let pe = pts[pts.length - 1];
 
     // Finds first non-overlapping point
     var i0 = 1;
@@ -140,24 +140,24 @@ class mxArrowConnector extends mxShape {
       i0++;
     }
 
-    var dx = pts[i0].x - pts[0].x;
-    var dy = pts[i0].y - pts[0].y;
-    var dist = Math.sqrt(dx * dx + dy * dy);
+    let dx = pts[i0].x - pts[0].x;
+    let dy = pts[i0].y - pts[0].y;
+    let dist = Math.sqrt(dx * dx + dy * dy);
 
     if (dist == 0) {
       return;
     }
 
     // Computes the norm and the inverse norm
-    var nx = dx / dist;
+    let nx = dx / dist;
     var nx2, nx1 = nx;
-    var ny = dy / dist;
+    let ny = dy / dist;
     var ny2, ny1 = ny;
-    var orthx = edgeWidth * ny;
-    var orthy = -edgeWidth * nx;
+    let orthx = edgeWidth * ny;
+    let orthy = -edgeWidth * nx;
 
     // Stores the inbound function calls in reverse order in fns
-    var fns = [];
+    let fns = [];
 
     if (isRounded) {
       c.setLineJoin('round');
@@ -168,16 +168,16 @@ class mxArrowConnector extends mxShape {
 
     c.begin();
 
-    var startNx = nx;
-    var startNy = ny;
+    let startNx = nx;
+    let startNy = ny;
 
     if (markerStart && !openEnded) {
       this.paintMarker(c, pts[0].x, pts[0].y, nx, ny, startSize, startWidth, edgeWidth, spacing, true);
     } else {
-      var outStartX = pts[0].x + orthx / 2 + spacing * nx;
-      var outStartY = pts[0].y + orthy / 2 + spacing * ny;
-      var inEndX = pts[0].x - orthx / 2 + spacing * nx;
-      var inEndY = pts[0].y - orthy / 2 + spacing * ny;
+      let outStartX = pts[0].x + orthx / 2 + spacing * nx;
+      let outStartY = pts[0].y + orthy / 2 + spacing * ny;
+      let inEndX = pts[0].x - orthx / 2 + spacing * nx;
+      let inEndY = pts[0].y - orthy / 2 + spacing * ny;
 
       if (openEnded) {
         c.moveTo(outStartX, outStartY);
@@ -195,9 +195,9 @@ class mxArrowConnector extends mxShape {
     var dy1 = 0;
     var dist1 = 0;
 
-    for (var i = 0; i < pts.length - 2; i++) {
+    for (let i = 0; i < pts.length - 2; i++) {
       // Work out in which direction the line is bending
-      var pos = mxUtils.relativeCcw(pts[i].x, pts[i].y, pts[i + 1].x, pts[i + 1].y, pts[i + 2].x, pts[i + 2].y);
+      let pos = mxUtils.relativeCcw(pts[i].x, pts[i].y, pts[i + 1].x, pts[i + 1].y, pts[i + 2].x, pts[i + 2].y);
 
       dx1 = pts[i + 2].x - pts[i + 1].x;
       dy1 = pts[i + 2].y - pts[i + 1].y;
@@ -209,7 +209,7 @@ class mxArrowConnector extends mxShape {
         ny1 = dy1 / dist1;
 
         var tmp1 = nx * nx1 + ny * ny1;
-        var tmp = Math.max(Math.sqrt((tmp1 + 1) / 2), 0.04);
+        let tmp = Math.max(Math.sqrt((tmp1 + 1) / 2), 0.04);
 
         // Work out the normal orthogonal to the line through the control point and the edge sides intersection
         nx2 = (nx + nx1);
@@ -222,13 +222,13 @@ class mxArrowConnector extends mxShape {
           ny2 = ny2 / dist2;
 
           // Higher strokewidths require a larger minimum bend, 0.35 covers all but the most extreme cases
-          var strokeWidthFactor = Math.max(tmp, Math.min(this.strokewidth / 200 + 0.04, 0.35));
-          var angleFactor = (pos != 0 && isRounded) ? Math.max(0.1, strokeWidthFactor) : Math.max(tmp, 0.06);
+          let strokeWidthFactor = Math.max(tmp, Math.min(this.strokewidth / 200 + 0.04, 0.35));
+          let angleFactor = (pos != 0 && isRounded) ? Math.max(0.1, strokeWidthFactor) : Math.max(tmp, 0.06);
 
-          var outX = pts[i + 1].x + ny2 * edgeWidth / 2 / angleFactor;
-          var outY = pts[i + 1].y - nx2 * edgeWidth / 2 / angleFactor;
-          var inX = pts[i + 1].x - ny2 * edgeWidth / 2 / angleFactor;
-          var inY = pts[i + 1].y + nx2 * edgeWidth / 2 / angleFactor;
+          let outX = pts[i + 1].x + ny2 * edgeWidth / 2 / angleFactor;
+          let outY = pts[i + 1].y - nx2 * edgeWidth / 2 / angleFactor;
+          let inX = pts[i + 1].x - ny2 * edgeWidth / 2 / angleFactor;
+          let inY = pts[i + 1].y + nx2 * edgeWidth / 2 / angleFactor;
 
           if (pos == 0 || !isRounded) {
             // If the two segments are aligned, or if we're not drawing curved sections between segments
@@ -285,8 +285,8 @@ class mxArrowConnector extends mxShape {
     } else {
       c.lineTo(pe.x - spacing * nx1 + orthx / 2, pe.y - spacing * ny1 + orthy / 2);
 
-      var inStartX = pe.x - spacing * nx1 - orthx / 2;
-      var inStartY = pe.y - spacing * ny1 - orthy / 2;
+      let inStartX = pe.x - spacing * nx1 - orthx / 2;
+      let inStartY = pe.y - spacing * ny1 - orthy / 2;
 
       if (!openEnded) {
         c.lineTo(inStartX, inStartY);
@@ -299,7 +299,7 @@ class mxArrowConnector extends mxShape {
       }
     }
 
-    for (var i = fns.length - 1; i >= 0; i--) {
+    for (let i = fns.length - 1; i >= 0; i--) {
       fns[i]();
     }
 
@@ -347,12 +347,12 @@ class mxArrowConnector extends mxShape {
    * Paints the marker.
    */
   paintMarker = (c, ptX, ptY, nx, ny, size, arrowWidth, edgeWidth, spacing, initialMove) => {
-    var widthArrowRatio = edgeWidth / arrowWidth;
-    var orthx = edgeWidth * ny / 2;
-    var orthy = -edgeWidth * nx / 2;
+    let widthArrowRatio = edgeWidth / arrowWidth;
+    let orthx = edgeWidth * ny / 2;
+    let orthy = -edgeWidth * nx / 2;
 
-    var spaceX = (spacing + size) * nx;
-    var spaceY = (spacing + size) * ny;
+    let spaceX = (spacing + size) * nx;
+    let spaceY = (spacing + size) * ny;
 
     if (initialMove) {
       c.moveTo(ptX - orthx + spaceX, ptY - orthy + spaceY);
diff --git a/src/js/shape/mxConnector.js b/src/js/shape/mxConnector.js
index 9a1c57d35..68ec97839 100644
--- a/src/js/shape/mxConnector.js
+++ b/src/js/shape/mxConnector.js
@@ -51,8 +51,8 @@ class mxConnector extends mxPolyLine {
     // The indirection via functions for markers is needed in
     // order to apply the offsets before painting the line and
     // paint the markers after painting the line.
-    var sourceMarker = this.createMarker(c, pts, true);
-    var targetMarker = this.createMarker(c, pts, false);
+    let sourceMarker = this.createMarker(c, pts, true);
+    let targetMarker = this.createMarker(c, pts, false);
 
     super.paintEdgeShape(c, pts);
 
@@ -77,14 +77,14 @@ class mxConnector extends mxPolyLine {
    * paint the marker.
    */
   createMarker = (c, pts, source) => {
-    var result = null;
-    var n = pts.length;
-    var type = mxUtils.getValue(this.style, (source) ? mxConstants.STYLE_STARTARROW : mxConstants.STYLE_ENDARROW);
+    let result = null;
+    let n = pts.length;
+    let type = mxUtils.getValue(this.style, (source) ? mxConstants.STYLE_STARTARROW : mxConstants.STYLE_ENDARROW);
     var p0 = (source) ? pts[1] : pts[n - 2];
-    var pe = (source) ? pts[0] : pts[n - 1];
+    let pe = (source) ? pts[0] : pts[n - 1];
 
     if (type != null && p0 != null && pe != null) {
-      var count = 1;
+      let count = 1;
 
       // Uses next non-overlapping point
       while (count < n - 1 && Math.round(p0.x - pe.x) === 0 && Math.round(p0.y - pe.y) === 0) {
@@ -93,19 +93,19 @@ class mxConnector extends mxPolyLine {
       }
 
       // Computes the norm and the inverse norm
-      var dx = pe.x - p0.x;
-      var dy = pe.y - p0.y;
+      let dx = pe.x - p0.x;
+      let dy = pe.y - p0.y;
 
-      var dist = Math.max(1, Math.sqrt(dx * dx + dy * dy));
+      let dist = Math.max(1, Math.sqrt(dx * dx + dy * dy));
 
-      var unitX = dx / dist;
-      var unitY = dy / dist;
+      let unitX = dx / dist;
+      let unitY = dy / dist;
 
-      var size = mxUtils.getNumber(this.style, (source) ? mxConstants.STYLE_STARTSIZE : mxConstants.STYLE_ENDSIZE, mxConstants.DEFAULT_MARKERSIZE);
+      let size = mxUtils.getNumber(this.style, (source) ? mxConstants.STYLE_STARTSIZE : mxConstants.STYLE_ENDSIZE, mxConstants.DEFAULT_MARKERSIZE);
 
       // Allow for stroke width in the end point used and the
       // orthogonal vectors describing the direction of the marker
-      var filled = this.style[(source) ? mxConstants.STYLE_STARTFILL : mxConstants.STYLE_ENDFILL] !== 0;
+      let filled = this.style[(source) ? mxConstants.STYLE_STARTFILL : mxConstants.STYLE_ENDFILL] !== 0;
 
       result = mxMarker.createMarker(c, this, type, pe, unitX, unitY, size, source, this.strokewidth, filled);
     }
@@ -122,7 +122,7 @@ class mxConnector extends mxPolyLine {
     super.augmentBoundingBox(bbox);
 
     // Adds marker sizes
-    var size = 0;
+    let size = 0;
 
     if (mxUtils.getValue(this.style, mxConstants.STYLE_STARTARROW, mxConstants.NONE) !== mxConstants.NONE) {
       size = mxUtils.getNumber(this.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_MARKERSIZE) + 1;
diff --git a/src/js/shape/mxCylinder.js b/src/js/shape/mxCylinder.js
index d299ddb64..4324a0e11 100644
--- a/src/js/shape/mxCylinder.js
+++ b/src/js/shape/mxCylinder.js
@@ -85,7 +85,7 @@ class mxCylinder extends mxShape {
    * Draws the path for this shape.
    */
   redrawPath = (c, x, y, w, h, isForeground) => {
-    var dy = this.getCylinderSize(x, y, w, h);
+    let dy = this.getCylinderSize(x, y, w, h);
 
     if ((isForeground && this.fill != null) || (!isForeground && this.fill == null)) {
       c.moveTo(0, dy);
diff --git a/src/js/shape/mxDoubleEllipse.js b/src/js/shape/mxDoubleEllipse.js
index d1d62939f..7225168ea 100644
--- a/src/js/shape/mxDoubleEllipse.js
+++ b/src/js/shape/mxDoubleEllipse.js
@@ -27,7 +27,7 @@ class mxDoubleEllipse extends mxShape {
    *   c.ellipse(x, y, w, h);
    *   c.stroke();
    *
-   *   var inset = mxUtils.getValue(this.style, mxConstants.STYLE_MARGIN, Math.min(3 + this.strokewidth, Math.min(w / 5, h / 5)));
+   *   let inset = mxUtils.getValue(this.style, mxConstants.STYLE_MARGIN, Math.min(3 + this.strokewidth, Math.min(w / 5, h / 5)));
    *   x += inset;
    *   y += inset;
    *   w -= 2 * inset;
@@ -80,7 +80,7 @@ class mxDoubleEllipse extends mxShape {
    */
   paintForeground = (c, x, y, w, h) => {
     if (!this.outline) {
-      var margin = mxUtils.getValue(this.style, mxConstants.STYLE_MARGIN, Math.min(3 + this.strokewidth, Math.min(w / 5, h / 5)));
+      let margin = mxUtils.getValue(this.style, mxConstants.STYLE_MARGIN, Math.min(3 + this.strokewidth, Math.min(w / 5, h / 5)));
       x += margin;
       y += margin;
       w -= 2 * margin;
@@ -101,7 +101,7 @@ class mxDoubleEllipse extends mxShape {
    * Returns the bounds for the label.
    */
   getLabelBounds = (rect) => {
-    var margin = (mxUtils.getValue(this.style, mxConstants.STYLE_MARGIN, Math.min(3 + this.strokewidth,
+    let margin = (mxUtils.getValue(this.style, mxConstants.STYLE_MARGIN, Math.min(3 + this.strokewidth,
         Math.min(rect.width / 5 / this.scale, rect.height / 5 / this.scale)))) * this.scale;
 
     return new mxRectangle(rect.x + margin, rect.y + margin, rect.width - 2 * margin, rect.height - 2 * margin);
diff --git a/src/js/shape/mxHexagon.js b/src/js/shape/mxHexagon.js
index 4475e0e08..4a3693e8f 100644
--- a/src/js/shape/mxHexagon.js
+++ b/src/js/shape/mxHexagon.js
@@ -24,7 +24,7 @@ class mxHexagon extends mxActor {
    * Draws the path for this shape.
    */
   redrawPath = (c, x, y, w, h) => {
-    var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+    let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
     this.addPoints(c, [new mxPoint(0.25 * w, 0), new mxPoint(0.75 * w, 0), new mxPoint(w, 0.5 * h), new mxPoint(0.75 * w, h),
       new mxPoint(0.25 * w, h), new mxPoint(0, 0.5 * h)], this.isRounded, arcSize, true);
   };
diff --git a/src/js/shape/mxImageShape.js b/src/js/shape/mxImageShape.js
index 3aabeee24..7a00f1a8c 100644
--- a/src/js/shape/mxImageShape.js
+++ b/src/js/shape/mxImageShape.js
@@ -103,7 +103,7 @@ class mxImageShape extends mxRectangleShape {
    * so that the HTML creation is optional.
    */
   createHtml = () => {
-    var node = document.createElement('div');
+    let node = document.createElement('div');
     node.style.position = 'absolute';
 
     return node;
@@ -125,8 +125,8 @@ class mxImageShape extends mxRectangleShape {
    */
   paintVertexShape = (c, x, y, w, h) => {
     if (this.image != null) {
-      var fill = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BACKGROUND, null);
-      var stroke = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BORDER, null);
+      let fill = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BACKGROUND, null);
+      let stroke = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BORDER, null);
 
       if (fill != null) {
         // Stroke rendering required for shadow
@@ -139,7 +139,7 @@ class mxImageShape extends mxRectangleShape {
       // FlipH/V are implicit via mxShape.updateTransform
       c.image(x, y, w, h, this.image, this.preserveImageAspect, false, false);
 
-      var stroke = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BORDER, null);
+      let stroke = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BORDER, null);
 
       if (stroke != null) {
         c.setShadow(false);
@@ -165,18 +165,18 @@ class mxImageShape extends mxRectangleShape {
     this.node.innerHTML = '';
 
     if (this.image != null) {
-      var fill = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BACKGROUND, '');
-      var stroke = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BORDER, '');
+      let fill = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BACKGROUND, '');
+      let stroke = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BORDER, '');
       this.node.style.backgroundColor = fill;
       this.node.style.borderColor = stroke;
 
       // VML image supports PNG in IE6
-      var img = document.createElement('img');
+      let img = document.createElement('img');
       img.setAttribute('border', '0');
       img.style.position = 'absolute';
       img.src = this.image;
 
-      var filter = (this.opacity < 100) ? 'alpha(opacity=' + this.opacity + ')' : '';
+      let filter = (this.opacity < 100) ? 'alpha(opacity=' + this.opacity + ')' : '';
       this.node.style.filter = filter;
 
       if (this.flipH && this.flipV) {
diff --git a/src/js/shape/mxLabel.js b/src/js/shape/mxLabel.js
index 82f9e58d1..bdedfb480 100644
--- a/src/js/shape/mxLabel.js
+++ b/src/js/shape/mxLabel.js
@@ -124,7 +124,7 @@ paintForeground = (c, x, y, w, h) => {
  */
 paintImage = (c, x, y, w, h) => {
   if (this.image != null) {
-    var bounds = this.getImageBounds(x, y, w, h);
+    let bounds = this.getImageBounds(x, y, w, h);
     c.image(bounds.x, bounds.y, bounds.width, bounds.height, this.image, false, false, false);
   }
 };
@@ -135,11 +135,11 @@ paintImage = (c, x, y, w, h) => {
  * Generic background painting implementation.
  */
 getImageBounds = (x, y, w, h) => {
-  var align = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_ALIGN, mxConstants.ALIGN_LEFT);
-  var valign = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE);
-  var width = mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_WIDTH, mxConstants.DEFAULT_IMAGESIZE);
-  var height = mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_HEIGHT, mxConstants.DEFAULT_IMAGESIZE);
-  var spacing = mxUtils.getNumber(this.style, mxConstants.STYLE_SPACING, this.spacing) + 5;
+  let align = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_ALIGN, mxConstants.ALIGN_LEFT);
+  let valign = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE);
+  let width = mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_WIDTH, mxConstants.DEFAULT_IMAGESIZE);
+  let height = mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_HEIGHT, mxConstants.DEFAULT_IMAGESIZE);
+  let spacing = mxUtils.getNumber(this.style, mxConstants.STYLE_SPACING, this.spacing) + 5;
 
   if (align == mxConstants.ALIGN_CENTER) {
     x += (w - width) / 2;
@@ -172,7 +172,7 @@ paintIndicator = (c, x, y, w, h) => {
     this.indicator.bounds = this.getIndicatorBounds(x, y, w, h);
     this.indicator.paint(c);
   } else if (this.indicatorImage != null) {
-    var bounds = this.getIndicatorBounds(x, y, w, h);
+    let bounds = this.getIndicatorBounds(x, y, w, h);
     c.image(bounds.x, bounds.y, bounds.width, bounds.height, this.indicatorImage, false, false, false);
   }
 };
@@ -183,11 +183,11 @@ paintIndicator = (c, x, y, w, h) => {
  * Generic background painting implementation.
  */
 getIndicatorBounds = (x, y, w, h) => {
-  var align = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_ALIGN, mxConstants.ALIGN_LEFT);
-  var valign = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE);
-  var width = mxUtils.getNumber(this.style, mxConstants.STYLE_INDICATOR_WIDTH, this.indicatorSize);
-  var height = mxUtils.getNumber(this.style, mxConstants.STYLE_INDICATOR_HEIGHT, this.indicatorSize);
-  var spacing = this.spacing + 5;
+  let align = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_ALIGN, mxConstants.ALIGN_LEFT);
+  let valign = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE);
+  let width = mxUtils.getNumber(this.style, mxConstants.STYLE_INDICATOR_WIDTH, this.indicatorSize);
+  let height = mxUtils.getNumber(this.style, mxConstants.STYLE_INDICATOR_HEIGHT, this.indicatorSize);
+  let spacing = this.spacing + 5;
 
   if (align == mxConstants.ALIGN_RIGHT) {
     x += w - width - spacing;
@@ -223,11 +223,11 @@ redrawHtmlShape = () => {
   }
 
   if (this.image != null) {
-    var node = document.createElement('img');
+    let node = document.createElement('img');
     node.style.position = 'relative';
     node.setAttribute('border', '0');
 
-    var bounds = this.getImageBounds(this.bounds.x, this.bounds.y, this.bounds.width, this.bounds.height);
+    let bounds = this.getImageBounds(this.bounds.x, this.bounds.y, this.bounds.width, this.bounds.height);
     bounds.x -= this.bounds.x;
     bounds.y -= this.bounds.y;
 
diff --git a/src/js/shape/mxLine.js b/src/js/shape/mxLine.js
index d79ca2327..c0018d629 100644
--- a/src/js/shape/mxLine.js
+++ b/src/js/shape/mxLine.js
@@ -49,11 +49,11 @@ class mxLine extends mxShape {
     c.begin();
 
     if (this.vertical) {
-      var mid = x + w / 2;
+      let mid = x + w / 2;
       c.moveTo(mid, y);
       c.lineTo(mid, y + h);
     } else {
-      var mid = y + h / 2;
+      let mid = y + h / 2;
       c.moveTo(x, mid);
       c.lineTo(x + w, mid);
     }
diff --git a/src/js/shape/mxMarker.js b/src/js/shape/mxMarker.js
index 1783db05a..da2826626 100644
--- a/src/js/shape/mxMarker.js
+++ b/src/js/shape/mxMarker.js
@@ -3,7 +3,7 @@
  * Copyright (c) 2006-2015, Gaudenz Alder
  * Updated to ES9 syntax by David Morrissey 2021
  */
-var mxMarker =
+let mxMarker =
     {
       /**
        * Class: mxMarker
@@ -33,7 +33,7 @@ var mxMarker =
        * Returns a function to paint the given marker.
        */
       createMarker: (canvas, shape, type, pe, unitX, unitY, size, source, sw, filled) => {
-        var funct = mxMarker.markers[type];
+        let funct = mxMarker.markers[type];
 
         return (funct != null) ? funct(canvas, shape, type, pe, unitX, unitY, size, source, sw, filled) : null;
       }
@@ -51,17 +51,17 @@ var mxMarker =
       // The angle of the forward facing arrow sides against the x axis is
       // 26.565 degrees, 1/sin(26.565) = 2.236 / 2 = 1.118 ( / 2 allows for
       // only half the strokewidth is processed ).
-      var endOffsetX = unitX * sw * 1.118;
-      var endOffsetY = unitY * sw * 1.118;
+      let endOffsetX = unitX * sw * 1.118;
+      let endOffsetY = unitY * sw * 1.118;
 
       unitX = unitX * (size + sw);
       unitY = unitY * (size + sw);
 
-      var pt = pe.clone();
+      let pt = pe.clone();
       pt.x -= endOffsetX;
       pt.y -= endOffsetY;
 
-      var f = (type != mxConstants.ARROW_CLASSIC && type != mxConstants.ARROW_CLASSIC_THIN) ? 1 : 3 / 4;
+      let f = (type != mxConstants.ARROW_CLASSIC && type != mxConstants.ARROW_CLASSIC_THIN) ? 1 : 3 / 4;
       pe.x += -unitX * f - endOffsetX;
       pe.y += -unitY * f - endOffsetY;
 
@@ -98,13 +98,13 @@ var mxMarker =
       // The angle of the forward facing arrow sides against the x axis is
       // 26.565 degrees, 1/sin(26.565) = 2.236 / 2 = 1.118 ( / 2 allows for
       // only half the strokewidth is processed ).
-      var endOffsetX = unitX * sw * 1.118;
-      var endOffsetY = unitY * sw * 1.118;
+      let endOffsetX = unitX * sw * 1.118;
+      let endOffsetY = unitY * sw * 1.118;
 
       unitX = unitX * (size + sw);
       unitY = unitY * (size + sw);
 
-      var pt = pe.clone();
+      let pt = pe.clone();
       pt.x -= endOffsetX;
       pt.y -= endOffsetY;
 
@@ -125,9 +125,9 @@ var mxMarker =
   mxMarker.addMarker('openThin', createOpenArrow(3));
 
   mxMarker.addMarker('oval', (canvas, shape, type, pe, unitX, unitY, size, source, sw, filled) => {
-    var a = size / 2;
+    let a = size / 2;
 
-    var pt = pe.clone();
+    let pt = pe.clone();
     pe.x -= unitX * a;
     pe.y -= unitY * a;
 
@@ -148,14 +148,14 @@ var mxMarker =
     // only half the strokewidth is processed ). Or 0.9862 for thin diamond.
     // Note these values and the tk variable below are dependent, update
     // both together (saves trig hard coding it).
-    var swFactor = (type == mxConstants.ARROW_DIAMOND) ? 0.7071 : 0.9862;
-    var endOffsetX = unitX * sw * swFactor;
-    var endOffsetY = unitY * sw * swFactor;
+    let swFactor = (type == mxConstants.ARROW_DIAMOND) ? 0.7071 : 0.9862;
+    let endOffsetX = unitX * sw * swFactor;
+    let endOffsetY = unitY * sw * swFactor;
 
     unitX = unitX * (size + sw);
     unitY = unitY * (size + sw);
 
-    var pt = pe.clone();
+    let pt = pe.clone();
     pt.x -= endOffsetX;
     pt.y -= endOffsetY;
 
@@ -163,7 +163,7 @@ var mxMarker =
     pe.y += -unitY - endOffsetY;
 
     // thickness factor for diamond
-    var tk = ((type == mxConstants.ARROW_DIAMOND) ? 2 : 3.4);
+    let tk = ((type == mxConstants.ARROW_DIAMOND) ? 2 : 3.4);
 
     return () => {
       canvas.begin();
diff --git a/src/js/shape/mxPolyline.js b/src/js/shape/mxPolyline.js
index ee5412c34..43624d2d7 100644
--- a/src/js/shape/mxPolyline.js
+++ b/src/js/shape/mxPolyline.js
@@ -65,7 +65,7 @@ class mxPolyline extends mxShape {
    * Paints the line shape.
    */
   paintEdgeShape = (c, pts) => {
-    var prev = c.pointerEventsValue;
+    let prev = c.pointerEventsValue;
     c.pointerEventsValue = 'stroke';
 
     if (this.style == null || this.style[mxConstants.STYLE_CURVED] != 1) {
@@ -83,7 +83,7 @@ class mxPolyline extends mxShape {
    * Paints the line shape.
    */
   paintLine = (c, pts, rounded) => {
-    var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+    let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
     c.begin();
     this.addPoints(c, pts, rounded, arcSize, false);
     c.stroke();
@@ -97,16 +97,16 @@ class mxPolyline extends mxShape {
   paintCurvedLine = (c, pts) => {
     c.begin();
 
-    var pt = pts[0];
-    var n = pts.length;
+    let pt = pts[0];
+    let n = pts.length;
 
     c.moveTo(pt.x, pt.y);
 
-    for (var i = 1; i < n - 2; i++) {
+    for (let i = 1; i < n - 2; i++) {
       var p0 = pts[i];
       var p1 = pts[i + 1];
-      var ix = (p0.x + p1.x) / 2;
-      var iy = (p0.y + p1.y) / 2;
+      let ix = (p0.x + p1.x) / 2;
+      let iy = (p0.y + p1.y) / 2;
 
       c.quadTo(p0.x, p0.y, ix, iy);
     }
diff --git a/src/js/shape/mxRectangleShape.js b/src/js/shape/mxRectangleShape.js
index 03c9c443d..5ab34fac5 100644
--- a/src/js/shape/mxRectangleShape.js
+++ b/src/js/shape/mxRectangleShape.js
@@ -39,7 +39,7 @@ class mxRectangleShape extends mxShape {
    * Returns true for non-rounded, non-rotated shapes with no glass gradient.
    */
   isHtmlAllowed = () => {
-    var events = true;
+    let events = true;
 
     if (this.style != null) {
       events = mxUtils.getValue(this.style, mxConstants.STYLE_POINTER_EVENTS, '1') == '1';
@@ -55,7 +55,7 @@ class mxRectangleShape extends mxShape {
    * Generic background painting implementation.
    */
   paintBackground = (c, x, y, w, h) => {
-    var events = true;
+    let events = true;
 
     if (this.style != null) {
       events = mxUtils.getValue(this.style, mxConstants.STYLE_POINTER_EVENTS, '1') == '1';
@@ -68,13 +68,13 @@ class mxRectangleShape extends mxShape {
       }
 
       if (this.isRounded) {
-        var r = 0;
+        let r = 0;
 
         if (mxUtils.getValue(this.style, mxConstants.STYLE_ABSOLUTE_ARCSIZE, 0) == '1') {
           r = Math.min(w / 2, Math.min(h / 2, mxUtils.getValue(this.style,
               mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2));
         } else {
-          var f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
+          let f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
               mxConstants.RECTANGLE_ROUNDING_FACTOR * 100) / 100;
           r = Math.min(w * f, h * f);
         }
diff --git a/src/js/shape/mxRhombus.js b/src/js/shape/mxRhombus.js
index 569c59a16..0df028aef 100644
--- a/src/js/shape/mxRhombus.js
+++ b/src/js/shape/mxRhombus.js
@@ -48,10 +48,10 @@ class mxRhombus extends mxShape {
    * Generic painting implementation.
    */
   paintVertexShape = (c, x, y, w, h) => {
-    var hw = w / 2;
-    var hh = h / 2;
+    let hw = w / 2;
+    let hh = h / 2;
 
-    var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+    let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
     c.begin();
     this.addPoints(c, [new mxPoint(x + hw, y), new mxPoint(x + w, y + hh), new mxPoint(x + hw, y + h),
       new mxPoint(x, y + hh)], this.isRounded, arcSize, true);
diff --git a/src/js/shape/mxShape.js b/src/js/shape/mxShape.js
index d397840b0..3b5a7d06f 100644
--- a/src/js/shape/mxShape.js
+++ b/src/js/shape/mxShape.js
@@ -204,7 +204,7 @@ class mxShape {
    * vertex style, the following code is used:
    *
    * (code)
-   * var style = graph.getStylesheet().getDefaultVertexStyle();
+   * let style = graph.getStylesheet().getDefaultVertexStyle();
    * style[mxConstants.STYLE_SHAPE] = 'customShape';
    * (end)
    *
@@ -279,7 +279,7 @@ class mxShape {
    * Returns 0, or 0.5 if <strokewidth> % 2 == 1.
    */
   getSvgScreenOffset = () => {
-    var sw = this.stencil && this.stencil.strokewidth !== 'inherit' ? Number(this.stencil.strokewidth) : this.strokewidth;
+    let sw = this.stencil && this.stencil.strokewidth !== 'inherit' ? Number(this.stencil.strokewidth) : this.strokewidth;
 
     return (mxUtils.mod(Math.max(1, Math.round(sw * this.scale)), 2) === 1) ? 0.5 : 0;
   };
@@ -297,7 +297,7 @@ class mxShape {
    * container - DOM node that will contain the shape.
    */
   create = (container) => {
-    var node = null;
+    let node = null;
 
     if (container != null && container.ownerSVGElement != null) {
       node = this.createSvg(container);
@@ -325,7 +325,7 @@ class mxShape {
    * so that the HTML creation is optional.
    */
   createHtml = () => {
-    var node = document.createElement('div');
+    let node = document.createElement('div');
     node.style.position = 'absolute';
 
     return node;
@@ -389,12 +389,12 @@ class mxShape {
    * Updates the bounds based on the points.
    */
   updateBoundsFromPoints = () => {
-    var pts = this.points;
+    let pts = this.points;
 
     if (pts != null && pts.length > 0 && pts[0] != null) {
       this.bounds = new mxRectangle(Number(pts[0].x), Number(pts[0].y), 1, 1);
 
-      for (var i = 1; i < this.points.length; i++) {
+      for (let i = 1; i < this.points.length; i++) {
         if (pts[i] != null) {
           this.bounds.add(new mxRectangle(Number(pts[i].x), Number(pts[i].y), 1, 1));
         }
@@ -410,29 +410,29 @@ class mxShape {
    * change the rectangle in-place. This implementation returns the given rect.
    */
   getLabelBounds = (rect) => {
-    var d = mxUtils.getValue(this.style, mxConstants.STYLE_DIRECTION, mxConstants.DIRECTION_EAST);
-    var bounds = rect;
+    let d = mxUtils.getValue(this.style, mxConstants.STYLE_DIRECTION, mxConstants.DIRECTION_EAST);
+    let bounds = rect;
 
     // Normalizes argument for getLabelMargins hook
     if (d !== mxConstants.DIRECTION_SOUTH && d !== mxConstants.DIRECTION_NORTH &&
         this.state != null && this.state.text != null &&
         this.state.text.isPaintBoundsInverted()) {
       bounds = bounds.clone();
-      var tmp = bounds.width;
+      let tmp = bounds.width;
       bounds.width = bounds.height;
       bounds.height = tmp;
     }
 
-    var m = this.getLabelMargins(bounds);
+    let m = this.getLabelMargins(bounds);
 
     if (m != null) {
-      var flipH = mxUtils.getValue(this.style, mxConstants.STYLE_FLIPH, false) == '1';
-      var flipV = mxUtils.getValue(this.style, mxConstants.STYLE_FLIPV, false) == '1';
+      let flipH = mxUtils.getValue(this.style, mxConstants.STYLE_FLIPH, false) == '1';
+      let flipV = mxUtils.getValue(this.style, mxConstants.STYLE_FLIPV, false) == '1';
 
       // Handles special case for vertical labels
       if (this.state != null && this.state.text != null &&
           this.state.text.isPaintBoundsInverted()) {
-        var tmp = m.x;
+        let tmp = m.x;
         m.x = m.height;
         m.height = m.width;
         m.width = m.y;
@@ -478,7 +478,7 @@ class mxShape {
    * Updates the SVG shape.
    */
   redrawShape = () => {
-    var canvas = this.createCanvas();
+    let canvas = this.createCanvas();
 
     if (canvas != null) {
       // Specifies if events should be handled
@@ -503,7 +503,7 @@ class mxShape {
    * Creates a new canvas for drawing this shape. May return null.
    */
   createCanvas = () => {
-    var canvas = null;
+    let canvas = null;
 
     // LATER: Check if reusing existing DOM nodes improves performance
     if (this.node.ownerSVGElement != null) {
@@ -541,10 +541,10 @@ class mxShape {
    * Creates and returns an <mxSvgCanvas2D> for rendering this shape.
    */
   createSvgCanvas = () => {
-    var canvas = new mxSvgCanvas2D(this.node, false);
+    let canvas = new mxSvgCanvas2D(this.node, false);
     canvas.strokeTolerance = (this.pointerEvents) ? this.svgStrokeTolerance : 0;
     canvas.pointerEventsValue = this.svgPointerEvents;
-    var off = this.getSvgScreenOffset();
+    let off = this.getSvgScreenOffset();
 
     if (off !== 0) {
       this.node.setAttribute('transform', 'translate(' + off + ',' + off + ')');
@@ -582,7 +582,7 @@ class mxShape {
    * Allow optimization by replacing VML with HTML.
    */
   updateHtmlFilters = (node) => {
-    var f = '';
+    let f = '';
 
     if (this.opacity < 100) {
       f += 'alpha(opacity=' + (this.opacity) + ')';
@@ -597,12 +597,12 @@ class mxShape {
     }
 
     if (this.fill != null && this.fill !== mxConstants.NONE && this.gradient && this.gradient !== mxConstants.NONE) {
-      var start = this.fill;
-      var end = this.gradient;
-      var type = '0';
+      let start = this.fill;
+      let end = this.gradient;
+      let type = '0';
 
-      var lookup = {east: 0, south: 1, west: 2, north: 3};
-      var dir = (this.direction != null) ? lookup[this.direction] : 0;
+      let lookup = {east: 0, south: 1, west: 2, north: 3};
+      let dir = (this.direction != null) ? lookup[this.direction] : 0;
 
       if (this.gradientDirection != null) {
         dir = mxUtils.mod(dir + lookup[this.gradientDirection] - 1, 4);
@@ -610,11 +610,11 @@ class mxShape {
 
       if (dir === 1) {
         type = '1';
-        var tmp = start;
+        let tmp = start;
         start = end;
         end = tmp;
       } else if (dir === 2) {
-        var tmp = start;
+        let tmp = start;
         start = end;
         end = tmp;
       } else if (dir === 3) {
@@ -635,7 +635,7 @@ class mxShape {
    * Allow optimization by replacing VML with HTML.
    */
   updateHtmlColors = (node) => {
-    var color = this.stroke;
+    let color = this.stroke;
 
     if (color != null && color !== mxConstants.NONE) {
       node.style.borderColor = color;
@@ -671,7 +671,7 @@ class mxShape {
    * Allow optimization by replacing VML with HTML.
    */
   updateHtmlBounds = (node) => {
-    var sw = (document.documentMode >= 9) ? 0 : Math.ceil(this.strokewidth * this.scale);
+    let sw = (document.documentMode >= 9) ? 0 : Math.ceil(this.strokewidth * this.scale);
     node.style.borderWidth = Math.max(1, sw) + 'px';
     node.style.overflow = 'hidden';
 
@@ -697,7 +697,7 @@ class mxShape {
     if (canvas instanceof mxSvgCanvas2D) {
       // Increments ref counts
       for (var key in canvas.gradients) {
-        var gradient = canvas.gradients[key];
+        let gradient = canvas.gradients[key];
 
         if (gradient != null) {
           gradient.mxRefCount = (gradient.mxRefCount || 0) + 1;
@@ -731,17 +731,17 @@ class mxShape {
    * Generic rendering code.
    */
   paint = (c) => {
-    var strokeDrawn = false;
+    let strokeDrawn = false;
 
     if (c != null && this.outline) {
-      var stroke = c.stroke;
+      let stroke = c.stroke;
 
       c.stroke = () => {
         strokeDrawn = true;
         stroke.apply(this, arguments);
       };
 
-      var fillAndStroke = c.fillAndStroke;
+      let fillAndStroke = c.fillAndStroke;
 
       c.fillAndStroke = () => {
         strokeDrawn = true;
@@ -750,17 +750,17 @@ class mxShape {
     }
 
     // Scale is passed-through to canvas
-    var s = this.scale;
-    var x = this.bounds.x / s;
-    var y = this.bounds.y / s;
-    var w = this.bounds.width / s;
-    var h = this.bounds.height / s;
+    let s = this.scale;
+    let x = this.bounds.x / s;
+    let y = this.bounds.y / s;
+    let w = this.bounds.width / s;
+    let h = this.bounds.height / s;
 
     if (this.isPaintBoundsInverted()) {
-      var t = (w - h) / 2;
+      let t = (w - h) / 2;
       x += t;
       y -= t;
-      var tmp = w;
+      let tmp = w;
       w = h;
       h = tmp;
     }
@@ -769,17 +769,17 @@ class mxShape {
     this.configureCanvas(c, x, y, w, h);
 
     // Adds background rectangle to capture events
-    var bg = null;
+    let bg = null;
 
     if ((this.stencil == null && this.points == null && this.shapePointerEvents) ||
         (this.stencil != null && this.stencilPointerEvents)) {
-      var bb = this.createBoundingBox();
+      let bb = this.createBoundingBox();
 
       if (this.dialect === mxConstants.DIALECT_SVG) {
         bg = this.createTransparentSvgRectangle(bb.x, bb.y, bb.width, bb.height);
         this.node.appendChild(bg);
       } else {
-        var rect = c.createRect('rect', bb.x / s, bb.y / s, bb.width / s, bb.height / s);
+        let rect = c.createRect('rect', bb.x / s, bb.y / s, bb.width / s, bb.height / s);
         rect.appendChild(c.createTransparentFill());
         rect.stroked = 'false';
         c.root.appendChild(rect);
@@ -794,9 +794,9 @@ class mxShape {
 
       if (this.points != null) {
         // Paints edge shape
-        var pts = [];
+        let pts = [];
 
-        for (var i = 0; i < this.points.length; i++) {
+        for (let i = 0; i < this.points.length; i++) {
           if (this.points[i] != null) {
             pts.push(new mxPoint(this.points[i].x / s, this.points[i].y / s));
           }
@@ -826,7 +826,7 @@ class mxShape {
    * Sets the state of the canvas for drawing the shape.
    */
   configureCanvas = (c, x, y, w, h) => {
-    var dash = null;
+    let dash = null;
 
     if (this.style != null) {
       dash = this.style['dashPattern'];
@@ -852,7 +852,7 @@ class mxShape {
     }
 
     if (this.fill != null && this.fill !== mxConstants.NONE && this.gradient && this.gradient !== mxConstants.NONE) {
-      var b = this.getGradientBounds(c, x, y, w, h);
+      let b = this.getGradientBounds(c, x, y, w, h);
       c.setGradient(this.fill, this.gradient, b.x, b.y, b.width, b.height, this.gradientDirection);
     } else {
       c.setFillColor(this.fill);
@@ -928,13 +928,13 @@ class mxShape {
    * Returns the arc size for the given dimension.
    */
   getArcSize = (w, h) => {
-    var r = 0;
+    let r = 0;
 
     if (mxUtils.getValue(this.style, mxConstants.STYLE_ABSOLUTE_ARCSIZE, 0) == '1') {
       r = Math.min(w / 2, Math.min(h / 2, mxUtils.getValue(this.style,
           mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2));
     } else {
-      var f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
+      let f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
           mxConstants.RECTANGLE_ROUNDING_FACTOR * 100) / 100;
       r = Math.min(w * f, h * f);
     }
@@ -948,8 +948,8 @@ class mxShape {
    * Paints the glass gradient effect.
    */
   paintGlassEffect = (c, x, y, w, h, arc) => {
-    var sw = Math.ceil(this.strokewidth / 2);
-    var size = 0.4;
+    let sw = Math.ceil(this.strokewidth / 2);
+    let size = 0.4;
 
     c.setGradient('#ffffff', '#ffffff', x, y, w, h * 0.6, 'south', 0.9, 0.1);
     c.begin();
@@ -981,18 +981,18 @@ class mxShape {
   addPoints = (c, pts, rounded, arcSize, close, exclude, initialMove) => {
     if (pts != null && pts.length > 0) {
       initialMove = (initialMove != null) ? initialMove : true;
-      var pe = pts[pts.length - 1];
+      let pe = pts[pts.length - 1];
 
       // Adds virtual waypoint in the center between start and end point
       if (close && rounded) {
         pts = pts.slice();
         var p0 = pts[0];
-        var wp = new mxPoint(pe.x + (p0.x - pe.x) / 2, pe.y + (p0.y - pe.y) / 2);
+        let wp = new mxPoint(pe.x + (p0.x - pe.x) / 2, pe.y + (p0.y - pe.y) / 2);
         pts.splice(0, 0, wp);
       }
 
-      var pt = pts[0];
-      var i = 1;
+      let pt = pts[0];
+      let i = 1;
 
       // Draws the line segments
       if (initialMove) {
@@ -1002,15 +1002,15 @@ class mxShape {
       }
 
       while (i < ((close) ? pts.length : pts.length - 1)) {
-        var tmp = pts[mxUtils.mod(i, pts.length)];
-        var dx = pt.x - tmp.x;
-        var dy = pt.y - tmp.y;
+        let tmp = pts[mxUtils.mod(i, pts.length)];
+        let dx = pt.x - tmp.x;
+        let dy = pt.y - tmp.y;
 
         if (rounded && (dx != 0 || dy != 0) && (exclude == null || mxUtils.indexOf(exclude, i - 1) < 0)) {
           // Draws a line from the last point to the current
           // point with a spacing of size off the current point
           // into direction of the last point
-          var dist = Math.sqrt(dx * dx + dy * dy);
+          let dist = Math.sqrt(dx * dx + dy * dy);
           var nx1 = dx * Math.min(arcSize, dist / 2) / dist;
           var ny1 = dy * Math.min(arcSize, dist / 2) / dist;
 
@@ -1021,7 +1021,7 @@ class mxShape {
           // Draws a curve from the last point to the current
           // point with a spacing of size off the current point
           // into direction of the next point
-          var next = pts[mxUtils.mod(i + 1, pts.length)];
+          let next = pts[mxUtils.mod(i + 1, pts.length)];
 
           // Uses next non-overlapping point
           while (i < pts.length - 2 && Math.round(next.x - tmp.x) === 0 && Math.round(next.y - tmp.y) === 0) {
@@ -1147,7 +1147,7 @@ class mxShape {
       }
 
       if (this.direction === mxConstants.DIRECTION_NORTH || this.direction === mxConstants.DIRECTION_SOUTH) {
-        var tmp = this.flipH;
+        let tmp = this.flipH;
         this.flipH = this.flipV;
         this.flipV = tmp;
       }
@@ -1221,7 +1221,7 @@ class mxShape {
     // LATER: Use getBoundingClientRect for fallback in VML
     if (this.useSvgBoundingBox && this.node != null && this.node.ownerSVGElement != null) {
       try {
-        var b = this.node.getBBox();
+        let b = this.node.getBBox();
 
         if (b.width > 0 && b.height > 0) {
           this.boundingBox = new mxRectangle(b.x, b.y, b.width, b.height);
@@ -1237,11 +1237,11 @@ class mxShape {
     }
 
     if (this.bounds != null) {
-      var bbox = this.createBoundingBox();
+      let bbox = this.createBoundingBox();
 
       if (bbox != null) {
         this.augmentBoundingBox(bbox);
-        var rot = this.getShapeRotation();
+        let rot = this.getShapeRotation();
 
         if (rot != 0) {
           bbox = mxUtils.getBoundingBox(bbox, rot);
@@ -1259,7 +1259,7 @@ class mxShape {
    * with no shadows or strokewidths.
    */
   createBoundingBox = () => {
-    var bb = this.bounds.clone();
+    let bb = this.bounds.clone();
 
     if ((this.stencil != null && (this.direction === mxConstants.DIRECTION_NORTH ||
         this.direction === mxConstants.DIRECTION_SOUTH)) || this.isPaintBoundsInverted()) {
@@ -1310,7 +1310,7 @@ class mxShape {
    * Returns the rotation for the text label.
    */
   getTextRotation = () => {
-    var rot = this.getRotation();
+    let rot = this.getRotation();
 
     if (mxUtils.getValue(this.style, mxConstants.STYLE_HORIZONTAL, 1) != 1) {
       rot += verticalTextRotation;
@@ -1325,7 +1325,7 @@ class mxShape {
    * Returns the actual rotation of the shape.
    */
   getShapeRotation = () => {
-    var rot = this.getRotation();
+    let rot = this.getRotation();
 
     if (this.direction != null) {
       if (this.direction === mxConstants.DIRECTION_NORTH) {
@@ -1346,7 +1346,7 @@ class mxShape {
    * Adds a transparent rectangle that catches all events.
    */
   createTransparentSvgRectangle = (x, y, w, h) => {
-    var rect = document.createElementNS(mxConstants.NS_SVG, 'rect');
+    let rect = document.createElementNS(mxConstants.NS_SVG, 'rect');
     rect.setAttribute('x', x);
     rect.setAttribute('y', y);
     rect.setAttribute('width', w);
@@ -1377,7 +1377,7 @@ class mxShape {
   releaseSvgGradients = (grads) => {
     if (grads != null) {
       for (var key in grads) {
-        var gradient = grads[key];
+        let gradient = grads[key];
 
         if (gradient != null) {
           gradient.mxRefCount = (gradient.mxRefCount || 0) - 1;
diff --git a/src/js/shape/mxStencil.js b/src/js/shape/mxStencil.js
index 5929f5112..b8eb1cfb5 100644
--- a/src/js/shape/mxStencil.js
+++ b/src/js/shape/mxStencil.js
@@ -302,14 +302,14 @@ class mxStencil extends mxShape {
     // Possible values for aspect are: variable and fixed where
     // variable means fill the available space and fixed means
     // use w0 and h0 to compute the aspect.
-    var aspect = this.desc.getAttribute('aspect');
+    let aspect = this.desc.getAttribute('aspect');
     this.aspect = (aspect != null) ? aspect : 'variable';
 
     // Possible values for strokewidth are all numbers and "inherit"
     // where the inherit means take the value from the style (ie. the
     // user-defined stroke-width). Note that the strokewidth is scaled
     // by the minimum scaling that is used to draw the shape (sx, sy).
-    var sw = this.desc.getAttribute('strokewidth');
+    let sw = this.desc.getAttribute('strokewidth');
     this.strokewidth = (sw != null) ? sw : '1';
   };
 
@@ -320,15 +320,15 @@ class mxStencil extends mxShape {
    * <parseConstraint>.
    */
   parseConstraints = () => {
-    var conns = this.desc.getElementsByTagName('connections')[0];
+    let conns = this.desc.getElementsByTagName('connections')[0];
 
     if (conns != null) {
-      var tmp = mxUtils.getChildNodes(conns);
+      let tmp = mxUtils.getChildNodes(conns);
 
       if (tmp != null && tmp.length > 0) {
         this.constraints = [];
 
-        for (var i = 0; i < tmp.length; i++) {
+        for (let i = 0; i < tmp.length; i++) {
           this.constraints.push(this.parseConstraint(tmp[i]));
         }
       }
@@ -341,10 +341,10 @@ class mxStencil extends mxShape {
    * Parses the given XML node and returns its <mxConnectionConstraint>.
    */
   parseConstraint = (node) => {
-    var x = Number(node.getAttribute('x'));
-    var y = Number(node.getAttribute('y'));
-    var perimeter = node.getAttribute('perimeter') == '1';
-    var name = node.getAttribute('name');
+    let x = Number(node.getAttribute('x'));
+    let y = Number(node.getAttribute('y'));
+    let perimeter = node.getAttribute('perimeter') == '1';
+    let name = node.getAttribute('name');
 
     return new mxConnectionConstraint(new mxPoint(x, y), perimeter, name);
   };
@@ -357,8 +357,8 @@ class mxStencil extends mxShape {
    * node is 1 or if <defaultLocalized> is true.
    */
   evaluateTextAttribute = (node, attribute, shape) => {
-    var result = this.evaluateAttribute(node, attribute, shape);
-    var loc = node.getAttribute('localized');
+    let result = this.evaluateAttribute(node, attribute, shape);
+    let loc = node.getAttribute('localized');
 
     if ((mxStencil.defaultLocalized && loc == null) || loc == '1') {
       result = mxResources.get(result);
@@ -376,13 +376,13 @@ class mxStencil extends mxShape {
    * value is used as the attribute value to be returned.
    */
   evaluateAttribute = (node, attribute, shape) => {
-    var result = node.getAttribute(attribute);
+    let result = node.getAttribute(attribute);
 
     if (result == null) {
-      var text = mxUtils.getTextContent(node);
+      let text = mxUtils.getTextContent(node);
 
       if (text != null && mxStencil.allowEval) {
-        var funct = mxUtils.eval(text);
+        let funct = mxUtils.eval(text);
 
         if (typeof (funct) == 'function') {
           result = funct(shape);
@@ -399,7 +399,7 @@ class mxStencil extends mxShape {
    * Draws this stencil inside the given bounds.
    */
   drawShape = (canvas, shape, x, y, w, h) => {
-    var stack = canvas.states.slice();
+    let stack = canvas.states.slice();
 
     // TODO: Internal structure (array of special structs?), relative and absolute
     // coordinates (eg. note shape, process vs star, actor etc.), text rendering
@@ -407,10 +407,10 @@ class mxStencil extends mxShape {
     // (start, segment, end blocks), pluggable markers, how to implement
     // swimlanes (title area) with this API, add icon, horizontal/vertical
     // label, indicator for all shapes, rotation
-    var direction = mxUtils.getValue(shape.style, mxConstants.STYLE_DIRECTION, null);
-    var aspect = this.computeAspect(shape.style, x, y, w, h, direction);
-    var minScale = Math.min(aspect.width, aspect.height);
-    var sw = (this.strokewidth == 'inherit') ?
+    let direction = mxUtils.getValue(shape.style, mxConstants.STYLE_DIRECTION, null);
+    let aspect = this.computeAspect(shape.style, x, y, w, h, direction);
+    let minScale = Math.min(aspect.width, aspect.height);
+    let sw = (this.strokewidth == 'inherit') ?
         Number(mxUtils.getNumber(shape.style, mxConstants.STYLE_STROKEWIDTH, 1)) :
         Number(this.strokewidth) * minScale;
     canvas.setStrokeWidth(sw);
@@ -441,7 +441,7 @@ class mxStencil extends mxShape {
    */
   drawChildren = (canvas, shape, x, y, w, h, node, aspect, disableShadow, paint) => {
     if (node != null && w > 0 && h > 0) {
-      var tmp = node.firstChild;
+      let tmp = node.firstChild;
 
       while (tmp != null) {
         if (tmp.nodeType == mxConstants.NODETYPE_ELEMENT) {
@@ -469,16 +469,16 @@ class mxStencil extends mxShape {
   computeAspect = (shape, x, y, w, h, direction) => {
     var x0 = x;
     var y0 = y;
-    var sx = w / this.w0;
-    var sy = h / this.h0;
+    let sx = w / this.w0;
+    let sy = h / this.h0;
 
-    var inverse = (direction === mxConstants.DIRECTION_NORTH || direction === mxConstants.DIRECTION_SOUTH);
+    let inverse = (direction === mxConstants.DIRECTION_NORTH || direction === mxConstants.DIRECTION_SOUTH);
 
     if (inverse) {
       sy = w / this.h0;
       sx = h / this.w0;
 
-      var delta = (w - h) / 2;
+      let delta = (w - h) / 2;
 
       x0 += delta;
       y0 -= delta;
@@ -507,12 +507,12 @@ class mxStencil extends mxShape {
    * Draws this stencil inside the given bounds.
    */
   drawNode = (canvas, shape, node, aspect, disableShadow, paint) => {
-    var name = node.nodeName;
+    let name = node.nodeName;
     var x0 = aspect.x;
     var y0 = aspect.y;
-    var sx = aspect.width;
-    var sy = aspect.height;
-    var minScale = Math.min(sx, sy);
+    let sx = aspect.width;
+    let sy = aspect.height;
+    let minScale = Math.min(sx, sy);
 
     if (name === 'save') {
       canvas.save();
@@ -522,21 +522,21 @@ class mxStencil extends mxShape {
       if (name === 'path') {
         canvas.begin();
 
-        var parseRegularly = true;
+        let parseRegularly = true;
 
         if (node.getAttribute('rounded') == '1') {
           parseRegularly = false;
 
-          var arcSize = Number(node.getAttribute('arcSize'));
-          var pointCount = 0;
-          var segs = [];
+          let arcSize = Number(node.getAttribute('arcSize'));
+          let pointCount = 0;
+          let segs = [];
 
           // Renders the elements inside the given path
-          var childNode = node.firstChild;
+          let childNode = node.firstChild;
 
           while (childNode != null) {
             if (childNode.nodeType === mxConstants.NODETYPE_ELEMENT) {
-              var childName = childNode.nodeName;
+              let childName = childNode.nodeName;
 
               if (childName === 'move' || childName === 'line') {
                 if (childName === 'move' || segs.length === 0) {
@@ -557,8 +557,8 @@ class mxStencil extends mxShape {
           }
 
           if (!parseRegularly && pointCount > 0) {
-            for (var i = 0; i < segs.length; i++) {
-              var close = false, ps = segs[i][0], pe = segs[i][segs[i].length - 1];
+            for (let i = 0; i < segs.length; i++) {
+              let close = false, ps = segs[i][0], pe = segs[i][segs[i].length - 1];
 
               if (ps.x === pe.x && ps.y === pe.y) {
                 segs[i].pop();
@@ -574,7 +574,7 @@ class mxStencil extends mxShape {
 
         if (parseRegularly) {
           // Renders the elements inside the given path
-          var childNode = node.firstChild;
+          let childNode = node.firstChild;
 
           while (childNode != null) {
             if (childNode.nodeType == mxConstants.NODETYPE_ELEMENT) {
@@ -616,16 +616,16 @@ class mxStencil extends mxShape {
             Number(node.getAttribute('w')) * sx,
             Number(node.getAttribute('h')) * sy);
       } else if (name === 'roundrect') {
-        var arcsize = Number(node.getAttribute('arcsize'));
+        let arcsize = Number(node.getAttribute('arcsize'));
 
         if (arcsize === 0) {
           arcsize = mxConstants.RECTANGLE_ROUNDING_FACTOR * 100;
         }
 
-        var w = Number(node.getAttribute('w')) * sx;
-        var h = Number(node.getAttribute('h')) * sy;
-        var factor = Number(arcsize) / 100;
-        var r = Math.min(w * factor, h * factor);
+        let w = Number(node.getAttribute('w')) * sx;
+        let h = Number(node.getAttribute('h')) * sy;
+        let factor = Number(arcsize) / 100;
+        let r = Math.min(w * factor, h * factor);
 
         canvas.roundrect(x0 + Number(node.getAttribute('x')) * sx,
             y0 + Number(node.getAttribute('y')) * sy,
@@ -637,7 +637,7 @@ class mxStencil extends mxShape {
             Number(node.getAttribute('h')) * sy);
       } else if (name === 'image') {
         if (!shape.outline) {
-          var src = this.evaluateAttribute(node, 'src', shape);
+          let src = this.evaluateAttribute(node, 'src', shape);
 
           canvas.image(x0 + Number(node.getAttribute('x')) * sx,
               y0 + Number(node.getAttribute('y')) * sy,
@@ -648,15 +648,15 @@ class mxStencil extends mxShape {
         }
       } else if (name === 'text') {
         if (!shape.outline) {
-          var str = this.evaluateTextAttribute(node, 'str', shape);
-          var rotation = node.getAttribute('vertical') == '1' ? -90 : 0;
+          let str = this.evaluateTextAttribute(node, 'str', shape);
+          let rotation = node.getAttribute('vertical') == '1' ? -90 : 0;
 
           if (node.getAttribute('align-shape') == '0') {
-            var dr = shape.rotation;
+            let dr = shape.rotation;
 
             // Depends on flipping
-            var flipH = mxUtils.getValue(shape.style, mxConstants.STYLE_FLIPH, 0) === 1;
-            var flipV = mxUtils.getValue(shape.style, mxConstants.STYLE_FLIPV, 0) === 1;
+            let flipH = mxUtils.getValue(shape.style, mxConstants.STYLE_FLIPH, 0) === 1;
+            let flipV = mxUtils.getValue(shape.style, mxConstants.STYLE_FLIPV, 0) === 1;
 
             if (flipH && flipV) {
               rotation -= dr;
@@ -676,13 +676,13 @@ class mxStencil extends mxShape {
               null, false, rotation);
         }
       } else if (name === 'include-shape') {
-        var stencil = mxStencilRegistry.getStencil(node.getAttribute('name'));
+        let stencil = mxStencilRegistry.getStencil(node.getAttribute('name'));
 
         if (stencil != null) {
-          var x = x0 + Number(node.getAttribute('x')) * sx;
-          var y = y0 + Number(node.getAttribute('y')) * sy;
-          var w = Number(node.getAttribute('w')) * sx;
-          var h = Number(node.getAttribute('h')) * sy;
+          let x = x0 + Number(node.getAttribute('x')) * sx;
+          let y = y0 + Number(node.getAttribute('y')) * sy;
+          let w = Number(node.getAttribute('w')) * sx;
+          let h = Number(node.getAttribute('h')) * sy;
 
           stencil.drawShape(canvas, shape, x, y, w, h);
         }
@@ -693,18 +693,18 @@ class mxStencil extends mxShape {
       } else if (name === 'stroke') {
         canvas.stroke();
       } else if (name === 'strokewidth') {
-        var s = (node.getAttribute('fixed') === '1') ? 1 : minScale;
+        let s = (node.getAttribute('fixed') === '1') ? 1 : minScale;
         canvas.setStrokeWidth(Number(node.getAttribute('width')) * s);
       } else if (name === 'dashed') {
         canvas.setDashed(node.getAttribute('dashed') === '1');
       } else if (name === 'dashpattern') {
-        var value = node.getAttribute('pattern');
+        let value = node.getAttribute('pattern');
 
         if (value != null) {
-          var tmp = value.split(' ');
-          var pat = [];
+          let tmp = value.split(' ');
+          let pat = [];
 
-          for (var i = 0; i < tmp.length; i++) {
+          for (let i = 0; i < tmp.length; i++) {
             if (tmp[i].length > 0) {
               pat.push(Number(tmp[i]) * minScale);
             }
diff --git a/src/js/shape/mxStencilRegistry.js b/src/js/shape/mxStencilRegistry.js
index fb2fc4821..88ea9c058 100644
--- a/src/js/shape/mxStencilRegistry.js
+++ b/src/js/shape/mxStencilRegistry.js
@@ -6,9 +6,9 @@
  * Code to add stencils.
  *
  * (code)
- * var req = mxUtils.load('test/stencils.xml');
- * var root = req.getDocumentElement();
- * var shape = root.firstChild;
+ * let req = mxUtils.load('test/stencils.xml');
+ * let root = req.getDocumentElement();
+ * let shape = root.firstChild;
  *
  * while (shape != null)
  * {
@@ -21,7 +21,7 @@
  * }
  * (end)
  */
-var mxStencilRegistry =
+let mxStencilRegistry =
     {
       /**
        * Class: mxStencilRegistry
diff --git a/src/js/shape/mxSwimlane.js b/src/js/shape/mxSwimlane.js
index 5bedfd860..b34867ee6 100644
--- a/src/js/shape/mxSwimlane.js
+++ b/src/js/shape/mxSwimlane.js
@@ -70,26 +70,26 @@ class mxSwimlane extends mxShape {
    * Returns the bounding box for the label.
    */
   getLabelBounds = (rect) => {
-    var start = this.getTitleSize();
-    var bounds = new mxRectangle(rect.x, rect.y, rect.width, rect.height);
-    var horizontal = this.isHorizontal();
+    let start = this.getTitleSize();
+    let bounds = new mxRectangle(rect.x, rect.y, rect.width, rect.height);
+    let horizontal = this.isHorizontal();
 
-    var flipH = mxUtils.getValue(this.style, mxConstants.STYLE_FLIPH, 0) == 1;
-    var flipV = mxUtils.getValue(this.style, mxConstants.STYLE_FLIPV, 0) == 1;
+    let flipH = mxUtils.getValue(this.style, mxConstants.STYLE_FLIPH, 0) == 1;
+    let flipV = mxUtils.getValue(this.style, mxConstants.STYLE_FLIPV, 0) == 1;
 
     // East is default
-    var shapeVertical = (this.direction == mxConstants.DIRECTION_NORTH ||
+    let shapeVertical = (this.direction == mxConstants.DIRECTION_NORTH ||
         this.direction == mxConstants.DIRECTION_SOUTH);
-    var realHorizontal = horizontal == !shapeVertical;
+    let realHorizontal = horizontal == !shapeVertical;
 
-    var realFlipH = !realHorizontal && flipH != (this.direction == mxConstants.DIRECTION_SOUTH ||
+    let realFlipH = !realHorizontal && flipH != (this.direction == mxConstants.DIRECTION_SOUTH ||
         this.direction == mxConstants.DIRECTION_WEST);
-    var realFlipV = realHorizontal && flipV != (this.direction == mxConstants.DIRECTION_SOUTH ||
+    let realFlipV = realHorizontal && flipV != (this.direction == mxConstants.DIRECTION_SOUTH ||
         this.direction == mxConstants.DIRECTION_WEST);
 
     // Shape is horizontal
     if (!shapeVertical) {
-      var tmp = Math.min(bounds.height, start * this.scale);
+      let tmp = Math.min(bounds.height, start * this.scale);
 
       if (realFlipH || realFlipV) {
         bounds.y += bounds.height - tmp;
@@ -97,7 +97,7 @@ class mxSwimlane extends mxShape {
 
       bounds.height = tmp;
     } else {
-      var tmp = Math.min(bounds.width, start * this.scale);
+      let tmp = Math.min(bounds.width, start * this.scale);
 
       if (realFlipH || realFlipV) {
         bounds.x += bounds.width - tmp;
@@ -115,7 +115,7 @@ class mxSwimlane extends mxShape {
    * Returns the bounding box for the gradient box for this shape.
    */
   getGradientBounds = (c, x, y, w, h) => {
-    var start = this.getTitleSize();
+    let start = this.getTitleSize();
 
     if (this.isHorizontal()) {
       start = Math.min(start, h);
@@ -136,7 +136,7 @@ class mxSwimlane extends mxShape {
       return Math.min(w / 2, Math.min(h / 2, mxUtils.getValue(this.style,
           mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2));
     } else {
-      var f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.RECTANGLE_ROUNDING_FACTOR * 100) / 100;
+      let f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.RECTANGLE_ROUNDING_FACTOR * 100) / 100;
 
       return start * f * 3;
     }
@@ -157,10 +157,10 @@ class mxSwimlane extends mxShape {
    * Paints the swimlane vertex shape.
    */
   paintVertexShape = (c, x, y, w, h) => {
-    var start = this.getTitleSize();
-    var fill = mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_FILLCOLOR, mxConstants.NONE);
-    var swimlaneLine = mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_LINE, 1) == 1;
-    var r = 0;
+    let start = this.getTitleSize();
+    let fill = mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_FILLCOLOR, mxConstants.NONE);
+    let swimlaneLine = mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_LINE, 1) == 1;
+    let r = 0;
 
     if (this.isHorizontal()) {
       start = Math.min(start, h);
@@ -178,11 +178,11 @@ class mxSwimlane extends mxShape {
       this.paintRoundedSwimlane(c, x, y, w, h, start, r, fill, swimlaneLine);
     }
 
-    var sep = mxUtils.getValue(this.style, mxConstants.STYLE_SEPARATORCOLOR, mxConstants.NONE);
+    let sep = mxUtils.getValue(this.style, mxConstants.STYLE_SEPARATORCOLOR, mxConstants.NONE);
     this.paintSeparator(c, x, y, w, h, start, sep);
 
     if (this.image != null) {
-      var bounds = this.getImageBounds(x, y, w, h);
+      let bounds = this.getImageBounds(x, y, w, h);
       c.image(bounds.x - x, bounds.y - y, bounds.width, bounds.height,
           this.image, false, false, false);
     }
@@ -201,7 +201,7 @@ class mxSwimlane extends mxShape {
   paintSwimlane = (c, x, y, w, h, start, fill, swimlaneLine) => {
     c.begin();
 
-    var events = true;
+    let events = true;
 
     if (this.style != null) {
       events = mxUtils.getValue(this.style, mxConstants.STYLE_POINTER_EVENTS, '1') == '1';
@@ -282,7 +282,7 @@ class mxSwimlane extends mxShape {
   paintRoundedSwimlane = (c, x, y, w, h, start, r, fill, swimlaneLine) => {
     c.begin();
 
-    var events = true;
+    let events = true;
 
     if (this.style != null) {
       events = mxUtils.getValue(this.style, mxConstants.STYLE_POINTER_EVENTS, '1') == '1';
diff --git a/src/js/shape/mxText.js b/src/js/shape/mxText.js
index fc048258c..079b85095 100644
--- a/src/js/shape/mxText.js
+++ b/src/js/shape/mxText.js
@@ -223,11 +223,11 @@ class mxText extends mxShape {
    */
   paint = (c, update) => {
     // Scale is passed-through to canvas
-    var s = this.scale;
-    var x = this.bounds.x / s;
-    var y = this.bounds.y / s;
-    var w = this.bounds.width / s;
-    var h = this.bounds.height / s;
+    let s = this.scale;
+    let x = this.bounds.x / s;
+    let y = this.bounds.y / s;
+    let w = this.bounds.width / s;
+    let h = this.bounds.height / s;
 
     this.updateTransform(c, x, y, w, h);
     this.configureCanvas(c, x, y, w, h);
@@ -237,11 +237,11 @@ class mxText extends mxShape {
           this.clipped, this.getTextRotation(), this.node);
     } else {
       // Checks if text contains HTML markup
-      var realHtml = mxUtils.isNode(this.value) || this.dialect == mxConstants.DIALECT_STRICTHTML;
+      let realHtml = mxUtils.isNode(this.value) || this.dialect == mxConstants.DIALECT_STRICTHTML;
 
       // Always renders labels as HTML in VML
-      var fmt = (realHtml || c instanceof mxVmlCanvas2D) ? 'html' : '';
-      var val = this.value;
+      let fmt = (realHtml || c instanceof mxVmlCanvas2D) ? 'html' : '';
+      let val = this.value;
 
       if (!realHtml && fmt == 'html') {
         val = mxUtils.htmlEntities(val, false);
@@ -255,7 +255,7 @@ class mxText extends mxShape {
       val = (!mxUtils.isNode(this.value) && this.replaceLinefeeds && fmt == 'html') ?
           val.replace(/\n/g, '<br/>') : val;
 
-      var dir = this.textDirection;
+      let dir = this.textDirection;
 
       if (dir == mxConstants.TEXT_DIRECTION_AUTO && !realHtml) {
         dir = this.getAutoDirection();
@@ -289,7 +289,7 @@ class mxText extends mxShape {
 
         this.updateBoundingBox();
       } else {
-        var canvas = this.createCanvas();
+        let canvas = this.createCanvas();
 
         if (canvas != null && canvas.updateText != null) {
           // Specifies if events should be handled
@@ -350,7 +350,7 @@ class mxText extends mxShape {
    * state - <mxCellState> of the corresponding cell.
    */
   apply = (state) => {
-    var old = this.spacing;
+    let old = this.spacing;
     apply.apply(this, arguments);
 
     if (this.style != null) {
@@ -387,7 +387,7 @@ class mxText extends mxShape {
    */
   getAutoDirection = () => {
     // Looks for strong (directional) characters
-    var tmp = /[A-Za-z\u05d0-\u065f\u066a-\u06ef\u06fa-\u07ff\ufb1d-\ufdff\ufe70-\ufefc]/.exec(this.value);
+    let tmp = /[A-Za-z\u05d0-\u065f\u066a-\u06ef\u06fa-\u07ff\ufb1d-\ufdff\ufe70-\ufefc]/.exec(this.value);
 
     // Returns the direction defined by the character
     return (tmp != null && tmp.length > 0 && tmp[0] > 'z') ?
@@ -400,7 +400,7 @@ class mxText extends mxShape {
    * Returns the node that contains the rendered input.
    */
   getContentNode = () => {
-    var result = this.node;
+    let result = this.node;
 
     if (result != null) {
       // Rendered with no foreignObject
@@ -421,17 +421,17 @@ class mxText extends mxShape {
    * Updates the <boundingBox> for this shape using the given node and position.
    */
   updateBoundingBox = () => {
-    var node = this.node;
+    let node = this.node;
     this.boundingBox = this.bounds.clone();
-    var rot = this.getTextRotation();
+    let rot = this.getTextRotation();
 
-    var h = (this.style != null) ? mxUtils.getValue(this.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER) : null;
-    var v = (this.style != null) ? mxUtils.getValue(this.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE) : null;
+    let h = (this.style != null) ? mxUtils.getValue(this.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER) : null;
+    let v = (this.style != null) ? mxUtils.getValue(this.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE) : null;
 
     if (!this.ignoreStringSize && node != null && this.overflow != 'fill' && (!this.clipped ||
         !this.ignoreClippedStringSize || h != mxConstants.ALIGN_CENTER || v != mxConstants.ALIGN_MIDDLE)) {
-      var ow = null;
-      var oh = null;
+      let ow = null;
+      let oh = null;
 
       if (node.ownerSVGElement != null) {
         if (node.firstChild != null && node.firstChild.firstChild != null &&
@@ -447,7 +447,7 @@ class mxText extends mxShape {
           }
         } else {
           try {
-            var b = node.getBBox();
+            let b = node.getBBox();
 
             // Workaround for bounding box of empty string
             if (typeof (this.value) == 'string' && mxUtils.trim(this.value) == 0) {
@@ -464,7 +464,7 @@ class mxText extends mxShape {
           }
         }
       } else {
-        var td = (this.state != null) ? this.state.view.textDiv : null;
+        let td = (this.state != null) ? this.state.view.textDiv : null;
 
         // Use cached offset size
         if (this.offsetWidth != null && this.offsetHeight != null) {
@@ -481,7 +481,7 @@ class mxText extends mxShape {
             node = td;
           }
 
-          var sizeDiv = node;
+          let sizeDiv = node;
 
           if (sizeDiv.firstChild != null && sizeDiv.firstChild.nodeName == 'DIV') {
             sizeDiv = sizeDiv.firstChild;
@@ -504,7 +504,7 @@ class mxText extends mxShape {
     if (this.boundingBox != null) {
       if (rot != 0) {
         // Accounts for pre-rotated x and y
-        var bbox = mxUtils.getBoundingBox(new mxRectangle(
+        let bbox = mxUtils.getBoundingBox(new mxRectangle(
             this.margin.x * this.boundingBox.width,
             this.margin.y * this.boundingBox.height,
             this.boundingBox.width, this.boundingBox.height),
@@ -589,7 +589,7 @@ class mxText extends mxShape {
    * Private helper function to create SVG elements
    */
   getHtmlValue = () => {
-    var val = this.value;
+    let val = this.value;
 
     if (this.dialect != mxConstants.DIALECT_STRICTHTML) {
       val = mxUtils.htmlEntities(val, false);
@@ -608,10 +608,10 @@ class mxText extends mxShape {
    * Private helper function to create SVG elements
    */
   getTextCss = () => {
-    var lh = (mxConstants.ABSOLUTE_LINE_HEIGHT) ? (this.size * mxConstants.LINE_HEIGHT) + 'px' :
+    let lh = (mxConstants.ABSOLUTE_LINE_HEIGHT) ? (this.size * mxConstants.LINE_HEIGHT) + 'px' :
         mxConstants.LINE_HEIGHT;
 
-    var css = 'display: inline-block; font-size: ' + this.size + 'px; ' +
+    let css = 'display: inline-block; font-size: ' + this.size + 'px; ' +
         'font-family: ' + this.family + '; color: ' + this.color + '; line-height: ' + lh +
         '; pointer-events: ' + ((this.pointerEvents) ? 'all' : 'none') + '; ';
 
@@ -623,7 +623,7 @@ class mxText extends mxShape {
       css += 'font-style: italic; ';
     }
 
-    var deco = [];
+    let deco = [];
 
     if ((this.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE) {
       deco.push('underline');
@@ -649,7 +649,7 @@ class mxText extends mxShape {
     if (mxClient.IS_SVG) {
       this.redrawHtmlShapeWithCss3();
     } else {
-      var style = this.node.style;
+      let style = this.node.style;
 
       // Resets CSS styles
       style.whiteSpace = 'normal';
@@ -674,18 +674,18 @@ class mxText extends mxShape {
    * Updates the HTML node(s) to reflect the latest bounds and scale.
    */
   redrawHtmlShapeWithCss3 = () => {
-    var w = Math.max(0, Math.round(this.bounds.width / this.scale));
-    var h = Math.max(0, Math.round(this.bounds.height / this.scale));
-    var flex = 'position: absolute; left: ' + Math.round(this.bounds.x) + 'px; ' +
+    let w = Math.max(0, Math.round(this.bounds.width / this.scale));
+    let h = Math.max(0, Math.round(this.bounds.height / this.scale));
+    let flex = 'position: absolute; left: ' + Math.round(this.bounds.x) + 'px; ' +
         'top: ' + Math.round(this.bounds.y) + 'px; pointer-events: none; ';
-    var block = this.getTextCss();
+    let block = this.getTextCss();
 
     mxSvgCanvas2D.createCss(w + 2, h, this.align, this.valign, this.wrap, this.overflow, this.clipped,
         (this.background != null) ? mxUtils.htmlEntities(this.background) : null,
         (this.border != null) ? mxUtils.htmlEntities(this.border) : null,
         flex, block, this.scale, (dx, dy, flex, item, block, ofl) => {
-          var r = this.getTextRotation();
-          var tr = ((this.scale != 1) ? 'scale(' + this.scale + ') ' : '') +
+          let r = this.getTextRotation();
+          let tr = ((this.scale != 1) ? 'scale(' + this.scale + ') ' : '') +
               ((r != 0) ? 'rotate(' + r + 'deg) ' : '') +
               ((this.margin.x != 0 || this.margin.y != 0) ?
                   'translate(' + (this.margin.x * 100) + '%,' +
@@ -712,7 +712,7 @@ class mxText extends mxShape {
 
           this.node.setAttribute('style', flex);
 
-          var html = (mxUtils.isNode(this.value)) ? this.value.outerHTML : this.getHtmlValue();
+          let html = (mxUtils.isNode(this.value)) ? this.value.outerHTML : this.getHtmlValue();
 
           if (this.node.firstChild == null) {
             this.node.innerHTML = '<div><div>' + html + '</div></div>';
@@ -729,10 +729,10 @@ class mxText extends mxShape {
    * Returns the spacing as an <mxPoint>.
    */
   updateHtmlTransform = () => {
-    var theta = this.getTextRotation();
-    var style = this.node.style;
-    var dx = this.margin.x;
-    var dy = this.margin.y;
+    let theta = this.getTextRotation();
+    let style = this.node.style;
+    let dx = this.margin.x;
+    let dy = this.margin.y;
 
     if (theta != 0) {
       mxUtils.setPrefixedStyle(style, 'transformOrigin', (-dx * 100) + '%' + ' ' + (-dy * 100) + '%');
@@ -764,7 +764,7 @@ class mxText extends mxShape {
     if (mxUtils.isNode(this.value)) {
       elt.innerHTML = this.value.outerHTML;
     } else {
-      var val = this.value;
+      let val = this.value;
 
       if (this.dialect != mxConstants.DIALECT_STRICTHTML) {
         // LATER: Can be cached in updateValue
@@ -786,19 +786,19 @@ class mxText extends mxShape {
    * Rotated text rendering quality is bad for IE9 quirks/IE8 standards
    */
   updateHtmlFilter = () => {
-    var style = this.node.style;
-    var dx = this.margin.x;
-    var dy = this.margin.y;
-    var s = this.scale;
+    let style = this.node.style;
+    let dx = this.margin.x;
+    let dy = this.margin.y;
+    let s = this.scale;
 
     // Resets filter before getting offsetWidth
     mxUtils.setOpacity(this.node, this.opacity);
 
     // Adds 1 to match table height in 1.x
-    var ow = 0;
-    var oh = 0;
-    var td = (this.state != null) ? this.state.view.textDiv : null;
-    var sizeDiv = this.node;
+    let ow = 0;
+    let oh = 0;
+    let td = (this.state != null) ? this.state.view.textDiv : null;
+    let sizeDiv = this.node;
 
     // Fallback for hidden text rendering in IE quirks mode
     if (td != null) {
@@ -810,7 +810,7 @@ class mxText extends mxShape {
       this.updateSize(td, false);
       this.updateInnerHtml(td);
 
-      var w = Math.round(this.bounds.width / this.scale);
+      let w = Math.round(this.bounds.width / this.scale);
 
       if (this.wrap && w > 0) {
         td.style.whiteSpace = 'normal';
@@ -855,8 +855,8 @@ class mxText extends mxShape {
       oh = Math.min(oh, this.bounds.height);
     }
 
-    var w = this.bounds.width / s;
-    var h = this.bounds.height / s;
+    let w = this.bounds.width / s;
+    let h = this.bounds.height / s;
 
     // Handles special case for live preview with no wrapper DIV and no textDiv
     if (this.overflow == 'fill') {
@@ -885,11 +885,11 @@ class mxText extends mxShape {
     w *= s;
 
     // Rotation case is handled via VML canvas
-    var rad = this.getTextRotation() * (Math.PI / 180);
+    let rad = this.getTextRotation() * (Math.PI / 180);
 
     // Precalculate cos and sin for the rotation
-    var real_cos = parseFloat(parseFloat(Math.cos(rad)).toFixed(8));
-    var real_sin = parseFloat(parseFloat(Math.sin(-rad)).toFixed(8));
+    let real_cos = parseFloat(parseFloat(Math.cos(rad)).toFixed(8));
+    let real_sin = parseFloat(parseFloat(Math.sin(-rad)).toFixed(8));
 
     rad %= 2 * Math.PI;
 
@@ -903,17 +903,17 @@ class mxText extends mxShape {
       rad = Math.PI - rad;
     }
 
-    var cos = Math.cos(rad);
-    var sin = Math.sin(-rad);
+    let cos = Math.cos(rad);
+    let sin = Math.sin(-rad);
 
-    var tx = w * -(dx + 0.5);
-    var ty = h * -(dy + 0.5);
+    let tx = w * -(dx + 0.5);
+    let ty = h * -(dy + 0.5);
 
-    var top_fix = (h - h * cos + w * sin) / 2 + real_sin * tx - real_cos * ty;
-    var left_fix = (w - w * cos + h * sin) / 2 - real_cos * tx - real_sin * ty;
+    let top_fix = (h - h * cos + w * sin) / 2 + real_sin * tx - real_cos * ty;
+    let left_fix = (w - w * cos + h * sin) / 2 - real_cos * tx - real_sin * ty;
 
     if (rad != 0) {
-      var f = 'progid:DXImageTransform.Microsoft.Matrix(M11=' + real_cos + ', M12=' +
+      let f = 'progid:DXImageTransform.Microsoft.Matrix(M11=' + real_cos + ', M12=' +
           real_sin + ', M21=' + (-real_sin) + ', M22=' + real_cos + ', sizingMethod=\'auto expand\')';
 
       if (style.filter != null && style.filter.length > 0) {
@@ -924,7 +924,7 @@ class mxText extends mxShape {
     }
 
     // Workaround for rendering offsets
-    var dy = 0;
+    let dy = 0;
 
     style.zoom = s;
     style.left = Math.round(this.bounds.x + left_fix - w / 2) + 'px';
@@ -941,7 +941,7 @@ class mxText extends mxShape {
       this.node.innerHTML = '';
       this.node.appendChild(this.value);
     } else {
-      var val = this.value;
+      let val = this.value;
 
       if (this.dialect != mxConstants.DIALECT_STRICTHTML) {
         val = mxUtils.htmlEntities(val, false);
@@ -950,8 +950,8 @@ class mxText extends mxShape {
       // Handles trailing newlines to make sure they are visible in rendering output
       val = mxUtils.replaceTrailingNewlines(val, '<div><br></div>');
       val = (this.replaceLinefeeds) ? val.replace(/\n/g, '<br/>') : val;
-      var bg = (this.background != null && this.background != mxConstants.NONE) ? this.background : null;
-      var bd = (this.border != null && this.border != mxConstants.NONE) ? this.border : null;
+      let bg = (this.background != null && this.background != mxConstants.NONE) ? this.background : null;
+      let bd = (this.border != null && this.border != mxConstants.NONE) ? this.border : null;
 
       if (this.overflow == 'fill' || this.overflow == 'width') {
         if (bg != null) {
@@ -962,7 +962,7 @@ class mxText extends mxShape {
           this.node.style.border = '1px solid ' + bd;
         }
       } else {
-        var css = '';
+        let css = '';
 
         if (bg != null) {
           css += 'background-color:' + mxUtils.htmlEntities(bg) + ';';
@@ -975,7 +975,7 @@ class mxText extends mxShape {
         // Wrapper DIV for background, zoom needed for inline in quirks
         // and to measure wrapped font sizes in all browsers
         // FIXME: Background size in quirks mode for wrapped text
-        var lh = (mxConstants.ABSOLUTE_LINE_HEIGHT) ? (this.size * mxConstants.LINE_HEIGHT) + 'px' :
+        let lh = (mxConstants.ABSOLUTE_LINE_HEIGHT) ? (this.size * mxConstants.LINE_HEIGHT) + 'px' :
             mxConstants.LINE_HEIGHT;
         val = '<div style="zoom:1;' + css + 'display:inline-block;_display:inline;text-decoration:inherit;' +
             'padding-bottom:1px;padding-right:1px;line-height:' + lh + '">' + val + '</div>';
@@ -984,10 +984,10 @@ class mxText extends mxShape {
       this.node.innerHTML = val;
 
       // Sets text direction
-      var divs = this.node.getElementsByTagName('div');
+      let divs = this.node.getElementsByTagName('div');
 
       if (divs.length > 0) {
-        var dir = this.textDirection;
+        let dir = this.textDirection;
 
         if (dir == mxConstants.TEXT_DIRECTION_AUTO && this.dialect != mxConstants.DIALECT_STRICTHTML) {
           dir = this.getAutoDirection();
@@ -1008,7 +1008,7 @@ class mxText extends mxShape {
    * Updates the HTML node(s) to reflect the latest bounds and scale.
    */
   updateFont = (node) => {
-    var style = node.style;
+    let style = node.style;
 
     style.lineHeight = (mxConstants.ABSOLUTE_LINE_HEIGHT) ? (this.size * mxConstants.LINE_HEIGHT) + 'px' : mxConstants.LINE_HEIGHT;
     style.fontSize = this.size + 'px';
@@ -1028,7 +1028,7 @@ class mxText extends mxShape {
       style.fontStyle = '';
     }
 
-    var txtDecor = [];
+    let txtDecor = [];
 
     if ((this.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE) {
       txtDecor.push('underline');
@@ -1055,9 +1055,9 @@ class mxText extends mxShape {
    * Updates the HTML node(s) to reflect the latest bounds and scale.
    */
   updateSize = (node, enableWrap) => {
-    var w = Math.max(0, Math.round(this.bounds.width / this.scale));
-    var h = Math.max(0, Math.round(this.bounds.height / this.scale));
-    var style = node.style;
+    let w = Math.max(0, Math.round(this.bounds.width / this.scale));
+    let h = Math.max(0, Math.round(this.bounds.height / this.scale));
+    let style = node.style;
 
     // NOTE: Do not use maxWidth here because wrapping will
     // go wrong if the cell is outside of the viewable area
@@ -1082,7 +1082,7 @@ class mxText extends mxShape {
       style.width = w + 'px';
 
       if (enableWrap && this.overflow != 'fill' && this.overflow != 'width') {
-        var sizeDiv = node;
+        let sizeDiv = node;
 
         if (sizeDiv.firstChild != null && sizeDiv.firstChild.nodeName == 'DIV') {
           sizeDiv = sizeDiv.firstChild;
@@ -1092,11 +1092,11 @@ class mxText extends mxShape {
           }
         }
 
-        var tmp = sizeDiv.offsetWidth;
+        let tmp = sizeDiv.offsetWidth;
 
         // Workaround for text measuring in hidden containers
         if (tmp == 0) {
-          var prev = node.parentNode;
+          let prev = node.parentNode;
           node.style.visibility = 'hidden';
           document.body.appendChild(node);
           tmp = sizeDiv.offsetWidth;
@@ -1132,8 +1132,8 @@ class mxText extends mxShape {
    * Returns the spacing as an <mxPoint>.
    */
   getSpacing = () => {
-    var dx = 0;
-    var dy = 0;
+    let dx = 0;
+    let dy = 0;
 
     if (this.align == mxConstants.ALIGN_CENTER) {
       dx = (this.spacingLeft - this.spacingRight) / 2;
diff --git a/src/js/shape/mxTriangle.js b/src/js/shape/mxTriangle.js
index 2ef46ae71..bbc1e8f32 100644
--- a/src/js/shape/mxTriangle.js
+++ b/src/js/shape/mxTriangle.js
@@ -35,7 +35,7 @@ class mxTriangle extends mxActor {
    * Draws the path for this shape.
    */
   redrawPath = (c, x, y, w, h) => {
-    var arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
+    let arcSize = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2;
     this.addPoints(c, [new mxPoint(0, 0), new mxPoint(w, 0.5 * h), new mxPoint(0, h)], this.isRounded, arcSize, true);
   };
 }
diff --git a/src/js/util/mxAbstractCanvas2D.js b/src/js/util/mxAbstractCanvas2D.js
index 7cfdbf40c..ae653e347 100644
--- a/src/js/util/mxAbstractCanvas2D.js
+++ b/src/js/util/mxAbstractCanvas2D.js
@@ -195,9 +195,9 @@ class mxAbstractCanvas2D {
       this.path.push(arguments[0]);
 
       if (arguments.length > 2) {
-        var s = this.state;
+        let s = this.state;
 
-        for (var i = 2; i < arguments.length; i += 2) {
+        for (let i = 2; i < arguments.length; i += 2) {
           this.lastX = arguments[i - 1];
           this.lastY = arguments[i];
 
@@ -214,7 +214,7 @@ class mxAbstractCanvas2D {
    * Rotates the given point and returns the result as an <mxPoint>.
    */
   mxAbstractCanvas2rotatePoint = (x, y, theta, cx, cy) => {
-    var rad = theta * (Math.PI / 180);
+    let rad = theta * (Math.PI / 180);
 
     return mxUtils.getRotatedPoint(new mxPoint(x, y), Math.cos(rad),
         Math.sin(rad), new mxPoint(cx, cy));
@@ -326,7 +326,7 @@ class mxAbstractCanvas2D {
    * Sets the current gradient.
    */
   mxAbstractCanvas2setGradient = (color1, color2, x, y, w, h, direction, alpha1, alpha2) => {
-    var s = this.state;
+    let s = this.state;
     s.fillColor = color1;
     s.gradientFillAlpha = (alpha1 != null) ? alpha1 : 1;
     s.gradientColor = color2;
@@ -567,10 +567,10 @@ class mxAbstractCanvas2D {
    * is broken down into curves.
    */
   mxAbstractCanvas2arcTo = (rx, ry, angle, largeArcFlag, sweepFlag, x, y) => {
-    var curves = mxUtils.arcToCurves(this.lastX, this.lastY, rx, ry, angle, largeArcFlag, sweepFlag, x, y);
+    let curves = mxUtils.arcToCurves(this.lastX, this.lastY, rx, ry, angle, largeArcFlag, sweepFlag, x, y);
 
     if (curves != null) {
-      for (var i = 0; i < curves.length; i += 6) {
+      for (let i = 0; i < curves.length; i += 6) {
         this.curveTo(curves[i], curves[i + 1], curves[i + 2],
             curves[i + 3], curves[i + 4], curves[i + 5]);
       }
diff --git a/src/js/util/mxAutoSaveManager.js b/src/js/util/mxAutoSaveManager.js
index 6a4e26e86..da42a2e14 100644
--- a/src/js/util/mxAutoSaveManager.js
+++ b/src/js/util/mxAutoSaveManager.js
@@ -80,7 +80,7 @@ class mxAutoSaveManager extends mxEventSource {
    * Example:
    *
    * (code)
-   * var mgr = new mxAutoSaveManager(editor.graph);
+   * let mgr = new mxAutoSaveManager(editor.graph);
    * mgr.save = ()=>
    * {
    *   mxLog.show();
@@ -165,8 +165,8 @@ class mxAutoSaveManager extends mxEventSource {
    * Invoked when the graph model has changed.
    */
   graphModelChanged = (changes) => {
-    var now = new Date().getTime();
-    var dt = (now - this.lastSnapshot) / 1000;
+    let now = new Date().getTime();
+    let dt = (now - this.lastSnapshot) / 1000;
 
     if (dt > this.autoSaveDelay ||
         (this.ignoredChanges >= this.autoSaveThreshold &&
diff --git a/src/js/util/mxClipboard.js b/src/js/util/mxClipboard.js
index b0601b29a..38d167e4c 100644
--- a/src/js/util/mxClipboard.js
+++ b/src/js/util/mxClipboard.js
@@ -3,7 +3,7 @@
  * Copyright (c) 2006-2015, Gaudenz Alder
  * Updated to ES9 syntax by David Morrissey 2021
  */
-var mxClipboard = {
+let mxClipboard = {
   /**
    * Class: mxClipboard
    *
@@ -29,11 +29,11 @@ var mxClipboard = {
    * mxClipboard.copy = (graph, cells)=>
    * {
    *   cells = cells || graph.getSelectionCells();
-   *   var result = graph.getExportableCells(cells);
+   *   let result = graph.getExportableCells(cells);
    *   
    *   mxClipboard.parents = {};
    *   
-   *   for (var i = 0; i < result.length; i++)
+   *   for (let i = 0; i < result.length; i++)
    *   {
    *     mxClipboard.parents[i] = graph.model.getParent(cells[i]);
    *   }
@@ -48,16 +48,16 @@ var mxClipboard = {
    * {
    *   if (!mxClipboard.isEmpty())
    *   {
-   *     var cells = graph.getImportableCells(mxClipboard.getCells());
-   *     var delta = mxClipboard.insertCount * mxClipboard.STEPSIZE;
-   *     var parent = graph.getDefaultParent();
+   *     let cells = graph.getImportableCells(mxClipboard.getCells());
+   *     let delta = mxClipboard.insertCount * mxClipboard.STEPSIZE;
+   *     let parent = graph.getDefaultParent();
    *     
    *     graph.model.beginUpdate();
    *     try
    *     {
-   *       for (var i = 0; i < cells.length; i++)
+   *       for (let i = 0; i < cells.length; i++)
    *       {
-   *         var tmp = (mxClipboard.parents != null && graph.model.contains(mxClipboard.parents[i])) ?
+   *         let tmp = (mxClipboard.parents != null && graph.model.contains(mxClipboard.parents[i])) ?
    *              mxClipboard.parents[i] : parent;
    *         cells[i] = graph.importCells([cells[i]], delta, delta, tmp)[0];
    *       }
@@ -171,7 +171,7 @@ var mxClipboard = {
    */
   copy: (graph, cells) => {
     cells = cells || graph.getSelectionCells();
-    var result = graph.getExportableCells(graph.model.getTopmostCells(cells));
+    let result = graph.getExportableCells(graph.model.getTopmostCells(cells));
     mxClipboard.insertCount = 1;
     mxClipboard.setCells(graph.cloneCells(result));
 
@@ -194,12 +194,12 @@ var mxClipboard = {
    * graph - <mxGraph> to paste the <cells> into.
    */
   paste: (graph) => {
-    var cells = null;
+    let cells = null;
 
     if (!mxClipboard.isEmpty()) {
       cells = graph.getImportableCells(mxClipboard.getCells());
-      var delta = mxClipboard.insertCount * mxClipboard.STEPSIZE;
-      var parent = graph.getDefaultParent();
+      let delta = mxClipboard.insertCount * mxClipboard.STEPSIZE;
+      let parent = graph.getDefaultParent();
       cells = graph.importCells(cells, delta, delta, parent);
 
       // Increments the counter and selects the inserted cells
diff --git a/src/js/util/mxConstants.js b/src/js/util/mxConstants.js
index 644ccf83d..a816a9b75 100644
--- a/src/js/util/mxConstants.js
+++ b/src/js/util/mxConstants.js
@@ -4,7 +4,7 @@
  * Updated to ES9 syntax by David Morrissey 2021
  */
 
-var mxConstants = {
+let mxConstants = {
   /**
    * Class: mxConstants
    *
diff --git a/src/js/util/mxDictionary.js b/src/js/util/mxDictionary.js
index 5c33c3270..edcfa6fe3 100644
--- a/src/js/util/mxDictionary.js
+++ b/src/js/util/mxDictionary.js
@@ -41,7 +41,7 @@ class mxDictionary {
    * Returns the value for the given key.
    */
   get = (key) => {
-    var id = mxObjectIdentity.get(key);
+    let id = mxObjectIdentity.get(key);
 
     return this.map[id];
   };
@@ -53,8 +53,8 @@ class mxDictionary {
    * value for that key.
    */
   put = (key, value) => {
-    var id = mxObjectIdentity.get(key);
-    var previous = this.map[id];
+    let id = mxObjectIdentity.get(key);
+    let previous = this.map[id];
     this.map[id] = value;
 
     return previous;
@@ -67,8 +67,8 @@ class mxDictionary {
    * has been removed.
    */
   remove = (key) => {
-    var id = mxObjectIdentity.get(key);
-    var previous = this.map[id];
+    let id = mxObjectIdentity.get(key);
+    let previous = this.map[id];
     delete this.map[id];
 
     return previous;
@@ -80,7 +80,7 @@ class mxDictionary {
    * Returns all keys as an array.
    */
   getKeys = () => {
-    var result = [];
+    let result = [];
 
     for (var key in this.map) {
       result.push(key);
@@ -95,7 +95,7 @@ class mxDictionary {
    * Returns all values as an array.
    */
   getValues = () => {
-    var result = [];
+    let result = [];
 
     for (var key in this.map) {
       result.push(this.map[key]);
diff --git a/src/js/util/mxDivResizer.js b/src/js/util/mxDivResizer.js
index fe443dc4c..d5d942e2c 100644
--- a/src/js/util/mxDivResizer.js
+++ b/src/js/util/mxDivResizer.js
@@ -13,7 +13,7 @@
  * then you can use this class as follows:
  *
  * (code)
- * var resizer = new mxDivResizer(background);
+ * let resizer = new mxDivResizer(background);
  * resizer.getDocumentHeight = ()=>
  * {
  *   return document.body.scrollHeight;
@@ -65,7 +65,7 @@ class mxDivResizer {
       }
 
       this.div = div;
-      var style = mxUtils.getCurrentStyle(div);
+      let style = mxUtils.getCurrentStyle(div);
 
       if (style != null) {
         this.resizeWidth = style.width == 'auto';
@@ -92,13 +92,13 @@ class mxDivResizer {
    * Updates the style of the DIV after the window has been resized.
    */
   resize = () => {
-    var w = this.getDocumentWidth();
-    var h = this.getDocumentHeight();
+    let w = this.getDocumentWidth();
+    let h = this.getDocumentHeight();
 
-    var l = parseInt(this.div.style.left);
-    var r = parseInt(this.div.style.right);
-    var t = parseInt(this.div.style.top);
-    var b = parseInt(this.div.style.bottom);
+    let l = parseInt(this.div.style.left);
+    let r = parseInt(this.div.style.right);
+    let t = parseInt(this.div.style.top);
+    let b = parseInt(this.div.style.bottom);
 
     if (this.resizeWidth &&
         !isNaN(l) &&
diff --git a/src/js/util/mxDragSource.js b/src/js/util/mxDragSource.js
index d51b38d4f..14469ff1a 100644
--- a/src/js/util/mxDragSource.js
+++ b/src/js/util/mxDragSource.js
@@ -172,8 +172,8 @@ class mxDragSource {
     });
 
     this.eventConsumer = (sender, evt) => {
-      var evtName = evt.getProperty('eventName');
-      var me = evt.getProperty('event');
+      let evtName = evt.getProperty('eventName');
+      let me = evt.getProperty('event');
 
       if (evtName != mxEvent.MOUSE_DOWN) {
         me.consume();
@@ -310,7 +310,7 @@ class mxDragSource {
    * overridden as follows.
    *
    * (code)
-   * var mouseDown = dragSource.mouseDown;
+   * let mouseDown = dragSource.mouseDown;
    *
    * dragSource.mouseDown = (evt)=>
    * {
@@ -395,11 +395,11 @@ class mxDragSource {
    * Returns true if the given graph contains the given event.
    */
   graphContainsEvent = (graph, evt) => {
-    var x = mxEvent.getClientX(evt);
-    var y = mxEvent.getClientY(evt);
-    var offset = mxUtils.getOffset(graph.container);
-    var origin = mxUtils.getScrollOrigin();
-    var elt = this.getElementForEvent(evt);
+    let x = mxEvent.getClientX(evt);
+    let y = mxEvent.getClientY(evt);
+    let offset = mxUtils.getOffset(graph.container);
+    let origin = mxUtils.getScrollOrigin();
+    let elt = this.getElementForEvent(evt);
 
     if (this.checkEventSource) {
       while (elt != null && elt != graph.container) {
@@ -421,7 +421,7 @@ class mxDragSource {
    * respectively, and invokes <dragOver> if <currentGraph> is not null.
    */
   mouseMove = (evt) => {
-    var graph = this.getGraphForEvent(evt);
+    let graph = this.getGraphForEvent(evt);
 
     // Checks if event is inside the bounds of the graph container
     if (graph != null && !this.graphContainsEvent(graph, evt)) {
@@ -445,8 +445,8 @@ class mxDragSource {
     }
 
     if (this.dragElement != null && (this.previewElement == null || this.previewElement.style.visibility != 'visible')) {
-      var x = mxEvent.getClientX(evt);
-      var y = mxEvent.getClientY(evt);
+      let x = mxEvent.getClientX(evt);
+      let y = mxEvent.getClientY(evt);
 
       if (this.dragElement.parentNode == null) {
         document.body.appendChild(this.dragElement);
@@ -459,7 +459,7 @@ class mxDragSource {
         y += this.dragOffset.y;
       }
 
-      var offset = mxUtils.getDocumentScrollOrigin(document);
+      let offset = mxUtils.getDocumentScrollOrigin(document);
 
       this.dragElement.style.left = (x + offset.x) + 'px';
       this.dragElement.style.top = (y + offset.y) + 'px';
@@ -480,10 +480,10 @@ class mxDragSource {
     if (this.currentGraph != null) {
       if (this.currentPoint != null && (this.previewElement == null ||
           this.previewElement.style.visibility != 'hidden')) {
-        var scale = this.currentGraph.view.scale;
-        var tr = this.currentGraph.view.translate;
-        var x = this.currentPoint.x / scale - tr.x;
-        var y = this.currentPoint.y / scale - tr.y;
+        let scale = this.currentGraph.view.scale;
+        let tr = this.currentGraph.view.translate;
+        let x = this.currentPoint.x / scale - tr.x;
+        let y = this.currentPoint.y / scale - tr.y;
 
         this.drop(this.currentGraph, evt, this.currentDropTarget, x, y);
       }
@@ -580,10 +580,10 @@ class mxDragSource {
    * targets and updates the preview.
    */
   dragOver = (graph, evt) => {
-    var offset = mxUtils.getOffset(graph.container);
-    var origin = mxUtils.getScrollOrigin(graph.container);
-    var x = mxEvent.getClientX(evt) - offset.x + origin.x - graph.panDx;
-    var y = mxEvent.getClientY(evt) - offset.y + origin.y - graph.panDy;
+    let offset = mxUtils.getOffset(graph.container);
+    let origin = mxUtils.getScrollOrigin(graph.container);
+    let x = mxEvent.getClientX(evt) - offset.x + origin.x - graph.panDx;
+    let y = mxEvent.getClientY(evt) - offset.y + origin.y - graph.panDy;
 
     if (graph.autoScroll && (this.autoscroll == null || this.autoscroll)) {
       graph.scrollPointToVisible(x, y, graph.autoExtend);
@@ -592,7 +592,7 @@ class mxDragSource {
     // Highlights the drop target under the mouse
     if (this.currentHighlight != null && graph.isDropEnabled()) {
       this.currentDropTarget = this.getDropTarget(graph, x, y, evt);
-      var state = graph.getView().getState(this.currentDropTarget);
+      let state = graph.getView().getState(this.currentDropTarget);
       this.currentHighlight.highlight(state);
     }
 
@@ -605,24 +605,24 @@ class mxDragSource {
         this.previewElement.style.position = 'absolute';
       }
 
-      var gridEnabled = this.isGridEnabled() && graph.isGridEnabledEvent(evt);
-      var hideGuide = true;
+      let gridEnabled = this.isGridEnabled() && graph.isGridEnabledEvent(evt);
+      let hideGuide = true;
 
       // Grid and guides
       if (this.currentGuide != null && this.currentGuide.isEnabledForEvent(evt)) {
         // LATER: HTML preview appears smaller than SVG preview
-        var w = parseInt(this.previewElement.style.width);
-        var h = parseInt(this.previewElement.style.height);
-        var bounds = new mxRectangle(0, 0, w, h);
-        var delta = new mxPoint(x, y);
+        let w = parseInt(this.previewElement.style.width);
+        let h = parseInt(this.previewElement.style.height);
+        let bounds = new mxRectangle(0, 0, w, h);
+        let delta = new mxPoint(x, y);
         delta = this.currentGuide.move(bounds, delta, gridEnabled, true);
         hideGuide = false;
         x = delta.x;
         y = delta.y;
       } else if (gridEnabled) {
-        var scale = graph.view.scale;
-        var tr = graph.view.translate;
-        var off = graph.gridSize / 2;
+        let scale = graph.view.scale;
+        let tr = graph.view.translate;
+        let off = graph.gridSize / 2;
         x = (graph.snap(x / scale - tr.x - off) + tr.x) * scale;
         y = (graph.snap(y / scale - tr.y - off) + tr.y) * scale;
       }
diff --git a/src/js/util/mxEffects.js b/src/js/util/mxEffects.js
index 663822b91..bc66c5945 100644
--- a/src/js/util/mxEffects.js
+++ b/src/js/util/mxEffects.js
@@ -3,7 +3,7 @@
  * Copyright (c) 2006-2015, Gaudenz Alder
  * Updated to ES9 syntax by David Morrissey 2021
  */
-var mxEffects = {
+let mxEffects = {
   /**
    * Class: mxEffects
    *
@@ -20,7 +20,7 @@ var mxEffects = {
    * (code)
    * graph.model.addListener(mxEvent.CHANGE, (sender, evt)=>
    * {
-   *   var changes = evt.getProperty('edit').changes;
+   *   let changes = evt.getProperty('edit').changes;
    *
    *   if (changes.length < 10)
    *   {
@@ -37,21 +37,21 @@ var mxEffects = {
    * last step of the animation.
    */
   animateChanges: (graph, changes, done) => {
-    var maxStep = 10;
-    var step = 0;
+    let maxStep = 10;
+    let step = 0;
 
-    var animate = () => {
-      var isRequired = false;
+    let animate = () => {
+      let isRequired = false;
 
-      for (var i = 0; i < changes.length; i++) {
-        var change = changes[i];
+      for (let i = 0; i < changes.length; i++) {
+        let change = changes[i];
 
         if (change instanceof mxGeometryChange ||
             change instanceof mxTerminalChange ||
             change instanceof mxValueChange ||
             change instanceof mxChildChange ||
             change instanceof mxStyleChange) {
-          var state = graph.getView().getState(change.cell || change.child, false);
+          let state = graph.getView().getState(change.cell || change.child, false);
 
           if (state != null) {
             isRequired = true;
@@ -59,13 +59,13 @@ var mxEffects = {
             if (change.constructor != mxGeometryChange || graph.model.isEdge(change.cell)) {
               mxUtils.setOpacity(state.shape.node, 100 * step / maxStep);
             } else {
-              var scale = graph.getView().scale;
+              let scale = graph.getView().scale;
 
-              var dx = (change.geometry.x - change.previous.x) * scale;
-              var dy = (change.geometry.y - change.previous.y) * scale;
+              let dx = (change.geometry.x - change.previous.x) * scale;
+              let dy = (change.geometry.y - change.previous.y) * scale;
 
-              var sx = (change.geometry.width - change.previous.width) * scale;
-              var sy = (change.geometry.height - change.previous.height) * scale;
+              let sx = (change.geometry.width - change.previous.width) * scale;
+              let sy = (change.geometry.height - change.previous.height) * scale;
 
               if (step == 0) {
                 state.x -= dx;
@@ -96,7 +96,7 @@ var mxEffects = {
       }
     };
 
-    var delay = 30;
+    let delay = 30;
     animate();
   },
 
@@ -113,11 +113,11 @@ var mxEffects = {
    */
   cascadeOpacity: (graph, cell, opacity) => {
     // Fades all children
-    var childCount = graph.model.getChildCount(cell);
+    let childCount = graph.model.getChildCount(cell);
 
-    for (var i = 0; i < childCount; i++) {
-      var child = graph.model.getChildAt(cell, i);
-      var childState = graph.getView().getState(child);
+    for (let i = 0; i < childCount; i++) {
+      let child = graph.model.getChildAt(cell, i);
+      let childState = graph.getView().getState(child);
 
       if (childState != null) {
         mxUtils.setOpacity(childState.shape.node, opacity);
@@ -126,11 +126,11 @@ var mxEffects = {
     }
 
     // Fades all connected edges
-    var edges = graph.model.getEdges(cell);
+    let edges = graph.model.getEdges(cell);
 
     if (edges != null) {
-      for (var i = 0; i < edges.length; i++) {
-        var edgeState = graph.getView().getState(edges[i]);
+      for (let i = 0; i < edges.length; i++) {
+        let edgeState = graph.getView().getState(edges[i]);
 
         if (edgeState != null) {
           mxUtils.setOpacity(edgeState.shape.node, opacity);
@@ -148,12 +148,12 @@ var mxEffects = {
     step = step || 40;
     delay = delay || 30;
 
-    var opacity = from || 100;
+    let opacity = from || 100;
 
     mxUtils.setOpacity(node, opacity);
 
     if (isEnabled || isEnabled == null) {
-      var f = () => {
+      let f = () => {
         opacity = Math.max(opacity - step, 0);
         mxUtils.setOpacity(node, opacity);
 
diff --git a/src/js/util/mxEvent.js b/src/js/util/mxEvent.js
index bcffc35e9..d7626f312 100644
--- a/src/js/util/mxEvent.js
+++ b/src/js/util/mxEvent.js
@@ -7,7 +7,7 @@ import mxMouseEvent from "./mxMouseEvent";
 
 // Checks if passive event listeners are supported
 // see https://github.com/Modernizr/Modernizr/issues/1894
-var supportsPassive = false;
+let supportsPassive = false;
 
 try {
   document.addEventListener(
@@ -26,7 +26,7 @@ try {
   // ignore
 }
 
-var mxEvent = {
+let mxEvent = {
   /**
    * Class: mxEvent
    *
@@ -55,7 +55,7 @@ var mxEvent = {
     if (element.mxListenerList == null) {
       element.mxListenerList = [];
     }
-    var entry = {name: eventName, f: funct};
+    let entry = {name: eventName, f: funct};
     element.mxListenerList.push(entry);
   },
 
@@ -68,10 +68,10 @@ var mxEvent = {
     element.removeEventListener(eventName, funct, false);
 
     if (element.mxListenerList != null) {
-      var listenerCount = element.mxListenerList.length;
+      let listenerCount = element.mxListenerList.length;
 
-      for (var i = 0; i < listenerCount; i++) {
-        var entry = element.mxListenerList[i];
+      for (let i = 0; i < listenerCount; i++) {
+        let entry = element.mxListenerList[i];
 
         if (entry.f === funct) {
           element.mxListenerList.splice(i, 1);
@@ -90,11 +90,11 @@ var mxEvent = {
    * Removes all listeners from the given element.
    */
   removeAllListeners: (element) => {
-    var list = element.mxListenerList;
+    let list = element.mxListenerList;
 
     if (list != null) {
       while (list.length > 0) {
-        var entry = list[0];
+        let entry = list[0];
         mxEvent.removeListener(element, entry.name, entry.f);
       }
     }
@@ -182,7 +182,7 @@ var mxEvent = {
    * default behaviour.
    */
   redirectMouseEvents: (node, graph, state, down, move, up, dblClick) => {
-    var getState = (evt) => {
+    let getState = (evt) => {
       return (typeof (state) == 'function') ? state(evt) : state;
     };
 
@@ -213,7 +213,7 @@ var mxEvent = {
       if (dblClick != null) {
         dblClick(evt);
       } else if (!mxEvent.isConsumed(evt)) {
-        var tmp = getState(evt);
+        let tmp = getState(evt);
         graph.dblClick(evt, (tmp != null) ? tmp.cell : null);
       }
     });
@@ -233,10 +233,10 @@ var mxEvent = {
       if (element != null) {
         mxEvent.removeAllListeners(element);
 
-        var children = element.childNodes;
+        let children = element.childNodes;
         if (children != null) {
-          var childCount = children.length;
-          for (var i = 0; i < childCount; i += 1) {
+          let childCount = children.length;
+          for (let i = 0; i < childCount; i += 1) {
             mxEvent.release(children[i]);
           }
         }
@@ -276,7 +276,7 @@ var mxEvent = {
    */
   addMouseWheelListener: (funct, target) => {
     if (funct != null) {
-      var wheelHandler = (evt) => {
+      let wheelHandler = (evt) => {
         // IE does not give an event object but the
         // global event object is the mousewheel event
         // at this point in time.
@@ -298,7 +298,7 @@ var mxEvent = {
       target = target != null ? target : window;
 
       if (mxClient.IS_SF && !mxClient.IS_TOUCH) {
-        var scale = 1;
+        let scale = 1;
 
         mxEvent.addListener(target, 'gesturestart', (evt) => {
           mxEvent.consume(evt);
@@ -307,7 +307,7 @@ var mxEvent = {
 
         mxEvent.addListener(target, 'gesturechange', (evt) => {
           mxEvent.consume(evt);
-          var diff = scale - evt.scale;
+          let diff = scale - evt.scale;
 
           if (Math.abs(diff) > 0.2) {
             funct(evt, diff < 0, true);
@@ -319,7 +319,7 @@ var mxEvent = {
           mxEvent.consume(evt);
         });
       } else {
-        var evtCache = [];
+        let evtCache = [];
         var dx0 = 0;
         var dy0 = 0;
 
@@ -332,7 +332,7 @@ var mxEvent = {
             (evt) => {
               if (!mxEvent.isMouseEvent(evt) && evtCache.length == 2) {
                 // Find this event in the cache and update its record with this event
-                for (var i = 0; i < evtCache.length; i++) {
+                for (let i = 0; i < evtCache.length; i++) {
                   if (evt.pointerId == evtCache[i].pointerId) {
                     evtCache[i] = evt;
                     break;
@@ -340,14 +340,14 @@ var mxEvent = {
                 }
 
                 // Calculate the distance between the two pointers
-                var dx = Math.abs(evtCache[0].clientX - evtCache[1].clientX);
-                var dy = Math.abs(evtCache[0].clientY - evtCache[1].clientY);
-                var tx = Math.abs(dx - dx0);
-                var ty = Math.abs(dy - dy0);
+                let dx = Math.abs(evtCache[0].clientX - evtCache[1].clientX);
+                let dy = Math.abs(evtCache[0].clientY - evtCache[1].clientY);
+                let tx = Math.abs(dx - dx0);
+                let ty = Math.abs(dy - dy0);
 
                 if (tx > mxEvent.PINCH_THRESHOLD || ty > mxEvent.PINCH_THRESHOLD) {
-                  var cx = evtCache[0].clientX + (evtCache[1].clientX - evtCache[0].clientX) / 2;
-                  var cy = evtCache[0].clientY + (evtCache[1].clientY - evtCache[0].clientY) / 2;
+                  let cx = evtCache[0].clientX + (evtCache[1].clientX - evtCache[0].clientX) / 2;
+                  let cy = evtCache[0].clientY + (evtCache[1].clientY - evtCache[0].clientY) / 2;
 
                   funct(evtCache[0], (tx > ty) ? dx > dx0 : dy > dy0, true, cx, cy);
 
diff --git a/src/js/util/mxEventObject.js b/src/js/util/mxEventObject.js
index 990247e2e..f873083f4 100644
--- a/src/js/util/mxEventObject.js
+++ b/src/js/util/mxEventObject.js
@@ -51,7 +51,7 @@ class mxEventObject {
     this.name = name;
     this.properties = [];
 
-    for (var i = 1; i < arguments.length; i += 2) {
+    for (let i = 1; i < arguments.length; i += 2) {
       if (arguments[i + 1] != null) {
         this.properties[arguments[i]] = arguments[i + 1];
       }
diff --git a/src/js/util/mxEventSource.js b/src/js/util/mxEventSource.js
index 06de7db7c..be7132ba4 100644
--- a/src/js/util/mxEventSource.js
+++ b/src/js/util/mxEventSource.js
@@ -116,10 +116,10 @@ class mxEventSource {
    */
   removeListener = (funct) => {
     if (this.eventListeners != null) {
-      var i = 0;
+      let i = 0;
 
       while (i < this.eventListeners.length) {
-        if (this.eventListeners[i + 1] == funct) {
+        if (this.eventListeners[i + 1] === funct) {
           this.eventListeners.splice(i, 2);
         } else {
           i += 2;
@@ -161,12 +161,12 @@ class mxEventSource {
         sender = this;
       }
 
-      var args = [sender, evt];
+      let args = [sender, evt];
 
-      for (var i = 0; i < this.eventListeners.length; i += 2) {
-        var listen = this.eventListeners[i];
+      for (let i = 0; i < this.eventListeners.length; i += 2) {
+        let listen = this.eventListeners[i];
 
-        if (listen == null || listen == evt.getName()) {
+        if (listen == null || listen === evt.getName()) {
           this.eventListeners[i + 1].apply(this, args);
         }
       }
diff --git a/src/js/util/mxForm.js b/src/js/util/mxForm.js
index fe442a497..f94c93300 100644
--- a/src/js/util/mxForm.js
+++ b/src/js/util/mxForm.js
@@ -53,13 +53,13 @@ class mxForm {
    * functions.
    */
   addButtons = (okFunct, cancelFunct) => {
-    var tr = document.createElement('tr');
-    var td = document.createElement('td');
+    let tr = document.createElement('tr');
+    let td = document.createElement('td');
     tr.appendChild(td);
     td = document.createElement('td');
 
     // Adds the ok button
-    var button = document.createElement('button');
+    let button = document.createElement('button');
     mxUtils.write(button, mxResources.get('ok') || 'OK');
     td.appendChild(button);
 
@@ -86,7 +86,7 @@ class mxForm {
    * Adds an input for the given name, type and value and returns it.
    */
   addText = (name, value, type) => {
-    var input = document.createElement('input');
+    let input = document.createElement('input');
 
     input.setAttribute('type', type || 'text');
     input.value = value;
@@ -100,7 +100,7 @@ class mxForm {
    * Adds a checkbox for the given name and value and returns the textfield.
    */
   addCheckbox = (name, value) => {
-    var input = document.createElement('input');
+    let input = document.createElement('input');
 
     input.setAttribute('type', 'checkbox');
     this.addField(name, input);
@@ -119,7 +119,7 @@ class mxForm {
    * Adds a textarea for the given name and value and returns the textarea.
    */
   addTextarea = (name, value, rows) => {
-    var input = document.createElement('textarea');
+    let input = document.createElement('textarea');
 
     if (mxClient.IS_NS) {
       rows--;
@@ -137,7 +137,7 @@ class mxForm {
    * Adds a combo for the given name and returns the combo.
    */
   addCombo = (name, isMultiSelect, size) => {
-    var select = document.createElement('select');
+    let select = document.createElement('select');
 
     if (size != null) {
       select.setAttribute('size', size);
@@ -156,7 +156,7 @@ class mxForm {
    * Adds an option for the given label to the specified combo.
    */
   addOption = (combo, label, value, isSelected) => {
-    var option = document.createElement('option');
+    let option = document.createElement('option');
 
     mxUtils.writeln(option, label);
     option.setAttribute('value', value);
@@ -175,8 +175,8 @@ class mxForm {
    * returns the given input.
    */
   addField = (name, input) => {
-    var tr = document.createElement('tr');
-    var td = document.createElement('td');
+    let tr = document.createElement('tr');
+    let td = document.createElement('td');
     mxUtils.write(td, name);
     tr.appendChild(td);
 
diff --git a/src/js/util/mxGuide.js b/src/js/util/mxGuide.js
index 30f8b8e8e..0184f1ade 100644
--- a/src/js/util/mxGuide.js
+++ b/src/js/util/mxGuide.js
@@ -107,7 +107,7 @@ class mxGuide {
    * horizontal - Boolean that specifies which guide should be created.
    */
   createGuideShape = (horizontal) => {
-    var guide = new mxPolyline([], mxConstants.GUIDE_COLOR, mxConstants.GUIDE_STROKEWIDTH);
+    let guide = new mxPolyline([], mxConstants.GUIDE_COLOR, mxConstants.GUIDE_STROKEWIDTH);
     guide.isDashed = true;
 
     return guide;
@@ -129,29 +129,29 @@ class mxGuide {
    */
   move = (bounds, delta, gridEnabled, clone) => {
     if (this.states != null && (this.horizontal || this.vertical) && bounds != null && delta != null) {
-      var scale = this.graph.getView().scale;
-      var tt = this.getGuideTolerance(gridEnabled) * scale;
-      var b = bounds.clone();
+      let scale = this.graph.getView().scale;
+      let tt = this.getGuideTolerance(gridEnabled) * scale;
+      let b = bounds.clone();
       b.x += delta.x;
       b.y += delta.y;
-      var overrideX = false;
-      var stateX = null;
-      var valueX = null;
-      var overrideY = false;
-      var stateY = null;
-      var valueY = null;
-      var ttX = tt;
-      var ttY = tt;
-      var left = b.x;
-      var right = b.x + b.width;
-      var center = b.getCenterX();
-      var top = b.y;
-      var bottom = b.y + b.height;
-      var middle = b.getCenterY();
+      let overrideX = false;
+      let stateX = null;
+      let valueX = null;
+      let overrideY = false;
+      let stateY = null;
+      let valueY = null;
+      let ttX = tt;
+      let ttY = tt;
+      let left = b.x;
+      let right = b.x + b.width;
+      let center = b.getCenterX();
+      let top = b.y;
+      let bottom = b.y + b.height;
+      let middle = b.getCenterY();
 
       // Snaps the left, center and right to the given x-coordinate
       function snapX(x, state, centerAlign) {
-        var override = false;
+        let override = false;
 
         if (centerAlign && Math.abs(x - center) < ttX) {
           delta.x = x - bounds.getCenterX();
@@ -191,7 +191,7 @@ class mxGuide {
 
       // Snaps the top, middle or bottom to the given y-coordinate
       function snapY(y, state, centerAlign) {
-        var override = false;
+        let override = false;
 
         if (centerAlign && Math.abs(y - middle) < ttY) {
           delta.y = y - bounds.getCenterY();
@@ -229,8 +229,8 @@ class mxGuide {
         overrideY = overrideY || override;
       }
 
-      for (var i = 0; i < this.states.length; i++) {
-        var state = this.states[i];
+      for (let i = 0; i < this.states.length; i++) {
+        let state = this.states[i];
 
         if (state != null && !this.isStateIgnored(state)) {
           // Align x
@@ -264,13 +264,13 @@ class mxGuide {
       delta = this.getDelta(bounds, stateX, delta.x, stateY, delta.y)
 
       // Redraws the guides
-      var c = this.graph.container;
+      let c = this.graph.container;
 
       if (!overrideX && this.guideX != null) {
         this.guideX.node.style.visibility = 'hidden';
       } else if (this.guideX != null) {
-        var minY = null;
-        var maxY = null;
+        let minY = null;
+        let maxY = null;
 
         if (stateX != null && bounds != null) {
           minY = Math.min(bounds.y + delta.y - this.graph.panDy, stateX.y);
@@ -292,8 +292,8 @@ class mxGuide {
       if (!overrideY && this.guideY != null) {
         this.guideY.node.style.visibility = 'hidden';
       } else if (this.guideY != null) {
-        var minX = null;
-        var maxX = null;
+        let minX = null;
+        let maxX = null;
 
         if (stateY != null && bounds != null) {
           minX = Math.min(bounds.x + delta.x - this.graph.panDx, stateY.x);
@@ -322,7 +322,7 @@ class mxGuide {
    * Rounds to pixels for virtual states (eg. page guides)
    */
   getDelta = (bounds, stateX, dx, stateY, dy) => {
-    var s = this.graph.view.scale;
+    let s = this.graph.view.scale;
 
     if (this.rounded || (stateX != null && stateX.cell == null)) {
       dx = Math.round((bounds.x + dx) / s) * s - bounds.x;
diff --git a/src/js/util/mxImageBundle.js b/src/js/util/mxImageBundle.js
index 43a512760..9e7c9bd5d 100644
--- a/src/js/util/mxImageBundle.js
+++ b/src/js/util/mxImageBundle.js
@@ -30,7 +30,7 @@ class mxImageBundle {
    * To add a new image bundle to an existing graph, the following code is used:
    *
    * (code)
-   * var bundle = new mxImageBundle(alt);
+   * let bundle = new mxImageBundle(alt);
    * bundle.putImage('myImage', 'data:image/gif,R0lGODlhEAAQAMIGAAAAAICAAICAgP' +
    *   '//AOzp2O3r2////////yH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh+QQBCgAHACwAAAAA' +
    *   'EAAQAAADTXi63AowynnAMDfjPUDlnAAJhmeBFxAEloliKltWmiYCQvfVr6lBPB1ggxN1hi' +
@@ -87,10 +87,10 @@ class mxImageBundle {
    * <alt> is true, the value is returned otherwise.
    */
   getImage = (key) => {
-    var result = null;
+    let result = null;
 
     if (key != null) {
-      var img = this.images[key];
+      let img = this.images[key];
 
       if (img != null) {
         result = (this.alt) ? img.fallback : img.value;
diff --git a/src/js/util/mxImageExport.js b/src/js/util/mxImageExport.js
index 55a83f8a8..d5dc38503 100644
--- a/src/js/util/mxImageExport.js
+++ b/src/js/util/mxImageExport.js
@@ -20,19 +20,19 @@ class mxImageExport {
    * <mxXmlExportCanvas>.
    *
    * (code)
-   * var xmlDoc = mxUtils.createXmlDocument();
-   * var root = xmlDoc.createElement('output');
+   * let xmlDoc = mxUtils.createXmlDocument();
+   * let root = xmlDoc.createElement('output');
    * xmlDoc.appendChild(root);
    *
-   * var xmlCanvas = new mxXmlCanvas2D(root);
-   * var imgExport = new mxImageExport();
+   * let xmlCanvas = new mxXmlCanvas2D(root);
+   * let imgExport = new mxImageExport();
    * imgExport.drawState(graph.getView().getState(graph.model.root), xmlCanvas);
    *
-   * var bounds = graph.getGraphBounds();
-   * var w = Math.ceil(bounds.x + bounds.width);
-   * var h = Math.ceil(bounds.y + bounds.height);
+   * let bounds = graph.getGraphBounds();
+   * let w = Math.ceil(bounds.x + bounds.width);
+   * let h = Math.ceil(bounds.y + bounds.height);
    *
-   * var xml = mxUtils.getXml(root);
+   * let xml = mxUtils.getXml(root);
    * new mxXmlRequest('export', 'format=png&w=' + w +
    *     '&h=' + h + '&bg=#F9F7ED&xml=' + encodeURIComponent(xml))
    *     .simulate(document, '_blank');
@@ -74,11 +74,11 @@ class mxImageExport {
     if (state != null) {
       visitor(state, canvas);
 
-      var graph = state.view.graph;
-      var childCount = graph.model.getChildCount(state.cell);
+      let graph = state.view.graph;
+      let childCount = graph.model.getChildCount(state.cell);
 
-      for (var i = 0; i < childCount; i++) {
-        var childState = graph.view.getState(graph.model.getChildAt(state.cell, i));
+      for (let i = 0; i < childCount; i++) {
+        let childState = graph.view.getState(graph.model.getChildAt(state.cell, i));
         this.visitStatesRecursive(childState, canvas, visitor);
       }
     }
@@ -100,7 +100,7 @@ class mxImageExport {
    */
   drawCellState = (state, canvas) => {
     // Experimental feature
-    var link = this.getLinkForCellState(state, canvas);
+    let link = this.getLinkForCellState(state, canvas);
 
     if (link != null) {
       canvas.setLink(link);
diff --git a/src/js/util/mxLog.js b/src/js/util/mxLog.js
index 78f5d8156..9faeeb95c 100644
--- a/src/js/util/mxLog.js
+++ b/src/js/util/mxLog.js
@@ -4,7 +4,7 @@
  * Updated to ES9 syntax by David Morrissey 2021
  */
 
-var mxLog = {
+let mxLog = {
   /**
    * Class: mxLog
    *
@@ -56,16 +56,16 @@ var mxLog = {
    */
   init: () => {
     if (mxLog.window == null && document.body != null) {
-      var title = mxLog.consoleName + ' - mxGraph ' + mxClient.VERSION;
+      let title = mxLog.consoleName + ' - mxGraph ' + mxClient.VERSION;
 
       // Creates a table that maintains the layout
-      var table = document.createElement('table');
+      let table = document.createElement('table');
       table.setAttribute('width', '100%');
       table.setAttribute('height', '100%');
 
-      var tbody = document.createElement('tbody');
-      var tr = document.createElement('tr');
-      var td = document.createElement('td');
+      let tbody = document.createElement('tbody');
+      let tr = document.createElement('tr');
+      let td = document.createElement('td');
       td.style.verticalAlign = 'top';
 
       // Adds the actual console as a textarea
@@ -103,7 +103,7 @@ var mxLog = {
       });
 
       mxLog.addButton('DOM', function (evt) {
-        var content = mxUtils.getInnerHtml(document.body);
+        let content = mxUtils.getInnerHtml(document.body);
         mxLog.debug(content);
       });
 
@@ -138,8 +138,8 @@ var mxLog = {
       });
 
       // Cross-browser code to get window size
-      var h = 0;
-      var w = 0;
+      let h = 0;
+      let w = 0;
 
       if (typeof (window.innerWidth) === 'number') {
         h = window.innerHeight;
@@ -159,9 +159,9 @@ var mxLog = {
       // Workaround for ignored textarea height in various setups
       if ((mxClient.IS_NS && !mxClient.IS_GC &&
           !mxClient.IS_SF && document.compatMode != 'BackCompat')) {
-        var elt = mxLog.window.getElement();
+        let elt = mxLog.window.getElement();
 
-        var resizeHandler = (sender, evt) => {
+        let resizeHandler = (sender, evt) => {
           mxLog.textarea.style.height = Math.max(0, elt.offsetHeight - 70) + 'px';
         };
 
@@ -189,7 +189,7 @@ var mxLog = {
    * Adds a button to the console using the given label and function.
    */
   addButton: (lab, funct) => {
-    var button = document.createElement('button');
+    let button = document.createElement('button');
     mxUtils.write(button, lab);
     mxEvent.addListener(button, 'click', funct);
     mxLog.td.appendChild(button);
@@ -267,7 +267,7 @@ var mxLog = {
    */
   leave: (string, t0) => {
     if (mxLog.TRACE) {
-      var dt = (t0 != 0) ? ' (' + (new Date().getTime() - t0) + ' ms)' : '';
+      let dt = (t0 != 0) ? ' (' + (new Date().getTime() - t0) + ' ms)' : '';
       mxLog.writeln('Leaving ' + string + dt);
     }
   },
@@ -314,9 +314,9 @@ var mxLog = {
    * Adds the specified strings to the console.
    */
   write: () => {
-    var string = '';
+    let string = '';
 
-    for (var i = 0; i < arguments.length; i++) {
+    for (let i = 0; i < arguments.length; i++) {
       string += arguments[i];
 
       if (i < arguments.length - 1) {
@@ -347,9 +347,9 @@ var mxLog = {
    * end of each string.
    */
   writeln: () => {
-    var string = '';
+    let string = '';
 
-    for (var i = 0; i < arguments.length; i++) {
+    for (let i = 0; i < arguments.length; i++) {
       string += arguments[i];
 
       if (i < arguments.length - 1) {
diff --git a/src/js/util/mxMorphing.js b/src/js/util/mxMorphing.js
index ae02d84f0..f5ab983e2 100644
--- a/src/js/util/mxMorphing.js
+++ b/src/js/util/mxMorphing.js
@@ -56,12 +56,12 @@ class mxMorphing extends mxAnimation {
    * graph.getModel().beginUpdate();
    * try
    * {
-   *   var circleLayout = new mxCircleLayout(graph);
+   *   let circleLayout = new mxCircleLayout(graph);
    *   circleLayout.execute(graph.getDefaultParent());
    * }
    * finally
    * {
-   *   var morph = new mxMorphing(graph);
+   *   let morph = new mxMorphing(graph);
    *   morph.addListener(mxEvent.DONE, ()=>
    *   {
    *     graph.getModel().endUpdate();
@@ -96,11 +96,11 @@ class mxMorphing extends mxAnimation {
    */
   updateAnimation = () => {
     updateAnimation.apply(this, arguments);
-    var move = new mxCellStatePreview(this.graph);
+    let move = new mxCellStatePreview(this.graph);
 
     if (this.cells != null) {
       // Animates the given cells individually without recursion
-      for (var i = 0; i < this.cells.length; i++) {
+      for (let i = 0; i < this.cells.length; i++) {
         this.animateCell(this.cells[i], move, false);
       }
     } else {
@@ -131,8 +131,8 @@ class mxMorphing extends mxAnimation {
    * Animates the given cell state using <mxCellStatePreview.moveState>.
    */
   animateCell = (cell, move, recurse) => {
-    var state = this.graph.getView().getState(cell);
-    var delta = null;
+    let state = this.graph.getView().getState(cell);
+    let delta = null;
 
     if (state != null) {
       // Moves the animated state from where it will be after the model
@@ -140,8 +140,8 @@ class mxMorphing extends mxAnimation {
       delta = this.getDelta(state);
 
       if (this.graph.getModel().isVertex(cell) && (delta.x != 0 || delta.y != 0)) {
-        var translate = this.graph.view.getTranslate();
-        var scale = this.graph.view.getScale();
+        let translate = this.graph.view.getTranslate();
+        let scale = this.graph.view.getScale();
 
         delta.x += translate.x * scale;
         delta.y += translate.y * scale;
@@ -151,9 +151,9 @@ class mxMorphing extends mxAnimation {
     }
 
     if (recurse && !this.stopRecursion(state, delta)) {
-      var childCount = this.graph.getModel().getChildCount(cell);
+      let childCount = this.graph.getModel().getChildCount(cell);
 
-      for (var i = 0; i < childCount; i++) {
+      for (let i = 0; i < childCount; i++) {
         this.animateCell(this.graph.getModel().getChildAt(cell, i), move, recurse);
       }
     }
@@ -176,11 +176,11 @@ class mxMorphing extends mxAnimation {
    * location of the state after the display will be updated.
    */
   getDelta = (state) => {
-    var origin = this.getOriginForCell(state.cell);
-    var translate = this.graph.getView().getTranslate();
-    var scale = this.graph.getView().getScale();
-    var x = state.x / scale - translate.x;
-    var y = state.y / scale - translate.y;
+    let origin = this.getOriginForCell(state.cell);
+    let translate = this.graph.getView().getTranslate();
+    let scale = this.graph.getView().getScale();
+    let x = state.x / scale - translate.x;
+    let y = state.y / scale - translate.y;
 
     return new mxPoint((origin.x - x) * scale, (origin.y - y) * scale);
   };
@@ -193,17 +193,17 @@ class mxMorphing extends mxAnimation {
    * during the lifecycle of this object.
    */
   getOriginForCell = (cell) => {
-    var result = null;
+    let result = null;
 
     if (cell != null) {
-      var parent = this.graph.getModel().getParent(cell);
-      var geo = this.graph.getCellGeometry(cell);
+      let parent = this.graph.getModel().getParent(cell);
+      let geo = this.graph.getCellGeometry(cell);
       result = this.getOriginForCell(parent);
 
       // TODO: Handle offsets
       if (geo != null) {
         if (geo.relative) {
-          var pgeo = this.graph.getCellGeometry(parent);
+          let pgeo = this.graph.getCellGeometry(parent);
 
           if (pgeo != null) {
             result.x += geo.x * pgeo.width;
@@ -217,7 +217,7 @@ class mxMorphing extends mxAnimation {
     }
 
     if (result == null) {
-      var t = this.graph.view.getTranslate();
+      let t = this.graph.view.getTranslate();
       result = new mxPoint(-t.x, -t.y);
     }
 
diff --git a/src/js/util/mxMouseEvent.js b/src/js/util/mxMouseEvent.js
index 9f5e14357..a7af1dad3 100644
--- a/src/js/util/mxMouseEvent.js
+++ b/src/js/util/mxMouseEvent.js
@@ -172,7 +172,7 @@ class mxMouseEvent {
    * Returns the <mxCell> in <state> is not null.
    */
   getCell = () => {
-    var state = this.getState();
+    let state = this.getState();
 
     if (state != null) {
       return state.cell;
diff --git a/src/js/util/mxObjectIdentity.js b/src/js/util/mxObjectIdentity.js
index dea0fab5e..4e2d49f8d 100644
--- a/src/js/util/mxObjectIdentity.js
+++ b/src/js/util/mxObjectIdentity.js
@@ -4,7 +4,7 @@
  * Updated to ES9 syntax by David Morrissey 2021
  */
 
-var mxObjectIdentity = {
+let mxObjectIdentity = {
   /**
    * Class: mxObjectIdentity
    *
@@ -38,7 +38,7 @@ var mxObjectIdentity = {
     if (obj != null) {
       if (obj[mxObjectIdentity.FIELD_NAME] == null) {
         if (typeof obj === 'object') {
-          var ctor = mxUtils.getFunctionName(obj.constructor);
+          let ctor = mxUtils.getFunctionName(obj.constructor);
           obj[mxObjectIdentity.FIELD_NAME] = ctor + '#' + mxObjectIdentity.counter++;
         } else if (typeof obj === 'function') {
           obj[mxObjectIdentity.FIELD_NAME] = 'Function#' + mxObjectIdentity.counter++;
diff --git a/src/js/util/mxPanningManager.js b/src/js/util/mxPanningManager.js
index 58683fe8f..bcf8a1e67 100644
--- a/src/js/util/mxPanningManager.js
+++ b/src/js/util/mxPanningManager.js
@@ -75,7 +75,7 @@ class mxPanningManager {
     // Stops scrolling on every mouseup anywhere in the document
     mxEvent.addListener(document, 'mouseup', this.mouseUpListener);
 
-    var createThread = mxUtils.bind(this, () => {
+    let createThread = mxUtils.bind(this, () => {
       this.scrollbars = mxUtils.hasScrollbars(graph.container);
       this.scrollLeft = graph.container.scrollLeft;
       this.scrollTop = graph.container.scrollTop;
@@ -85,8 +85,8 @@ class mxPanningManager {
         this.tdy -= this.dy;
 
         if (this.scrollbars) {
-          var left = -graph.container.scrollLeft - Math.ceil(this.dx);
-          var top = -graph.container.scrollTop - Math.ceil(this.dy);
+          let left = -graph.container.scrollLeft - Math.ceil(this.dx);
+          let top = -graph.container.scrollTop - Math.ceil(this.dy);
           graph.panGraph(left, top);
           graph.panDx = this.scrollLeft - graph.container.scrollLeft;
           graph.panDy = this.scrollTop - graph.container.scrollTop;
@@ -127,7 +127,7 @@ class mxPanningManager {
       w = (w != null) ? w : 0;
       h = (h != null) ? h : 0;
 
-      var c = graph.container;
+      let c = graph.container;
       this.dx = x + w - c.scrollLeft - c.clientWidth;
 
       if (this.dx < 0 && Math.abs(this.dx) < this.border) {
@@ -198,8 +198,8 @@ class mxPanningManager {
         this.tdy = 0;
 
         if (!this.scrollbars) {
-          var px = graph.panDx;
-          var py = graph.panDy;
+          let px = graph.panDx;
+          let py = graph.panDy;
 
           if (px != 0 || py != 0) {
             graph.panGraph(0, 0);
diff --git a/src/js/util/mxPopupMenu.js b/src/js/util/mxPopupMenu.js
index 88fea3d3e..6e5064350 100644
--- a/src/js/util/mxPopupMenu.js
+++ b/src/js/util/mxPopupMenu.js
@@ -74,7 +74,7 @@ class mxPopupMenu extends mxEventSource {
    * following code can be used.
    *
    * (code)
-   * var mxPopupMenuShowMenu = showMenu;
+   * let mxPopupMenuShowMenu = showMenu;
    * showMenu = ()=>
    * {
    *   mxPopupMenuShowMenu.apply(this, arguments);
@@ -195,18 +195,18 @@ class mxPopupMenu extends mxEventSource {
     }
 
     parent.containsItems = true;
-    var tr = document.createElement('tr');
+    let tr = document.createElement('tr');
     tr.className = 'mxPopupMenuItem';
     var col1 = document.createElement('td');
     col1.className = 'mxPopupMenuIcon';
 
     // Adds the given image into the first column
     if (image != null) {
-      var img = document.createElement('img');
+      let img = document.createElement('img');
       img.src = image;
       col1.appendChild(img);
     } else if (iconCls != null) {
-      var div = document.createElement('div');
+      let div = document.createElement('div');
       div.className = iconCls;
       col1.appendChild(div);
     }
@@ -238,7 +238,7 @@ class mxPopupMenu extends mxEventSource {
     parent.tbody.appendChild(tr);
 
     if (active != false && enabled != false) {
-      var currentSelection = null;
+      let currentSelection = null;
 
       mxEvent.addGestureListeners(tr,
           mxUtils.bind(this, (evt) => {
@@ -321,7 +321,7 @@ class mxPopupMenu extends mxEventSource {
    * Adds a checkmark to the given menuitem.
    */
   addCheckmark = (item, img) => {
-    var td = item.firstChild.nextSibling;
+    let td = item.firstChild.nextSibling;
     td.style.backgroundImage = 'url(\'' + img + '\')';
     td.style.backgroundRepeat = 'no-repeat';
     td.style.backgroundPosition = '2px 50%';
@@ -354,7 +354,7 @@ class mxPopupMenu extends mxEventSource {
 
     parent.div.appendChild(parent.table);
 
-    var img = document.createElement('img');
+    let img = document.createElement('img');
     img.setAttribute('src', this.submenuImage);
 
     // Last column of the submenu item in the parent menu
@@ -375,14 +375,14 @@ class mxPopupMenu extends mxEventSource {
       document.body.appendChild(row.div);
 
       // Moves the submenu to the left side if there is no space
-      var left = parseInt(row.div.offsetLeft);
-      var width = parseInt(row.div.offsetWidth);
-      var offset = mxUtils.getDocumentScrollOrigin(document);
+      let left = parseInt(row.div.offsetLeft);
+      let width = parseInt(row.div.offsetWidth);
+      let offset = mxUtils.getDocumentScrollOrigin(document);
 
-      var b = document.body;
-      var d = document.documentElement;
+      let b = document.body;
+      let d = document.documentElement;
 
-      var right = offset.x + (b.clientWidth || d.clientWidth);
+      let right = offset.x + (b.clientWidth || d.clientWidth);
 
       if (left + width > right) {
         row.div.style.left = Math.max(0, (parent.div.offsetLeft - width - 6)) + 'px';
@@ -410,7 +410,7 @@ class mxPopupMenu extends mxEventSource {
       parent.willAddSeparator = true;
     } else if (parent.tbody != null) {
       parent.willAddSeparator = false;
-      var tr = document.createElement('tr');
+      let tr = document.createElement('tr');
 
       var col1 = document.createElement('td');
       col1.className = 'mxPopupMenuIcon';
@@ -422,7 +422,7 @@ class mxPopupMenu extends mxEventSource {
       col2.style.padding = '0 0 0 0px';
       col2.setAttribute('colSpan', '2');
 
-      var hr = document.createElement('hr');
+      let hr = document.createElement('hr');
       hr.setAttribute('size', '1');
       col2.appendChild(hr);
 
diff --git a/src/js/util/mxRectangle.js b/src/js/util/mxRectangle.js
index 892554be8..eacb27063 100644
--- a/src/js/util/mxRectangle.js
+++ b/src/js/util/mxRectangle.js
@@ -87,10 +87,10 @@ class mxRectangle extends mxPoint {
    */
   add = (rect) => {
     if (rect != null) {
-      var minX = Math.min(this.x, rect.x);
-      var minY = Math.min(this.y, rect.y);
-      var maxX = Math.max(this.x + this.width, rect.x + rect.width);
-      var maxY = Math.max(this.y + this.height, rect.y + rect.height);
+      let minX = Math.min(this.x, rect.x);
+      let minY = Math.min(this.y, rect.y);
+      let maxX = Math.max(this.x + this.width, rect.x + rect.width);
+      let maxY = Math.max(this.y + this.height, rect.y + rect.height);
 
       this.x = minX;
       this.y = minY;
@@ -150,10 +150,10 @@ class mxRectangle extends mxPoint {
    * Rotates this rectangle by 90 degree around its center point.
    */
   rotate90 = () => {
-    var t = (this.width - this.height) / 2;
+    let t = (this.width - this.height) / 2;
     this.x += t;
     this.y -= t;
-    var tmp = this.width;
+    let tmp = this.width;
     this.width = this.height;
     this.height = tmp;
   };
diff --git a/src/js/util/mxResources.js b/src/js/util/mxResources.js
index b70309c34..42e4728df 100644
--- a/src/js/util/mxResources.js
+++ b/src/js/util/mxResources.js
@@ -2,7 +2,7 @@
  * Copyright (c) 2006-2016, JGraph Ltd
  * Copyright (c) 2006-2016, Gaudenz Alder
  */
-var mxResources =
+let mxResources =
     {
       /**
        * Class: mxResources
@@ -154,7 +154,7 @@ var mxResources =
        */
       getSpecialBundle: (basename, lan) => {
         if (mxClient.languages == null || !this.isLanguageSupported(lan)) {
-          var dash = lan.indexOf('-');
+          let dash = lan.indexOf('-');
 
           if (dash > 0) {
             lan = lan.substring(0, dash);
@@ -195,10 +195,10 @@ var mxResources =
             mxClient.language.toLowerCase() : mxConstants.NONE);
 
         if (lan != mxConstants.NONE) {
-          var defaultBundle = mxResources.getDefaultBundle(basename, lan);
-          var specialBundle = mxResources.getSpecialBundle(basename, lan);
+          let defaultBundle = mxResources.getDefaultBundle(basename, lan);
+          let specialBundle = mxResources.getSpecialBundle(basename, lan);
 
-          var loadSpecialBundle = () => {
+          let loadSpecialBundle = () => {
             if (specialBundle != null) {
               if (callback) {
                 mxUtils.get(specialBundle, (req) => {
@@ -209,7 +209,7 @@ var mxResources =
                 });
               } else {
                 try {
-                  var req = mxUtils.load(specialBundle);
+                  let req = mxUtils.load(specialBundle);
 
                   if (req.isReady()) {
                     mxResources.parse(req.getText());
@@ -233,7 +233,7 @@ var mxResources =
               });
             } else {
               try {
-                var req = mxUtils.load(defaultBundle);
+                let req = mxUtils.load(defaultBundle);
 
                 if (req.isReady()) {
                   mxResources.parse(req.getText());
@@ -259,21 +259,21 @@ var mxResources =
        */
       parse: (text) => {
         if (text != null) {
-          var lines = text.split('\n');
+          let lines = text.split('\n');
 
-          for (var i = 0; i < lines.length; i++) {
+          for (let i = 0; i < lines.length; i++) {
             if (lines[i].charAt(0) != '#') {
-              var index = lines[i].indexOf('=');
+              let index = lines[i].indexOf('=');
 
               if (index > 0) {
-                var key = lines[i].substring(0, index);
-                var idx = lines[i].length;
+                let key = lines[i].substring(0, index);
+                let idx = lines[i].length;
 
                 if (lines[i].charCodeAt(idx - 1) == 13) {
                   idx--;
                 }
 
-                var value = lines[i].substring(index + 1, idx);
+                let value = lines[i].substring(index + 1, idx);
 
                 if (this.resourcesEncoded) {
                   value = value.replace(/\\(?=u[a-fA-F\d]{4})/g, "%");
@@ -295,7 +295,7 @@ var mxResources =
        * Example:
        * To read the value for 'welomeMessage', use the following:
        * (code)
-       * var result = mxResources.get('welcomeMessage') || '';
+       * let result = mxResources.get('welcomeMessage') || '';
        * (end)
        *
        * This would require an entry of the following form in
@@ -315,7 +315,7 @@ var mxResources =
        * defaultValue - Optional string that specifies the default return value.
        */
       get: (key, params, defaultValue) => {
-        var value = mxResources.resources[key];
+        let value = mxResources.resources[key];
 
         // Applies the default value if no resource was found
         if (value == null) {
@@ -342,11 +342,11 @@ var mxResources =
        * to be replaced with in the resulting string.
        */
       replacePlaceholders: (value, params) => {
-        var result = [];
-        var index = null;
+        let result = [];
+        let index = null;
 
-        for (var i = 0; i < value.length; i++) {
-          var c = value.charAt(i);
+        for (let i = 0; i < value.length; i++) {
+          let c = value.charAt(i);
 
           if (c == '{') {
             index = '';
diff --git a/src/js/util/mxSvgCanvas2D.js b/src/js/util/mxSvgCanvas2D.js
index cc2797ff0..4976ea5fd 100644
--- a/src/js/util/mxSvgCanvas2D.js
+++ b/src/js/util/mxSvgCanvas2D.js
@@ -19,7 +19,7 @@ if (mxSvgCanvas2useDomParser) {
   // Checks using a generic test text if the parsing actually works. This is a workaround
   // for older browsers where the capability check returns true but the parsing fails.
   try {
-    var doc = new DOMParser().parseFromString('test text', 'text/html');
+    let doc = new DOMParser().parseFromString('test text', 'text/html');
     mxSvgCanvas2useDomParser = doc != null;
   } catch (e) {
     mxSvgCanvas2useDomParser = false;
@@ -149,8 +149,8 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * calls as SVG output to the given SVG root node.
    *
    * (code)
-   * var svgDoc = mxUtils.createXmlDocument();
-   * var root = (svgDoc.createElementNS != null) ?
+   * let svgDoc = mxUtils.createXmlDocument();
+   * let root = (svgDoc.createElementNS != null) ?
    *     svgDoc.createElementNS(mxConstants.NS_SVG, 'svg') : svgDoc.createElement('svg');
    *
    * if (svgDoc.createElementNS == null)
@@ -163,14 +163,14 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    *   root.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:xlink', mxConstants.NS_XLINK);
    * }
    *
-   * var bounds = graph.getGraphBounds();
+   * let bounds = graph.getGraphBounds();
    * root.setAttribute('width', (bounds.x + bounds.width + 4) + 'px');
    * root.setAttribute('height', (bounds.y + bounds.height + 4) + 'px');
    * root.setAttribute('version', '1.1');
    *
    * svgDoc.appendChild(root);
    *
-   * var svgCanvas = new mxSvgCanvas2D(root);
+   * let svgCanvas = new mxSvgCanvas2D(root);
    * (end)
    *
    * A description of the public API is available in <mxXmlCanvas2D>.
@@ -225,11 +225,11 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
      */
     this.styleEnabled = (styleEnabled != null) ? styleEnabled : false;
 
-    var svg = null;
+    let svg = null;
 
     // Adds optional defs section for export
     if (root.ownerDocument != document) {
-      var node = root;
+      let node = root;
 
       // Finds owner SVG element in XML DOM
       while (node != null && node.nodeName != 'svg') {
@@ -241,7 +241,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
 
     if (svg != null) {
       // Tries to get existing defs section
-      var tmp = svg.getElementsByTagName('defs');
+      let tmp = svg.getElementsByTagName('defs');
 
       if (tmp.length > 0) {
         this.defs = svg.getElementsByTagName('defs')[0];
@@ -269,14 +269,14 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Updates existing DOM nodes for text rendering.
    */
   static createCss = (w, h, align, valign, wrap, overflow, clip, bg, border, flex, block, s, callback) => {
-    var item = 'box-sizing: border-box; font-size: 0; text-align: ' + ((align == mxConstants.ALIGN_LEFT) ? 'left' :
+    let item = 'box-sizing: border-box; font-size: 0; text-align: ' + ((align == mxConstants.ALIGN_LEFT) ? 'left' :
         ((align == mxConstants.ALIGN_RIGHT) ? 'right' : 'center')) + '; ';
-    var pt = mxUtils.getAlignmentAsPoint(align, valign);
-    var ofl = 'overflow: hidden; ';
-    var fw = 'width: 1px; ';
-    var fh = 'height: 1px; ';
-    var dx = pt.x * w;
-    var dy = pt.y * h;
+    let pt = mxUtils.getAlignmentAsPoint(align, valign);
+    let ofl = 'overflow: hidden; ';
+    let fw = 'width: 1px; ';
+    let fh = 'height: 1px; ';
+    let dx = pt.x * w;
+    let dy = pt.y * h;
 
     if (clip) {
       fw = 'width: ' + Math.round(w) + 'px; ';
@@ -301,7 +301,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
       dy = 0;
     }
 
-    var bgc = '';
+    let bgc = '';
 
     if (bg != null) {
       bgc += 'background-color: ' + bg + '; ';
@@ -353,8 +353,8 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * no search string behind the question mark.
    */
   mxSvgCanvas2getBaseUrl = () => {
-    var href = window.location.href;
-    var hash = href.lastIndexOf('#');
+    let href = window.location.href;
+    let hash = href.lastIndexOf('#');
 
     if (hash > 0) {
       href = href.substring(0, hash);
@@ -379,7 +379,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Creates the optional style section.
    */
   mxSvgCanvas2createStyle = (x) => {
-    var style = this.createElement('style');
+    let style = this.createElement('style');
     style.setAttribute('type', 'text/css');
     mxUtils.write(style, 'svg{font-family:' + mxConstants.DEFAULT_FONTFAMILY +
         ';font-size:' + mxConstants.DEFAULT_FONTSIZE +
@@ -397,7 +397,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
     if (this.root.ownerDocument.createElementNS != null) {
       return this.root.ownerDocument.createElementNS(namespace || mxConstants.NS_SVG, tagName);
     } else {
-      var elt = this.root.ownerDocument.createElement(tagName);
+      let elt = this.root.ownerDocument.createElement(tagName);
 
       if (namespace != null) {
         elt.setAttribute('xmlns', namespace);
@@ -422,17 +422,17 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Returns the alternate content for the given foreignObject.
    */
   mxSvgCanvas2createAlternateContent = (fo, x, y, w, h, str, align, valign, wrap, format, overflow, clip, rotation) => {
-    var text = this.getAlternateText(fo, x, y, w, h, str, align, valign, wrap, format, overflow, clip, rotation);
-    var s = this.state;
+    let text = this.getAlternateText(fo, x, y, w, h, str, align, valign, wrap, format, overflow, clip, rotation);
+    let s = this.state;
 
     if (text != null && s.fontSize > 0) {
-      var dy = (valign == mxConstants.ALIGN_TOP) ? 1 :
+      let dy = (valign == mxConstants.ALIGN_TOP) ? 1 :
           (valign == mxConstants.ALIGN_BOTTOM) ? 0 : 0.3;
-      var anchor = (align == mxConstants.ALIGN_RIGHT) ? 'end' :
+      let anchor = (align == mxConstants.ALIGN_RIGHT) ? 'end' :
           (align == mxConstants.ALIGN_LEFT) ? 'start' :
               'middle';
 
-      var alt = this.createElement('text');
+      let alt = this.createElement('text');
       alt.setAttribute('x', Math.round(x + s.dx));
       alt.setAttribute('y', Math.round(y + s.dy + dy * s.fontSize));
       alt.setAttribute('fill', s.fontColor || 'black');
@@ -452,7 +452,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
         alt.setAttribute('font-style', 'italic');
       }
 
-      var txtDecor = [];
+      let txtDecor = [];
 
       if ((s.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE) {
         txtDecor.push('underline');
@@ -495,14 +495,14 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
     end = end.toLowerCase() + '-' + alpha2;
 
     // Wrong gradient directions possible?
-    var dir = null;
+    let dir = null;
 
     if (direction == null || direction == mxConstants.DIRECTION_SOUTH) {
       dir = 's';
     } else if (direction == mxConstants.DIRECTION_EAST) {
       dir = 'e';
     } else {
-      var tmp = start;
+      let tmp = start;
       start = end;
       end = tmp;
 
@@ -522,14 +522,14 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Private helper function to create SVG elements
    */
   mxSvgCanvas2getSvgGradient = (start, end, alpha1, alpha2, direction) => {
-    var id = this.createGradientId(start, end, alpha1, alpha2, direction);
-    var gradient = this.gradients[id];
+    let id = this.createGradientId(start, end, alpha1, alpha2, direction);
+    let gradient = this.gradients[id];
 
     if (gradient == null) {
-      var svg = this.root.ownerSVGElement;
+      let svg = this.root.ownerSVGElement;
 
-      var counter = 0;
-      var tmpId = id + '-' + counter;
+      let counter = 0;
+      let tmpId = id + '-' + counter;
 
       if (svg != null) {
         gradient = svg.ownerDocument.getElementById(tmpId);
@@ -566,7 +566,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Creates the given SVG gradient.
    */
   mxSvgCanvas2createSvgGradient = (start, end, alpha1, alpha2, direction) => {
-    var gradient = this.createElement('linearGradient');
+    let gradient = this.createElement('linearGradient');
     gradient.setAttribute('x1', '0%');
     gradient.setAttribute('y1', '0%');
     gradient.setAttribute('x2', '0%');
@@ -582,9 +582,9 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
       gradient.setAttribute('x1', '100%');
     }
 
-    var op = (alpha1 < 1) ? ';stop-opacity:' + alpha1 : '';
+    let op = (alpha1 < 1) ? ';stop-opacity:' + alpha1 : '';
 
-    var stop = this.createElement('stop');
+    let stop = this.createElement('stop');
     stop.setAttribute('offset', '0%');
     stop.setAttribute('style', 'stop-color:' + start + op);
     gradient.appendChild(stop);
@@ -605,8 +605,8 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Private helper function to create SVG elements
    */
   mxSvgCanvas2addNode = (filled, stroked) => {
-    var node = this.node;
-    var s = this.state;
+    let node = this.node;
+    let s = this.state;
 
     if (node != null) {
       if (node.nodeName == 'path') {
@@ -678,7 +678,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Transfers the stroke attributes from <state> to <node>.
    */
   mxSvgCanvas2updateFill = () => {
-    var s = this.state;
+    let s = this.state;
 
     if (s.alpha < 1 || s.fillAlpha < 1) {
       this.node.setAttribute('fill-opacity', s.alpha * s.fillAlpha);
@@ -686,12 +686,12 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
 
     if (s.fillColor != null) {
       if (s.gradientColor != null) {
-        var id = this.getSvgGradient(String(s.fillColor), String(s.gradientColor),
+        let id = this.getSvgGradient(String(s.fillColor), String(s.gradientColor),
             s.gradientFillAlpha, s.gradientAlpha, s.gradientDirection);
 
         if (this.root.ownerDocument == document && this.useAbsoluteIds) {
           // Workaround for no fill with base tag in page (escape brackets)
-          var base = this.getBaseUrl().replace(/([\(\)])/g, '\\$1');
+          let base = this.getBaseUrl().replace(/([\(\)])/g, '\\$1');
           this.node.setAttribute('fill', 'url(' + base + '#' + id + ')');
         } else {
           this.node.setAttribute('fill', 'url(#' + id + ')');
@@ -717,7 +717,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Transfers the stroke attributes from <state> to <node>.
    */
   mxSvgCanvas2updateStroke = () => {
-    var s = this.state;
+    let s = this.state;
 
     this.node.setAttribute('stroke', String(s.strokeColor).toLowerCase());
 
@@ -725,7 +725,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
       this.node.setAttribute('stroke-opacity', s.alpha * s.strokeAlpha);
     }
 
-    var sw = this.getCurrentStrokeWidth();
+    let sw = this.getCurrentStrokeWidth();
 
     if (sw != 1) {
       this.node.setAttribute('stroke-width', sw);
@@ -747,7 +747,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Transfers the stroke attributes from <state> to <node>.
    */
   mxSvgCanvas2updateStrokeAttributes = () => {
-    var s = this.state;
+    let s = this.state;
 
     // Linejoin miter is default in SVG
     if (s.lineJoin != null && s.lineJoin != 'miter') {
@@ -756,7 +756,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
 
     if (s.lineCap != null) {
       // flat is called butt in SVG
-      var value = s.lineCap;
+      let value = s.lineCap;
 
       if (value == 'flat') {
         value = 'butt';
@@ -780,13 +780,13 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Creates the SVG dash pattern for the given state.
    */
   mxSvgCanvas2createDashPattern = (scale) => {
-    var pat = [];
+    let pat = [];
 
     if (typeof (this.state.dashPattern) === 'string') {
-      var dash = this.state.dashPattern.split(' ');
+      let dash = this.state.dashPattern.split(' ');
 
       if (dash.length > 0) {
-        for (var i = 0; i < dash.length; i++) {
+        for (let i = 0; i < dash.length; i++) {
           pat[i] = Number(dash[i]) * scale;
         }
       }
@@ -801,8 +801,8 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Creates a hit detection tolerance shape for the given node.
    */
   mxSvgCanvas2createTolerance = (node) => {
-    var tol = node.cloneNode(true);
-    var sw = parseFloat(tol.getAttribute('stroke-width') || 1) + this.strokeTolerance;
+    let tol = node.cloneNode(true);
+    let sw = parseFloat(tol.getAttribute('stroke-width') || 1) + this.strokeTolerance;
     tol.setAttribute('pointer-events', 'stroke');
     tol.setAttribute('visibility', 'hidden');
     tol.removeAttribute('stroke-dasharray');
@@ -818,8 +818,8 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Creates a shadow for the given node.
    */
   mxSvgCanvas2createShadow = (node) => {
-    var shadow = node.cloneNode(true);
-    var s = this.state;
+    let shadow = node.cloneNode(true);
+    let s = this.state;
 
     // Firefox uses transparent for no fill in ellipses
     if (shadow.getAttribute('fill') != 'none' && (!mxClient.IS_FF || shadow.getAttribute('fill') != 'transparent')) {
@@ -848,7 +848,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
     } else {
       this.originalRoot = this.root;
 
-      var node = this.createElement('a');
+      let node = this.createElement('a');
 
       // Workaround for implicit namespace handling in HTML5 export, IE adds NS1 namespace so use code below
       // in all IE versions except quirks mode. KNOWN: Adds xlink namespace to each image tag in output.
@@ -870,7 +870,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    */
   mxSvgCanvas2rotate = (theta, flipH, flipV, cx, cy) => {
     if (theta != 0 || flipH || flipV) {
-      var s = this.state;
+      let s = this.state;
       cx += s.dx;
       cy += s.dy;
 
@@ -884,11 +884,11 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
       if (flipH && flipV) {
         theta += 180;
       } else if (flipH != flipV) {
-        var tx = (flipH) ? cx : 0;
-        var sx = (flipH) ? -1 : 1;
+        let tx = (flipH) ? cx : 0;
+        let sx = (flipH) ? -1 : 1;
 
-        var ty = (flipV) ? cy : 0;
-        var sy = (flipV) ? -1 : 1;
+        let ty = (flipV) ? cy : 0;
+        let sy = (flipV) ? -1 : 1;
 
         s.transform += 'translate(' + this.format(tx) + ',' + this.format(ty) + ')' +
             'scale(' + this.format(sx) + ',' + this.format(sy) + ')' +
@@ -925,8 +925,8 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Private helper function to create SVG elements
    */
   mxSvgCanvas2rect = (x, y, w, h) => {
-    var s = this.state;
-    var n = this.createElement('rect');
+    let s = this.state;
+    let n = this.createElement('rect');
     n.setAttribute('x', this.format((x + s.dx) * s.scale));
     n.setAttribute('y', this.format((y + s.dy) * s.scale));
     n.setAttribute('width', this.format(w * s.scale));
@@ -958,8 +958,8 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Private helper function to create SVG elements
    */
   mxSvgCanvas2ellipse = (x, y, w, h) => {
-    var s = this.state;
-    var n = this.createElement('ellipse');
+    let s = this.state;
+    let n = this.createElement('ellipse');
     // No rounding for consistent output with 1.x
     n.setAttribute('cx', this.format((x + w / 2 + s.dx) * s.scale));
     n.setAttribute('cy', this.format((y + h / 2 + s.dy) * s.scale));
@@ -981,11 +981,11 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
     flipH = (flipH != null) ? flipH : false;
     flipV = (flipV != null) ? flipV : false;
 
-    var s = this.state;
+    let s = this.state;
     x += s.dx;
     y += s.dy;
 
-    var node = this.createElement('image');
+    let node = this.createElement('image');
     node.setAttribute('x', this.format(x * s.scale) + this.imageOffset);
     node.setAttribute('y', this.format(y * s.scale) + this.imageOffset);
     node.setAttribute('width', this.format(w * s.scale));
@@ -1006,13 +1006,13 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
       node.setAttribute('opacity', s.alpha * s.fillAlpha);
     }
 
-    var tr = this.state.transform || '';
+    let tr = this.state.transform || '';
 
     if (flipH || flipV) {
-      var sx = 1;
-      var sy = 1;
-      var dx = 0;
-      var dy = 0;
+      let sx = 1;
+      let sy = 1;
+      let dx = 0;
+      let dy = 0;
 
       if (flipH) {
         sx = -1;
@@ -1046,7 +1046,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    */
   mxSvgCanvas2convertHtml = (val) => {
     if (this.useDomParser) {
-      var doc = new DOMParser().parseFromString(val, 'text/html');
+      let doc = new DOMParser().parseFromString(val, 'text/html');
 
       if (doc != null) {
         val = new XMLSerializer().serializeToString(doc.body);
@@ -1061,23 +1061,23 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
         }
       }
     } else if (document.implementation != null && document.implementation.createDocument != null) {
-      var xd = document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null);
-      var xb = xd.createElement('body');
+      let xd = document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null);
+      let xb = xd.createElement('body');
       xd.documentElement.appendChild(xb);
 
-      var div = document.createElement('div');
+      let div = document.createElement('div');
       div.innerHTML = val;
-      var child = div.firstChild;
+      let child = div.firstChild;
 
       while (child != null) {
-        var next = child.nextSibling;
+        let next = child.nextSibling;
         xb.appendChild(xd.adoptNode(child));
         child = next;
       }
 
       return xb.innerHTML;
     } else {
-      var ta = document.createElement('textarea');
+      let ta = document.createElement('textarea');
 
       // Handles special HTML entities < and > and double escaping
       // and converts unclosed br, hr and img tags to XHTML
@@ -1095,14 +1095,14 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Private helper function to create SVG elements
    */
   mxSvgCanvas2createDiv = (str) => {
-    var val = str;
+    let val = str;
 
     if (!mxUtils.isNode(val)) {
       val = '<div><div>' + this.convertHtml(val) + '</div></div>';
     }
 
     if (document.createElementNS) {
-      var div = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
+      let div = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
 
       if (mxUtils.isNode(val)) {
         var div2 = document.createElement('div');
@@ -1149,8 +1149,8 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Creates a foreignObject for the given string and adds it to the given root.
    */
   mxSvgCanvas2addForeignObject = (x, y, w, h, str, align, valign, wrap, format, overflow, clip, rotation, dir, div, root) => {
-    var group = this.createElement('g');
-    var fo = this.createElement('foreignObject');
+    let group = this.createElement('g');
+    let fo = this.createElement('foreignObject');
 
     // Workarounds for print clipping and static position in Safari
     fo.setAttribute('style', 'overflow: visible; text-align: left;');
@@ -1168,11 +1168,11 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
 
     // Alternate content if foreignObject not supported
     if (this.root.ownerDocument != document) {
-      var alt = this.createAlternateContent(fo, x, y, w, h, str, align, valign, wrap, format, overflow, clip, rotation);
+      let alt = this.createAlternateContent(fo, x, y, w, h, str, align, valign, wrap, format, overflow, clip, rotation);
 
       if (alt != null) {
         fo.setAttribute('requiredFeatures', 'http://www.w3.org/TR/SVG11/feature#Extensibility');
-        var sw = this.createElement('switch');
+        let sw = this.createElement('switch');
         sw.appendChild(fo);
         sw.appendChild(alt);
         group.appendChild(sw);
@@ -1186,7 +1186,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Updates existing DOM nodes for text rendering.
    */
   mxSvgCanvas2updateTextNodes = (x, y, w, h, align, valign, wrap, overflow, clip, rotation, g) => {
-    var s = this.state.scale;
+    let s = this.state.scale;
 
     mxSvgCanvas2D.createCss(w + 2, h, align, valign, wrap, overflow, clip,
         (this.state.fontBackgroundColor != null) ? this.state.fontBackgroundColor : null,
@@ -1200,12 +1200,12 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
           x += this.state.dx;
           y += this.state.dy;
 
-          var fo = g.firstChild;
-          var div = fo.firstChild;
-          var box = div.firstChild;
-          var text = box.firstChild;
-          var r = ((this.rotateHtml) ? this.state.rotation : 0) + ((rotation != null) ? rotation : 0);
-          var t = ((this.foOffset != 0) ? 'translate(' + this.foOffset + ' ' + this.foOffset + ')' : '') +
+          let fo = g.firstChild;
+          let div = fo.firstChild;
+          let box = div.firstChild;
+          let text = box.firstChild;
+          let r = ((this.rotateHtml) ? this.state.rotation : 0) + ((rotation != null) ? rotation : 0);
+          let t = ((this.foOffset != 0) ? 'translate(' + this.foOffset + ' ' + this.foOffset + ')' : '') +
               ((s != 1) ? 'scale(' + s + ')' : '');
 
           text.setAttribute('style', block);
@@ -1214,7 +1214,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
           // Workaround for clipping in Webkit with scrolling and zoom
           fo.setAttribute('width', Math.ceil(1 / Math.min(1, s) * 100) + '%');
           fo.setAttribute('height', Math.ceil(1 / Math.min(1, s) * 100) + '%');
-          var yp = Math.round(y + dy);
+          let yp = Math.round(y + dy);
 
           // Allows for negative values which are causing problems with
           // transformed content where the top edge of the foreignObject
@@ -1256,10 +1256,10 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Private helper function to create SVG elements
    */
   mxSvgCanvas2getTextCss = () => {
-    var s = this.state;
-    var lh = (mxConstants.ABSOLUTE_LINE_HEIGHT) ? (s.fontSize * mxConstants.LINE_HEIGHT) + 'px' :
+    let s = this.state;
+    let lh = (mxConstants.ABSOLUTE_LINE_HEIGHT) ? (s.fontSize * mxConstants.LINE_HEIGHT) + 'px' :
         (mxConstants.LINE_HEIGHT * this.lineHeightCorrection);
-    var css = 'display: inline-block; font-size: ' + s.fontSize + 'px; ' +
+    let css = 'display: inline-block; font-size: ' + s.fontSize + 'px; ' +
         'font-family: ' + s.fontFamily + '; color: ' + s.fontColor + '; line-height: ' + lh +
         '; pointer-events: ' + ((this.pointerEvents) ? this.pointerEventsValue : 'none') + '; ';
 
@@ -1271,7 +1271,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
       css += 'font-style: italic; ';
     }
 
-    var deco = [];
+    let deco = [];
 
     if ((s.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE) {
       deco.push('underline');
@@ -1301,7 +1301,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
       rotation = (rotation != null) ? rotation : 0;
 
       if (this.foEnabled && format == 'html') {
-        var div = this.createDiv(str);
+        let div = this.createDiv(str);
 
         // Ignores invalid XHTML labels
         if (div != null) {
@@ -1330,10 +1330,10 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
     w = Math.round(w);
     h = Math.round(h);
 
-    var id = 'mx-clip-' + x + '-' + y + '-' + w + '-' + h;
+    let id = 'mx-clip-' + x + '-' + y + '-' + w + '-' + h;
 
-    var counter = 0;
-    var tmp = id + '-' + counter;
+    let counter = 0;
+    let tmp = id + '-' + counter;
 
     // Resolves ID conflicts
     while (document.getElementById(tmp) != null) {
@@ -1343,7 +1343,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
     clip = this.createElement('clipPath');
     clip.setAttribute('id', tmp);
 
-    var rect = this.createElement('rect');
+    let rect = this.createElement('rect');
     rect.setAttribute('x', x);
     rect.setAttribute('y', y);
     rect.setAttribute('width', w);
@@ -1362,10 +1362,10 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    */
   mxSvgCanvas2plainText = (x, y, w, h, str, align, valign, wrap, overflow, clip, rotation, dir) => {
     rotation = (rotation != null) ? rotation : 0;
-    var s = this.state;
-    var size = s.fontSize;
-    var node = this.createElement('g');
-    var tr = s.transform || '';
+    let s = this.state;
+    let size = s.fontSize;
+    let node = this.createElement('g');
+    let tr = s.transform || '';
     this.updateFont(node);
 
     // Ignores pointer events
@@ -1383,8 +1383,8 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
     }
 
     if (clip && w > 0 && h > 0) {
-      var cx = x;
-      var cy = y;
+      let cx = x;
+      let cy = y;
 
       if (align == mxConstants.ALIGN_CENTER) {
         cx -= w / 2;
@@ -1401,7 +1401,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
       }
 
       // LATER: Remove spacing from clip rectangle
-      var c = this.createClip(cx * s.scale - 2, cy * s.scale - 2, w * s.scale + 4, h * s.scale + 4);
+      let c = this.createClip(cx * s.scale - 2, cy * s.scale - 2, w * s.scale + 4, h * s.scale + 4);
 
       if (this.defs != null) {
         this.defs.appendChild(c);
@@ -1412,7 +1412,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
 
       if (!mxClient.IS_CHROMEAPP && !mxClient.IS_EDGE && this.root.ownerDocument == document) {
         // Workaround for potential base tag
-        var base = this.getBaseUrl().replace(/([\(\)])/g, '\\$1');
+        let base = this.getBaseUrl().replace(/([\(\)])/g, '\\$1');
         node.setAttribute('clip-path', 'url(' + base + '#' + c.getAttribute('id') + ')');
       } else {
         node.setAttribute('clip-path', 'url(#' + c.getAttribute('id') + ')');
@@ -1420,7 +1420,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
     }
 
     // Default is left
-    var anchor = (align == mxConstants.ALIGN_RIGHT) ? 'end' :
+    let anchor = (align == mxConstants.ALIGN_RIGHT) ? 'end' :
         (align == mxConstants.ALIGN_CENTER) ? 'middle' :
             'start';
 
@@ -1441,32 +1441,32 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
       node.setAttribute('opacity', s.alpha);
     }
 
-    var lines = str.split('\n');
-    var lh = Math.round(size * mxConstants.LINE_HEIGHT);
-    var textHeight = size + (lines.length - 1) * lh;
+    let lines = str.split('\n');
+    let lh = Math.round(size * mxConstants.LINE_HEIGHT);
+    let textHeight = size + (lines.length - 1) * lh;
 
-    var cy = y + size - 1;
+    let cy = y + size - 1;
 
     if (valign == mxConstants.ALIGN_MIDDLE) {
       if (overflow == 'fill') {
         cy -= h / 2;
       } else {
-        var dy = ((this.matchHtmlAlignment && clip && h > 0) ? Math.min(textHeight, h) : textHeight) / 2;
+        let dy = ((this.matchHtmlAlignment && clip && h > 0) ? Math.min(textHeight, h) : textHeight) / 2;
         cy -= dy;
       }
     } else if (valign == mxConstants.ALIGN_BOTTOM) {
       if (overflow == 'fill') {
         cy -= h;
       } else {
-        var dy = (this.matchHtmlAlignment && clip && h > 0) ? Math.min(textHeight, h) : textHeight;
+        let dy = (this.matchHtmlAlignment && clip && h > 0) ? Math.min(textHeight, h) : textHeight;
         cy -= dy + 1;
       }
     }
 
-    for (var i = 0; i < lines.length; i++) {
+    for (let i = 0; i < lines.length; i++) {
       // Workaround for bounding box of empty lines and spaces
       if (lines[i].length > 0 && mxUtils.trim(lines[i]).length > 0) {
-        var text = this.createElement('text');
+        let text = this.createElement('text');
         // LATER: Match horizontal HTML alignment
         text.setAttribute('x', this.format(x * s.scale) + this.textOffset);
         text.setAttribute('y', this.format(cy * s.scale) + this.textOffset);
@@ -1489,7 +1489,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * IE, the given node must be a text or tspan element.)
    */
   mxSvgCanvas2updateFont = (node) => {
-    var s = this.state;
+    let s = this.state;
 
     node.setAttribute('fill', s.fontColor);
 
@@ -1505,7 +1505,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
       node.setAttribute('font-style', 'italic');
     }
 
-    var txtDecor = [];
+    let txtDecor = [];
 
     if ((s.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE) {
       txtDecor.push('underline');
@@ -1526,10 +1526,10 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
    * Background color and border
    */
   mxSvgCanvas2addTextBackground = (node, str, x, y, w, h, align, valign, overflow) => {
-    var s = this.state;
+    let s = this.state;
 
     if (s.fontBackgroundColor != null || s.fontBorderColor != null) {
-      var bbox = null;
+      let bbox = null;
 
       if (overflow == 'fill' || overflow == 'width') {
         if (align == mxConstants.ALIGN_CENTER) {
@@ -1557,7 +1557,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
 
       if (bbox == null || bbox.width == 0 || bbox.height == 0) {
         // Computes size if not in document or no getBBox available
-        var div = document.createElement('div');
+        let div = document.createElement('div');
 
         // Wrapping and clipping can be ignored here
         div.style.lineHeight = (mxConstants.ABSOLUTE_LINE_HEIGHT) ? (s.fontSize * mxConstants.LINE_HEIGHT) + 'px' : mxConstants.LINE_HEIGHT;
@@ -1580,8 +1580,8 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
         div.innerHTML = str.replace(/\n/g, '<br/>');
 
         document.body.appendChild(div);
-        var w = div.offsetWidth;
-        var h = div.offsetHeight;
+        let w = div.offsetWidth;
+        let h = div.offsetHeight;
         div.parentNode.removeChild(div);
 
         if (align == mxConstants.ALIGN_CENTER) {
@@ -1600,7 +1600,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
       }
 
       if (bbox != null) {
-        var n = this.createElement('rect');
+        let n = this.createElement('rect');
         n.setAttribute('fill', s.fontBackgroundColor || 'none');
         n.setAttribute('stroke', s.fontBorderColor || 'none');
         n.setAttribute('x', Math.floor(bbox.x - 1));
@@ -1608,7 +1608,7 @@ class mxSvgCanvas2D extends mxAbstractCanvas2D {
         n.setAttribute('width', Math.ceil(bbox.width + 2));
         n.setAttribute('height', Math.ceil(bbox.height));
 
-        var sw = (s.fontBorderColor != null) ? Math.max(1, this.format(s.scale)) : 0;
+        let sw = (s.fontBorderColor != null) ? Math.max(1, this.format(s.scale)) : 0;
         n.setAttribute('stroke-width', sw);
 
         // Workaround for crisp rendering - only required if not exporting
diff --git a/src/js/util/mxToolbar.js b/src/js/util/mxToolbar.js
index bab85846e..7eff4b329 100644
--- a/src/js/util/mxToolbar.js
+++ b/src/js/util/mxToolbar.js
@@ -92,8 +92,8 @@ class mxToolbar extends mxEventSource {
    * (menu, evt, cell)=> { menu.addItem('Hello, World!'); }
    */
   addItem = (title, icon, funct, pressedIcon, style, factoryMethod) => {
-    var img = document.createElement((icon != null) ? 'img' : 'button');
-    var initialClassName = style || ((factoryMethod != null) ?
+    let img = document.createElement((icon != null) ? 'img' : 'button');
+    let initialClassName = style || ((factoryMethod != null) ?
         'mxToolbarMode' : 'mxToolbarItem');
     img.className = initialClassName;
     img.setAttribute('src', icon);
@@ -117,7 +117,7 @@ class mxToolbar extends mxEventSource {
       }
     }
 
-    var mouseHandler = mxUtils.bind(this, (evt) => {
+    let mouseHandler = mxUtils.bind(this, (evt) => {
       if (pressedIcon != null) {
         img.setAttribute('src', icon);
       } else {
@@ -141,7 +141,7 @@ class mxToolbar extends mxEventSource {
           this.menu.init();
         }
 
-        var last = this.currentImg;
+        let last = this.currentImg;
 
         if (this.menu.isMenuShowing()) {
           this.menu.hideMenu();
@@ -152,7 +152,7 @@ class mxToolbar extends mxEventSource {
           this.currentImg = img;
           this.menu.factoryMethod = factoryMethod;
 
-          var point = new mxPoint(
+          let point = new mxPoint(
               img.offsetLeft,
               img.offsetTop + img.offsetHeight);
           this.menu.popup(point.x, point.y, null, evt);
@@ -187,11 +187,11 @@ class mxToolbar extends mxEventSource {
    * style - Optional style classname. Default is mxToolbarCombo.
    */
   addCombo = (style) => {
-    var div = document.createElement('div');
+    let div = document.createElement('div');
     div.style.display = 'inline';
     div.className = 'mxToolbarComboContainer';
 
-    var select = document.createElement('select');
+    let select = document.createElement('select');
     select.className = style || 'mxToolbarCombo';
     div.appendChild(select);
 
@@ -213,12 +213,12 @@ class mxToolbar extends mxEventSource {
    * style - Optional style classname. Default is mxToolbarCombo.
    */
   addActionCombo = (title, style) => {
-    var select = document.createElement('select');
+    let select = document.createElement('select');
     select.className = style || 'mxToolbarCombo';
     this.addOption(select, title, null);
 
     mxEvent.addListener(select, 'change', (evt) => {
-      var value = select.options[select.selectedIndex];
+      let value = select.options[select.selectedIndex];
       select.selectedIndex = 0;
 
       if (value.funct != null) {
@@ -245,7 +245,7 @@ class mxToolbar extends mxEventSource {
    * value - Specifies the value associated with this option.
    */
   addOption = (combo, title, value) => {
-    var option = document.createElement('option');
+    let option = document.createElement('option');
     mxUtils.writeln(option, title);
 
     if (typeof (value) == 'function') {
@@ -267,7 +267,7 @@ class mxToolbar extends mxEventSource {
    * after a reset of the toolbar.
    */
   addSwitchMode = (title, icon, funct, pressedIcon, style) => {
-    var img = document.createElement('img');
+    let img = document.createElement('img');
     img.initialClassName = style || 'mxToolbarMode';
     img.className = img.initialClassName;
     img.setAttribute('src', icon);
@@ -278,7 +278,7 @@ class mxToolbar extends mxEventSource {
     }
 
     mxEvent.addListener(img, 'click', mxUtils.bind(this, (evt) => {
-      var tmp = this.selectedMode.altIcon;
+      let tmp = this.selectedMode.altIcon;
 
       if (tmp != null) {
         this.selectedMode.altIcon = this.selectedMode.getAttribute('src');
@@ -293,7 +293,7 @@ class mxToolbar extends mxEventSource {
 
       this.selectedMode = img;
 
-      var tmp = img.altIcon;
+      let tmp = img.altIcon;
 
       if (tmp != null) {
         img.altIcon = img.getAttribute('src');
@@ -332,7 +332,7 @@ class mxToolbar extends mxEventSource {
    */
   addMode = (title, icon, funct, pressedIcon, style, toggle) => {
     toggle = (toggle != null) ? toggle : true;
-    var img = document.createElement((icon != null) ? 'img' : 'button');
+    let img = document.createElement((icon != null) ? 'img' : 'button');
 
     img.initialClassName = style || 'mxToolbarMode';
     img.className = img.initialClassName;
@@ -376,7 +376,7 @@ class mxToolbar extends mxEventSource {
   selectMode = (domNode, funct) => {
     if (this.selectedMode != domNode) {
       if (this.selectedMode != null) {
-        var tmp = this.selectedMode.altIcon;
+        let tmp = this.selectedMode.altIcon;
 
         if (tmp != null) {
           this.selectedMode.altIcon = this.selectedMode.getAttribute('src');
@@ -387,7 +387,7 @@ class mxToolbar extends mxEventSource {
       }
 
       this.selectedMode = domNode;
-      var tmp = this.selectedMode.altIcon;
+      let tmp = this.selectedMode.altIcon;
 
       if (tmp != null) {
         this.selectedMode.altIcon = this.selectedMode.getAttribute('src');
@@ -443,7 +443,7 @@ class mxToolbar extends mxEventSource {
    * Adds a horizontal line to the container.
    */
   addLine = () => {
-    var hr = document.createElement('hr');
+    let hr = document.createElement('hr');
 
     hr.style.marginRight = '6px';
     hr.setAttribute('size', '1');
diff --git a/src/js/util/mxUndoManager.js b/src/js/util/mxUndoManager.js
index fddd0979d..200601bd5 100644
--- a/src/js/util/mxUndoManager.js
+++ b/src/js/util/mxUndoManager.js
@@ -61,8 +61,8 @@ class mxUndoManager extends mxEventSource {
    * display across multiple undo/redo steps.
    *
    * (code)
-   * var undoManager = new mxUndoManager();
-   * var listener = (sender, evt)=>
+   * let undoManager = new mxUndoManager();
+   * let listener = (sender, evt)=>
    * {
    *   undoManager.undoableEditHappened(evt.getProperty('edit'));
    * };
@@ -141,7 +141,7 @@ class mxUndoManager extends mxEventSource {
    */
   undo = () => {
     while (this.indexOfNextAdd > 0) {
-      var edit = this.history[--this.indexOfNextAdd];
+      let edit = this.history[--this.indexOfNextAdd];
       edit.undo();
 
       if (edit.isSignificant()) {
@@ -166,10 +166,10 @@ class mxUndoManager extends mxEventSource {
    * Redoes the last change.
    */
   redo = () => {
-    var n = this.history.length;
+    let n = this.history.length;
 
     while (this.indexOfNextAdd < n) {
-      var edit = this.history[this.indexOfNextAdd++];
+      let edit = this.history[this.indexOfNextAdd++];
       edit.redo();
 
       if (edit.isSignificant()) {
@@ -205,10 +205,10 @@ class mxUndoManager extends mxEventSource {
    */
   trim = () => {
     if (this.history.length > this.indexOfNextAdd) {
-      var edits = this.history.splice(this.indexOfNextAdd,
+      let edits = this.history.splice(this.indexOfNextAdd,
           this.history.length - this.indexOfNextAdd);
 
-      for (var i = 0; i < edits.length; i++) {
+      for (let i = 0; i < edits.length; i++) {
         edits[i].die();
       }
     }
diff --git a/src/js/util/mxUndoableEdit.js b/src/js/util/mxUndoableEdit.js
index 2ef7888c9..53047d34b 100644
--- a/src/js/util/mxUndoableEdit.js
+++ b/src/js/util/mxUndoableEdit.js
@@ -62,12 +62,12 @@ class mxUndoableEdit {
    *
    * execute = ()=>
    * {
-   *   var tmp = this.model.name;
+   *   let tmp = this.model.name;
    *   this.model.name = this.previous;
    *   this.previous = tmp;
    * };
    *
-   * var name = prompt('Enter name');
+   * let name = prompt('Enter name');
    * graph.model.execute(new CustomChange(graph.model, name));
    * (end)
    *
@@ -150,10 +150,10 @@ class mxUndoableEdit {
   undo = () => {
     if (!this.undone) {
       this.source.fireEvent(new mxEventObject(mxEvent.START_EDIT));
-      var count = this.changes.length;
+      let count = this.changes.length;
 
-      for (var i = count - 1; i >= 0; i--) {
-        var change = this.changes[i];
+      for (let i = count - 1; i >= 0; i--) {
+        let change = this.changes[i];
 
         if (change.execute != null) {
           change.execute();
@@ -181,10 +181,10 @@ class mxUndoableEdit {
   redo = () => {
     if (!this.redone) {
       this.source.fireEvent(new mxEventObject(mxEvent.START_EDIT));
-      var count = this.changes.length;
+      let count = this.changes.length;
 
-      for (var i = 0; i < count; i++) {
-        var change = this.changes[i];
+      for (let i = 0; i < count; i++) {
+        let change = this.changes[i];
 
         if (change.execute != null) {
           change.execute();
diff --git a/src/js/util/mxUrlConverter.js b/src/js/util/mxUrlConverter.js
index 300ce14e4..83c20fe9e 100644
--- a/src/js/util/mxUrlConverter.js
+++ b/src/js/util/mxUrlConverter.js
@@ -42,7 +42,7 @@ class mxUrlConverter {
   updateBaseUrl = () => {
     this.baseDomain = location.protocol + '//' + location.host;
     this.baseUrl = this.baseDomain + location.pathname;
-    var tmp = this.baseUrl.lastIndexOf('/');
+    let tmp = this.baseUrl.lastIndexOf('/');
 
     // Strips filename etc
     if (tmp > 0) {
diff --git a/src/js/util/mxUtils.js b/src/js/util/mxUtils.js
index 9c1fb01d1..10a5fd23a 100644
--- a/src/js/util/mxUtils.js
+++ b/src/js/util/mxUtils.js
@@ -3,7 +3,7 @@
  * Copyright (c) 2006-2015, Gaudenz Alder
  * Updated to ES9 syntax by David Morrissey 2021
  */
-var mxUtils = {
+let mxUtils = {
   /**
    * Class: mxUtils
    *
@@ -59,12 +59,12 @@ var mxUtils = {
       element.style.cursor = '';
     }
 
-    var children = element.childNodes;
+    let children = element.childNodes;
 
     if (children != null) {
-      var childCount = children.length;
+      let childCount = children.length;
 
-      for (var i = 0; i < childCount; i += 1) {
+      for (let i = 0; i < childCount; i += 1) {
         mxUtils.removeCursors(children[i]);
       }
     }
@@ -120,7 +120,7 @@ var mxUtils = {
    * (end)
    */
   setPrefixedStyle: (style, name, value) => {
-    var prefix = null;
+    let prefix = null;
 
     if (mxClient.IS_SF || mxClient.IS_GC) {
       prefix = 'Webkit';
@@ -147,7 +147,7 @@ var mxUtils = {
    * node - DOM node whose style should be checked for scrollbars.
    */
   hasScrollbars: (node) => {
-    var style = mxUtils.getCurrentStyle(node);
+    let style = mxUtils.getCurrentStyle(node);
 
     return style != null && (style.overflow === 'scroll' || style.overflow === 'auto');
   },
@@ -178,7 +178,7 @@ var mxUtils = {
    * expr - A string that represents a JavaScript expression.
    */
   eval: (expr) => {
-    var result = null;
+    let result = null;
 
     if (expr.indexOf('function') >= 0) {
       try {
@@ -208,7 +208,7 @@ var mxUtils = {
    */
   findNode: (node, attr, value) => {
     if (node.nodeType === mxConstants.NODETYPE_ELEMENT) {
-      var tmp = node.getAttribute(attr);
+      let tmp = node.getAttribute(attr);
 
       if (tmp != null && tmp == value) {
         return node;
@@ -218,7 +218,7 @@ var mxUtils = {
     node = node.firstChild;
 
     while (node != null) {
-      var result = mxUtils.findNode(node, attr, value);
+      let result = mxUtils.findNode(node, attr, value);
 
       if (result != null) {
         return result;
@@ -240,7 +240,7 @@ var mxUtils = {
    * f - JavaScript object that represents a function.
    */
   getFunctionName: (f) => {
-    var str = null;
+    let str = null;
 
     if (f != null) {
       if (f.name != null) {
@@ -275,7 +275,7 @@ var mxUtils = {
    */
   indexOf: (array, obj) => {
     if (array != null && obj != null) {
-      for (var i = 0; i < array.length; i++) {
+      for (let i = 0; i < array.length; i++) {
         if (array[i] == obj) {
           return i;
         }
@@ -298,7 +298,7 @@ var mxUtils = {
    */
   forEach: (array, fn) => {
     if (array != null && fn != null) {
-      for (var i = 0; i < array.length; i++) {
+      for (let i = 0; i < array.length; i++) {
         fn(array[i]);
       }
     }
@@ -324,10 +324,10 @@ var mxUtils = {
    * array - Array to check for the given obj.
    */
   remove: (obj, array) => {
-    var result = null;
+    let result = null;
 
     if (typeof (array) == 'object') {
-      var index = mxUtils.indexOf(array, obj);
+      let index = mxUtils.indexOf(array, obj);
 
       while (index >= 0) {
         array.splice(index, 1);
@@ -386,7 +386,7 @@ var mxUtils = {
    * child - DOM node that represents the child.
    */
   isAncestorNode: (ancestor, child) => {
-    var parent = child;
+    let parent = child;
 
     while (parent != null) {
       if (parent == ancestor) {
@@ -413,8 +413,8 @@ var mxUtils = {
   getChildNodes: (node, nodeType) => {
     nodeType = nodeType || mxConstants.NODETYPE_ELEMENT;
 
-    var children = [];
-    var tmp = node.firstChild;
+    let children = [];
+    let tmp = node.firstChild;
 
     while (tmp != null) {
       if (tmp.nodeType === nodeType) {
@@ -459,17 +459,17 @@ var mxUtils = {
     switch (node.nodeType) {
       case 1: /* element */
       {
-        var newNode = doc.createElement(node.nodeName);
+        let newNode = doc.createElement(node.nodeName);
 
         if (node.attributes && node.attributes.length > 0) {
-          for (var i = 0; i < node.attributes.length; i++) {
+          for (let i = 0; i < node.attributes.length; i++) {
             newNode.setAttribute(node.attributes[i].nodeName,
                 node.getAttribute(node.attributes[i].nodeName));
           }
         }
 
         if (allChildren && node.childNodes && node.childNodes.length > 0) {
-          for (var i = 0; i < node.childNodes.length; i++) {
+          for (let i = 0; i < node.childNodes.length; i++) {
             newNode.appendChild(mxUtils.importNodeImplementation(doc, node.childNodes[i], allChildren));
           }
         }
@@ -494,7 +494,7 @@ var mxUtils = {
    * Returns a new, empty XML document.
    */
   createXmlDocument: () => {
-    var doc = null;
+    let doc = null;
 
     if (document.implementation && document.implementation.createDocument) {
       doc = document.implementation.createDocument('', '', null);
@@ -511,7 +511,7 @@ var mxUtils = {
    * Returns a new, empty Microsoft.XMLDOM document using ActiveXObject.
    */
   createMsXmlDocument: () => {
-    var doc = new ActiveXObject('Microsoft.XMLDOM');
+    let doc = new ActiveXObject('Microsoft.XMLDOM');
     doc.async = false;
 
     // Workaround for parsing errors with SVG DTD
@@ -530,7 +530,7 @@ var mxUtils = {
    * Example:
    *
    * (code)
-   * var doc = mxUtils.parseXml(
+   * let doc = mxUtils.parseXml(
    *   '<mxGraphModel><root><MyDiagram id="0"><mxCell/></MyDiagram>'+
    *   '<MyLayer id="1"><mxCell parent="0" /></MyLayer><MyObject id="2">'+
    *   '<mxCell style="strokeColor=blue;fillColor=red" parent="1" vertex="1">'+
@@ -543,7 +543,7 @@ var mxUtils = {
    * xml - String that contains the XML data.
    */
   parseXml: (xml) => {
-    var parser = new DOMParser();
+    let parser = new DOMParser();
     return parser.parseFromString(xml, 'text/xml');
   },
 
@@ -576,11 +576,11 @@ var mxUtils = {
    * before - Optional boolean that specifies the direction of the traversal.
    */
   removeWhitespace: (node, before) => {
-    var tmp = (before) ? node.previousSibling : node.nextSibling;
+    let tmp = (before) ? node.previousSibling : node.nextSibling;
 
     while (tmp != null && tmp.nodeType == mxConstants.NODETYPE_TEXT) {
-      var next = (before) ? tmp.previousSibling : tmp.nextSibling;
-      var text = mxUtils.getTextContent(tmp);
+      let next = (before) ? tmp.previousSibling : tmp.nextSibling;
+      let text = mxUtils.getTextContent(tmp);
 
       if (mxUtils.trim(text).length == 0) {
         tmp.parentNode.removeChild(tmp);
@@ -645,10 +645,10 @@ var mxUtils = {
    * &#xa;
    */
   getXml: (node, linefeed) => {
-    var xml = '';
+    let xml = '';
 
     if (window.XMLSerializer != null) {
-      var xmlSerializer = new XMLSerializer();
+      let xmlSerializer = new XMLSerializer();
       xml = xmlSerializer.serializeToString(node);
     } else if (node.xml != null) {
       xml = node.xml.replace(/\r\n\t[\t]*/g, '').replace(/>\r\n/g, '>').replace(/\r\n/g, '\n');
@@ -678,7 +678,7 @@ var mxUtils = {
    * newline - Option string that represents a linefeed. Default is '\n'.
    */
   getPrettyXml: (node, tab, indent, newline, ns) => {
-    var result = [];
+    let result = [];
 
     if (node != null) {
       tab = (tab != null) ? tab : '  ';
@@ -696,7 +696,7 @@ var mxUtils = {
       if (node.nodeType == mxConstants.NODETYPE_DOCUMENT) {
         result.push(mxUtils.getPrettyXml(node.documentElement, tab, indent, newline, ns));
       } else if (node.nodeType == mxConstants.NODETYPE_DOCUMENT_FRAGMENT) {
-        var tmp = node.firstChild;
+        let tmp = node.firstChild;
 
         if (tmp != null) {
           while (tmp != null) {
@@ -705,19 +705,19 @@ var mxUtils = {
           }
         }
       } else if (node.nodeType == mxConstants.NODETYPE_COMMENT) {
-        var value = mxUtils.getTextContent(node);
+        let value = mxUtils.getTextContent(node);
 
         if (value.length > 0) {
           result.push(indent + '<!--' + value + '-->' + newline);
         }
       } else if (node.nodeType == mxConstants.NODETYPE_TEXT) {
-        var value = mxUtils.trim(mxUtils.getTextContent(node));
+        let value = mxUtils.trim(mxUtils.getTextContent(node));
 
         if (value.length > 0) {
           result.push(indent + mxUtils.htmlEntities(value, false) + newline);
         }
       } else if (node.nodeType == mxConstants.NODETYPE_CDATA) {
-        var value = mxUtils.getTextContent(node);
+        let value = mxUtils.getTextContent(node);
 
         if (value.length > 0) {
           result.push(indent + '<![CDATA[' + value + ']]' + newline);
@@ -727,18 +727,18 @@ var mxUtils = {
 
         // Creates the string with the node attributes
         // and converts all HTML entities in the values
-        var attrs = node.attributes;
+        let attrs = node.attributes;
 
         if (attrs != null) {
-          for (var i = 0; i < attrs.length; i++) {
-            var val = mxUtils.htmlEntities(attrs[i].value);
+          for (let i = 0; i < attrs.length; i++) {
+            let val = mxUtils.htmlEntities(attrs[i].value);
             result.push(' ' + attrs[i].nodeName + '="' + val + '"');
           }
         }
 
         // Recursively creates the XML string for each child
         // node and appends it here with an indentation
-        var tmp = node.firstChild;
+        let tmp = node.firstChild;
 
         if (tmp != null) {
           result.push('>' + newline);
@@ -769,8 +769,8 @@ var mxUtils = {
    */
   extractTextWithWhitespace: (elems) => {
     // Known block elements for handling linefeeds (list is not complete)
-    var blocks = ['BLOCKQUOTE', 'DIV', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'OL', 'P', 'PRE', 'TABLE', 'UL'];
-    var ret = [];
+    let blocks = ['BLOCKQUOTE', 'DIV', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'OL', 'P', 'PRE', 'TABLE', 'UL'];
+    let ret = [];
 
     function doExtract(elts) {
       // Single break should be ignored
@@ -779,8 +779,8 @@ var mxUtils = {
         return;
       }
 
-      for (var i = 0; i < elts.length; i++) {
-        var elem = elts[i];
+      for (let i = 0; i < elts.length; i++) {
+        let elem = elts[i];
 
         // DIV with a br or linefeed forces a linefeed
         if (elem.nodeName == 'BR' || elem.innerHTML == '\n' ||
@@ -815,7 +815,7 @@ var mxUtils = {
    */
   replaceTrailingNewlines: (str, pattern) => {
     // LATER: Check is this can be done with a regular expression
-    var postfix = '';
+    let postfix = '';
 
     while (str.length > 0 && str.charAt(str.length - 1) == '\n') {
       str = str.substring(0, str.length - 1);
@@ -869,7 +869,7 @@ var mxUtils = {
    */
   getInnerHtml: (node) => {
     if (node != null) {
-      var serializer = new XMLSerializer();
+      let serializer = new XMLSerializer();
       return serializer.serializeToString(node);
     }
 
@@ -889,7 +889,7 @@ var mxUtils = {
    */
   getOuterHtml: (node) => {
     if (node != null) {
-      var serializer = new XMLSerializer();
+      let serializer = new XMLSerializer();
       return serializer.serializeToString(node);
     }
 
@@ -908,8 +908,8 @@ var mxUtils = {
    * text - String representing the text to be added.
    */
   write: (parent, text) => {
-    var doc = parent.ownerDocument;
-    var node = doc.createTextNode(text);
+    let doc = parent.ownerDocument;
+    let node = doc.createTextNode(text);
 
     if (parent != null) {
       parent.appendChild(node);
@@ -930,8 +930,8 @@ var mxUtils = {
    * text - String representing the text to be added.
    */
   writeln: (parent, text) => {
-    var doc = parent.ownerDocument;
-    var node = doc.createTextNode(text);
+    let doc = parent.ownerDocument;
+    let node = doc.createTextNode(text);
 
     if (parent != null) {
       parent.appendChild(node);
@@ -952,9 +952,9 @@ var mxUtils = {
    */
   br: (parent, count) => {
     count = count || 1;
-    var br = null;
+    let br = null;
 
-    for (var i = 0; i < count; i++) {
+    for (let i = 0; i < count; i++) {
       if (parent != null) {
         br = parent.ownerDocument.createElement('br');
         parent.appendChild(br);
@@ -987,7 +987,7 @@ var mxUtils = {
   button: (label, funct, doc) => {
     doc = (doc != null) ? doc : document;
 
-    var button = doc.createElement('button');
+    let button = doc.createElement('button');
     mxUtils.write(button, label);
 
     mxEvent.addListener(button, 'click', (evt) => {
@@ -1009,7 +1009,7 @@ var mxUtils = {
    * text - String representing the text for the new paragraph.
    */
   para: (parent, text) => {
-    var p = document.createElement('p');
+    let p = document.createElement('p');
     mxUtils.write(p, text);
 
     if (parent != null) {
@@ -1088,7 +1088,7 @@ var mxUtils = {
    * pad - Optional left-padding for the link. Default is 0.
    */
   link: (parent, text, funct, pad) => {
-    var a = document.createElement('span');
+    let a = document.createElement('span');
 
     a.style.color = 'blue';
     a.style.textDecoration = 'underline';
@@ -1114,8 +1114,8 @@ var mxUtils = {
    * Returns the client size for the current document as an <mxRectangle>.
    */
   getDocumentSize: () => {
-    var b = document.body;
-    var d = document.documentElement;
+    let b = document.body;
+    let d = document.documentElement;
 
     try {
       return new mxRectangle(0, 0, b.clientWidth || d.clientWidth, Math.max(b.clientHeight || 0, d.clientHeight));
@@ -1131,26 +1131,26 @@ var mxUtils = {
    * is done by setting the left and top in the style.
    */
   fit: (node) => {
-    var ds = mxUtils.getDocumentSize();
-    var left = parseInt(node.offsetLeft);
-    var width = parseInt(node.offsetWidth);
+    let ds = mxUtils.getDocumentSize();
+    let left = parseInt(node.offsetLeft);
+    let width = parseInt(node.offsetWidth);
 
-    var offset = mxUtils.getDocumentScrollOrigin(node.ownerDocument);
-    var sl = offset.x;
-    var st = offset.y;
+    let offset = mxUtils.getDocumentScrollOrigin(node.ownerDocument);
+    let sl = offset.x;
+    let st = offset.y;
 
-    var b = document.body;
-    var d = document.documentElement;
-    var right = (sl) + ds.width;
+    let b = document.body;
+    let d = document.documentElement;
+    let right = (sl) + ds.width;
 
     if (left + width > right) {
       node.style.left = Math.max(sl, right - width) + 'px';
     }
 
-    var top = parseInt(node.offsetTop);
-    var height = parseInt(node.offsetHeight);
+    let top = parseInt(node.offsetTop);
+    let height = parseInt(node.offsetHeight);
 
-    var bottom = st + ds.height;
+    let bottom = st + ds.height;
 
     if (top + height > bottom) {
       node.style.top = Math.max(st, bottom - height) + 'px';
@@ -1169,8 +1169,8 @@ var mxUtils = {
    * (code)
    * try
    * {
-   *   var req = mxUtils.load(filename);
-   *   var root = req.getDocumentElement();
+   *   let req = mxUtils.load(filename);
+   *   let root = req.getDocumentElement();
    *   // Process XML DOM...
    * }
    * catch (ex)
@@ -1184,7 +1184,7 @@ var mxUtils = {
    * url - URL to get the data from.
    */
   load: (url) => {
-    var req = new mxXmlRequest(url, null, 'GET', false);
+    let req = new mxXmlRequest(url, null, 'GET', false);
     req.send();
 
     return req;
@@ -1203,7 +1203,7 @@ var mxUtils = {
    * (code)
    * mxUtils.get(url, (req)=>
    * {
-   *    var node = req.getDocumentElement();
+   *    let node = req.getDocumentElement();
    *    // Process XML DOM...
    * });
    * (end)
@@ -1214,8 +1214,8 @@ var mxUtils = {
    * (code)
    * mxUtils.get(url, (req)=>
    * {
-   *   var node = req.getDocumentElement();
-   *   var dec = new mxCodec(node.ownerDocument);
+   *   let node = req.getDocumentElement();
+   *   let dec = new mxCodec(node.ownerDocument);
    *   dec.decode(node, graph.getModel());
    * });
    * (end)
@@ -1232,8 +1232,8 @@ var mxUtils = {
    * headers - Optional with headers, eg. {'Authorization': 'token xyz'}
    */
   get: (url, onload, onerror, binary, timeout, ontimeout, headers) => {
-    var req = new mxXmlRequest(url, null, 'GET');
-    var setRequestHeaders = req.setRequestHeaders;
+    let req = new mxXmlRequest(url, null, 'GET');
+    let setRequestHeaders = req.setRequestHeaders;
 
     if (headers) {
       req.setRequestHeaders = (request, params) => {
@@ -1268,10 +1268,10 @@ var mxUtils = {
    * onerror - Optional function to execute on error.
    */
   getAll: (urls, onload, onerror) => {
-    var remain = urls.length;
-    var result = [];
-    var errors = 0;
-    var err = () => {
+    let remain = urls.length;
+    let result = [];
+    let errors = 0;
+    let err = () => {
       if (errors == 0 && onerror != null) {
         onerror();
       }
@@ -1279,10 +1279,10 @@ var mxUtils = {
       errors++;
     };
 
-    for (var i = 0; i < urls.length; i++) {
+    for (let i = 0; i < urls.length; i++) {
       ((url, index) => {
         mxUtils.get(url, (req) => {
-          var status = req.getStatus();
+          let status = req.getStatus();
 
           if (status < 200 || status > 299) {
             err();
@@ -1384,7 +1384,7 @@ var mxUtils = {
    * key is null.
    */
   getValue: (array, key, defaultValue) => {
-    var value = (array != null) ? array[key] : null;
+    let value = (array != null) ? array[key] : null;
 
     if (value == null) {
       value = defaultValue;
@@ -1408,7 +1408,7 @@ var mxUtils = {
    * key is null. Default is 0.
    */
   getNumber: (array, key, defaultValue) => {
-    var value = (array != null) ? array[key] : null;
+    let value = (array != null) ? array[key] : null;
 
     if (value == null) {
       value = defaultValue || 0;
@@ -1432,7 +1432,7 @@ var mxUtils = {
    * key is null. Default is null.
    */
   getColor: (array, key, defaultValue) => {
-    var value = (array != null) ? array[key] : null;
+    let value = (array != null) ? array[key] : null;
 
     if (value == null) {
       value = defaultValue;
@@ -1462,7 +1462,7 @@ var mxUtils = {
    */
   clone: (obj, transients, shallow) => {
     shallow = (shallow != null) ? shallow : false;
-    var clone = null;
+    let clone = null;
 
     if (obj != null && typeof (obj.constructor) == 'function') {
       clone = new obj.constructor();
@@ -1497,7 +1497,7 @@ var mxUtils = {
         (a != null && b != null && a.length != b.length)) {
       return false;
     } else if (a != null && b != null) {
-      for (var i = 0; i < a.length; i++) {
+      for (let i = 0; i < a.length; i++) {
         if ((a[i] != null && b[i] == null) ||
             (a[i] == null && b[i] != null) ||
             (a[i] != null && b[i] != null &&
@@ -1523,7 +1523,7 @@ var mxUtils = {
    */
   equalEntries: (a, b) => {
     // Counts keys in b to check if all values have been compared
-    var count = 0;
+    let count = 0;
 
     if ((a == null && b != null) || (a != null && b == null) ||
         (a != null && b != null && a.length != b.length)) {
@@ -1551,10 +1551,10 @@ var mxUtils = {
    * Removes all duplicates from the given array.
    */
   removeDuplicates: (arr) => {
-    var dict = new mxDictionary();
-    var result = [];
+    let dict = new mxDictionary();
+    let result = [];
 
-    for (var i = 0; i < arr.length; i++) {
+    for (let i = 0; i < arr.length; i++) {
       if (!dict.get(arr[i])) {
         result.push(arr[i]);
         dict.put(arr[i], true);
@@ -1596,7 +1596,7 @@ var mxUtils = {
    * superCtor - Constructor of the superclass.
    */
   extend: (ctor, superCtor) => {
-    var f = () => {
+    let f = () => {
     };
     f.prototype = superCtor.prototype;
 
@@ -1614,7 +1614,7 @@ var mxUtils = {
    * obj - Object to return the string representation for.
    */
   toString: (obj) => {
-    var output = '';
+    let output = '';
 
     for (var i in obj) {
       try {
@@ -1623,7 +1623,7 @@ var mxUtils = {
         } else if (typeof (obj[i]) == 'function') {
           output += i + ' => [Function]\n';
         } else if (typeof (obj[i]) == 'object') {
-          var ctor = mxUtils.getFunctionName(obj[i].constructor);
+          let ctor = mxUtils.getFunctionName(obj[i].constructor);
           output += i + ' => [' + ctor + ']\n';
         } else {
           output += i + ' = ' + obj[i] + '\n';
@@ -1667,21 +1667,21 @@ var mxUtils = {
       return result;
     }
 
-    var fS = sweepFlag;
-    var psai = angle;
+    let fS = sweepFlag;
+    let psai = angle;
     r1 = Math.abs(r1);
     r2 = Math.abs(r2);
-    var ctx = -x / 2;
-    var cty = -y / 2;
-    var cpsi = Math.cos(psai * Math.PI / 180);
-    var spsi = Math.sin(psai * Math.PI / 180);
-    var rxd = cpsi * ctx + spsi * cty;
-    var ryd = -1 * spsi * ctx + cpsi * cty;
-    var rxdd = rxd * rxd;
-    var rydd = ryd * ryd;
+    let ctx = -x / 2;
+    let cty = -y / 2;
+    let cpsi = Math.cos(psai * Math.PI / 180);
+    let spsi = Math.sin(psai * Math.PI / 180);
+    let rxd = cpsi * ctx + spsi * cty;
+    let ryd = -1 * spsi * ctx + cpsi * cty;
+    let rxdd = rxd * rxd;
+    let rydd = ryd * ryd;
     var r1x = r1 * r1;
     var r2y = r2 * r2;
-    var lamda = rxdd / r1x + rydd / r2y;
+    let lamda = rxdd / r1x + rydd / r2y;
     var sds;
 
     if (lamda > 1) {
@@ -1689,7 +1689,7 @@ var mxUtils = {
       r2 = Math.sqrt(lamda) * r2;
       sds = 0;
     } else {
-      var seif = 1;
+      let seif = 1;
 
       if (largeArcFlag === fS) {
         seif = -1;
@@ -1698,14 +1698,14 @@ var mxUtils = {
       sds = seif * Math.sqrt((r1x * r2y - r1x * rydd - r2y * rxdd) / (r1x * rydd + r2y * rxdd));
     }
 
-    var txd = sds * r1 * ryd / r2;
-    var tyd = -1 * sds * r2 * rxd / r1;
-    var tx = cpsi * txd - spsi * tyd + x / 2;
-    var ty = spsi * txd + cpsi * tyd + y / 2;
-    var rad = Math.atan2((ryd - tyd) / r2, (rxd - txd) / r1) - Math.atan2(0, 1);
+    let txd = sds * r1 * ryd / r2;
+    let tyd = -1 * sds * r2 * rxd / r1;
+    let tx = cpsi * txd - spsi * tyd + x / 2;
+    let ty = spsi * txd + cpsi * tyd + y / 2;
+    let rad = Math.atan2((ryd - tyd) / r2, (rxd - txd) / r1) - Math.atan2(0, 1);
     var s1 = (rad >= 0) ? rad : 2 * Math.PI + rad;
     rad = Math.atan2((-ryd - tyd) / r2, (-rxd - txd) / r1) - Math.atan2((ryd - tyd) / r2, (rxd - txd) / r1);
-    var dr = (rad >= 0) ? rad : 2 * Math.PI + rad;
+    let dr = (rad >= 0) ? rad : 2 * Math.PI + rad;
 
     if (fS == 0 && dr > 0) {
       dr -= 2 * Math.PI;
@@ -1713,35 +1713,35 @@ var mxUtils = {
       dr += 2 * Math.PI;
     }
 
-    var sse = dr * 2 / Math.PI;
-    var seg = Math.ceil(sse < 0 ? -1 * sse : sse);
-    var segr = dr / seg;
-    var t = 8 / 3 * Math.sin(segr / 4) * Math.sin(segr / 4) / Math.sin(segr / 2);
+    let sse = dr * 2 / Math.PI;
+    let seg = Math.ceil(sse < 0 ? -1 * sse : sse);
+    let segr = dr / seg;
+    let t = 8 / 3 * Math.sin(segr / 4) * Math.sin(segr / 4) / Math.sin(segr / 2);
     var cpsir1 = cpsi * r1;
     var cpsir2 = cpsi * r2;
     var spsir1 = spsi * r1;
     var spsir2 = spsi * r2;
-    var mc = Math.cos(s1);
-    var ms = Math.sin(s1);
+    let mc = Math.cos(s1);
+    let ms = Math.sin(s1);
     var x2 = -t * (cpsir1 * ms + spsir2 * mc);
     var y2 = -t * (spsir1 * ms - cpsir2 * mc);
     var x3 = 0;
     var y3 = 0;
 
-    var result = [];
+    let result = [];
 
-    for (var n = 0; n < seg; ++n) {
+    for (let n = 0; n < seg; ++n) {
       s1 += segr;
       mc = Math.cos(s1);
       ms = Math.sin(s1);
 
       x3 = cpsir1 * mc - spsir2 * ms + tx;
       y3 = spsir1 * mc + cpsir2 * ms + ty;
-      var dx = -t * (cpsir1 * ms + spsir2 * mc);
-      var dy = -t * (spsir1 * ms - cpsir2 * mc);
+      let dx = -t * (cpsir1 * ms + spsir2 * mc);
+      let dy = -t * (spsir1 * ms - cpsir2 * mc);
 
       // CurveTo updates x0, y0 so need to restore it
-      var index = n * 6;
+      let index = n * 6;
       result[index] = Number(x2 + x0);
       result[index + 1] = Number(y2 + y0);
       result[index + 2] = Number(x3 - dx + x0);
@@ -1769,12 +1769,12 @@ var mxUtils = {
    * rotation center is given then the center of rect is used.
    */
   getBoundingBox: (rect, rotation, cx) => {
-    var result = null;
+    let result = null;
 
     if (rect != null && rotation != null && rotation != 0) {
-      var rad = mxUtils.toRadians(rotation);
-      var cos = Math.cos(rad);
-      var sin = Math.sin(rad);
+      let rad = mxUtils.toRadians(rotation);
+      let cos = Math.cos(rad);
+      let sin = Math.sin(rad);
 
       cx = (cx != null) ? cx : new mxPoint(rect.x + rect.width / 2, rect.y + rect.height / 2);
 
@@ -1804,8 +1804,8 @@ var mxUtils = {
    */
   getRotatedPoint: (pt, cos, sin, c) => {
     c = (c != null) ? c : new mxPoint();
-    var x = pt.x - c.x;
-    var y = pt.y - c.y;
+    let x = pt.x - c.x;
+    let y = pt.y - c.y;
 
     var x1 = x * cos - y * sin;
     var y1 = y * cos + x * sin;
@@ -1827,23 +1827,23 @@ var mxUtils = {
    * defaultValue - Default value to be returned.
    */
   getPortConstraints: (terminal, edge, source, defaultValue) => {
-    var value = mxUtils.getValue(terminal.style, mxConstants.STYLE_PORT_CONSTRAINT,
+    let value = mxUtils.getValue(terminal.style, mxConstants.STYLE_PORT_CONSTRAINT,
         mxUtils.getValue(edge.style, (source) ? mxConstants.STYLE_SOURCE_PORT_CONSTRAINT :
             mxConstants.STYLE_TARGET_PORT_CONSTRAINT, null));
 
     if (value == null) {
       return defaultValue;
     } else {
-      var directions = value.toString();
-      var returnValue = mxConstants.DIRECTION_MASK_NONE;
-      var constraintRotationEnabled = mxUtils.getValue(terminal.style, mxConstants.STYLE_PORT_CONSTRAINT_ROTATION, 0);
-      var rotation = 0;
+      let directions = value.toString();
+      let returnValue = mxConstants.DIRECTION_MASK_NONE;
+      let constraintRotationEnabled = mxUtils.getValue(terminal.style, mxConstants.STYLE_PORT_CONSTRAINT_ROTATION, 0);
+      let rotation = 0;
 
       if (constraintRotationEnabled == 1) {
         rotation = mxUtils.getValue(terminal.style, mxConstants.STYLE_ROTATION, 0);
       }
 
-      var quad = 0;
+      let quad = 0;
 
       if (rotation > 45) {
         quad = 1;
@@ -1935,7 +1935,7 @@ var mxUtils = {
    * becomes south | west
    */
   reversePortConstraints: (constraint) => {
-    var result = 0;
+    let result = 0;
 
     result = (constraint & mxConstants.DIRECTION_MASK_WEST) << 3;
     result |= (constraint & mxConstants.DIRECTION_MASK_NORTH) << 1;
@@ -1952,15 +1952,15 @@ var mxUtils = {
    * the specified coordinate pair.
    */
   findNearestSegment: (state, x, y) => {
-    var index = -1;
+    let index = -1;
 
     if (state.absolutePoints.length > 0) {
-      var last = state.absolutePoints[0];
-      var min = null;
+      let last = state.absolutePoints[0];
+      let min = null;
 
-      for (var i = 1; i < state.absolutePoints.length; i++) {
-        var current = state.absolutePoints[i];
-        var dist = mxUtils.ptSegDistSq(last.x, last.y,
+      for (let i = 1; i < state.absolutePoints.length; i++) {
+        let current = state.absolutePoints[i];
+        let dist = mxUtils.ptSegDistSq(last.x, last.y,
             current.x, current.y, x, y);
 
         if (min == null || dist < min) {
@@ -1982,7 +1982,7 @@ var mxUtils = {
    * rectangle according to the respective styles in style.
    */
   getDirectedBounds: function (rect, m, style, flipH, flipV) {
-    var d = mxUtils.getValue(style, mxConstants.STYLE_DIRECTION, mxConstants.DIRECTION_EAST);
+    let d = mxUtils.getValue(style, mxConstants.STYLE_DIRECTION, mxConstants.DIRECTION_EAST);
     flipH = (flipH != null) ? flipH : mxUtils.getValue(style, mxConstants.STYLE_FLIPH, false);
     flipV = (flipV != null) ? flipV : mxUtils.getValue(style, mxConstants.STYLE_FLIPV, false);
 
@@ -1993,14 +1993,14 @@ var mxUtils = {
 
     if ((flipV && (d == mxConstants.DIRECTION_SOUTH || d == mxConstants.DIRECTION_NORTH)) ||
         (flipH && (d == mxConstants.DIRECTION_EAST || d == mxConstants.DIRECTION_WEST))) {
-      var tmp = m.x;
+      let tmp = m.x;
       m.x = m.width;
       m.width = tmp;
     }
 
     if ((flipH && (d == mxConstants.DIRECTION_SOUTH || d == mxConstants.DIRECTION_NORTH)) ||
         (flipV && (d == mxConstants.DIRECTION_EAST || d == mxConstants.DIRECTION_WEST))) {
-      var tmp = m.y;
+      let tmp = m.y;
       m.y = m.height;
       m.height = tmp;
     }
@@ -2034,16 +2034,16 @@ var mxUtils = {
    * points and the line between center and point.
    */
   getPerimeterPoint: function (pts, center, point) {
-    var min = null;
+    let min = null;
 
-    for (var i = 0; i < pts.length - 1; i++) {
-      var pt = mxUtils.intersection(pts[i].x, pts[i].y, pts[i + 1].x, pts[i + 1].y,
+    for (let i = 0; i < pts.length - 1; i++) {
+      let pt = mxUtils.intersection(pts[i].x, pts[i].y, pts[i + 1].x, pts[i + 1].y,
           center.x, center.y, point.x, point.y);
 
       if (pt != null) {
-        var dx = point.x - pt.x;
-        var dy = point.y - pt.y;
-        var ip = {p: pt, distSq: dy * dy + dx * dx};
+        let dx = point.x - pt.x;
+        let dy = point.y - pt.y;
+        let ip = {p: pt, distSq: dy * dy + dx * dx};
 
         if (ip != null && (min == null || min.distSq > ip.distSq)) {
           min = ip;
@@ -2066,14 +2066,14 @@ var mxUtils = {
    * p2 - <mxPoint> that represents the second point of the segment.
    */
   rectangleIntersectsSegment: (bounds, p1, p2) => {
-    var top = bounds.y;
-    var left = bounds.x;
-    var bottom = top + bounds.height;
-    var right = left + bounds.width;
+    let top = bounds.y;
+    let left = bounds.x;
+    let bottom = top + bounds.height;
+    let right = left + bounds.width;
 
     // Find min and max X for the segment
-    var minX = p1.x;
-    var maxX = p2.x;
+    let minX = p1.x;
+    let maxX = p2.x;
 
     if (p1.x > p2.x) {
       minX = p2.x;
@@ -2095,19 +2095,19 @@ var mxUtils = {
     }
 
     // Find corresponding min and max Y for min and max X we found before
-    var minY = p1.y;
-    var maxY = p2.y;
-    var dx = p2.x - p1.x;
+    let minY = p1.y;
+    let maxY = p2.y;
+    let dx = p2.x - p1.x;
 
     if (Math.abs(dx) > 0.0000001) {
-      var a = (p2.y - p1.y) / dx;
-      var b = p1.y - a * p1.x;
+      let a = (p2.y - p1.y) / dx;
+      let b = p1.y - a * p1.x;
       minY = a * minX + b;
       maxY = a * maxX + b;
     }
 
     if (minY > maxY) {
-      var tmp = maxY;
+      let tmp = maxY;
       maxY = minY;
       minY = tmp;
     }
@@ -2156,19 +2156,19 @@ var mxUtils = {
    * b - <mxRectangle> to be checked for intersection.
    */
   intersects: (a, b) => {
-    var tw = a.width;
-    var th = a.height;
-    var rw = b.width;
-    var rh = b.height;
+    let tw = a.width;
+    let th = a.height;
+    let rw = b.width;
+    let rh = b.height;
 
     if (rw <= 0 || rh <= 0 || tw <= 0 || th <= 0) {
       return false;
     }
 
-    var tx = a.x;
-    var ty = a.y;
-    var rx = b.x;
-    var ry = b.y;
+    let tx = a.x;
+    let ty = a.y;
+    let rx = b.x;
+    let ry = b.y;
 
     rw += rx;
     rh += ry;
@@ -2201,12 +2201,12 @@ var mxUtils = {
     max = (max != null) ? max : 0;
 
     if (hotspot > 0) {
-      var cx = state.getCenterX();
-      var cy = state.getCenterY();
-      var w = state.width;
-      var h = state.height;
+      let cx = state.getCenterX();
+      let cy = state.getCenterY();
+      let w = state.width;
+      let h = state.height;
 
-      var start = mxUtils.getValue(state.style, mxConstants.STYLE_STARTSIZE) * state.view.scale;
+      let start = mxUtils.getValue(state.style, mxConstants.STYLE_STARTSIZE) * state.view.scale;
 
       if (start > 0) {
         if (mxUtils.getValue(state.style, mxConstants.STYLE_HORIZONTAL, true)) {
@@ -2226,14 +2226,14 @@ var mxUtils = {
         h = Math.min(h, max);
       }
 
-      var rect = new mxRectangle(cx - w / 2, cy - h / 2, w, h);
-      var alpha = mxUtils.toRadians(mxUtils.getValue(state.style, mxConstants.STYLE_ROTATION) || 0);
+      let rect = new mxRectangle(cx - w / 2, cy - h / 2, w, h);
+      let alpha = mxUtils.toRadians(mxUtils.getValue(state.style, mxConstants.STYLE_ROTATION) || 0);
 
       if (alpha != 0) {
-        var cos = Math.cos(-alpha);
-        var sin = Math.sin(-alpha);
-        var cx = new mxPoint(state.getCenterX(), state.getCenterY());
-        var pt = mxUtils.getRotatedPoint(new mxPoint(x, y), cos, sin, cx);
+        let cos = Math.cos(-alpha);
+        let sin = Math.sin(-alpha);
+        let cx = new mxPoint(state.getCenterX(), state.getCenterY());
+        let pt = mxUtils.getRotatedPoint(new mxPoint(x, y), cos, sin, cx);
         x = pt.x;
         y = pt.y;
       }
@@ -2258,17 +2258,17 @@ var mxUtils = {
    * Default is false.
    */
   getOffset: (container, scrollOffset) => {
-    var offsetLeft = 0;
-    var offsetTop = 0;
+    let offsetLeft = 0;
+    let offsetTop = 0;
 
     // Ignores document scroll origin for fixed elements
-    var fixed = false;
-    var node = container;
-    var b = document.body;
-    var d = document.documentElement;
+    let fixed = false;
+    let node = container;
+    let b = document.body;
+    let d = document.documentElement;
 
     while (node != null && node != b && node != d && !fixed) {
-      var style = mxUtils.getCurrentStyle(node);
+      let style = mxUtils.getCurrentStyle(node);
 
       if (style != null) {
         fixed = fixed || style.position == 'fixed';
@@ -2278,12 +2278,12 @@ var mxUtils = {
     }
 
     if (!scrollOffset && !fixed) {
-      var offset = mxUtils.getDocumentScrollOrigin(container.ownerDocument);
+      let offset = mxUtils.getDocumentScrollOrigin(container.ownerDocument);
       offsetLeft += offset.x;
       offsetTop += offset.y;
     }
 
-    var r = container.getBoundingClientRect();
+    let r = container.getBoundingClientRect();
 
     if (r != null) {
       offsetLeft += r.left;
@@ -2300,10 +2300,10 @@ var mxUtils = {
    * if no document is given.
    */
   getDocumentScrollOrigin: (doc) => {
-    var wnd = doc.defaultView || doc.parentWindow;
+    let wnd = doc.defaultView || doc.parentWindow;
 
-    var x = (wnd != null && window.pageXOffset !== undefined) ? window.pageXOffset : (document.documentElement || document.body.parentNode || document.body).scrollLeft;
-    var y = (wnd != null && window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;
+    let x = (wnd != null && window.pageXOffset !== undefined) ? window.pageXOffset : (document.documentElement || document.body.parentNode || document.body).scrollLeft;
+    let y = (wnd != null && window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;
 
     return new mxPoint(x, y);
   },
@@ -2325,11 +2325,11 @@ var mxUtils = {
     includeAncestors = (includeAncestors != null) ? includeAncestors : false;
     includeDocument = (includeDocument != null) ? includeDocument : true;
 
-    var doc = (node != null) ? node.ownerDocument : document;
-    var b = doc.body;
-    var d = doc.documentElement;
-    var result = new mxPoint();
-    var fixed = false;
+    let doc = (node != null) ? node.ownerDocument : document;
+    let b = doc.body;
+    let d = doc.documentElement;
+    let result = new mxPoint();
+    let fixed = false;
 
     while (node != null && node != b && node != d) {
       if (!isNaN(node.scrollLeft) && !isNaN(node.scrollTop)) {
@@ -2337,7 +2337,7 @@ var mxUtils = {
         result.y += node.scrollTop;
       }
 
-      var style = mxUtils.getCurrentStyle(node);
+      let style = mxUtils.getCurrentStyle(node);
 
       if (style != null) {
         fixed = fixed || style.position == 'fixed';
@@ -2347,7 +2347,7 @@ var mxUtils = {
     }
 
     if (!fixed && includeDocument) {
-      var origin = mxUtils.getDocumentScrollOrigin(doc);
+      let origin = mxUtils.getDocumentScrollOrigin(doc);
 
       result.x += origin.x;
       result.y += origin.y;
@@ -2363,7 +2363,7 @@ var mxUtils = {
    * container and returns a new <mxPoint> with the result.
    *
    * (code)
-   * var pt = mxUtils.convertPoint(graph.container,
+   * let pt = mxUtils.convertPoint(graph.container,
    *   mxEvent.getClientX(evt), mxEvent.getClientY(evt));
    * (end)
    *
@@ -2374,8 +2374,8 @@ var mxUtils = {
    * y - Y-coordinate of the point to be converted.
    */
   convertPoint: (container, x, y) => {
-    var origin = mxUtils.getScrollOrigin(container, false);
-    var offset = mxUtils.getOffset(container);
+    let origin = mxUtils.getScrollOrigin(container, false);
+    let offset = mxUtils.getOffset(container);
 
     offset.x -= origin.x;
     offset.y -= origin.y;
@@ -2494,17 +2494,17 @@ var mxUtils = {
    * y3 - Y-coordinate of the second line's endpoint.
    */
   intersection: function (x0, y0, x1, y1, x2, y2, x3, y3) {
-    var denom = ((y3 - y2) * (x1 - x0)) - ((x3 - x2) * (y1 - y0));
-    var nume_a = ((x3 - x2) * (y0 - y2)) - ((y3 - y2) * (x0 - x2));
-    var nume_b = ((x1 - x0) * (y0 - y2)) - ((y1 - y0) * (x0 - x2));
+    let denom = ((y3 - y2) * (x1 - x0)) - ((x3 - x2) * (y1 - y0));
+    let nume_a = ((x3 - x2) * (y0 - y2)) - ((y3 - y2) * (x0 - x2));
+    let nume_b = ((x1 - x0) * (y0 - y2)) - ((y1 - y0) * (x0 - x2));
 
-    var ua = nume_a / denom;
-    var ub = nume_b / denom;
+    let ua = nume_a / denom;
+    let ub = nume_b / denom;
 
     if (ua >= 0.0 && ua <= 1.0 && ub >= 0.0 && ub <= 1.0) {
       // Get the intersection point
-      var x = x0 + ua * (x1 - x0);
-      var y = y0 + ua * (y1 - y0);
+      let x = x0 + ua * (x1 - x0);
+      let y = y0 + ua * (y1 - y0);
 
       return new mxPoint(x, y);
     }
@@ -2536,7 +2536,7 @@ var mxUtils = {
     px -= x1;
     py -= y1;
 
-    var dotprod = px * x2 + py * y2;
+    let dotprod = px * x2 + py * y2;
     var projlenSq;
 
     if (dotprod <= 0.0) {
@@ -2553,7 +2553,7 @@ var mxUtils = {
       }
     }
 
-    var lenSq = px * px + py * py - projlenSq;
+    let lenSq = px * px + py * py - projlenSq;
 
     if (lenSq < 0) {
       lenSq = 0;
@@ -2603,7 +2603,7 @@ var mxUtils = {
     y2 -= y1;
     px -= x1;
     py -= y1;
-    var ccw = px * y2 - py * x2;
+    let ccw = px * y2 - py * x2;
 
     if (ccw == 0.0) {
       ccw = px * x2 + py * y2;
@@ -2678,7 +2678,7 @@ var mxUtils = {
    * src - URL that points to the image to be displayed.
    */
   createImage: (src) => {
-    var imageNode = null;
+    let imageNode = null;
     imageNode = document.createElement('img');
     imageNode.setAttribute('src', src);
     imageNode.setAttribute('border', '0');
@@ -2693,7 +2693,7 @@ var mxUtils = {
    */
   sortCells: (cells, ascending) => {
     ascending = (ascending != null) ? ascending : true;
-    var lookup = new mxDictionary();
+    let lookup = new mxDictionary();
     cells.sort((o1, o2) => {
       var p1 = lookup.get(o1);
 
@@ -2709,7 +2709,7 @@ var mxUtils = {
         lookup.put(o2, p2);
       }
 
-      var comp = mxCellPath.compare(p1, p2);
+      let comp = mxCellPath.compare(p1, p2);
 
       return (comp == 0) ? 0 : (((comp > 0) == ascending) ? 1 : -1);
     });
@@ -2729,8 +2729,8 @@ var mxUtils = {
    */
   getStylename: (style) => {
     if (style != null) {
-      var pairs = style.split(';');
-      var stylename = pairs[0];
+      let pairs = style.split(';');
+      let stylename = pairs[0];
 
       if (stylename.indexOf('=') < 0) {
         return stylename;
@@ -2751,12 +2751,12 @@ var mxUtils = {
    * style - String of the form [(stylename|key=value);].
    */
   getStylenames: (style) => {
-    var result = [];
+    let result = [];
 
     if (style != null) {
-      var pairs = style.split(';');
+      let pairs = style.split(';');
 
-      for (var i = 0; i < pairs.length; i++) {
+      for (let i = 0; i < pairs.length; i++) {
         if (pairs[i].indexOf('=') < 0) {
           result.push(pairs[i]);
         }
@@ -2775,10 +2775,10 @@ var mxUtils = {
    */
   indexOfStylename: (style, stylename) => {
     if (style != null && stylename != null) {
-      var tokens = style.split(';');
-      var pos = 0;
+      let tokens = style.split(';');
+      let pos = 0;
 
-      for (var i = 0; i < tokens.length; i++) {
+      for (let i = 0; i < tokens.length; i++) {
         if (tokens[i] == stylename) {
           return pos;
         }
@@ -2817,12 +2817,12 @@ var mxUtils = {
    * and returns the updated style. Trailing semicolons are not preserved.
    */
   removeStylename: (style, stylename) => {
-    var result = [];
+    let result = [];
 
     if (style != null) {
-      var tokens = style.split(';');
+      let tokens = style.split(';');
 
-      for (var i = 0; i < tokens.length; i++) {
+      for (let i = 0; i < tokens.length; i++) {
         if (tokens[i] != stylename) {
           result.push(tokens[i]);
         }
@@ -2839,12 +2839,12 @@ var mxUtils = {
    * style.
    */
   removeAllStylenames: (style) => {
-    var result = [];
+    let result = [];
 
     if (style != null) {
-      var tokens = style.split(';');
+      let tokens = style.split(';');
 
-      for (var i = 0; i < tokens.length; i++) {
+      for (let i = 0; i < tokens.length; i++) {
         // Keeps the key, value assignments
         if (tokens[i].indexOf('=') >= 0) {
           result.push(tokens[i]);
@@ -2872,9 +2872,9 @@ var mxUtils = {
     if (cells != null && cells.length > 0) {
       model.beginUpdate();
       try {
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           if (cells[i] != null) {
-            var style = mxUtils.setStyle(model.getStyle(cells[i]), key, value);
+            let style = mxUtils.setStyle(model.getStyle(cells[i]), key, value);
             model.setStyle(cells[i], style);
           }
         }
@@ -2898,7 +2898,7 @@ var mxUtils = {
    * value - New value for the given key.
    */
   setStyle: (style, key, value) => {
-    var isValue = value != null && (typeof (value.length) == 'undefined' || value.length > 0);
+    let isValue = value != null && (typeof (value.length) == 'undefined' || value.length > 0);
 
     if (style == null || style.length == 0) {
       if (isValue) {
@@ -2906,7 +2906,7 @@ var mxUtils = {
       }
     } else {
       if (style.substring(0, key.length + 1) == key + '=') {
-        var next = style.indexOf(';');
+        let next = style.indexOf(';');
 
         if (isValue) {
           style = key + '=' + value + ((next < 0) ? ';' : style.substring(next));
@@ -2914,15 +2914,15 @@ var mxUtils = {
           style = (next < 0 || next == style.length - 1) ? '' : style.substring(next + 1);
         }
       } else {
-        var index = style.indexOf(';' + key + '=');
+        let index = style.indexOf(';' + key + '=');
 
         if (index < 0) {
           if (isValue) {
-            var sep = (style.charAt(style.length - 1) == ';') ? '' : ';';
+            let sep = (style.charAt(style.length - 1) == ';') ? '' : ';';
             style = style + sep + key + '=' + value + ';';
           }
         } else {
-          var next = style.indexOf(';', index + 1);
+          let next = style.indexOf(';', index + 1);
 
           if (isValue) {
             style = style.substring(0, index + 1) + key + '=' + value + ((next < 0) ? ';' : style.substring(next));
@@ -2945,7 +2945,7 @@ var mxUtils = {
    * Example:
    *
    * (code)
-   * var cells = graph.getSelectionCells();
+   * let cells = graph.getSelectionCells();
    * mxUtils.setCellStyleFlags(graph.model,
    *       cells,
    *       mxConstants.STYLE_FONTSTYLE,
@@ -2966,9 +2966,9 @@ var mxUtils = {
     if (cells != null && cells.length > 0) {
       model.beginUpdate();
       try {
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           if (cells[i] != null) {
-            var style = mxUtils.setStyleFlag(
+            let style = mxUtils.setStyleFlag(
                 model.getStyle(cells[i]),
                 key, flag, value);
             model.setStyle(cells[i], style);
@@ -3001,10 +3001,10 @@ var mxUtils = {
         style = key + '=0';
       }
     } else {
-      var index = style.indexOf(key + '=');
+      let index = style.indexOf(key + '=');
 
       if (index < 0) {
-        var sep = (style.charAt(style.length - 1) == ';') ? '' : ';';
+        let sep = (style.charAt(style.length - 1) == ';') ? '' : ';';
 
         if (value || value == null) {
           style = style + sep + key + '=' + flag;
@@ -3012,8 +3012,8 @@ var mxUtils = {
           style = style + sep + key + '=0';
         }
       } else {
-        var cont = style.indexOf(';', index);
-        var tmp = '';
+        let cont = style.indexOf(';', index);
+        let tmp = '';
 
         if (cont < 0) {
           tmp = style.substring(index + key.length + 1);
@@ -3046,8 +3046,8 @@ var mxUtils = {
    * alignment. Default values for missing arguments is top, left.
    */
   getAlignmentAsPoint: (align, valign) => {
-    var dx = -0.5;
-    var dy = -0.5;
+    let dx = -0.5;
+    let dy = -0.5;
 
     // Horizontal alignment
     if (align == mxConstants.ALIGN_LEFT) {
@@ -3077,8 +3077,8 @@ var mxUtils = {
    * Example:
    *
    * (code)
-   * var label = graph.getLabel(cell).replace(/\n/g, "<br>");
-   * var size = graph.getSizeForString(label);
+   * let label = graph.getLabel(cell).replace(/\n/g, "<br>");
+   * let size = graph.getSizeForString(label);
    * (end)
    *
    * Parameters:
@@ -3094,7 +3094,7 @@ var mxUtils = {
   getSizeForString: (text, fontSize, fontFamily, textWidth, fontStyle) => {
     fontSize = (fontSize != null) ? fontSize : mxConstants.DEFAULT_FONTSIZE;
     fontFamily = (fontFamily != null) ? fontFamily : mxConstants.DEFAULT_FONTFAMILY;
-    var div = document.createElement('div');
+    let div = document.createElement('div');
 
     // Sets the font size and family
     div.style.fontFamily = fontFamily;
@@ -3111,7 +3111,7 @@ var mxUtils = {
         div.style.fontStyle = 'italic';
       }
 
-      var txtDecor = [];
+      let txtDecor = [];
 
       if ((fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE) {
         txtDecor.push('underline');
@@ -3143,7 +3143,7 @@ var mxUtils = {
     document.body.appendChild(div);
 
     // Gets the size and removes from DOM
-    var size = new mxRectangle(0, 0, div.offsetWidth, div.offsetHeight);
+    let size = new mxRectangle(0, 0, div.offsetWidth, div.offsetHeight);
     document.body.removeChild(div);
 
     return size;
@@ -3158,22 +3158,22 @@ var mxUtils = {
     scale = (scale != null) ? scale : 1;
 
     if (cells == null) {
-      var model = graph.getModel();
+      let model = graph.getModel();
       cells = [model.getRoot()];
     }
 
-    var view = graph.getView();
-    var result = null;
+    let view = graph.getView();
+    let result = null;
 
     // Disables events on the view
-    var eventsEnabled = view.isEventsEnabled();
+    let eventsEnabled = view.isEventsEnabled();
     view.setEventsEnabled(false);
 
     // Workaround for label bounds not taken into account for image export.
     // Creates a temporary draw pane which is used for rendering the text.
     // Text rendering is required for finding the bounds of the labels.
-    var drawPane = view.drawPane;
-    var overlayPane = view.overlayPane;
+    let drawPane = view.drawPane;
+    let overlayPane = view.overlayPane;
 
     if (graph.dialect == mxConstants.DIALECT_SVG) {
       view.drawPane = document.createElementNS(mxConstants.NS_SVG, 'g');
@@ -3192,14 +3192,14 @@ var mxUtils = {
     }
 
     // Resets the translation
-    var translate = view.getTranslate();
+    let translate = view.getTranslate();
     view.translate = new mxPoint(x0, y0);
 
     // Creates the temporary cell states in the view
-    var temp = new mxTemporaryCellStates(graph.getView(), scale, cells);
+    let temp = new mxTemporaryCellStates(graph.getView(), scale, cells);
 
     try {
-      var enc = new mxCodec();
+      let enc = new mxCodec();
       result = enc.encode(graph.getView());
     } finally {
       temp.destroy();
@@ -3240,37 +3240,37 @@ var mxUtils = {
     pageFormat = (pageFormat != null) ? pageFormat : mxConstants.PAGE_FORMAT_A4_PORTRAIT;
     border = (border != null) ? border : 0;
 
-    var availablePageWidth = pageFormat.width - (border * 2);
-    var availablePageHeight = pageFormat.height - (border * 2);
+    let availablePageWidth = pageFormat.width - (border * 2);
+    let availablePageHeight = pageFormat.height - (border * 2);
 
     // Work out the number of pages required if the
     // graph is not scaled.
-    var graphBounds = graph.getGraphBounds().clone();
-    var sc = graph.getView().getScale();
+    let graphBounds = graph.getGraphBounds().clone();
+    let sc = graph.getView().getScale();
     graphBounds.width /= sc;
     graphBounds.height /= sc;
-    var graphWidth = graphBounds.width;
-    var graphHeight = graphBounds.height;
+    let graphWidth = graphBounds.width;
+    let graphHeight = graphBounds.height;
 
-    var scale = 1;
+    let scale = 1;
 
     // The ratio of the width/height for each printer page
-    var pageFormatAspectRatio = availablePageWidth / availablePageHeight;
+    let pageFormatAspectRatio = availablePageWidth / availablePageHeight;
     // The ratio of the width/height for the graph to be printer
-    var graphAspectRatio = graphWidth / graphHeight;
+    let graphAspectRatio = graphWidth / graphHeight;
 
     // The ratio of horizontal pages / vertical pages for this
     // graph to maintain its aspect ratio on this page format
-    var pagesAspectRatio = graphAspectRatio / pageFormatAspectRatio;
+    let pagesAspectRatio = graphAspectRatio / pageFormatAspectRatio;
 
     // Factor the square root of the page count up and down
     // by the pages aspect ratio to obtain a horizontal and
     // vertical page count that adds up to the page count
     // and has the correct aspect ratio
-    var pageRoot = Math.sqrt(pageCount);
-    var pagesAspectRatioSqrt = Math.sqrt(pagesAspectRatio);
-    var numRowPages = pageRoot * pagesAspectRatioSqrt;
-    var numColumnPages = pageRoot / pagesAspectRatioSqrt;
+    let pageRoot = Math.sqrt(pageCount);
+    let pagesAspectRatioSqrt = Math.sqrt(pagesAspectRatio);
+    let numRowPages = pageRoot * pagesAspectRatioSqrt;
+    let numColumnPages = pageRoot / pagesAspectRatioSqrt;
 
     // These value are rarely more than 2 rounding downs away from
     // a total that meets the page count. In cases of one being less
@@ -3278,20 +3278,20 @@ var mxUtils = {
     // In this case, just change that value to be the page count, since
     // we know the other value is 1
     if (numRowPages < 1 && numColumnPages > pageCount) {
-      var scaleChange = numColumnPages / pageCount;
+      let scaleChange = numColumnPages / pageCount;
       numColumnPages = pageCount;
       numRowPages /= scaleChange;
     }
 
     if (numColumnPages < 1 && numRowPages > pageCount) {
-      var scaleChange = numRowPages / pageCount;
+      let scaleChange = numRowPages / pageCount;
       numRowPages = pageCount;
       numColumnPages /= scaleChange;
     }
 
-    var currentTotalPages = Math.ceil(numRowPages) * Math.ceil(numColumnPages);
+    let currentTotalPages = Math.ceil(numRowPages) * Math.ceil(numColumnPages);
 
-    var numLoops = 0;
+    let numLoops = 0;
 
     // Iterate through while the rounded up number of pages comes to
     // a total greater than the required number
@@ -3301,8 +3301,8 @@ var mxUtils = {
       // i.e. Reduce the page total by reducing the total
       // page area by the least possible amount
 
-      var roundRowDownProportion = Math.floor(numRowPages) / numRowPages;
-      var roundColumnDownProportion = Math.floor(numColumnPages) / numColumnPages;
+      let roundRowDownProportion = Math.floor(numRowPages) / numRowPages;
+      let roundColumnDownProportion = Math.floor(numColumnPages) / numColumnPages;
 
       // If the round down proportion is, work out the proportion to
       // round down to 1 page less
@@ -3315,7 +3315,7 @@ var mxUtils = {
 
       // Check which rounding down is smaller, but in the case of very small roundings
       // try the other dimension instead
-      var scaleChange = 1;
+      let scaleChange = 1;
 
       // Use the higher of the two values
       if (roundRowDownProportion > roundColumnDownProportion) {
@@ -3337,7 +3337,7 @@ var mxUtils = {
 
     // Work out the scale from the number of row pages required
     // The column pages will give the same value
-    var posterWidth = availablePageWidth * numRowPages;
+    let posterWidth = availablePageWidth * numRowPages;
     scale = posterWidth / graphWidth;
 
     // Allow for rounding errors
@@ -3368,15 +3368,15 @@ var mxUtils = {
     y0 = (y0 != null) ? y0 : 0;
 
     if (doc == null) {
-      var wnd = window.open();
+      let wnd = window.open();
       doc = wnd.document;
     } else {
       doc.open();
     }
 
-    var bounds = graph.getGraphBounds();
-    var dx = Math.ceil(x0 - bounds.x);
-    var dy = Math.ceil(y0 - bounds.y);
+    let bounds = graph.getGraphBounds();
+    let dx = Math.ceil(x0 - bounds.x);
+    let dy = Math.ceil(y0 - bounds.y);
 
     if (w == null) {
       w = Math.ceil(bounds.width + x0) + Math.ceil(Math.ceil(bounds.x) - bounds.x);
@@ -3388,44 +3388,44 @@ var mxUtils = {
 
     doc.writeln('<html><head>');
 
-    var base = document.getElementsByTagName('base');
+    let base = document.getElementsByTagName('base');
 
-    for (var i = 0; i < base.length; i++) {
+    for (let i = 0; i < base.length; i++) {
       doc.writeln(mxUtils.getOuterHtml(base[i]));
     }
 
-    var links = document.getElementsByTagName('link');
+    let links = document.getElementsByTagName('link');
 
-    for (var i = 0; i < links.length; i++) {
+    for (let i = 0; i < links.length; i++) {
       doc.writeln(mxUtils.getOuterHtml(links[i]));
     }
 
-    var styles = document.getElementsByTagName('style');
+    let styles = document.getElementsByTagName('style');
 
-    for (var i = 0; i < styles.length; i++) {
+    for (let i = 0; i < styles.length; i++) {
       doc.writeln(mxUtils.getOuterHtml(styles[i]));
     }
 
     doc.writeln('</head><body style="margin:0px;"></body></html>');
     doc.close();
 
-    var outer = doc.createElement('div');
+    let outer = doc.createElement('div');
     outer.position = 'absolute';
     outer.overflow = 'hidden';
     outer.style.width = w + 'px';
     outer.style.height = h + 'px';
 
     // Required for HTML labels if foreignObjects are disabled
-    var div = doc.createElement('div');
+    let div = doc.createElement('div');
     div.style.position = 'absolute';
     div.style.left = dx + 'px';
     div.style.top = dy + 'px';
 
-    var node = graph.container.firstChild;
-    var svg = null;
+    let node = graph.container.firstChild;
+    let svg = null;
 
     while (node != null) {
-      var clone = node.cloneNode(true);
+      let clone = node.cloneNode(true);
 
       if (node == graph.view.drawPane.ownerSVGElement) {
         outer.appendChild(clone);
@@ -3467,11 +3467,11 @@ var mxUtils = {
    * graph - <mxGraph> to be printed.
    */
   printScreen: (graph) => {
-    var wnd = window.open();
-    var bounds = graph.getGraphBounds();
+    let wnd = window.open();
+    let bounds = graph.getGraphBounds();
     mxUtils.show(graph, wnd.document);
 
-    var print = () => {
+    let print = () => {
       wnd.focus();
       wnd.print();
       wnd.close();
@@ -3500,20 +3500,20 @@ var mxUtils = {
    */
   popup: (content, isInternalWindow) => {
     if (isInternalWindow) {
-      var div = document.createElement('div');
+      let div = document.createElement('div');
 
       div.style.overflow = 'scroll';
       div.style.width = '636px';
       div.style.height = '460px';
 
-      var pre = document.createElement('pre');
+      let pre = document.createElement('pre');
       pre.innerHTML = mxUtils.htmlEntities(content, false).replace(/\n/g, '<br>').replace(/ /g, '&nbsp;');
 
       div.appendChild(pre);
 
-      var w = document.body.clientWidth;
-      var h = Math.max(document.body.clientHeight || 0, document.documentElement.clientHeight)
-      var wnd = new mxWindow('Popup Window', div,
+      let w = document.body.clientWidth;
+      let h = Math.max(document.body.clientHeight || 0, document.documentElement.clientHeight)
+      let wnd = new mxWindow('Popup Window', div,
           w / 2 - 320, h / 2 - 240, 640, 480, false, true);
 
       wnd.setClosable(true);
@@ -3521,12 +3521,12 @@ var mxUtils = {
     } else {
       // Wraps up the XML content in a textarea
       if (mxClient.IS_NS) {
-        var wnd = window.open();
+        let wnd = window.open();
         wnd.document.writeln('<pre>' + mxUtils.htmlEntities(content) + '</pre');
         wnd.document.close();
       } else {
-        var wnd = window.open();
-        var pre = wnd.document.createElement('pre');
+        let wnd = window.open();
+        let pre = wnd.document.createElement('pre');
         pre.innerHTML = mxUtils.htmlEntities(content, false).replace(/\n/g, '<br>').replace(/ /g, '&nbsp;');
         wnd.document.body.appendChild(pre);
       }
@@ -3593,10 +3593,10 @@ var mxUtils = {
    * icon - Optional icon for the window decoration.
    */
   error: (message, width, close, icon) => {
-    var div = document.createElement('div');
+    let div = document.createElement('div');
     div.style.padding = '20px';
 
-    var img = document.createElement('img');
+    let img = document.createElement('img');
     img.setAttribute('src', icon || mxUtils.errorImage);
     img.setAttribute('valign', 'bottom');
     img.style.verticalAlign = 'middle';
@@ -3607,17 +3607,17 @@ var mxUtils = {
     div.appendChild(document.createTextNode('\u00a0')); // &nbsp;
     mxUtils.write(div, message);
 
-    var w = document.body.clientWidth;
-    var h = (document.body.clientHeight || document.documentElement.clientHeight);
-    var warn = new mxWindow(mxResources.get(mxUtils.errorResource) ||
+    let w = document.body.clientWidth;
+    let h = (document.body.clientHeight || document.documentElement.clientHeight);
+    let warn = new mxWindow(mxResources.get(mxUtils.errorResource) ||
         mxUtils.errorResource, div, (w - width) / 2, h / 4, width, null,
         false, true);
 
     if (close) {
       mxUtils.br(div);
 
-      var tmp = document.createElement('p');
-      var button = document.createElement('button');
+      let tmp = document.createElement('p');
+      let button = document.createElement('button');
 
       button.setAttribute('style', 'float:right');
 
@@ -3652,12 +3652,12 @@ var mxUtils = {
    * Example:
    *
    * (code)
-   * var funct = (graph, evt, cell, x, y)=>
+   * let funct = (graph, evt, cell, x, y)=>
    * {
    *   if (graph.canImportCell(cell))
    *   {
-   *     var parent = graph.getDefaultParent();
-   *     var vertex = null;
+   *     let parent = graph.getDefaultParent();
+   *     let vertex = null;
    *
    *     graph.getModel().beginUpdate();
    *     try
@@ -3673,7 +3673,7 @@ var mxUtils = {
    *   }
    * }
    *
-   * var img = document.createElement('img');
+   * let img = document.createElement('img');
    * img.setAttribute('src', 'editors/images/rectangle.gif');
    * img.style.position = 'absolute';
    * img.style.left = '0px';
@@ -3681,7 +3681,7 @@ var mxUtils = {
    * img.style.width = '16px';
    * img.style.height = '16px';
    *
-   * var dragImage = img.cloneNode(true);
+   * let dragImage = img.cloneNode(true);
    * dragImage.style.width = '32px';
    * dragImage.style.height = '32px';
    * mxUtils.makeDraggable(img, graph, funct, dragImage);
@@ -3711,7 +3711,7 @@ var mxUtils = {
    */
   makeDraggable: function (element, graphF, funct, dragElement, dx, dy, autoscroll,
                            scalePreview, highlightDropTargets, getDropTarget) {
-    var dragSource = new mxDragSource(element, funct);
+    let dragSource = new mxDragSource(element, funct);
     dragSource.dragOffset = new mxPoint((dx != null) ? dx : 0,
         (dy != null) ? dy : mxConstants.TOOLTIP_VERTICAL_OFFSET);
     dragSource.autoscroll = autoscroll;
@@ -3742,10 +3742,10 @@ var mxUtils = {
 
       if (scalePreview) {
         dragSource.createPreviewElement = (graph) => {
-          var elt = dragElement.cloneNode(true);
+          let elt = dragElement.cloneNode(true);
 
-          var w = parseInt(elt.style.width);
-          var h = parseInt(elt.style.height);
+          let w = parseInt(elt.style.width);
+          let h = parseInt(elt.style.height);
           elt.style.width = Math.round(w * graph.view.scale) + 'px';
           elt.style.height = Math.round(h * graph.view.scale) + 'px';
 
diff --git a/src/js/util/mxWindow.js b/src/js/util/mxWindow.js
index 750cd4b88..ba5f2668c 100644
--- a/src/js/util/mxWindow.js
+++ b/src/js/util/mxWindow.js
@@ -92,23 +92,23 @@ class mxWindow extends mxEventSource {
    * Creating a simple window.
    *
    * (code)
-   * var tb = document.createElement('div');
-   * var wnd = new mxWindow('Title', tb, 100, 100, 200, 200, true, true);
+   * let tb = document.createElement('div');
+   * let wnd = new mxWindow('Title', tb, 100, 100, 200, 200, true, true);
    * wnd.setVisible(true);
    * (end)
    *
    * Creating a window that contains an iframe.
    *
    * (code)
-   * var frame = document.createElement('iframe');
+   * let frame = document.createElement('iframe');
    * frame.setAttribute('width', '192px');
    * frame.setAttribute('height', '172px');
    * frame.setAttribute('src', 'http://www.example.com/');
    * frame.style.backgroundColor = 'white';
    *
-   * var w = document.body.clientWidth;
-   * var h = (document.body.clientHeight || document.documentElement.clientHeight);
-   * var wnd = new mxWindow('Title', frame, (w-200)/2, (h-200)/3, 200, 200);
+   * let w = document.body.clientWidth;
+   * let h = (document.body.clientHeight || document.documentElement.clientHeight);
+   * let wnd = new mxWindow('Title', frame, (w-200)/2, (h-200)/3, 200, 200);
    * wnd.setVisible(true);
    * (end)
    *
@@ -138,11 +138,11 @@ class mxWindow extends mxEventSource {
    * (code)
    * mxEvent.addListener(window, 'resize', mxUtils.bind(this, ()=>
    * {
-   *   var iw = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
-   *   var ih = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
+   *   let iw = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
+   *   let ih = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
    *
-   *   var x = this.window.getX();
-   *   var y = this.window.getY();
+   *   let x = this.window.getX();
+   *   let y = this.window.getY();
    *
    *   if (x + this.window.table.clientWidth > iw)
    *   {
@@ -324,8 +324,8 @@ class mxWindow extends mxEventSource {
     }
 
     // Creates title row
-    var tbody = document.createElement('tbody');
-    var tr = document.createElement('tr');
+    let tbody = document.createElement('tbody');
+    let tr = document.createElement('tr');
 
     this.title = document.createElement('td');
     this.title.className = style + 'Title';
@@ -364,7 +364,7 @@ class mxWindow extends mxEventSource {
     this.div.appendChild(this.table);
 
     // Puts the window on top of other windows when clicked
-    var activator = mxUtils.bind(this, (evt) => {
+    let activator = mxUtils.bind(this, (evt) => {
       this.activate();
     });
 
@@ -382,10 +382,10 @@ class mxWindow extends mxEventSource {
    */
   setTitle = (title) => {
     // Removes all text content nodes (normally just one)
-    var child = this.title.firstChild;
+    let child = this.title.firstChild;
 
     while (child != null) {
-      var next = child.nextSibling;
+      let next = child.nextSibling;
 
       if (child.nodeType === mxConstants.NODETYPE_TEXT) {
         child.parentNode.removeChild(child);
@@ -422,18 +422,18 @@ class mxWindow extends mxEventSource {
    */
   activate = () => {
     if (mxWindow.activeWindow !== this) {
-      var style = mxUtils.getCurrentStyle(this.getElement());
-      var index = (style != null) ? style.zIndex : 3;
+      let style = mxUtils.getCurrentStyle(this.getElement());
+      let index = (style != null) ? style.zIndex : 3;
 
       if (mxWindow.activeWindow) {
-        var elt = mxWindow.activeWindow.getElement();
+        let elt = mxWindow.activeWindow.getElement();
 
         if (elt != null && elt.style != null) {
           elt.style.zIndex = index;
         }
       }
 
-      var previousWindow = mxWindow.activeWindow;
+      let previousWindow = mxWindow.activeWindow;
       this.getElement().style.zIndex = parseInt(index) + 1;
       mxWindow.activeWindow = this;
 
@@ -497,12 +497,12 @@ class mxWindow extends mxEventSource {
         this.resize.setAttribute('src', this.resizeImage);
         this.resize.style.cursor = 'nw-resize';
 
-        var startX = null;
-        var startY = null;
-        var width = null;
-        var height = null;
+        let startX = null;
+        let startY = null;
+        let width = null;
+        let height = null;
 
-        var start = mxUtils.bind(this, (evt) => {
+        let start = mxUtils.bind(this, (evt) => {
           // LATER: pointerdown starting on border of resize does start
           // the drag operation but does not fire consecutive events via
           // one of the listeners below (does pan instead).
@@ -520,10 +520,10 @@ class mxWindow extends mxEventSource {
 
         // Adds a temporary pair of listeners to intercept
         // the gesture event in the document
-        var dragHandler = mxUtils.bind(this, (evt) => {
+        let dragHandler = mxUtils.bind(this, (evt) => {
           if (startX != null && startY != null) {
-            var dx = mxEvent.getClientX(evt) - startX;
-            var dy = mxEvent.getClientY(evt) - startY;
+            let dx = mxEvent.getClientX(evt) - startX;
+            let dy = mxEvent.getClientY(evt) - startY;
 
             this.setSize(width + dx, height + dy);
 
@@ -532,7 +532,7 @@ class mxWindow extends mxEventSource {
           }
         });
 
-        var dropHandler = mxUtils.bind(this, (evt) => {
+        let dropHandler = mxUtils.bind(this, (evt) => {
           if (startX != null && startY != null) {
             startX = null;
             startY = null;
@@ -608,11 +608,11 @@ class mxWindow extends mxEventSource {
 
     this.buttons.appendChild(this.minimize);
 
-    var minimized = false;
-    var maxDisplay = null;
-    var height = null;
+    let minimized = false;
+    let maxDisplay = null;
+    let height = null;
 
-    var funct = mxUtils.bind(this, (evt) => {
+    let funct = mxUtils.bind(this, (evt) => {
       this.activate();
 
       if (!minimized) {
@@ -626,7 +626,7 @@ class mxWindow extends mxEventSource {
         this.maximize.style.display = 'none';
         height = this.table.style.height;
 
-        var minSize = this.getMinimumSize();
+        let minSize = this.getMinimumSize();
 
         if (minSize.height > 0) {
           this.div.style.height = minSize.height + 'px';
@@ -692,14 +692,14 @@ class mxWindow extends mxEventSource {
 
     this.buttons.appendChild(this.maximize);
 
-    var maximized = false;
-    var x = null;
-    var y = null;
-    var height = null;
-    var width = null;
-    var minDisplay = null;
+    let maximized = false;
+    let x = null;
+    let y = null;
+    let height = null;
+    let width = null;
+    let minDisplay = null;
 
-    var funct = mxUtils.bind(this, (evt) => {
+    let funct = mxUtils.bind(this, (evt) => {
       this.activate();
 
       if (this.maximize.style.display != 'none') {
@@ -720,7 +720,7 @@ class mxWindow extends mxEventSource {
 
           this.div.style.left = '0px';
           this.div.style.top = '0px';
-          var docHeight = Math.max(document.body.clientHeight || 0, document.documentElement.clientHeight || 0);
+          let docHeight = Math.max(document.body.clientHeight || 0, document.documentElement.clientHeight || 0);
 
           this.div.style.width = (document.body.clientWidth - 2) + 'px';
           this.div.style.height = (docHeight - 2) + 'px';
@@ -732,7 +732,7 @@ class mxWindow extends mxEventSource {
             this.resize.style.visibility = 'hidden';
           }
 
-          var style = mxUtils.getCurrentStyle(this.contentWrapper);
+          let style = mxUtils.getCurrentStyle(this.contentWrapper);
 
           if (style.overflow == 'auto' || this.resize != null) {
             this.contentWrapper.style.height = (this.div.offsetHeight -
@@ -755,7 +755,7 @@ class mxWindow extends mxEventSource {
           this.div.style.height = height;
           this.div.style.width = width;
 
-          var style = mxUtils.getCurrentStyle(this.contentWrapper);
+          let style = mxUtils.getCurrentStyle(this.contentWrapper);
 
           if (style.overflow == 'auto' || this.resize != null) {
             this.contentWrapper.style.height = (this.div.offsetHeight -
@@ -790,22 +790,22 @@ class mxWindow extends mxEventSource {
 
     mxEvent.addGestureListeners(this.title,
         mxUtils.bind(this, (evt) => {
-          var startX = mxEvent.getClientX(evt);
-          var startY = mxEvent.getClientY(evt);
-          var x = this.getX();
-          var y = this.getY();
+          let startX = mxEvent.getClientX(evt);
+          let startY = mxEvent.getClientY(evt);
+          let x = this.getX();
+          let y = this.getY();
 
           // Adds a temporary pair of listeners to intercept
           // the gesture event in the document
-          var dragHandler = mxUtils.bind(this, (evt) => {
-            var dx = mxEvent.getClientX(evt) - startX;
-            var dy = mxEvent.getClientY(evt) - startY;
+          let dragHandler = mxUtils.bind(this, (evt) => {
+            let dx = mxEvent.getClientX(evt) - startX;
+            let dy = mxEvent.getClientY(evt) - startY;
             this.setLocation(x + dx, y + dy);
             this.fireEvent(new mxEventObject(mxEvent.MOVE, 'event', evt));
             mxEvent.consume(evt);
           });
 
-          var dropHandler = mxUtils.bind(this, (evt) => {
+          let dropHandler = mxUtils.bind(this, (evt) => {
             mxEvent.removeGestureListeners(document, null, dragHandler, dropHandler);
             this.fireEvent(new mxEventObject(mxEvent.MOVE_END, 'event', evt));
             mxEvent.consume(evt);
@@ -955,7 +955,7 @@ class mxWindow extends mxEventSource {
     this.div.style.display = '';
     this.activate();
 
-    var style = mxUtils.getCurrentStyle(this.contentWrapper);
+    let style = mxUtils.getCurrentStyle(this.contentWrapper);
 
     if ((style.overflow == 'auto' || this.resize != null) &&
         this.contentWrapper.style.display != 'none') {
diff --git a/src/js/util/mxXmlCanvas2D.js b/src/js/util/mxXmlCanvas2D.js
index d1addbe4d..478516d00 100644
--- a/src/js/util/mxXmlCanvas2D.js
+++ b/src/js/util/mxXmlCanvas2D.js
@@ -146,7 +146,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
    * scale - Number that represents the scale where 1 is equal to 100%.
    */
   mxXmlCanvas2scale = (value) => {
-    var elem = this.createElement('scale');
+    let elem = this.createElement('scale');
     elem.setAttribute('scale', value);
     this.root.appendChild(elem);
   };
@@ -162,7 +162,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
    * dy - Number that specifies the vertical translation.
    */
   mxXmlCanvas2translate = (dx, dy) => {
-    var elem = this.createElement('translate');
+    let elem = this.createElement('translate');
     elem.setAttribute('dx', this.format(dx));
     elem.setAttribute('dy', this.format(dy));
     this.root.appendChild(elem);
@@ -183,7 +183,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
    * cy - Number that represents the y-coordinate of the rotation center.
    */
   mxXmlCanvas2rotate = (theta, flipH, flipV, cx, cy) => {
-    var elem = this.createElement('rotate');
+    let elem = this.createElement('rotate');
 
     if (theta != 0 || flipH || flipV) {
       elem.setAttribute('theta', this.format(theta));
@@ -214,7 +214,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setAlpha.apply(this, arguments);
     }
 
-    var elem = this.createElement('alpha');
+    let elem = this.createElement('alpha');
     elem.setAttribute('alpha', this.format(value));
     this.root.appendChild(elem);
   };
@@ -238,7 +238,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setFillAlpha.apply(this, arguments);
     }
 
-    var elem = this.createElement('fillalpha');
+    let elem = this.createElement('fillalpha');
     elem.setAttribute('alpha', this.format(value));
     this.root.appendChild(elem);
   };
@@ -262,7 +262,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setStrokeAlpha.apply(this, arguments);
     }
 
-    var elem = this.createElement('strokealpha');
+    let elem = this.createElement('strokealpha');
     elem.setAttribute('alpha', this.format(value));
     this.root.appendChild(elem);
   };
@@ -289,7 +289,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setFillColor.apply(this, arguments);
     }
 
-    var elem = this.createElement('fillcolor');
+    let elem = this.createElement('fillcolor');
     elem.setAttribute('color', (value != null) ? value : mxConstants.NONE);
     this.root.appendChild(elem);
   };
@@ -318,7 +318,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
     if (color1 != null && color2 != null) {
       mxAbstractCanvas2setGradient.apply(this, arguments);
 
-      var elem = this.createElement('gradient');
+      let elem = this.createElement('gradient');
       elem.setAttribute('c1', color1);
       elem.setAttribute('c2', color2);
       elem.setAttribute('x', this.format(x));
@@ -365,7 +365,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setStrokeColor.apply(this, arguments);
     }
 
-    var elem = this.createElement('strokecolor');
+    let elem = this.createElement('strokecolor');
     elem.setAttribute('color', (value != null) ? value : mxConstants.NONE);
     this.root.appendChild(elem);
   };
@@ -388,7 +388,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setStrokeWidth.apply(this, arguments);
     }
 
-    var elem = this.createElement('strokewidth');
+    let elem = this.createElement('strokewidth');
     elem.setAttribute('width', this.format(value));
     this.root.appendChild(elem);
   };
@@ -413,7 +413,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setDashed.apply(this, arguments);
     }
 
-    var elem = this.createElement('dashed');
+    let elem = this.createElement('dashed');
     elem.setAttribute('dashed', (value) ? '1' : '0');
 
     if (fixDash != null) {
@@ -444,7 +444,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setDashPattern.apply(this, arguments);
     }
 
-    var elem = this.createElement('dashpattern');
+    let elem = this.createElement('dashpattern');
     elem.setAttribute('pattern', value);
     this.root.appendChild(elem);
   };
@@ -468,7 +468,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setLineCap.apply(this, arguments);
     }
 
-    var elem = this.createElement('linecap');
+    let elem = this.createElement('linecap');
     elem.setAttribute('cap', value);
     this.root.appendChild(elem);
   };
@@ -492,7 +492,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setLineJoin.apply(this, arguments);
     }
 
-    var elem = this.createElement('linejoin');
+    let elem = this.createElement('linejoin');
     elem.setAttribute('join', value);
     this.root.appendChild(elem);
   };
@@ -515,7 +515,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setMiterLimit.apply(this, arguments);
     }
 
-    var elem = this.createElement('miterlimit');
+    let elem = this.createElement('miterlimit');
     elem.setAttribute('limit', value);
     this.root.appendChild(elem);
   };
@@ -543,7 +543,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
         mxAbstractCanvas2setFontColor.apply(this, arguments);
       }
 
-      var elem = this.createElement('fontcolor');
+      let elem = this.createElement('fontcolor');
       elem.setAttribute('color', (value != null) ? value : mxConstants.NONE);
       this.root.appendChild(elem);
     }
@@ -572,7 +572,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
         mxAbstractCanvas2setFontBackgroundColor.apply(this, arguments);
       }
 
-      var elem = this.createElement('fontbackgroundcolor');
+      let elem = this.createElement('fontbackgroundcolor');
       elem.setAttribute('color', (value != null) ? value : mxConstants.NONE);
       this.root.appendChild(elem);
     }
@@ -601,7 +601,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
         mxAbstractCanvas2setFontBorderColor.apply(this, arguments);
       }
 
-      var elem = this.createElement('fontbordercolor');
+      let elem = this.createElement('fontbordercolor');
       elem.setAttribute('color', (value != null) ? value : mxConstants.NONE);
       this.root.appendChild(elem);
     }
@@ -626,7 +626,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
         mxAbstractCanvas2setFontSize.apply(this, arguments);
       }
 
-      var elem = this.createElement('fontsize');
+      let elem = this.createElement('fontsize');
       elem.setAttribute('size', value);
       this.root.appendChild(elem);
     }
@@ -652,7 +652,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
         mxAbstractCanvas2setFontFamily.apply(this, arguments);
       }
 
-      var elem = this.createElement('fontfamily');
+      let elem = this.createElement('fontfamily');
       elem.setAttribute('family', value);
       this.root.appendChild(elem);
     }
@@ -682,7 +682,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
         mxAbstractCanvas2setFontStyle.apply(this, arguments);
       }
 
-      var elem = this.createElement('fontstyle');
+      let elem = this.createElement('fontstyle');
       elem.setAttribute('style', value);
       this.root.appendChild(elem);
     }
@@ -706,7 +706,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setShadow.apply(this, arguments);
     }
 
-    var elem = this.createElement('shadow');
+    let elem = this.createElement('shadow');
     elem.setAttribute('enabled', (value) ? '1' : '0');
     this.root.appendChild(elem);
   };
@@ -733,7 +733,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setShadowColor.apply(this, arguments);
     }
 
-    var elem = this.createElement('shadowcolor');
+    let elem = this.createElement('shadowcolor');
     elem.setAttribute('color', (value != null) ? value : mxConstants.NONE);
     this.root.appendChild(elem);
   };
@@ -757,7 +757,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setShadowAlpha.apply(this, arguments);
     }
 
-    var elem = this.createElement('shadowalpha');
+    let elem = this.createElement('shadowalpha');
     elem.setAttribute('alpha', value);
     this.root.appendChild(elem);
 
@@ -782,7 +782,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
       mxAbstractCanvas2setShadowOffset.apply(this, arguments);
     }
 
-    var elem = this.createElement('shadowoffset');
+    let elem = this.createElement('shadowoffset');
     elem.setAttribute('dx', dx);
     elem.setAttribute('dy', dy);
     this.root.appendChild(elem);
@@ -802,7 +802,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
    * h - Number that represents the height of the rectangle.
    */
   mxXmlCanvas2rect = (x, y, w, h) => {
-    var elem = this.createElement('rect');
+    let elem = this.createElement('rect');
     elem.setAttribute('x', this.format(x));
     elem.setAttribute('y', this.format(y));
     elem.setAttribute('w', this.format(w));
@@ -825,7 +825,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
    * dy - Number that represents the vertical rounding.
    */
   mxXmlCanvas2roundrect = (x, y, w, h, dx, dy) => {
-    var elem = this.createElement('roundrect');
+    let elem = this.createElement('roundrect');
     elem.setAttribute('x', this.format(x));
     elem.setAttribute('y', this.format(y));
     elem.setAttribute('w', this.format(w));
@@ -848,7 +848,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
    * h - Number that represents the height of the ellipse.
    */
   mxXmlCanvas2ellipse = (x, y, w, h) => {
-    var elem = this.createElement('ellipse');
+    let elem = this.createElement('ellipse');
     elem.setAttribute('x', this.format(x));
     elem.setAttribute('y', this.format(y));
     elem.setAttribute('w', this.format(w));
@@ -876,7 +876,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
     src = this.converter.convert(src);
 
     // LATER: Add option for embedding images as base64.
-    var elem = this.createElement('image');
+    let elem = this.createElement('image');
     elem.setAttribute('x', this.format(x));
     elem.setAttribute('y', this.format(y));
     elem.setAttribute('w', this.format(w));
@@ -910,7 +910,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
    * y - Number that represents the y-coordinate of the point.
    */
   mxXmlCanvas2moveTo = (x, y) => {
-    var elem = this.createElement('move');
+    let elem = this.createElement('move');
     elem.setAttribute('x', this.format(x));
     elem.setAttribute('y', this.format(y));
     this.root.appendChild(elem);
@@ -929,7 +929,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
    * y - Number that represents the y-coordinate of the endpoint.
    */
   mxXmlCanvas2lineTo = (x, y) => {
-    var elem = this.createElement('line');
+    let elem = this.createElement('line');
     elem.setAttribute('x', this.format(x));
     elem.setAttribute('y', this.format(y));
     this.root.appendChild(elem);
@@ -950,7 +950,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
    * y2 - Number that represents the y-coordinate of the endpoint.
    */
   mxXmlCanvas2quadTo = (x1, y1, x2, y2) => {
-    var elem = this.createElement('quad');
+    let elem = this.createElement('quad');
     elem.setAttribute('x1', this.format(x1));
     elem.setAttribute('y1', this.format(y1));
     elem.setAttribute('x2', this.format(x2));
@@ -975,7 +975,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
    * y3 - Number that represents the y-coordinate of the endpoint.
    */
   mxXmlCanvas2curveTo = (x1, y1, x2, y2, x3, y3) => {
-    var elem = this.createElement('curve');
+    let elem = this.createElement('curve');
     elem.setAttribute('x1', this.format(x1));
     elem.setAttribute('y1', this.format(y1));
     elem.setAttribute('x2', this.format(x2));
@@ -1027,7 +1027,7 @@ class mxXmlCanvas2D extends mxAbstractCanvas2D {
         str = mxUtils.getOuterHtml(str);
       }
 
-      var elem = this.createElement('text');
+      let elem = this.createElement('text');
       elem.setAttribute('x', this.format(x));
       elem.setAttribute('y', this.format(y));
       elem.setAttribute('w', this.format(w));
diff --git a/src/js/util/mxXmlRequest.js b/src/js/util/mxXmlRequest.js
index 66bd71c70..613f04b5d 100644
--- a/src/js/util/mxXmlRequest.js
+++ b/src/js/util/mxXmlRequest.js
@@ -100,12 +100,12 @@ class mxXmlRequest {
    * Example:
    *
    * (code)
-   * var onload = (req)=>
+   * let onload = (req)=>
    * {
    *   mxUtils.alert(req.getDocumentElement());
    * }
    *
-   * var onerror = (req)=>
+   * let onerror = (req)=>
    * {
    *   mxUtils.alert('Error');
    * }
@@ -117,7 +117,7 @@ class mxXmlRequest {
    * Example:
    *
    * (code)
-   * var req = new mxXmlRequest(url, 'key=value', 'POST', false);
+   * let req = new mxXmlRequest(url, 'key=value', 'POST', false);
    * req.send();
    * mxUtils.alert(req.getDocumentElement());
    * (end)
@@ -127,9 +127,9 @@ class mxXmlRequest {
    * Example:
    *
    * (code)
-   * var encoder = new mxCodec();
-   * var result = encoder.encode(graph.getModel());
-   * var xml = encodeURIComponent(mxUtils.getXml(result));
+   * let encoder = new mxCodec();
+   * let result = encoder.encode(graph.getModel());
+   * let xml = encodeURIComponent(mxUtils.getXml(result));
    * new mxXmlRequest(url, 'xml='+xml).send();
    * (end)
    *
@@ -215,7 +215,7 @@ class mxXmlRequest {
    * Returns the document element of the response XML document.
    */
   getDocumentElement = () => {
-    var doc = this.getXml();
+    let doc = this.getXml();
 
     if (doc != null) {
       return doc.documentElement;
@@ -231,7 +231,7 @@ class mxXmlRequest {
    * the document element of the XML document.
    */
   getXml = () => {
-    var xml = this.request.responseXML;
+    let xml = this.request.responseXML;
 
     // Handles missing response headers in IE, the first condition handles
     // the case where responseXML is there, but using its nodes leads to
@@ -261,7 +261,7 @@ class mxXmlRequest {
    * Creates and returns the inner <request> object.
    */
   create = () => {
-    var req = new XMLHttpRequest();
+    let req = new XMLHttpRequest();
 
     // TODO: Check for overrideMimeType required here?
     if (this.isBinary() && req.overrideMimeType) {
@@ -360,14 +360,14 @@ class mxXmlRequest {
    */
   simulate = (doc, target) => {
     doc = doc || document;
-    var old = null;
+    let old = null;
 
     if (doc === document) {
       old = window.onbeforeunload;
       window.onbeforeunload = null;
     }
 
-    var form = doc.createElement('form');
+    let form = doc.createElement('form');
     form.setAttribute('method', this.method);
     form.setAttribute('action', this.url);
 
@@ -378,23 +378,23 @@ class mxXmlRequest {
     form.style.display = 'none';
     form.style.visibility = 'hidden';
 
-    var pars = (this.params.indexOf('&') > 0) ?
+    let pars = (this.params.indexOf('&') > 0) ?
         this.params.split('&') :
         this.params.split();
 
     // Adds the parameters as textareas to the form
-    for (var i = 0; i < pars.length; i++) {
-      var pos = pars[i].indexOf('=');
+    for (let i = 0; i < pars.length; i++) {
+      let pos = pars[i].indexOf('=');
 
       if (pos > 0) {
-        var name = pars[i].substring(0, pos);
-        var value = pars[i].substring(pos + 1);
+        let name = pars[i].substring(0, pos);
+        let value = pars[i].substring(pos + 1);
 
         if (this.decodeSimulateValues) {
           value = decodeURIComponent(value);
         }
 
-        var textarea = doc.createElement('textarea');
+        let textarea = doc.createElement('textarea');
         textarea.setAttribute('wrap', 'off');
         textarea.setAttribute('name', name);
         mxUtils.write(textarea, value);
diff --git a/src/js/view/mxCellEditor.js b/src/js/view/mxCellEditor.js
index a360de4ca..2b900bd14 100644
--- a/src/js/view/mxCellEditor.js
+++ b/src/js/view/mxCellEditor.js
@@ -148,7 +148,7 @@ class mxCellEditor {
    * (code)
    * graph.cellEditor.getEditorBounds = (state)=>
    * {
-   *   var result = getEditorBounds.apply(this, arguments);
+   *   let result = getEditorBounds.apply(this, arguments);
    *
    *   if (this.graph.getModel().isEdge(state.cell))
    *   {
@@ -172,7 +172,7 @@ class mxCellEditor {
    * To only allow numeric input in the in-place editor, use the following code.
    *
    * (code)
-   * var text = graph.cellEditor.textarea;
+   * let text = graph.cellEditor.textarea;
    *
    * mxEvent.addListener(text, 'keydown', function (evt)
    * {
@@ -219,7 +219,7 @@ class mxCellEditor {
    * code may be used to keep the container focused.
    *
    * (code)
-   * var graphFireMouseEvent = graph.fireMouseEvent;
+   * let graphFireMouseEvent = graph.fireMouseEvent;
    * graph.fireMouseEvent = (evtName, me, sender)=>
    * {
    *   if (evtName == mxEvent.MOUSE_DOWN)
@@ -311,7 +311,7 @@ class mxCellEditor {
    * Gets the initial editing value for the given cell.
    */
   getInitialValue = (state, trigger) => {
-    var result = mxUtils.htmlEntities(this.graph.getEditingValue(state.cell, trigger), false);
+    let result = mxUtils.htmlEntities(this.graph.getEditingValue(state.cell, trigger), false);
     result = mxUtils.replaceTrailingNewlines(result, '<div><br></div>');
     return result.replace(/\n/g, '<br>');
   };
@@ -369,7 +369,7 @@ class mxCellEditor {
     }));
 
     // Keypress only fires if printable key was pressed and handles removing the empty placeholder
-    var keypressHandler = mxUtils.bind(this, (evt) => {
+    let keypressHandler = mxUtils.bind(this, (evt) => {
       if (this.editingCell != null) {
         // Clears the initial empty label on the first keystroke
         // and workaround for FF which fires keypress for delete and backspace
@@ -385,7 +385,7 @@ class mxCellEditor {
     mxEvent.addListener(elt, 'paste', keypressHandler);
 
     // Handler for updating the empty label text value after a change
-    var keyupHandler = mxUtils.bind(this, (evt) => {
+    let keyupHandler = mxUtils.bind(this, (evt) => {
       if (this.editingCell != null) {
         // Uses an optional text value for sempty labels which is cleared
         // when the first keystroke appears. This makes it easier to see
@@ -405,9 +405,9 @@ class mxCellEditor {
     mxEvent.addListener(elt, 'paste', keyupHandler);
 
     // Adds automatic resizing of the textbox while typing using input, keyup and/or DOM change events
-    var evtName = 'input';
+    let evtName = 'input';
 
-    var resizeHandler = mxUtils.bind(this, (evt) => {
+    let resizeHandler = mxUtils.bind(this, (evt) => {
       if (this.editingCell != null && this.autoSize && !mxEvent.isConsumed(evt)) {
         // Asynchronous is needed for keydown and shows better results for input events overall
         // (ie non-blocking and cases where the offsetWidth/-Height was wrong at this time)
@@ -456,14 +456,14 @@ class mxCellEditor {
    * Returns <modified>.
    */
   resize = () => {
-    var state = this.graph.getView().getState(this.editingCell);
+    let state = this.graph.getView().getState(this.editingCell);
 
     if (state == null) {
       this.stopEditing(true);
     } else if (this.textarea != null) {
-      var isEdge = this.graph.getModel().isEdge(state.cell);
-      var scale = this.graph.getView().scale;
-      var m = null;
+      let isEdge = this.graph.getModel().isEdge(state.cell);
+      let scale = this.graph.getView().scale;
+      let m = null;
 
       if (!this.autoSize || (state.style[mxConstants.STYLE_OVERFLOW] == 'fill')) {
         // Specifies the bounds of the editor box
@@ -492,7 +492,7 @@ class mxCellEditor {
           }
         }
       } else {
-        var lw = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_WIDTH, null);
+        let lw = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_WIDTH, null);
         m = (state.text != null && this.align == null) ? state.text.margin : null;
 
         if (m == null) {
@@ -504,14 +504,14 @@ class mxCellEditor {
           this.bounds = new mxRectangle(state.absoluteOffset.x, state.absoluteOffset.y, 0, 0);
 
           if (lw != null) {
-            var tmp = (parseFloat(lw) + 2) * scale;
+            let tmp = (parseFloat(lw) + 2) * scale;
             this.bounds.width = tmp;
             this.bounds.x += m.x * tmp;
           }
         } else {
-          var bds = mxRectangle.fromRectangle(state);
-          var hpos = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
-          var vpos = mxUtils.getValue(state.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
+          let bds = mxRectangle.fromRectangle(state);
+          let hpos = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
+          let vpos = mxUtils.getValue(state.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
 
           bds = (state.shape != null && hpos == mxConstants.ALIGN_CENTER && vpos == mxConstants.ALIGN_MIDDLE) ? state.shape.getLabelBounds(bds) : bds;
 
@@ -520,14 +520,14 @@ class mxCellEditor {
           }
 
           if (!state.view.graph.cellRenderer.legacySpacing || state.style[mxConstants.STYLE_OVERFLOW] != 'width') {
-            var spacing = parseInt(state.style[mxConstants.STYLE_SPACING] || 2) * scale;
-            var spacingTop = (parseInt(state.style[mxConstants.STYLE_SPACING_TOP] || 0) + baseSpacingTop) * scale + spacing;
-            var spacingRight = (parseInt(state.style[mxConstants.STYLE_SPACING_RIGHT] || 0) + baseSpacingRight) * scale + spacing;
-            var spacingBottom = (parseInt(state.style[mxConstants.STYLE_SPACING_BOTTOM] || 0) + baseSpacingBottom) * scale + spacing;
-            var spacingLeft = (parseInt(state.style[mxConstants.STYLE_SPACING_LEFT] || 0) + baseSpacingLeft) * scale + spacing;
+            let spacing = parseInt(state.style[mxConstants.STYLE_SPACING] || 2) * scale;
+            let spacingTop = (parseInt(state.style[mxConstants.STYLE_SPACING_TOP] || 0) + baseSpacingTop) * scale + spacing;
+            let spacingRight = (parseInt(state.style[mxConstants.STYLE_SPACING_RIGHT] || 0) + baseSpacingRight) * scale + spacing;
+            let spacingBottom = (parseInt(state.style[mxConstants.STYLE_SPACING_BOTTOM] || 0) + baseSpacingBottom) * scale + spacing;
+            let spacingLeft = (parseInt(state.style[mxConstants.STYLE_SPACING_LEFT] || 0) + baseSpacingLeft) * scale + spacing;
 
-            var hpos = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
-            var vpos = mxUtils.getValue(state.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
+            let hpos = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
+            let vpos = mxUtils.getValue(state.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
 
             bds = new mxRectangle(bds.x + spacingLeft, bds.y + spacingTop,
                 bds.width - ((hpos == mxConstants.ALIGN_CENTER && lw == null) ? (spacingLeft + spacingRight) : 0),
@@ -546,7 +546,7 @@ class mxCellEditor {
           this.textarea.style.whiteSpace = 'normal';
 
           // Forces automatic reflow if text is removed from an oversize label and normal word wrap
-          var tmp = Math.round(this.bounds.width / scale) + this.wordWrapPadding;
+          let tmp = Math.round(this.bounds.width / scale) + this.wordWrapPadding;
 
           if (this.textarea.style.position != 'relative') {
             this.textarea.style.width = tmp + 'px';
@@ -563,8 +563,8 @@ class mxCellEditor {
           this.textarea.style.width = '';
         }
 
-        var ow = this.textarea.scrollWidth;
-        var oh = this.textarea.scrollHeight;
+        let ow = this.textarea.scrollWidth;
+        let oh = this.textarea.scrollHeight;
 
         // TODO: Update CSS width and height if smaller than minResize or remove minResize
         //if (this.minResize != null)
@@ -615,13 +615,13 @@ class mxCellEditor {
    * of the SVG element is not absolute.
    */
   isLegacyEditor = () => {
-    var absoluteRoot = false;
+    let absoluteRoot = false;
 
     if (mxClient.IS_SVG) {
-      var root = this.graph.view.getDrawPane().ownerSVGElement;
+      let root = this.graph.view.getDrawPane().ownerSVGElement;
 
       if (root != null) {
-        var css = mxUtils.getCurrentStyle(root);
+        let css = mxUtils.getCurrentStyle(root);
 
         if (css != null) {
           absoluteRoot = css.position == 'absolute';
@@ -655,20 +655,20 @@ class mxCellEditor {
       this.graph.tooltipHandler.hideTooltip();
     }
 
-    var state = this.graph.getView().getState(cell);
+    let state = this.graph.getView().getState(cell);
 
     if (state != null) {
       // Configures the style of the in-place editor
-      var scale = this.graph.getView().scale;
-      var size = mxUtils.getValue(state.style, mxConstants.STYLE_FONTSIZE, mxConstants.DEFAULT_FONTSIZE);
-      var family = mxUtils.getValue(state.style, mxConstants.STYLE_FONTFAMILY, mxConstants.DEFAULT_FONTFAMILY);
-      var color = mxUtils.getValue(state.style, mxConstants.STYLE_FONTCOLOR, 'black');
-      var align = mxUtils.getValue(state.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_LEFT);
-      var bold = (mxUtils.getValue(state.style, mxConstants.STYLE_FONTSTYLE, 0) &
+      let scale = this.graph.getView().scale;
+      let size = mxUtils.getValue(state.style, mxConstants.STYLE_FONTSIZE, mxConstants.DEFAULT_FONTSIZE);
+      let family = mxUtils.getValue(state.style, mxConstants.STYLE_FONTFAMILY, mxConstants.DEFAULT_FONTFAMILY);
+      let color = mxUtils.getValue(state.style, mxConstants.STYLE_FONTCOLOR, 'black');
+      let align = mxUtils.getValue(state.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_LEFT);
+      let bold = (mxUtils.getValue(state.style, mxConstants.STYLE_FONTSTYLE, 0) &
           mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD;
-      var italic = (mxUtils.getValue(state.style, mxConstants.STYLE_FONTSTYLE, 0) &
+      let italic = (mxUtils.getValue(state.style, mxConstants.STYLE_FONTSTYLE, 0) &
           mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC;
-      var txtDecor = [];
+      let txtDecor = [];
 
       if ((mxUtils.getValue(state.style, mxConstants.STYLE_FONTSTYLE, 0) &
           mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE) {
@@ -692,7 +692,7 @@ class mxCellEditor {
       this.textarea.style.outline = 'none';
       this.textarea.style.color = color;
 
-      var dir = this.textDirection = mxUtils.getValue(state.style, mxConstants.STYLE_TEXT_DIRECTION, mxConstants.DEFAULT_TEXT_DIRECTION);
+      let dir = this.textDirection = mxUtils.getValue(state.style, mxConstants.STYLE_TEXT_DIRECTION, mxConstants.DEFAULT_TEXT_DIRECTION);
 
       if (dir == mxConstants.TEXT_DIRECTION_AUTO) {
         if (state != null && state.text != null && state.text.dialect != mxConstants.DIALECT_STRICTHTML &&
@@ -772,7 +772,7 @@ class mxCellEditor {
    * Clears the selection.
    */
   clearSelection = () => {
-    var selection = null;
+    let selection = null;
 
     if (window.getSelection) {
       selection = window.getSelection();
@@ -803,9 +803,9 @@ class mxCellEditor {
         this.textNode = null;
       }
 
-      var state = (!cancel) ? this.graph.view.getState(this.editingCell) : null;
+      let state = (!cancel) ? this.graph.view.getState(this.editingCell) : null;
 
-      var initial = this.initialValue;
+      let initial = this.initialValue;
       this.initialValue = null;
       this.editingCell = null;
       this.trigger = null;
@@ -824,7 +824,7 @@ class mxCellEditor {
 
       if (state != null && (this.textarea.innerHTML != initial || this.align != null)) {
         this.prepareTextarea();
-        var value = this.getCurrentValue(state);
+        let value = this.getCurrentValue(state);
 
         this.graph.getModel().beginUpdate();
         try {
@@ -876,7 +876,7 @@ class mxCellEditor {
    * Returns the minimum width and height for editing the given state.
    */
   getMinimumSize = (state) => {
-    var scale = this.graph.getView().scale;
+    let scale = this.graph.getView().scale;
 
     return new mxRectangle(0, 0, (state.text == null) ? 30 : state.text.size * scale + 20,
         (this.textarea.style.textAlign == 'left') ? 120 : 40);
@@ -888,27 +888,27 @@ class mxCellEditor {
    * Returns the <mxRectangle> that defines the bounds of the editor.
    */
   getEditorBounds = (state) => {
-    var isEdge = this.graph.getModel().isEdge(state.cell);
-    var scale = this.graph.getView().scale;
-    var minSize = this.getMinimumSize(state);
-    var minWidth = minSize.width;
-    var minHeight = minSize.height;
-    var result = null;
+    let isEdge = this.graph.getModel().isEdge(state.cell);
+    let scale = this.graph.getView().scale;
+    let minSize = this.getMinimumSize(state);
+    let minWidth = minSize.width;
+    let minHeight = minSize.height;
+    let result = null;
 
     if (!isEdge && state.view.graph.cellRenderer.legacySpacing && state.style[mxConstants.STYLE_OVERFLOW] == 'fill') {
       result = state.shape.getLabelBounds(mxRectangle.fromRectangle(state));
     } else {
-      var spacing = parseInt(state.style[mxConstants.STYLE_SPACING] || 0) * scale;
-      var spacingTop = (parseInt(state.style[mxConstants.STYLE_SPACING_TOP] || 0) + baseSpacingTop) * scale + spacing;
-      var spacingRight = (parseInt(state.style[mxConstants.STYLE_SPACING_RIGHT] || 0) + baseSpacingRight) * scale + spacing;
-      var spacingBottom = (parseInt(state.style[mxConstants.STYLE_SPACING_BOTTOM] || 0) + baseSpacingBottom) * scale + spacing;
-      var spacingLeft = (parseInt(state.style[mxConstants.STYLE_SPACING_LEFT] || 0) + baseSpacingLeft) * scale + spacing;
+      let spacing = parseInt(state.style[mxConstants.STYLE_SPACING] || 0) * scale;
+      let spacingTop = (parseInt(state.style[mxConstants.STYLE_SPACING_TOP] || 0) + baseSpacingTop) * scale + spacing;
+      let spacingRight = (parseInt(state.style[mxConstants.STYLE_SPACING_RIGHT] || 0) + baseSpacingRight) * scale + spacing;
+      let spacingBottom = (parseInt(state.style[mxConstants.STYLE_SPACING_BOTTOM] || 0) + baseSpacingBottom) * scale + spacing;
+      let spacingLeft = (parseInt(state.style[mxConstants.STYLE_SPACING_LEFT] || 0) + baseSpacingLeft) * scale + spacing;
 
       result = new mxRectangle(state.x, state.y,
           Math.max(minWidth, state.width - spacingLeft - spacingRight),
           Math.max(minHeight, state.height - spacingTop - spacingBottom));
-      var hpos = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
-      var vpos = mxUtils.getValue(state.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
+      let hpos = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
+      let vpos = mxUtils.getValue(state.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
 
       result = (state.shape != null && hpos == mxConstants.ALIGN_CENTER && vpos == mxConstants.ALIGN_MIDDLE) ? state.shape.getLabelBounds(result) : result;
 
@@ -947,7 +947,7 @@ class mxCellEditor {
 
       // Applies the horizontal and vertical label positions
       if (this.graph.getModel().isVertex(state.cell)) {
-        var horizontal = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
+        let horizontal = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
 
         if (horizontal == mxConstants.ALIGN_LEFT) {
           result.x -= state.width;
@@ -955,7 +955,7 @@ class mxCellEditor {
           result.x += state.width;
         }
 
-        var vertical = mxUtils.getValue(state.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
+        let vertical = mxUtils.getValue(state.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
 
         if (vertical == mxConstants.ALIGN_TOP) {
           result.y -= state.height;
diff --git a/src/js/view/mxCellOverlay.js b/src/js/view/mxCellOverlay.js
index e2fdaab52..c726a1526 100644
--- a/src/js/view/mxCellOverlay.js
+++ b/src/js/view/mxCellOverlay.js
@@ -84,11 +84,11 @@ class mxCellOverlay extends mxEventSource {
    * if the overlay is clicked.
    *
    * (code)
-   * var overlay = new mxCellOverlay(img, html);
+   * let overlay = new mxCellOverlay(img, html);
    * graph.addCellOverlay(vertex, overlay);
    * overlay.addListener(mxEvent.CLICK, (sender, evt)=>
    * {
-   *   var cell = evt.getProperty('cell');
+   *   let cell = evt.getProperty('cell');
    *   graph.setSelectionCell(cell);
    * });
    * (end)
@@ -142,11 +142,11 @@ class mxCellOverlay extends mxEventSource {
    * (code)
    * overlay.getBounds = (state)=>
    * {
-   *   var bounds = getBounds.apply(this, arguments);
+   *   let bounds = getBounds.apply(this, arguments);
    *
    *   if (state.view.graph.getModel().isEdge(state.cell))
    *   {
-   *     var pt = state.view.getPoint(state, {x: 0, y: 0, relative: true});
+   *     let pt = state.view.getPoint(state, {x: 0, y: 0, relative: true});
    *
    *     bounds.x = pt.x - bounds.width / 2;
    *     bounds.y = pt.y - bounds.height / 2;
@@ -162,20 +162,20 @@ class mxCellOverlay extends mxEventSource {
    * associated cell.
    */
   getBounds = (state) => {
-    var isEdge = state.view.graph.getModel().isEdge(state.cell);
-    var s = state.view.scale;
-    var pt = null;
+    let isEdge = state.view.graph.getModel().isEdge(state.cell);
+    let s = state.view.scale;
+    let pt = null;
 
-    var w = this.image.width;
-    var h = this.image.height;
+    let w = this.image.width;
+    let h = this.image.height;
 
     if (isEdge) {
-      var pts = state.absolutePoints;
+      let pts = state.absolutePoints;
 
       if (pts.length % 2 === 1) {
         pt = pts[Math.floor(pts.length / 2)];
       } else {
-        var idx = pts.length / 2;
+        let idx = pts.length / 2;
         var p0 = pts[idx - 1];
         var p1 = pts[idx];
         pt = new mxPoint(p0.x + (p1.x - p0.x) / 2,
diff --git a/src/js/view/mxCellRenderer.js b/src/js/view/mxCellRenderer.js
index 05fb1c067..e1fe11b51 100644
--- a/src/js/view/mxCellRenderer.js
+++ b/src/js/view/mxCellRenderer.js
@@ -164,17 +164,17 @@ class mxCellRenderer {
    * state - <mxCellState> for which the shape should be created.
    */
   createShape = (state) => {
-    var shape = null;
+    let shape = null;
 
     if (state.style != null) {
       // Checks if there is a stencil for the name and creates
       // a shape instance for the stencil if one exists
-      var stencil = mxStencilRegistry.getStencil(state.style[mxConstants.STYLE_SHAPE]);
+      let stencil = mxStencilRegistry.getStencil(state.style[mxConstants.STYLE_SHAPE]);
 
       if (stencil != null) {
         shape = new mxShape(stencil);
       } else {
-        var ctor = this.getShapeConstructor(state);
+        let ctor = this.getShapeConstructor(state);
         shape = new ctor();
       }
     }
@@ -210,7 +210,7 @@ class mxCellRenderer {
    * Returns the constructor to be used for creating the shape.
    */
   getShapeConstructor = (state) => {
-    var ctor = this.getShape(state.style[mxConstants.STYLE_SHAPE]);
+    let ctor = this.getShape(state.style[mxConstants.STYLE_SHAPE]);
 
     if (ctor == null) {
       ctor = (state.view.graph.getModel().isEdge(state.cell)) ?
@@ -268,11 +268,11 @@ class mxCellRenderer {
   checkPlaceholderStyles = (state) => {
     // LATER: Check if the color has actually changed
     if (state.style != null) {
-      var values = ['inherit', 'swimlane', 'indicated'];
-      var styles = [mxConstants.STYLE_FILLCOLOR, mxConstants.STYLE_STROKECOLOR,
+      let values = ['inherit', 'swimlane', 'indicated'];
+      let styles = [mxConstants.STYLE_FILLCOLOR, mxConstants.STYLE_STROKECOLOR,
         mxConstants.STYLE_GRADIENTCOLOR, mxConstants.STYLE_FONTCOLOR];
 
-      for (var i = 0; i < styles.length; i++) {
+      for (let i = 0; i < styles.length; i++) {
         if (mxUtils.indexOf(values, state.style[styles[i]]) >= 0) {
           return true;
         }
@@ -289,13 +289,13 @@ class mxCellRenderer {
    * the respective color on the shape.
    */
   resolveColor = (state, field, key) => {
-    var shape = (key == mxConstants.STYLE_FONTCOLOR) ?
+    let shape = (key == mxConstants.STYLE_FONTCOLOR) ?
         state.text : state.shape;
 
     if (shape != null) {
-      var graph = state.view.graph;
-      var value = shape[field];
-      var referenced = null;
+      let graph = state.view.graph;
+      let value = shape[field];
+      let referenced = null;
 
       if (value == 'inherit') {
         referenced = graph.model.getParent(state.cell);
@@ -325,11 +325,11 @@ class mxCellRenderer {
       }
 
       if (referenced != null) {
-        var rstate = graph.getView().getState(referenced);
+        let rstate = graph.getView().getState(referenced);
         shape[field] = null;
 
         if (rstate != null) {
-          var rshape = (key == mxConstants.STYLE_FONTCOLOR) ? rstate.text : rstate.shape;
+          let rshape = (key == mxConstants.STYLE_FONTCOLOR) ? rstate.text : rstate.shape;
 
           if (rshape != null && field != 'indicatorColor') {
             shape[field] = rshape[field];
@@ -364,12 +364,12 @@ class mxCellRenderer {
    * state - <mxCellState> for which the label should be created.
    */
   createLabel = (state, value) => {
-    var graph = state.view.graph;
-    var isEdge = graph.getModel().isEdge(state.cell);
+    let graph = state.view.graph;
+    let isEdge = graph.getModel().isEdge(state.cell);
 
     if (state.style[mxConstants.STYLE_FONTSIZE] > 0 || state.style[mxConstants.STYLE_FONTSIZE] == null) {
       // Avoids using DOM node for empty labels
-      var isForceHtml = (graph.isHtmlLabel(state.cell) || (value != null && mxUtils.isNode(value)));
+      let isForceHtml = (graph.isHtmlLabel(state.cell) || (value != null && mxUtils.isNode(value)));
 
       state.text = new this.defaultTextShape(value, new mxRectangle(),
           (state.style[mxConstants.STYLE_ALIGN] || mxConstants.ALIGN_CENTER),
@@ -402,18 +402,18 @@ class mxCellRenderer {
       // the event via the initial DOM node but the event source is the node
       // under the mouse, so we need to check if this is the case and force
       // getCellAt for the subsequent mouseMoves and the final mouseUp.
-      var forceGetCell = false;
+      let forceGetCell = false;
 
-      var getState = (evt) => {
-        var result = state;
+      let getState = (evt) => {
+        let result = state;
 
         if (mxClient.IS_TOUCH || forceGetCell) {
-          var x = mxEvent.getClientX(evt);
-          var y = mxEvent.getClientY(evt);
+          let x = mxEvent.getClientX(evt);
+          let y = mxEvent.getClientY(evt);
 
           // Dispatches the drop event to the graph which
           // consumes and executes the source function
-          var pt = mxUtils.convertPoint(graph.container, x, y);
+          let pt = mxUtils.convertPoint(graph.container, x, y);
           result = graph.view.getState(graph.getCellAt(pt.x, pt.y));
         }
 
@@ -483,18 +483,18 @@ class mxCellRenderer {
    * state - <mxCellState> for which the overlay should be created.
    */
   createCellOverlays = (state) => {
-    var graph = state.view.graph;
-    var overlays = graph.getCellOverlays(state.cell);
-    var dict = null;
+    let graph = state.view.graph;
+    let overlays = graph.getCellOverlays(state.cell);
+    let dict = null;
 
     if (overlays != null) {
       dict = new mxDictionary();
 
-      for (var i = 0; i < overlays.length; i++) {
-        var shape = (state.overlays != null) ? state.overlays.remove(overlays[i]) : null;
+      for (let i = 0; i < overlays.length; i++) {
+        let shape = (state.overlays != null) ? state.overlays.remove(overlays[i]) : null;
 
         if (shape == null) {
-          var tmp = new mxImageShape(new mxRectangle(), overlays[i].image.src);
+          let tmp = new mxImageShape(new mxRectangle(), overlays[i].image.src);
           tmp.dialect = state.view.graph.dialect;
           tmp.preserveImageAspect = false;
           tmp.overlay = overlays[i];
@@ -543,7 +543,7 @@ class mxCellRenderer {
    * <mxShape> that represents the overlay.
    */
   installCellOverlayListeners = (state, overlay, shape) => {
-    var graph = state.view.graph;
+    let graph = state.view.graph;
 
     mxEvent.addListener(shape.node, 'click', function (evt) {
       if (graph.isEditing()) {
@@ -581,12 +581,12 @@ class mxCellRenderer {
    * state - <mxCellState> for which the control should be created.
    */
   createControl = (state) => {
-    var graph = state.view.graph;
-    var image = graph.getFoldingImage(state);
+    let graph = state.view.graph;
+    let image = graph.getFoldingImage(state);
 
     if (graph.foldingEnabled && image != null) {
       if (state.control == null) {
-        var b = new mxRectangle(0, 0, image.width, image.height);
+        let b = new mxRectangle(0, 0, image.width, image.height);
         state.control = new mxImageShape(b, image.src);
         state.control.preserveImageAspect = false;
         state.control.dialect = graph.dialect;
@@ -609,11 +609,11 @@ class mxCellRenderer {
    * state - <mxCellState> whose control click handler should be returned.
    */
   createControlClickHandler = (state) => {
-    var graph = state.view.graph;
+    let graph = state.view.graph;
 
     return mxUtils.bind(this, function (evt) {
       if (this.forceControlClickHandler || graph.isEnabled()) {
-        var collapse = !graph.isCellCollapsed(state.cell);
+        let collapse = !graph.isCellCollapsed(state.cell);
         graph.foldCells(collapse, false, [state.cell], null, evt);
         mxEvent.consume(evt);
       }
@@ -633,12 +633,12 @@ class mxCellRenderer {
    * clickHandler - Optional function to implement clicks on the control.
    */
   initControl = (state, control, handleEvents, clickHandler) => {
-    var graph = state.view.graph;
+    let graph = state.view.graph;
 
     // In the special case where the label is in HTML and the display is SVG the image
     // should go into the graph container directly in order to be clickable. Otherwise
     // it is obscured by the HTML label that overlaps the cell.
-    var isForceHtml = graph.isHtmlLabel(state.cell) && mxClient.NO_FO &&
+    let isForceHtml = graph.isHtmlLabel(state.cell) && mxClient.NO_FO &&
         graph.dialect == mxConstants.DIALECT_SVG;
 
     if (isForceHtml) {
@@ -649,7 +649,7 @@ class mxCellRenderer {
       control.init(state.view.getOverlayPane());
     }
 
-    var node = control.innerNode || control.node;
+    let node = control.innerNode || control.node;
 
     // Workaround for missing click event on iOS is to check tolerance below
     if (clickHandler != null && !mxClient.IS_IOS) {
@@ -661,7 +661,7 @@ class mxCellRenderer {
     }
 
     if (handleEvents) {
-      var first = null;
+      let first = null;
 
       mxEvent.addGestureListeners(node,
           function (evt) {
@@ -681,7 +681,7 @@ class mxCellRenderer {
       if (clickHandler != null && mxClient.IS_IOS) {
         node.addEventListener('touchend', (evt) => {
           if (first != null) {
-            var tol = graph.tolerance;
+            let tol = graph.tolerance;
 
             if (Math.abs(first.x - mxEvent.getClientX(evt)) < tol &&
                 Math.abs(first.y - mxEvent.getClientY(evt)) < tol) {
@@ -736,21 +736,21 @@ class mxCellRenderer {
    * state - <mxCellState> for which the event listeners should be isntalled.
    */
   installListeners = (state) => {
-    var graph = state.view.graph;
+    let graph = state.view.graph;
 
     // Workaround for touch devices routing all events for a mouse
     // gesture (down, move, up) via the initial DOM node. Same for
     // HTML images in all IE versions (VML images are working).
-    var getState = (evt) => {
-      var result = state;
+    let getState = (evt) => {
+      let result = state;
 
       if ((graph.dialect != mxConstants.DIALECT_SVG && mxEvent.getSource(evt).nodeName == 'IMG') || mxClient.IS_TOUCH) {
-        var x = mxEvent.getClientX(evt);
-        var y = mxEvent.getClientY(evt);
+        let x = mxEvent.getClientX(evt);
+        let y = mxEvent.getClientY(evt);
 
         // Dispatches the drop event to the graph which
         // consumes and executes the source function
-        var pt = mxUtils.convertPoint(graph.container, x, y);
+        let pt = mxUtils.convertPoint(graph.container, x, y);
         result = graph.view.getState(graph.getCellAt(pt.x, pt.y));
       }
 
@@ -798,13 +798,13 @@ class mxCellRenderer {
    * state - <mxCellState> whose label should be redrawn.
    */
   redrawLabel = (state, forced) => {
-    var graph = state.view.graph;
-    var value = this.getLabelValue(state);
-    var wrapping = graph.isWrapping(state.cell);
-    var clipping = graph.isLabelClipped(state.cell);
-    var isForceHtml = (state.view.graph.isHtmlLabel(state.cell) || (value != null && mxUtils.isNode(value)));
-    var dialect = (isForceHtml) ? mxConstants.DIALECT_STRICTHTML : state.view.graph.dialect;
-    var overflow = state.style[mxConstants.STYLE_OVERFLOW] || 'visible';
+    let graph = state.view.graph;
+    let value = this.getLabelValue(state);
+    let wrapping = graph.isWrapping(state.cell);
+    let clipping = graph.isLabelClipped(state.cell);
+    let isForceHtml = (state.view.graph.isHtmlLabel(state.cell) || (value != null && mxUtils.isNode(value)));
+    let dialect = (isForceHtml) ? mxConstants.DIALECT_STRICTHTML : state.view.graph.dialect;
+    let overflow = state.style[mxConstants.STYLE_OVERFLOW] || 'visible';
 
     if (state.text != null && (state.text.wrap != wrapping || state.text.clipped != clipping ||
         state.text.overflow != overflow || state.text.dialect != dialect)) {
@@ -836,8 +836,8 @@ class mxCellRenderer {
         state.text.valign = graph.getVerticalAlign(state);
       }
 
-      var bounds = this.getLabelBounds(state);
-      var nextScale = this.getTextScale(state);
+      let bounds = this.getLabelBounds(state);
+      let nextScale = this.getTextScale(state);
       this.resolveColor(state, 'color', mxConstants.STYLE_FONTCOLOR);
 
       if (forced || state.text.value != value || state.text.isWrapping != wrapping ||
@@ -853,7 +853,7 @@ class mxCellRenderer {
         state.text.overflow = overflow;
 
         // Preserves visible state
-        var vis = state.text.node.style.visibility;
+        let vis = state.text.node.style.visibility;
         this.redrawLabelShape(state.text);
         state.text.node.style.visibility = vis;
       }
@@ -872,7 +872,7 @@ class mxCellRenderer {
    */
   isTextShapeInvalid = (state, shape) => {
     function check(property, stylename, defaultValue) {
-      var result = false;
+      let result = false;
 
       // Workaround for spacing added to directional spacing
       if (stylename == 'spacingTop' || stylename == 'spacingRight' ||
@@ -940,17 +940,17 @@ class mxCellRenderer {
    * state - <mxCellState> whose label bounds should be returned.
    */
   getLabelBounds = (state) => {
-    var graph = state.view.graph;
-    var scale = state.view.scale;
-    var isEdge = graph.getModel().isEdge(state.cell);
-    var bounds = new mxRectangle(state.absoluteOffset.x, state.absoluteOffset.y);
+    let graph = state.view.graph;
+    let scale = state.view.scale;
+    let isEdge = graph.getModel().isEdge(state.cell);
+    let bounds = new mxRectangle(state.absoluteOffset.x, state.absoluteOffset.y);
 
     if (isEdge) {
-      var spacing = state.text.getSpacing();
+      let spacing = state.text.getSpacing();
       bounds.x += spacing.x * scale;
       bounds.y += spacing.y * scale;
 
-      var geo = graph.getCellGeometry(state.cell);
+      let geo = graph.getCellGeometry(state.cell);
 
       if (geo != null) {
         bounds.width = Math.max(0, geo.width * scale);
@@ -959,7 +959,7 @@ class mxCellRenderer {
     } else {
       // Inverts label position
       if (state.text.isPaintBoundsInverted()) {
-        var tmp = bounds.x;
+        let tmp = bounds.x;
         bounds.x = bounds.y;
         bounds.y = tmp;
       }
@@ -974,18 +974,18 @@ class mxCellRenderer {
 
     if (state.text.isPaintBoundsInverted()) {
       // Rotates around center of state
-      var t = (state.width - state.height) / 2;
+      let t = (state.width - state.height) / 2;
       bounds.x += t;
       bounds.y -= t;
-      var tmp = bounds.width;
+      let tmp = bounds.width;
       bounds.width = bounds.height;
       bounds.height = tmp;
     }
 
     // Shape can modify its label bounds
     if (state.shape != null) {
-      var hpos = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
-      var vpos = mxUtils.getValue(state.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
+      let hpos = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
+      let vpos = mxUtils.getValue(state.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
 
       if (hpos == mxConstants.ALIGN_CENTER && vpos == mxConstants.ALIGN_MIDDLE) {
         bounds = state.shape.getLabelBounds(bounds);
@@ -993,7 +993,7 @@ class mxCellRenderer {
     }
 
     // Label width style overrides actual label width
-    var lw = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_WIDTH, null);
+    let lw = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_WIDTH, null);
 
     if (lw != null) {
       bounds.width = parseFloat(lw) * scale;
@@ -1022,29 +1022,29 @@ class mxCellRenderer {
     bounds.x -= state.text.margin.x * bounds.width;
 
     if (!this.legacySpacing || (state.style[mxConstants.STYLE_OVERFLOW] != 'fill' && state.style[mxConstants.STYLE_OVERFLOW] != 'width')) {
-      var s = state.view.scale;
-      var spacing = state.text.getSpacing();
+      let s = state.view.scale;
+      let spacing = state.text.getSpacing();
       bounds.x += spacing.x * s;
       bounds.y += spacing.y * s;
 
-      var hpos = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
-      var vpos = mxUtils.getValue(state.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
-      var lw = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_WIDTH, null);
+      let hpos = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
+      let vpos = mxUtils.getValue(state.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
+      let lw = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_WIDTH, null);
 
       bounds.width = Math.max(0, bounds.width - ((hpos == mxConstants.ALIGN_CENTER && lw == null) ? (state.text.spacingLeft * s + state.text.spacingRight * s) : 0));
       bounds.height = Math.max(0, bounds.height - ((vpos == mxConstants.ALIGN_MIDDLE) ? (state.text.spacingTop * s + state.text.spacingBottom * s) : 0));
     }
 
-    var theta = state.text.getTextRotation();
+    let theta = state.text.getTextRotation();
 
     // Only needed if rotated around another center
     if (theta != 0 && state != null && state.view.graph.model.isVertex(state.cell)) {
-      var cx = state.getCenterX();
-      var cy = state.getCenterY();
+      let cx = state.getCenterX();
+      let cy = state.getCenterY();
 
       if (bounds.x != cx || bounds.y != cy) {
-        var rad = theta * (Math.PI / 180);
-        var pt = mxUtils.getRotatedPoint(new mxPoint(bounds.x, bounds.y),
+        let rad = theta * (Math.PI / 180);
+        let pt = mxUtils.getRotatedPoint(new mxPoint(bounds.x, bounds.y),
             Math.cos(rad), Math.sin(rad), new mxPoint(cx, cy));
 
         bounds.x = pt.x;
@@ -1066,20 +1066,20 @@ class mxCellRenderer {
     this.createCellOverlays(state);
 
     if (state.overlays != null) {
-      var rot = mxUtils.mod(mxUtils.getValue(state.style, mxConstants.STYLE_ROTATION, 0), 90);
-      var rad = mxUtils.toRadians(rot);
-      var cos = Math.cos(rad);
-      var sin = Math.sin(rad);
+      let rot = mxUtils.mod(mxUtils.getValue(state.style, mxConstants.STYLE_ROTATION, 0), 90);
+      let rad = mxUtils.toRadians(rot);
+      let cos = Math.cos(rad);
+      let sin = Math.sin(rad);
 
       state.overlays.visit((id, shape) => {
-        var bounds = shape.overlay.getBounds(state);
+        let bounds = shape.overlay.getBounds(state);
 
         if (!state.view.graph.getModel().isEdge(state.cell)) {
           if (state.shape != null && rot != 0) {
-            var cx = bounds.getCenterX();
-            var cy = bounds.getCenterY();
+            let cx = bounds.getCenterX();
+            let cy = bounds.getCenterY();
 
-            var point = mxUtils.getRotatedPoint(new mxPoint(cx, cy), cos, sin,
+            let point = mxUtils.getRotatedPoint(new mxPoint(cx, cy), cos, sin,
                 new mxPoint(state.getCenterX(), state.getCenterY()));
 
             cx = point.x;
@@ -1109,14 +1109,14 @@ class mxCellRenderer {
    * state - <mxCellState> whose control should be redrawn.
    */
   redrawControl = (state, forced) => {
-    var image = state.view.graph.getFoldingImage(state);
+    let image = state.view.graph.getFoldingImage(state);
 
     if (state.control != null && image != null) {
-      var bounds = this.getControlBounds(state, image.width, image.height);
-      var r = (this.legacyControlPosition) ?
+      let bounds = this.getControlBounds(state, image.width, image.height);
+      let r = (this.legacyControlPosition) ?
           mxUtils.getValue(state.style, mxConstants.STYLE_ROTATION, 0) :
           state.shape.getTextRotation();
-      var s = state.view.scale;
+      let s = state.view.scale;
 
       if (forced || state.control.scale != s || !state.control.bounds.equals(bounds) ||
           state.control.rotation != r) {
@@ -1137,9 +1137,9 @@ class mxCellRenderer {
    */
   getControlBounds = (state, w, h) => {
     if (state.control != null) {
-      var s = state.view.scale;
-      var cx = state.getCenterX();
-      var cy = state.getCenterY();
+      let s = state.view.scale;
+      let cx = state.getCenterX();
+      let cy = state.getCenterY();
 
       if (!state.view.graph.getModel().isEdge(state.cell)) {
         cx = state.x + w * s;
@@ -1147,24 +1147,24 @@ class mxCellRenderer {
 
         if (state.shape != null) {
           // TODO: Factor out common code
-          var rot = state.shape.getShapeRotation();
+          let rot = state.shape.getShapeRotation();
 
           if (this.legacyControlPosition) {
             rot = mxUtils.getValue(state.style, mxConstants.STYLE_ROTATION, 0);
           } else {
             if (state.shape.isPaintBoundsInverted()) {
-              var t = (state.width - state.height) / 2;
+              let t = (state.width - state.height) / 2;
               cx += t;
               cy -= t;
             }
           }
 
           if (rot != 0) {
-            var rad = mxUtils.toRadians(rot);
-            var cos = Math.cos(rad);
-            var sin = Math.sin(rad);
+            let rad = mxUtils.toRadians(rot);
+            let cos = Math.cos(rad);
+            let sin = Math.sin(rad);
 
-            var point = mxUtils.getRotatedPoint(new mxPoint(cx, cy), cos, sin,
+            let point = mxUtils.getRotatedPoint(new mxPoint(cx, cy), cos, sin,
                 new mxPoint(state.getCenterX(), state.getCenterY()));
             cx = point.x;
             cy = point.y;
@@ -1193,13 +1193,13 @@ class mxCellRenderer {
    * will not go into the <drawPane> (eg. HTML labels without foreignObjects).
    */
   insertStateAfter = (state, node, htmlNode) => {
-    var shapes = this.getShapesForState(state);
+    let shapes = this.getShapesForState(state);
 
-    for (var i = 0; i < shapes.length; i++) {
+    for (let i = 0; i < shapes.length; i++) {
       if (shapes[i] != null && shapes[i].node != null) {
-        var html = shapes[i].node.parentNode != state.view.getDrawPane() &&
+        let html = shapes[i].node.parentNode != state.view.getDrawPane() &&
             shapes[i].node.parentNode != state.view.getOverlayPane();
-        var temp = (html) ? htmlNode : node;
+        let temp = (html) ? htmlNode : node;
 
         if (temp != null && temp.nextSibling != shapes[i].node) {
           if (temp.nextSibling == null) {
@@ -1210,7 +1210,7 @@ class mxCellRenderer {
         } else if (temp == null) {
           // Special case: First HTML node should be first sibling after canvas
           if (shapes[i].node.parentNode == state.view.graph.container) {
-            var canvas = state.view.canvas;
+            let canvas = state.view.canvas;
 
             while (canvas != null && canvas.parentNode != state.view.graph.container) {
               canvas = canvas.parentNode;
@@ -1273,7 +1273,7 @@ class mxCellRenderer {
    * will not be called on the shape.
    */
   redraw = (state, force, rendering) => {
-    var shapeChanged = this.redrawShape(state, force, rendering);
+    let shapeChanged = this.redrawShape(state, force, rendering);
 
     if (state.shape != null && (rendering == null || rendering)) {
       this.redrawLabel(state, shapeChanged);
@@ -1292,8 +1292,8 @@ class mxCellRenderer {
    * state - <mxCellState> whose label should be redrawn.
    */
   redrawShape = (state, force, rendering) => {
-    var model = state.view.graph.model;
-    var shapeChanged = false;
+    let model = state.view.graph.model;
+    let shapeChanged = false;
 
     // Forces creation of new shape if shape style has changed
     if (state.shape != null && state.shape.style != null && state.style != null &&
diff --git a/src/js/view/mxCellState.js b/src/js/view/mxCellState.js
index 3e21ae33c..a8c759f8a 100644
--- a/src/js/view/mxCellState.js
+++ b/src/js/view/mxCellState.js
@@ -145,7 +145,7 @@ class mxCellState extends mxRectangle {
    * of the <text> field as shown below.
    *
    * (code)
-   * var bbox = (state.text != null) ? state.text.boundingBox : null;
+   * let bbox = (state.text != null) ? state.text.boundingBox : null;
    * (end)
    *
    * Constructor: mxCellState
@@ -189,7 +189,7 @@ class mxCellState extends mxRectangle {
     bounds = (bounds != null) ? bounds : new mxRectangle(this.x, this.y, this.width, this.height);
 
     if (this.shape != null && this.shape.stencil != null && this.shape.stencil.aspect === 'fixed') {
-      var aspect = this.shape.stencil.computeAspect(this.style, bounds.x, bounds.y, bounds.width, bounds.height);
+      let aspect = this.shape.stencil.computeAspect(this.style, bounds.x, bounds.y, bounds.width, bounds.height);
 
       bounds.x = aspect.x;
       bounds.y = aspect.y;
@@ -265,7 +265,7 @@ class mxCellState extends mxRectangle {
    * returned.
    */
   getVisibleTerminal = (source) => {
-    var tmp = this.getVisibleTerminalState(source);
+    let tmp = this.getVisibleTerminalState(source);
 
     return (tmp != null) ? tmp.cell : null;
   };
@@ -328,8 +328,8 @@ class mxCellState extends mxRectangle {
    * Updates the cellBounds and paintBounds.
    */
   updateCachedBounds = () => {
-    var tr = this.view.translate;
-    var s = this.view.scale;
+    let tr = this.view.translate;
+    let s = this.view.scale;
     this.cellBounds = new mxRectangle(this.x / s - tr.x, this.y / s - tr.y, this.width / s, this.height / s);
     this.paintBounds = mxRectangle.fromRectangle(this.cellBounds);
 
@@ -368,13 +368,13 @@ class mxCellState extends mxRectangle {
    * Returns a clone of this <mxPoint>.
    */
   clone = () => {
-    var clone = new mxCellState(this.view, this.cell, this.style);
+    let clone = new mxCellState(this.view, this.cell, this.style);
 
     // Clones the absolute points
     if (this.absolutePoints != null) {
       clone.absolutePoints = [];
 
-      for (var i = 0; i < this.absolutePoints.length; i++) {
+      for (let i = 0; i < this.absolutePoints.length; i++) {
         clone.absolutePoints[i] = this.absolutePoints[i].clone();
       }
     }
diff --git a/src/js/view/mxCellStatePreview.js b/src/js/view/mxCellStatePreview.js
index 0f3fc19ff..c75126600 100644
--- a/src/js/view/mxCellStatePreview.js
+++ b/src/js/view/mxCellStatePreview.js
@@ -65,7 +65,7 @@ class mxCellStatePreview {
     add = (add != null) ? add : true;
     includeEdges = (includeEdges != null) ? includeEdges : true;
 
-    var delta = this.deltas.get(state.cell);
+    let delta = this.deltas.get(state.cell);
 
     if (delta == null) {
       // Note: Deltas stores the point and the state since the key is a string.
@@ -105,11 +105,11 @@ class mxCellStatePreview {
    */
   translateState = (state, dx, dy) => {
     if (state != null) {
-      var model = this.graph.getModel();
+      let model = this.graph.getModel();
 
       if (model.isVertex(state.cell)) {
         state.view.updateCellState(state);
-        var geo = model.getGeometry(state.cell);
+        let geo = model.getGeometry(state.cell);
 
         // Moves selection cells and non-relative vertices in
         // the first phase so that edge terminal points will
@@ -120,9 +120,9 @@ class mxCellStatePreview {
         }
       }
 
-      var childCount = model.getChildCount(state.cell);
+      let childCount = model.getChildCount(state.cell);
 
-      for (var i = 0; i < childCount; i++) {
+      for (let i = 0; i < childCount; i++) {
         this.translateState(state.view.getState(model.getChildAt(state.cell, i)), dx, dy);
       }
     }
@@ -133,7 +133,7 @@ class mxCellStatePreview {
    */
   revalidateState = (state, dx, dy, visitor) => {
     if (state != null) {
-      var model = this.graph.getModel();
+      let model = this.graph.getModel();
 
       // Updates the edge terminal points and restores the
       // (relative) positions of any (relative) children
@@ -141,8 +141,8 @@ class mxCellStatePreview {
         state.view.updateCellState(state);
       }
 
-      var geo = this.graph.getCellGeometry(state.cell);
-      var pState = state.view.getState(model.getParent(state.cell));
+      let geo = this.graph.getCellGeometry(state.cell);
+      let pState = state.view.getState(model.getParent(state.cell));
 
       // Moves selection vertices which are relative
       if ((dx != 0 || dy != 0) && geo != null && geo.relative &&
@@ -159,9 +159,9 @@ class mxCellStatePreview {
         visitor(state);
       }
 
-      var childCount = model.getChildCount(state.cell);
+      let childCount = model.getChildCount(state.cell);
 
-      for (var i = 0; i < childCount; i++) {
+      for (let i = 0; i < childCount; i++) {
         this.revalidateState(this.graph.view.getState(model.getChildAt(state.cell, i)), dx, dy, visitor);
       }
     }
@@ -171,11 +171,11 @@ class mxCellStatePreview {
    * Function: addEdges
    */
   addEdges = (state) => {
-    var model = this.graph.getModel();
-    var edgeCount = model.getEdgeCount(state.cell);
+    let model = this.graph.getModel();
+    let edgeCount = model.getEdgeCount(state.cell);
 
-    for (var i = 0; i < edgeCount; i++) {
-      var s = state.view.getState(model.getEdgeAt(state.cell, i));
+    for (let i = 0; i < edgeCount; i++) {
+      let s = state.view.getState(model.getEdgeAt(state.cell, i));
 
       if (s != null) {
         this.moveState(s, 0, 0);
diff --git a/src/js/view/mxEdgeStyle.js b/src/js/view/mxEdgeStyle.js
index 0a5ff5c6e..a39fcc485 100644
--- a/src/js/view/mxEdgeStyle.js
+++ b/src/js/view/mxEdgeStyle.js
@@ -9,7 +9,7 @@ import mxPoint from "../util/mxPoint";
 import mxCellState from "./mxCellState";
 import mxConstants from "../util/mxConstants";
 
-var mxEdgeStyle = {
+let mxEdgeStyle = {
   /**
    * Class: mxEdgeStyle
    *
@@ -19,7 +19,7 @@ var mxEdgeStyle = {
    * Example:
    *
    * (code)
-   * var style = stylesheet.getDefaultEdgeStyle();
+   * let style = stylesheet.getDefaultEdgeStyle();
    * style[mxConstants.STYLE_EDGE] = mxEdgeStyle.ElbowConnector;
    * (end)
    *
@@ -35,7 +35,7 @@ var mxEdgeStyle = {
    * {
    *   if (source != null && target != null)
    *   {
-   *     var pt = new mxPoint(target.getCenterX(), source.getCenterY());
+   *     let pt = new mxPoint(target.getCenterX(), source.getCenterY());
    *
    *     if (mxUtils.contains(source, pt.x, pt.y))
    *     {
@@ -72,7 +72,7 @@ var mxEdgeStyle = {
    * Or it can be used for all edges in the graph as follows:
    *
    * (code)
-   * var style = graph.getStylesheet().getDefaultEdgeStyle();
+   * let style = graph.getStylesheet().getDefaultEdgeStyle();
    * style[mxConstants.STYLE_EDGE] = mxEdgeStyle.MyStyle;
    * (end)
    *
@@ -102,20 +102,20 @@ var mxEdgeStyle = {
    * edge.
    */
   EntityRelation: (state, source, target, points, result) => {
-    var view = state.view;
-    var graph = view.graph;
-    var segment = mxUtils.getValue(state.style,
+    let view = state.view;
+    let graph = view.graph;
+    let segment = mxUtils.getValue(state.style,
         mxConstants.STYLE_SEGMENT,
         mxConstants.ENTITY_SEGMENT) * view.scale;
 
-    var pts = state.absolutePoints;
+    let pts = state.absolutePoints;
     var p0 = pts[0];
-    var pe = pts[pts.length - 1];
+    let pe = pts[pts.length - 1];
 
-    var isSourceLeft = false;
+    let isSourceLeft = false;
 
     if (source != null) {
-      var sourceGeometry = graph.getCellGeometry(source.cell);
+      let sourceGeometry = graph.getCellGeometry(source.cell);
 
       if (sourceGeometry.relative) {
         isSourceLeft = sourceGeometry.x <= 0.5;
@@ -129,7 +129,7 @@ var mxEdgeStyle = {
       source.x = p0.x;
       source.y = p0.y;
     } else if (source != null) {
-      var constraint = mxUtils.getPortConstraints(source, state, true, mxConstants.DIRECTION_MASK_NONE);
+      let constraint = mxUtils.getPortConstraints(source, state, true, mxConstants.DIRECTION_MASK_NONE);
 
       if (constraint !== mxConstants.DIRECTION_MASK_NONE &&
           constraint !== mxConstants.DIRECTION_MASK_WEST + mxConstants.DIRECTION_MASK_EAST) {
@@ -139,10 +139,10 @@ var mxEdgeStyle = {
       return;
     }
 
-    var isTargetLeft = true;
+    let isTargetLeft = true;
 
     if (target != null) {
-      var targetGeometry = graph.getCellGeometry(target.cell);
+      let targetGeometry = graph.getCellGeometry(target.cell);
 
       if (targetGeometry.relative) {
         isTargetLeft = targetGeometry.x <= 0.5;
@@ -156,7 +156,7 @@ var mxEdgeStyle = {
       target.x = pe.x;
       target.y = pe.y;
     } else if (target != null) {
-      var constraint = mxUtils.getPortConstraints(target, state, false, mxConstants.DIRECTION_MASK_NONE);
+      let constraint = mxUtils.getPortConstraints(target, state, false, mxConstants.DIRECTION_MASK_NONE);
 
       if (constraint != mxConstants.DIRECTION_MASK_NONE && constraint != mxConstants.DIRECTION_MASK_WEST +
           mxConstants.DIRECTION_MASK_EAST) {
@@ -168,27 +168,27 @@ var mxEdgeStyle = {
       var x0 = (isSourceLeft) ? source.x : source.x + source.width;
       var y0 = view.getRoutingCenterY(source);
 
-      var xe = (isTargetLeft) ? target.x : target.x + target.width;
-      var ye = view.getRoutingCenterY(target);
+      let xe = (isTargetLeft) ? target.x : target.x + target.width;
+      let ye = view.getRoutingCenterY(target);
 
-      var seg = segment;
+      let seg = segment;
 
-      var dx = (isSourceLeft) ? -seg : seg;
-      var dep = new mxPoint(x0 + dx, y0);
+      let dx = (isSourceLeft) ? -seg : seg;
+      let dep = new mxPoint(x0 + dx, y0);
 
       dx = (isTargetLeft) ? -seg : seg;
-      var arr = new mxPoint(xe + dx, ye);
+      let arr = new mxPoint(xe + dx, ye);
 
       // Adds intermediate points if both go out on same side
       if (isSourceLeft == isTargetLeft) {
-        var x = (isSourceLeft) ?
+        let x = (isSourceLeft) ?
             Math.min(x0, xe) - segment :
             Math.max(x0, xe) + segment;
 
         result.push(new mxPoint(x, y0));
         result.push(new mxPoint(x, ye));
       } else if ((dep.x < arr.x) == isSourceLeft) {
-        var midY = y0 + (ye - y0) / 2;
+        let midY = y0 + (ye - y0) / 2;
 
         result.push(dep);
         result.push(new mxPoint(dep.x, midY));
@@ -207,15 +207,15 @@ var mxEdgeStyle = {
    * Implements a self-reference, aka. loop.
    */
   Loop: (state, source, target, points, result) => {
-    var pts = state.absolutePoints;
+    let pts = state.absolutePoints;
 
     var p0 = pts[0];
-    var pe = pts[pts.length - 1];
+    let pe = pts[pts.length - 1];
 
     if (p0 != null && pe != null) {
       if (points != null && points.length > 0) {
-        for (var i = 0; i < points.length; i++) {
-          var pt = points[i];
+        for (let i = 0; i < points.length; i++) {
+          let pt = points[i];
           pt = state.view.transformControlPoint(state, pt);
           result.push(new mxPoint(pt.x, pt.y));
         }
@@ -225,9 +225,9 @@ var mxEdgeStyle = {
     }
 
     if (source != null) {
-      var view = state.view;
-      var graph = view.graph;
-      var pt = (points != null && points.length > 0) ? points[0] : null;
+      let view = state.view;
+      let graph = view.graph;
+      let pt = (points != null && points.length > 0) ? points[0] : null;
 
       if (pt != null) {
         pt = view.transformControlPoint(state, pt);
@@ -237,14 +237,14 @@ var mxEdgeStyle = {
         }
       }
 
-      var x = 0;
-      var dx = 0;
-      var y = 0;
-      var dy = 0;
+      let x = 0;
+      let dx = 0;
+      let y = 0;
+      let dy = 0;
 
-      var seg = mxUtils.getValue(state.style, mxConstants.STYLE_SEGMENT,
+      let seg = mxUtils.getValue(state.style, mxConstants.STYLE_SEGMENT,
           graph.gridSize) * view.scale;
-      var dir = mxUtils.getValue(state.style, mxConstants.STYLE_DIRECTION,
+      let dir = mxUtils.getValue(state.style, mxConstants.STYLE_DIRECTION,
           mxConstants.DIRECTION_WEST);
 
       if (dir == mxConstants.DIRECTION_NORTH ||
@@ -294,19 +294,19 @@ var mxEdgeStyle = {
    * parameters.
    */
   ElbowConnector: (state, source, target, points, result) => {
-    var pt = (points != null && points.length > 0) ? points[0] : null;
+    let pt = (points != null && points.length > 0) ? points[0] : null;
 
-    var vertical = false;
-    var horizontal = false;
+    let vertical = false;
+    let horizontal = false;
 
     if (source != null && target != null) {
       if (pt != null) {
-        var left = Math.min(source.x, target.x);
-        var right = Math.max(source.x + source.width,
+        let left = Math.min(source.x, target.x);
+        let right = Math.max(source.x + source.width,
             target.x + target.width);
 
-        var top = Math.min(source.y, target.y);
-        var bottom = Math.max(source.y + source.height,
+        let top = Math.min(source.y, target.y);
+        let bottom = Math.max(source.y + source.height,
             target.y + target.height);
 
         pt = state.view.transformControlPoint(state, pt);
@@ -314,15 +314,15 @@ var mxEdgeStyle = {
         vertical = pt.y < top || pt.y > bottom;
         horizontal = pt.x < left || pt.x > right;
       } else {
-        var left = Math.max(source.x, target.x);
-        var right = Math.min(source.x + source.width,
+        let left = Math.max(source.x, target.x);
+        let right = Math.min(source.x + source.width,
             target.x + target.width);
 
         vertical = left == right;
 
         if (!vertical) {
-          var top = Math.max(source.y, target.y);
-          var bottom = Math.min(source.y + source.height,
+          let top = Math.max(source.y, target.y);
+          let bottom = Math.min(source.y + source.height,
               target.y + target.height);
 
           horizontal = top == bottom;
@@ -345,11 +345,11 @@ var mxEdgeStyle = {
    * of the parameters.
    */
   SideToSide: (state, source, target, points, result) => {
-    var view = state.view;
-    var pt = (points != null && points.length > 0) ? points[0] : null;
-    var pts = state.absolutePoints;
+    let view = state.view;
+    let pt = (points != null && points.length > 0) ? points[0] : null;
+    let pts = state.absolutePoints;
     var p0 = pts[0];
-    var pe = pts[pts.length - 1];
+    let pe = pts[pts.length - 1];
 
     if (pt != null) {
       pt = view.transformControlPoint(state, pt);
@@ -368,11 +368,11 @@ var mxEdgeStyle = {
     }
 
     if (source != null && target != null) {
-      var l = Math.max(source.x, target.x);
-      var r = Math.min(source.x + source.width,
+      let l = Math.max(source.x, target.x);
+      let r = Math.min(source.x + source.width,
           target.x + target.width);
 
-      var x = (pt != null) ? pt.x : Math.round(r + (l - r) / 2);
+      let x = (pt != null) ? pt.x : Math.round(r + (l - r) / 2);
 
       var y1 = view.getRoutingCenterY(source);
       var y2 = view.getRoutingCenterY(target);
@@ -404,8 +404,8 @@ var mxEdgeStyle = {
             result.push(new mxPoint(x, pt.y));
           }
         } else {
-          var t = Math.max(source.y, target.y);
-          var b = Math.min(source.y + source.height,
+          let t = Math.max(source.y, target.y);
+          let b = Math.min(source.y + source.height,
               target.y + target.height);
 
           result.push(new mxPoint(x, t + (b - t) / 2));
@@ -421,11 +421,11 @@ var mxEdgeStyle = {
    * description of the parameters.
    */
   TopToBottom: (state, source, target, points, result) => {
-    var view = state.view;
-    var pt = (points != null && points.length > 0) ? points[0] : null;
-    var pts = state.absolutePoints;
+    let view = state.view;
+    let pt = (points != null && points.length > 0) ? points[0] : null;
+    let pts = state.absolutePoints;
     var p0 = pts[0];
-    var pe = pts[pts.length - 1];
+    let pe = pts[pts.length - 1];
 
     if (pt != null) {
       pt = view.transformControlPoint(state, pt);
@@ -444,11 +444,11 @@ var mxEdgeStyle = {
     }
 
     if (source != null && target != null) {
-      var t = Math.max(source.y, target.y);
-      var b = Math.min(source.y + source.height,
+      let t = Math.max(source.y, target.y);
+      let b = Math.min(source.y + source.height,
           target.y + target.height);
 
-      var x = view.getRoutingCenterX(source);
+      let x = view.getRoutingCenterX(source);
 
       if (pt != null &&
           pt.x >= source.x &&
@@ -456,7 +456,7 @@ var mxEdgeStyle = {
         x = pt.x;
       }
 
-      var y = (pt != null) ? pt.y : Math.round(b + (t - b) / 2);
+      let y = (pt != null) ? pt.y : Math.round(b + (t - b) / 2);
 
       if (!mxUtils.contains(target, x, y) &&
           !mxUtils.contains(source, x, y)) {
@@ -483,8 +483,8 @@ var mxEdgeStyle = {
             result.push(new mxPoint(pt.x, y));
           }
         } else {
-          var l = Math.max(source.x, target.x);
-          var r = Math.min(source.x + source.width,
+          let l = Math.max(source.x, target.x);
+          let r = Math.min(source.x + source.width,
               target.x + target.width);
 
           result.push(new mxPoint(l + (r - l) / 2, y));
@@ -509,15 +509,15 @@ var mxEdgeStyle = {
    */
   SegmentConnector: (state, sourceScaled, targetScaled, controlHints, result) => {
     // Creates array of all way- and terminalpoints
-    var pts = mxEdgeStyle.scalePointArray(state.absolutePoints, state.view.scale);
-    var source = mxEdgeStyle.scaleCellState(sourceScaled, state.view.scale);
-    var target = mxEdgeStyle.scaleCellState(targetScaled, state.view.scale);
-    var tol = 1;
+    let pts = mxEdgeStyle.scalePointArray(state.absolutePoints, state.view.scale);
+    let source = mxEdgeStyle.scaleCellState(sourceScaled, state.view.scale);
+    let target = mxEdgeStyle.scaleCellState(targetScaled, state.view.scale);
+    let tol = 1;
 
     // Whether the first segment outgoing from the source end is horizontal
-    var lastPushed = (result.length > 0) ? result[0] : null;
-    var horizontal = true;
-    var hint = null;
+    let lastPushed = (result.length > 0) ? result[0] : null;
+    let horizontal = true;
+    let hint = null;
 
     // Adds waypoints only if outside of tolerance
     function pushPoint(pt) {
@@ -533,7 +533,7 @@ var mxEdgeStyle = {
     }
 
     // Adds the first point
-    var pt = pts[0];
+    let pt = pts[0];
 
     if (pt == null && source != null) {
       pt = new mxPoint(state.view.getRoutingCenterX(source), state.view.getRoutingCenterY(source));
@@ -541,15 +541,15 @@ var mxEdgeStyle = {
       pt = pt.clone();
     }
 
-    var lastInx = pts.length - 1;
+    let lastInx = pts.length - 1;
 
     // Adds the waypoints
     if (controlHints != null && controlHints.length > 0) {
       // Converts all hints and removes nulls
-      var hints = [];
+      let hints = [];
 
-      for (var i = 0; i < controlHints.length; i++) {
-        var tmp = state.view.transformControlPoint(state, controlHints[i], true);
+      for (let i = 0; i < controlHints.length; i++) {
+        let tmp = state.view.transformControlPoint(state, controlHints[i], true);
 
         if (tmp != null) {
           hints.push(tmp);
@@ -571,7 +571,7 @@ var mxEdgeStyle = {
         }
       }
 
-      var pe = pts[lastInx];
+      let pe = pts[lastInx];
 
       if (pe != null && hints[hints.length - 1] != null) {
         if (Math.abs(hints[hints.length - 1].x - pe.x) < tol) {
@@ -585,11 +585,11 @@ var mxEdgeStyle = {
 
       hint = hints[0];
 
-      var currentTerm = source;
-      var currentPt = pts[0];
-      var hozChan = false;
-      var vertChan = false;
-      var currentHint = hint;
+      let currentTerm = source;
+      let currentPt = pts[0];
+      let hozChan = false;
+      let vertChan = false;
+      let currentHint = hint;
 
       if (currentPt != null) {
         currentTerm = null;
@@ -597,13 +597,13 @@ var mxEdgeStyle = {
 
       // Check for alignment with fixed points and with channels
       // at source and target segments only
-      for (var i = 0; i < 2; i++) {
-        var fixedVertAlign = currentPt != null && currentPt.x == currentHint.x;
-        var fixedHozAlign = currentPt != null && currentPt.y == currentHint.y;
+      for (let i = 0; i < 2; i++) {
+        let fixedVertAlign = currentPt != null && currentPt.x == currentHint.x;
+        let fixedHozAlign = currentPt != null && currentPt.y == currentHint.y;
 
-        var inHozChan = currentTerm != null && (currentHint.y >= currentTerm.y &&
+        let inHozChan = currentTerm != null && (currentHint.y >= currentTerm.y &&
             currentHint.y <= currentTerm.y + currentTerm.height);
-        var inVertChan = currentTerm != null && (currentHint.x >= currentTerm.x &&
+        let inVertChan = currentTerm != null && (currentHint.x >= currentTerm.x &&
             currentHint.x <= currentTerm.x + currentTerm.width);
 
         hozChan = fixedHozAlign || (currentPt == null && inHozChan);
@@ -662,7 +662,7 @@ var mxEdgeStyle = {
         pt.x = hint.x;
       }
 
-      for (var i = 0; i < hints.length; i++) {
+      for (let i = 0; i < hints.length; i++) {
         horizontal = !horizontal;
         hint = hints[i];
 
@@ -807,16 +807,16 @@ var mxEdgeStyle = {
   // mxEdgeStyle.SOURCE_MASK | mxEdgeStyle.TARGET_MASK,
 
   getJettySize: (state, isSource) => {
-    var value = mxUtils.getValue(state.style, (isSource) ? mxConstants.STYLE_SOURCE_JETTY_SIZE :
+    let value = mxUtils.getValue(state.style, (isSource) ? mxConstants.STYLE_SOURCE_JETTY_SIZE :
         mxConstants.STYLE_TARGET_JETTY_SIZE, mxUtils.getValue(state.style,
         mxConstants.STYLE_JETTY_SIZE, mxEdgeStyle.orthBuffer));
 
     if (value == 'auto') {
       // Computes the automatic jetty size
-      var type = mxUtils.getValue(state.style, (isSource) ? mxConstants.STYLE_STARTARROW : mxConstants.STYLE_ENDARROW, mxConstants.NONE);
+      let type = mxUtils.getValue(state.style, (isSource) ? mxConstants.STYLE_STARTARROW : mxConstants.STYLE_ENDARROW, mxConstants.NONE);
 
       if (type != mxConstants.NONE) {
-        var size = mxUtils.getNumber(state.style, (isSource) ? mxConstants.STYLE_STARTSIZE : mxConstants.STYLE_ENDSIZE, mxConstants.DEFAULT_MARKERSIZE);
+        let size = mxUtils.getNumber(state.style, (isSource) ? mxConstants.STYLE_STARTSIZE : mxConstants.STYLE_ENDSIZE, mxConstants.DEFAULT_MARKERSIZE);
         value = Math.max(2, Math.ceil((size + mxEdgeStyle.orthBuffer) / mxEdgeStyle.orthBuffer)) * mxEdgeStyle.orthBuffer;
       } else {
         value = 2 * mxEdgeStyle.orthBuffer;
@@ -838,12 +838,12 @@ var mxEdgeStyle = {
    *
    */
   scalePointArray: (points, scale) => {
-    var result = [];
+    let result = [];
 
     if (points != null) {
-      for (var i = 0; i < points.length; i++) {
+      for (let i = 0; i < points.length; i++) {
         if (points[i] != null) {
-          var pt = new mxPoint(Math.round(points[i].x / scale * 10) / 10,
+          let pt = new mxPoint(Math.round(points[i].x / scale * 10) / 10,
               Math.round(points[i].y / scale * 10) / 10);
           result[i] = pt;
         } else {
@@ -869,7 +869,7 @@ var mxEdgeStyle = {
    *
    */
   scaleCellState: (state, scale) => {
-    var result = null;
+    let result = null;
 
     if (state != null) {
       result = state.clone();
@@ -901,29 +901,29 @@ var mxEdgeStyle = {
    *
    */
   OrthConnector: (state, sourceScaled, targetScaled, controlHints, result) => {
-    var graph = state.view.graph;
-    var sourceEdge = source == null ? false : graph.getModel().isEdge(source.cell);
-    var targetEdge = target == null ? false : graph.getModel().isEdge(target.cell);
+    let graph = state.view.graph;
+    let sourceEdge = source == null ? false : graph.getModel().isEdge(source.cell);
+    let targetEdge = target == null ? false : graph.getModel().isEdge(target.cell);
 
-    var pts = mxEdgeStyle.scalePointArray(state.absolutePoints, state.view.scale);
-    var source = mxEdgeStyle.scaleCellState(sourceScaled, state.view.scale);
-    var target = mxEdgeStyle.scaleCellState(targetScaled, state.view.scale);
+    let pts = mxEdgeStyle.scalePointArray(state.absolutePoints, state.view.scale);
+    let source = mxEdgeStyle.scaleCellState(sourceScaled, state.view.scale);
+    let target = mxEdgeStyle.scaleCellState(targetScaled, state.view.scale);
 
     var p0 = pts[0];
-    var pe = pts[pts.length - 1];
+    let pe = pts[pts.length - 1];
 
-    var sourceX = source != null ? source.x : p0.x;
-    var sourceY = source != null ? source.y : p0.y;
-    var sourceWidth = source != null ? source.width : 0;
-    var sourceHeight = source != null ? source.height : 0;
+    let sourceX = source != null ? source.x : p0.x;
+    let sourceY = source != null ? source.y : p0.y;
+    let sourceWidth = source != null ? source.width : 0;
+    let sourceHeight = source != null ? source.height : 0;
 
-    var targetX = target != null ? target.x : pe.x;
-    var targetY = target != null ? target.y : pe.y;
-    var targetWidth = target != null ? target.width : 0;
-    var targetHeight = target != null ? target.height : 0;
+    let targetX = target != null ? target.x : pe.x;
+    let targetY = target != null ? target.y : pe.y;
+    let targetWidth = target != null ? target.width : 0;
+    let targetHeight = target != null ? target.height : 0;
 
-    var sourceBuffer = mxEdgeStyle.getJettySize(state, true);
-    var targetBuffer = mxEdgeStyle.getJettySize(state, false);
+    let sourceBuffer = mxEdgeStyle.getJettySize(state, true);
+    let targetBuffer = mxEdgeStyle.getJettySize(state, false);
 
     //console.log('sourceBuffer', sourceBuffer);
     //console.log('targetBuffer', targetBuffer);
@@ -933,14 +933,14 @@ var mxEdgeStyle = {
       sourceBuffer = targetBuffer;
     }
 
-    var totalBuffer = targetBuffer + sourceBuffer;
+    let totalBuffer = targetBuffer + sourceBuffer;
     // console.log('totalBuffer', totalBuffer);
-    var tooShort = false;
+    let tooShort = false;
 
     // Checks minimum distance for fixed points and falls back to segment connector
     if (p0 != null && pe != null) {
-      var dx = pe.x - p0.x;
-      var dy = pe.y - p0.y;
+      let dx = pe.x - p0.x;
+      let dy = pe.y - p0.y;
 
       tooShort = dx * dx + dy * dy < totalBuffer * totalBuffer;
     }
@@ -955,8 +955,8 @@ var mxEdgeStyle = {
     // Determine the side(s) of the source and target vertices
     // that the edge may connect to
     // portConstraint [source, target]
-    var portConstraint = [mxConstants.DIRECTION_MASK_ALL, mxConstants.DIRECTION_MASK_ALL];
-    var rotation = 0;
+    let portConstraint = [mxConstants.DIRECTION_MASK_ALL, mxConstants.DIRECTION_MASK_ALL];
+    let rotation = 0;
 
     if (source != null) {
       portConstraint[0] = mxUtils.getPortConstraints(source, state, true,
@@ -966,7 +966,7 @@ var mxEdgeStyle = {
       //console.log('source rotation', rotation);
 
       if (rotation != 0) {
-        var newRect = mxUtils.getBoundingBox(new mxRectangle(sourceX, sourceY, sourceWidth, sourceHeight), rotation);
+        let newRect = mxUtils.getBoundingBox(new mxRectangle(sourceX, sourceY, sourceWidth, sourceHeight), rotation);
         sourceX = newRect.x;
         sourceY = newRect.y;
         sourceWidth = newRect.width;
@@ -982,7 +982,7 @@ var mxEdgeStyle = {
       //console.log('target rotation', rotation);
 
       if (rotation != 0) {
-        var newRect = mxUtils.getBoundingBox(new mxRectangle(targetX, targetY, targetWidth, targetHeight), rotation);
+        let newRect = mxUtils.getBoundingBox(new mxRectangle(targetX, targetY, targetWidth, targetHeight), rotation);
         targetX = newRect.x;
         targetY = newRect.y;
         targetWidth = newRect.width;
@@ -993,17 +993,17 @@ var mxEdgeStyle = {
     //console.log('source' , sourceX, sourceY, sourceWidth, sourceHeight);
     //console.log('targetX' , targetX, targetY, targetWidth, targetHeight);
 
-    var dir = [0, 0];
+    let dir = [0, 0];
 
     // Work out which faces of the vertices present against each other
     // in a way that would allow a 3-segment connection if port constraints
     // permitted.
     // geo -> [source, target] [x, y, width, height]
-    var geo = [[sourceX, sourceY, sourceWidth, sourceHeight],
+    let geo = [[sourceX, sourceY, sourceWidth, sourceHeight],
       [targetX, targetY, targetWidth, targetHeight]];
-    var buffer = [sourceBuffer, targetBuffer];
+    let buffer = [sourceBuffer, targetBuffer];
 
-    for (var i = 0; i < 2; i++) {
+    for (let i = 0; i < 2; i++) {
       mxEdgeStyle.limits[i][1] = geo[i][0] - buffer[i];
       mxEdgeStyle.limits[i][2] = geo[i][1] - buffer[i];
       mxEdgeStyle.limits[i][4] = geo[i][0] + geo[i][2] + buffer[i];
@@ -1011,15 +1011,15 @@ var mxEdgeStyle = {
     }
 
     // Work out which quad the target is in
-    var sourceCenX = geo[0][0] + geo[0][2] / 2.0;
-    var sourceCenY = geo[0][1] + geo[0][3] / 2.0;
-    var targetCenX = geo[1][0] + geo[1][2] / 2.0;
-    var targetCenY = geo[1][1] + geo[1][3] / 2.0;
+    let sourceCenX = geo[0][0] + geo[0][2] / 2.0;
+    let sourceCenY = geo[0][1] + geo[0][3] / 2.0;
+    let targetCenX = geo[1][0] + geo[1][2] / 2.0;
+    let targetCenY = geo[1][1] + geo[1][3] / 2.0;
 
-    var dx = sourceCenX - targetCenX;
-    var dy = sourceCenY - targetCenY;
+    let dx = sourceCenX - targetCenX;
+    let dy = sourceCenY - targetCenY;
 
-    var quad = 0;
+    let quad = 0;
 
     // 0 | 1
     // -----
@@ -1045,15 +1045,15 @@ var mxEdgeStyle = {
     //console.log('quad', quad);
 
     // Check for connection constraints
-    var currentTerm = null;
+    let currentTerm = null;
 
     if (source != null) {
       currentTerm = p0;
     }
 
-    var constraint = [[0.5, 0.5], [0.5, 0.5]];
+    let constraint = [[0.5, 0.5], [0.5, 0.5]];
 
-    for (var i = 0; i < 2; i++) {
+    for (let i = 0; i < 2; i++) {
       if (currentTerm != null) {
         constraint[i][0] = (currentTerm.x - geo[i][0]) / geo[i][2];
 
@@ -1079,10 +1079,10 @@ var mxEdgeStyle = {
       }
     }
 
-    var sourceTopDist = geo[0][1] - (geo[1][1] + geo[1][3]);
-    var sourceLeftDist = geo[0][0] - (geo[1][0] + geo[1][2]);
-    var sourceBottomDist = geo[1][1] - (geo[0][1] + geo[0][3]);
-    var sourceRightDist = geo[1][0] - (geo[0][0] + geo[0][2]);
+    let sourceTopDist = geo[0][1] - (geo[1][1] + geo[1][3]);
+    let sourceLeftDist = geo[0][0] - (geo[1][0] + geo[1][2]);
+    let sourceBottomDist = geo[1][1] - (geo[0][1] + geo[0][3]);
+    let sourceRightDist = geo[1][0] - (geo[0][0] + geo[0][2]);
 
     mxEdgeStyle.vertexSeperations[1] = Math.max(sourceLeftDist - totalBuffer, 0);
     mxEdgeStyle.vertexSeperations[2] = Math.max(sourceTopDist - totalBuffer, 0);
@@ -1095,9 +1095,9 @@ var mxEdgeStyle = {
     // Work through the preferred orientations by relative positioning
     // of the vertices and list them in preferred and available order
 
-    var dirPref = [];
-    var horPref = [];
-    var vertPref = [];
+    let dirPref = [];
+    let horPref = [];
+    let vertPref = [];
 
     horPref[0] = (sourceLeftDist >= sourceRightDist) ? mxConstants.DIRECTION_MASK_WEST
         : mxConstants.DIRECTION_MASK_EAST;
@@ -1107,16 +1107,16 @@ var mxEdgeStyle = {
     horPref[1] = mxUtils.reversePortConstraints(horPref[0]);
     vertPref[1] = mxUtils.reversePortConstraints(vertPref[0]);
 
-    var preferredHorizDist = sourceLeftDist >= sourceRightDist ? sourceLeftDist
+    let preferredHorizDist = sourceLeftDist >= sourceRightDist ? sourceLeftDist
         : sourceRightDist;
-    var preferredVertDist = sourceTopDist >= sourceBottomDist ? sourceTopDist
+    let preferredVertDist = sourceTopDist >= sourceBottomDist ? sourceTopDist
         : sourceBottomDist;
 
-    var prefOrdering = [[0, 0], [0, 0]];
-    var preferredOrderSet = false;
+    let prefOrdering = [[0, 0], [0, 0]];
+    let preferredOrderSet = false;
 
     // If the preferred port isn't available, switch it
-    for (var i = 0; i < 2; i++) {
+    for (let i = 0; i < 2; i++) {
       if (dir[i] != 0x0) {
         continue;
       }
@@ -1175,7 +1175,7 @@ var mxEdgeStyle = {
     // the preferred port selections
     // If the list contains gaps, compact it
 
-    for (var i = 0; i < 2; i++) {
+    for (let i = 0; i < 2; i++) {
       if (dir[i] != 0x0) {
         continue;
       }
@@ -1215,9 +1215,9 @@ var mxEdgeStyle = {
     //==============================================================
     // End of source and target direction determination
 
-    var sourceIndex = dir[0] === mxConstants.DIRECTION_MASK_EAST ? 3
+    let sourceIndex = dir[0] === mxConstants.DIRECTION_MASK_EAST ? 3
         : dir[0];
-    var targetIndex = dir[1] === mxConstants.DIRECTION_MASK_EAST ? 3
+    let targetIndex = dir[1] === mxConstants.DIRECTION_MASK_EAST ? 3
         : dir[1];
 
     sourceIndex -= quad;
@@ -1231,7 +1231,7 @@ var mxEdgeStyle = {
       targetIndex += 4;
     }
 
-    var routePattern = mxEdgeStyle.routePatterns[sourceIndex - 1][targetIndex - 1];
+    let routePattern = mxEdgeStyle.routePatterns[sourceIndex - 1][targetIndex - 1];
 
     //console.log('routePattern', routePattern);
 
@@ -1257,20 +1257,20 @@ var mxEdgeStyle = {
         break;
     }
 
-    var currentIndex = 0;
+    let currentIndex = 0;
 
     // Orientation, 0 horizontal, 1 vertical
-    var lastOrientation = (dir[0] & (mxConstants.DIRECTION_MASK_EAST | mxConstants.DIRECTION_MASK_WEST)) > 0 ? 0
+    let lastOrientation = (dir[0] & (mxConstants.DIRECTION_MASK_EAST | mxConstants.DIRECTION_MASK_WEST)) > 0 ? 0
         : 1;
-    var initialOrientation = lastOrientation;
-    var currentOrientation = 0;
+    let initialOrientation = lastOrientation;
+    let currentOrientation = 0;
 
-    for (var i = 0; i < routePattern.length; i++) {
-      var nextDirection = routePattern[i] & 0xF;
+    for (let i = 0; i < routePattern.length; i++) {
+      let nextDirection = routePattern[i] & 0xF;
 
       // Rotate the index of this direction by the quad
       // to get the real direction
-      var directionIndex = nextDirection === mxConstants.DIRECTION_MASK_EAST ? 3
+      let directionIndex = nextDirection === mxConstants.DIRECTION_MASK_EAST ? 3
           : nextDirection;
 
       directionIndex += quad;
@@ -1279,7 +1279,7 @@ var mxEdgeStyle = {
         directionIndex -= 4;
       }
 
-      var direction = mxEdgeStyle.dirVectors[directionIndex - 1];
+      let direction = mxEdgeStyle.dirVectors[directionIndex - 1];
 
       currentOrientation = (directionIndex % 2 > 0) ? 0 : 1;
       // Only update the current index if the point moved
@@ -1296,20 +1296,20 @@ var mxEdgeStyle = {
         mxEdgeStyle.wayPoints1[currentIndex][1] = mxEdgeStyle.wayPoints1[currentIndex - 1][1];
       }
 
-      var tar = (routePattern[i] & mxEdgeStyle.TARGET_MASK) > 0;
-      var sou = (routePattern[i] & mxEdgeStyle.SOURCE_MASK) > 0;
-      var side = (routePattern[i] & mxEdgeStyle.SIDE_MASK) >> 5;
+      let tar = (routePattern[i] & mxEdgeStyle.TARGET_MASK) > 0;
+      let sou = (routePattern[i] & mxEdgeStyle.SOURCE_MASK) > 0;
+      let side = (routePattern[i] & mxEdgeStyle.SIDE_MASK) >> 5;
       side = side << quad;
 
       if (side > 0xF) {
         side = side >> 4;
       }
 
-      var center = (routePattern[i] & mxEdgeStyle.CENTER_MASK) > 0;
+      let center = (routePattern[i] & mxEdgeStyle.CENTER_MASK) > 0;
 
       if ((sou || tar) && side < 9) {
-        var limit = 0;
-        var souTar = sou ? 0 : 1;
+        let limit = 0;
+        let souTar = sou ? 0 : 1;
 
         if (center && currentOrientation === 0) {
           limit = geo[souTar][0] + constraint[souTar][0] * geo[souTar][2];
@@ -1320,16 +1320,16 @@ var mxEdgeStyle = {
         }
 
         if (currentOrientation === 0) {
-          var lastX = mxEdgeStyle.wayPoints1[currentIndex][0];
-          var deltaX = (limit - lastX) * direction[0];
+          let lastX = mxEdgeStyle.wayPoints1[currentIndex][0];
+          let deltaX = (limit - lastX) * direction[0];
 
           if (deltaX > 0) {
             mxEdgeStyle.wayPoints1[currentIndex][0] += direction[0]
                 * deltaX;
           }
         } else {
-          var lastY = mxEdgeStyle.wayPoints1[currentIndex][1];
-          var deltaY = (limit - lastY) * direction[1];
+          let lastY = mxEdgeStyle.wayPoints1[currentIndex][1];
+          let deltaY = (limit - lastY) * direction[1];
 
           if (deltaY > 0) {
             mxEdgeStyle.wayPoints1[currentIndex][1] += direction[1]
@@ -1352,7 +1352,7 @@ var mxEdgeStyle = {
       }
     }
 
-    for (var i = 0; i <= currentIndex; i++) {
+    for (let i = 0; i <= currentIndex; i++) {
       if (i === currentIndex) {
         // Last point can cause last segment to be in
         // same direction as jetty/approach. If so,
@@ -1361,9 +1361,9 @@ var mxEdgeStyle = {
         // jx. Same orientation requires an even
         // number of turns (points), different requires
         // odd.
-        var targetOrientation = (dir[1] & (mxConstants.DIRECTION_MASK_EAST | mxConstants.DIRECTION_MASK_WEST)) > 0 ? 0
+        let targetOrientation = (dir[1] & (mxConstants.DIRECTION_MASK_EAST | mxConstants.DIRECTION_MASK_WEST)) > 0 ? 0
             : 1;
-        var sameOrient = targetOrientation === initialOrientation ? 0 : 1;
+        let sameOrient = targetOrientation === initialOrientation ? 0 : 1;
 
         // (currentIndex + 1) % 2 is 0 for even number of points,
         // 1 for odd
@@ -1380,7 +1380,7 @@ var mxEdgeStyle = {
     //console.log(result);
 
     // Removes duplicates
-    var index = 1;
+    let index = 1;
 
     while (index < result.length) {
       if (result[index - 1] == null || result[index] == null ||
@@ -1394,9 +1394,9 @@ var mxEdgeStyle = {
   },
 
   getRoutePattern: (dir, quad, dx, dy) => {
-    var sourceIndex = dir[0] === mxConstants.DIRECTION_MASK_EAST ? 3
+    let sourceIndex = dir[0] === mxConstants.DIRECTION_MASK_EAST ? 3
         : dir[0];
-    var targetIndex = dir[1] === mxConstants.DIRECTION_MASK_EAST ? 3
+    let targetIndex = dir[1] === mxConstants.DIRECTION_MASK_EAST ? 3
         : dir[1];
 
     sourceIndex -= quad;
@@ -1409,7 +1409,7 @@ var mxEdgeStyle = {
       targetIndex += 4;
     }
 
-    var result = routePatterns[sourceIndex - 1][targetIndex - 1];
+    let result = routePatterns[sourceIndex - 1][targetIndex - 1];
 
     if (dx === 0 || dy === 0) {
       if (inlineRoutePatterns[sourceIndex - 1][targetIndex - 1] != null) {
diff --git a/src/js/view/mxGraph.js b/src/js/view/mxGraph.js
index 4223f54e8..33acabb94 100644
--- a/src/js/view/mxGraph.js
+++ b/src/js/view/mxGraph.js
@@ -27,6 +27,15 @@ import mxCellOverlay from "./mxCellOverlay";
 import mxPoint from "../util/mxPoint";
 import mxUtils from "../util/mxUtils";
 import mxConnectionConstraint from "./mxConnectionConstraint";
+import mxDictionary from "../util/mxDictionary";
+import mxVertexHandler from "../handler/mxVertexHandler";
+import mxEdgeHandler from "../handler/mxEdgeHandler";
+import mxEdgeSegmentHandler from "../handler/mxEdgeSegmentHandler";
+import mxElbowEdgeHandler from "../handler/mxElbowEdgeHandler";
+import mxMouseEvent from "../util/mxMouseEvent";
+import mxResources from "../util/mxResources";
+import mxGeometry from "../model/mxGeometry";
+import mxCell from "../model/mxCell";
 
 class mxGraph extends mxEventSource {
   /**
@@ -68,9 +77,9 @@ class mxGraph extends mxEventSource {
    * Use the following code to read a stylesheet into an existing graph.
    *
    * (code)
-   * var req = mxUtils.load('stylesheet.xml');
-   * var root = req.getDocumentElement();
-   * var dec = new mxCodec(root.ownerDocument);
+   * let req = mxUtils.load('stylesheet.xml');
+   * let root = req.getDocumentElement();
+   * let dec = new mxCodec(root.ownerDocument);
    * dec.decode(root, graph.stylesheet);
    * (end)
    */
@@ -255,7 +264,7 @@ class mxGraph extends mxEventSource {
    * Example:
    *
    * (code)
-   * var img = new mxImage('http://www.example.com/maps/examplemap.jpg', 1024, 768);
+   * let img = new mxImage('http://www.example.com/maps/examplemap.jpg', 1024, 768);
    * graph.setBackgroundImage(img);
    * graph.view.validate();
    * (end)
@@ -889,7 +898,7 @@ class mxGraph extends mxEventSource {
    * the following code is used:
    *
    * (code)
-   * var style = graph.getStylesheet().getDefaultVertexStyle();
+   * let style = graph.getStylesheet().getDefaultVertexStyle();
    * style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_IMAGE;
    * (end)
    *
@@ -968,7 +977,7 @@ class mxGraph extends mxEventSource {
    * (code)
    * graph.getTooltipForCell = (cell)=>
    * {
-   *   var label = this.convertValueToString(cell);
+   *   let label = this.convertValueToString(cell);
    *   return 'Tooltip for '+label;
    * }
    * (end)
@@ -980,7 +989,7 @@ class mxGraph extends mxEventSource {
    * <add as="getTooltipForCell"><![CDATA[
    *   (cell)=>
    *   {
-   *     var label = this.convertValueToString(cell);
+   *     let label = this.convertValueToString(cell);
    *     return 'Tooltip for '+label;
    *   }
    * ]]></add>
@@ -997,7 +1006,7 @@ class mxGraph extends mxEventSource {
    * (code)
    * getTooltipForCell = (cell)=>
    * {
-   *   var label = this.convertValueToString(cell);
+   *   let label = this.convertValueToString(cell);
    *   return 'Tooltip for '+label;
    * }
    * (end)
@@ -1038,7 +1047,7 @@ class mxGraph extends mxEventSource {
    * vertices is as follows:
    *
    * (code)
-   * var style = graph.getStylesheet().getDefaultVertexStyle();
+   * let style = graph.getStylesheet().getDefaultVertexStyle();
    * style[mxConstants.STYLE_SHAPE] = 'box';
    * (end)
    *
@@ -1053,7 +1062,7 @@ class mxGraph extends mxEventSource {
    * shapename and the stylename we'll use boxstyle for the stylename:
    *
    * (code)
-   * var style = {};
+   * let style = {};
    * style[mxConstants.STYLE_SHAPE] = 'box';
    * style[mxConstants.STYLE_STROKECOLOR] = '#000000';
    * style[mxConstants.STYLE_FONTCOLOR] = '#000000';
@@ -1064,7 +1073,7 @@ class mxGraph extends mxEventSource {
    * this style with a cell, it must be referenced from the cellstyle as follows:
    *
    * (code)
-   * var vertex = graph.insertVertex(parent, null, 'Hello, World!', 20, 20, 80, 20,
+   * let vertex = graph.insertVertex(parent, null, 'Hello, World!', 20, 20, 80, 20,
    *         'boxstyle');
    * (end)
    *
@@ -1162,15 +1171,15 @@ class mxGraph extends mxEventSource {
    * used.
    *
    * (code)
-   * var enc = new mxCodec(mxUtils.createXmlDocument());
-   * var node = enc.encode(graph.getModel());
+   * let enc = new mxCodec(mxUtils.createXmlDocument());
+   * let node = enc.encode(graph.getModel());
    * (end)
    *
    * This will produce an XML node than can be handled using the DOM API or
    * turned into a string representation using the following code:
    *
    * (code)
-   * var xml = mxUtils.getXml(node);
+   * let xml = mxUtils.getXml(node);
    * (end)
    *
    * To obtain a formatted string, mxUtils.getPrettyXml can be used instead.
@@ -1181,7 +1190,7 @@ class mxGraph extends mxEventSource {
    * handler, depending on the server.
    *
    * (code)
-   * var xmlString = encodeURIComponent(mxUtils.getXml(node));
+   * let xmlString = encodeURIComponent(mxUtils.getXml(node));
    * mxUtils.post(url, 'xml='+xmlString, (req)=>
    * {
    *   // Process server response using req of type mxXmlRequest
@@ -1195,9 +1204,9 @@ class mxGraph extends mxEventSource {
    * servlet, PHP page or HTTP handler that produces the XML string.
    *
    * (code)
-   * var xmlDoc = mxUtils.load(url).getXml();
-   * var node = xmlDoc.documentElement;
-   * var dec = new mxCodec(node.ownerDocument);
+   * let xmlDoc = mxUtils.load(url).getXml();
+   * let node = xmlDoc.documentElement;
+   * let dec = new mxCodec(node.ownerDocument);
    * dec.decode(node, graph.getModel());
    * (end)
    *
@@ -1473,8 +1482,8 @@ class mxGraph extends mxEventSource {
    *
    * To create a graph inside a DOM node with an id of graph:
    * (code)
-   * var container = document.getElementById('graph');
-   * var graph = new mxGraph(container);
+   * let container = document.getElementById('graph');
+   * let graph = new mxGraph(container);
    * (end)
    *
    * Parameters:
@@ -1750,30 +1759,30 @@ class mxGraph extends mxEventSource {
    *
    */
   getSelectionCellsForChanges = (changes, ignoreFn) => {
-    var dict = new mxDictionary();
-    var cells = [];
+    let dict = new mxDictionary();
+    let cells = [];
 
-    var addCell = (cell) => {
+    let addCell = (cell) => {
       if (!dict.get(cell) && this.model.contains(cell)) {
         if (this.model.isEdge(cell) || this.model.isVertex(cell)) {
           dict.put(cell, true);
           cells.push(cell);
         } else {
-          var childCount = this.model.getChildCount(cell);
+          let childCount = this.model.getChildCount(cell);
 
-          for (var i = 0; i < childCount; i++) {
+          for (let i = 0; i < childCount; i++) {
             addCell(this.model.getChildAt(cell, i));
           }
         }
       }
     };
 
-    for (var i = 0; i < changes.length; i++) {
-      var change = changes[i];
+    for (let i = 0; i < changes.length; i++) {
+      let change = changes[i];
 
       if (change.constructor != mxRootChange &&
           (ignoreFn == null || !ignoreFn(change))) {
-        var cell = null;
+        let cell = null;
 
         if (change instanceof mxChildChange) {
           cell = change.child;
@@ -1802,7 +1811,7 @@ class mxGraph extends mxEventSource {
    * changes - Array that contains the individual changes.
    */
   graphModelChanged = (changes) => {
-    for (var i = 0; i < changes.length; i++) {
+    for (let i = 0; i < changes.length; i++) {
       this.processChange(changes[i]);
     }
 
@@ -1817,14 +1826,14 @@ class mxGraph extends mxEventSource {
    * Removes selection cells that are not in the model from the selection.
    */
   updateSelection = () => {
-    var cells = this.getSelectionCells();
-    var removed = [];
+    let cells = this.getSelectionCells();
+    let removed = [];
 
-    for (var i = 0; i < cells.length; i++) {
+    for (let i = 0; i < cells.length; i++) {
       if (!this.model.contains(cells[i]) || !this.isCellVisible(cells[i])) {
         removed.push(cells[i]);
       } else {
-        var par = this.model.getParent(cells[i]);
+        let par = this.model.getParent(cells[i]);
 
         while (par != null && par !== this.view.currentRoot) {
           if (this.isCellCollapsed(par) || !this.isCellVisible(par)) {
@@ -1872,7 +1881,7 @@ class mxGraph extends mxEventSource {
         // the minimal required portions of the cache, namely, the
     // old and new parent and the child.
     else if (change instanceof mxChildChange) {
-      var newParent = this.model.getParent(change.child);
+      let newParent = this.model.getParent(change.child);
       this.view.invalidate(change.child, true, true);
 
       if (!this.model.contains(newParent) || this.isCellCollapsed(newParent)) {
@@ -1916,7 +1925,7 @@ class mxGraph extends mxEventSource {
     // Requires a new mxShape in JavaScript
     else if (change instanceof mxStyleChange) {
       this.view.invalidate(change.cell, true, true);
-      var state = this.view.getState(change.cell);
+      let state = this.view.getState(change.cell);
 
       if (state != null) {
         state.invalidStyle = true;
@@ -1940,9 +1949,9 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> that was removed from the model.
    */
   removeStateForCell = (cell) => {
-    var childCount = this.model.getChildCount(cell);
+    let childCount = this.model.getChildCount(cell);
 
-    for (var i = 0; i < childCount; i++) {
+    for (let i = 0; i < childCount; i++) {
       this.removeStateForCell(this.model.getChildAt(cell, i));
     }
 
@@ -1972,7 +1981,7 @@ class mxGraph extends mxEventSource {
 
     cell.overlays.push(overlay);
 
-    var state = this.view.getState(cell);
+    let state = this.view.getState(cell);
 
     // Immediately updates the cell display if the state exists
     if (state != null) {
@@ -2015,7 +2024,7 @@ class mxGraph extends mxEventSource {
     if (overlay == null) {
       this.removeCellOverlays(cell);
     } else {
-      var index = mxUtils.indexOf(cell.overlays, overlay);
+      let index = mxUtils.indexOf(cell.overlays, overlay);
 
       if (index >= 0) {
         cell.overlays.splice(index, 1);
@@ -2025,7 +2034,7 @@ class mxGraph extends mxEventSource {
         }
 
         // Immediately updates the cell display if the state exists
-        var state = this.view.getState(cell);
+        let state = this.view.getState(cell);
 
         if (state != null) {
           this.cellRenderer.redraw(state);
@@ -2053,19 +2062,19 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> whose overlays should be removed
    */
   removeCellOverlays = (cell) => {
-    var overlays = cell.overlays;
+    let overlays = cell.overlays;
 
     if (overlays != null) {
       cell.overlays = null;
 
       // Immediately updates the cell display if the state exists
-      var state = this.view.getState(cell);
+      let state = this.view.getState(cell);
 
       if (state != null) {
         this.cellRenderer.redraw(state);
       }
 
-      for (var i = 0; i < overlays.length; i++) {
+      for (let i = 0; i < overlays.length; i++) {
         this.fireEvent(new mxEventObject(mxEvent.REMOVE_OVERLAY,
             'cell', cell, 'overlay', overlays[i]));
       }
@@ -2092,10 +2101,10 @@ class mxGraph extends mxEventSource {
     this.removeCellOverlays(cell);
 
     // Recursively removes all overlays from the children
-    var childCount = this.model.getChildCount(cell);
+    let childCount = this.model.getChildCount(cell);
 
-    for (var i = 0; i < childCount; i++) {
-      var child = this.model.getChildAt(cell, i);
+    for (let i = 0; i < childCount; i++) {
+      let child = this.model.getChildAt(cell, i);
       this.clearCellOverlays(child); // recurse
     }
   };
@@ -2129,7 +2138,7 @@ class mxGraph extends mxEventSource {
       img = (img != null) ? img : this.warningImage;
 
       // Creates the overlay with the image and warning
-      var overlay = new mxCellOverlay(img,
+      let overlay = new mxCellOverlay(img,
           '<font color=red>' + warning + '</font>');
 
       // Adds a handler for single mouseclicks to select the cell
@@ -2250,7 +2259,7 @@ class mxGraph extends mxEventSource {
   labelChanged = (cell, value, evt) => {
     this.model.beginUpdate();
     try {
-      var old = cell.value;
+      let old = cell.value;
       this.cellLabelChanged(cell, value, this.isAutoSizeCell(cell));
       this.fireEvent(new mxEventObject(mxEvent.LABEL_CHANGED,
           'cell', cell, 'value', value, 'old', old, 'event', evt));
@@ -2274,11 +2283,11 @@ class mxGraph extends mxEventSource {
    * user object.
    *
    * (code)
-   * var graphCellLabelChanged = graph.cellLabelChanged;
+   * let graphCellLabelChanged = graph.cellLabelChanged;
    * graph.cellLabelChanged = (cell, newValue, autoSize)=>
    * {
    *   // Cloned for correct undo/redo
-   *   var elt = cell.value.cloneNode(true);
+   *   let elt = cell.value.cloneNode(true);
    *  elt.setAttribute('label', newValue);
    *
    *  newValue = elt;
@@ -2337,8 +2346,8 @@ class mxGraph extends mxEventSource {
    * (code)
    * graph.addListener(mxEvent.CLICK, (sender, evt)=>
    * {
-   *   var e = evt.getProperty('event'); // mouse event
-   *   var cell = evt.getProperty('cell'); // cell may be null
+   *   let e = evt.getProperty('event'); // mouse event
+   *   let cell = evt.getProperty('cell'); // cell may be null
    *
    *   if (cell != null)
    *   {
@@ -2353,9 +2362,9 @@ class mxGraph extends mxEventSource {
    * me - <mxMouseEvent> that represents the single click.
    */
   click = (me) => {
-    var evt = me.getEvent();
-    var cell = me.getCell();
-    var mxe = new mxEventObject(mxEvent.CLICK, 'event', evt, 'cell', cell);
+    let evt = me.getEvent();
+    let cell = me.getCell();
+    let mxe = new mxEventObject(mxEvent.CLICK, 'event', evt, 'cell', cell);
 
     if (me.isConsumed()) {
       mxe.consume();
@@ -2366,11 +2375,11 @@ class mxGraph extends mxEventSource {
     if (this.isEnabled() && !mxEvent.isConsumed(evt) && !mxe.isConsumed()) {
       if (cell != null) {
         if (this.isTransparentClickEvent(evt)) {
-          var active = false;
+          let active = false;
 
-          var tmp = this.getCellAt(me.graphX, me.graphY, null, null, null,
+          let tmp = this.getCellAt(me.graphX, me.graphY, null, null, null,
               (state) => {
-                var selected = this.isCellSelected(state.cell);
+                let selected = this.isCellSelected(state.cell);
                 active = active || selected;
 
                 return !active || selected || (state.cell != cell &&
@@ -2386,12 +2395,12 @@ class mxGraph extends mxEventSource {
 
         if (cell != null && (!this.isToggleEvent(evt) ||
             !mxEvent.isAltDown(evt))) {
-          var temp = cell;
-          var swimlanes = [];
+          let temp = cell;
+          let swimlanes = [];
 
           while (temp != null) {
             temp = this.model.getParent(temp);
-            var state = this.view.getState(temp);
+            let state = this.view.getState(temp);
 
             if (this.isSwimlane(temp) && state != null) {
               swimlanes.push(temp);
@@ -2404,7 +2413,7 @@ class mxGraph extends mxEventSource {
             swimlanes.splice(0, 0, cell);
             swimlanes.push(cell);
 
-            for (var i = 0; i < swimlanes.length - 1; i++) {
+            for (let i = 0; i < swimlanes.length - 1; i++) {
               if (this.isCellSelected(swimlanes[i])) {
                 cell = swimlanes[(this.isToggleEvent(evt)) ?
                     i : i + 1];
@@ -2428,12 +2437,12 @@ class mxGraph extends mxEventSource {
    * Returns true if any sibling of the given cell is selected.
    */
   isSiblingSelected = (cell) => {
-    var model = this.model;
-    var parent = model.getParent(cell);
-    var childCount = model.getChildCount(parent);
+    let model = this.model;
+    let parent = model.getParent(cell);
+    let childCount = model.getChildCount(parent);
 
-    for (var i = 0; i < childCount; i++) {
-      var child = model.getChildAt(parent, i);
+    for (let i = 0; i < childCount; i++) {
+      let child = model.getChildAt(parent, i);
 
       if (cell != child && this.isCellSelected(child)) {
         return true;
@@ -2457,7 +2466,7 @@ class mxGraph extends mxEventSource {
    * (code)
    * graph.dblClick = (evt, cell)=>
    * {
-   *   var mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell', cell);
+   *   let mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell', cell);
    *   this.fireEvent(mxe);
    *
    *   if (this.isEnabled() && !mxEvent.isConsumed(evt) && !mxe.isConsumed())
@@ -2473,7 +2482,7 @@ class mxGraph extends mxEventSource {
    * (code)
    * graph.addListener(mxEvent.DOUBLE_CLICK, (sender, evt)=>
    * {
-   *   var cell = evt.getProperty('cell');
+   *   let cell = evt.getProperty('cell');
    *   // do something with the cell and consume the
    *   // event to prevent in-place editing from start
    * });
@@ -2485,7 +2494,7 @@ class mxGraph extends mxEventSource {
    * cell - Optional <mxCell> under the mousepointer.
    */
   dblClick = (evt, cell) => {
-    var mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell', cell);
+    let mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell', cell);
     this.fireEvent(mxe);
 
     // Handles the event if it has not been consumed
@@ -2507,8 +2516,8 @@ class mxGraph extends mxEventSource {
    * state - Optional <mxCellState> that is associated with the event.
    */
   tapAndHold = (me) => {
-    var evt = me.getEvent();
-    var mxe = new mxEventObject(mxEvent.TAP_AND_HOLD, 'event', evt, 'cell', me.getCell());
+    let evt = me.getEvent();
+    let mxe = new mxEventObject(mxEvent.TAP_AND_HOLD, 'event', evt, 'cell', me.getCell());
 
     // LATER: Check if event should be consumed if me is consumed
     this.fireEvent(mxe);
@@ -2520,7 +2529,7 @@ class mxGraph extends mxEventSource {
 
     // Handles the event if it has not been consumed
     if (this.isEnabled() && !mxEvent.isConsumed(evt) && !mxe.isConsumed() && this.connectionHandler.isEnabled()) {
-      var state = this.view.getState(this.connectionHandler.marker.getCell(me));
+      let state = this.view.getState(this.connectionHandler.marker.getCell(me));
 
       if (state != null) {
         this.connectionHandler.marker.currentColor = this.connectionHandler.marker.validColor;
@@ -2543,15 +2552,15 @@ class mxGraph extends mxEventSource {
    */
   scrollPointToVisible = (x, y, extend, border) => {
     if (!this.timerAutoScroll && (this.ignoreScrollbars || mxUtils.hasScrollbars(this.container))) {
-      var c = this.container;
+      let c = this.container;
       border = (border != null) ? border : 20;
 
       if (x >= c.scrollLeft && y >= c.scrollTop && x <= c.scrollLeft + c.clientWidth &&
           y <= c.scrollTop + c.clientHeight) {
-        var dx = c.scrollLeft + c.clientWidth - x;
+        let dx = c.scrollLeft + c.clientWidth - x;
 
         if (dx < border) {
-          var old = c.scrollLeft;
+          let old = c.scrollLeft;
           c.scrollLeft += border - dx;
 
           // Automatically extends the canvas size to the bottom, right
@@ -2559,15 +2568,15 @@ class mxGraph extends mxEventSource {
           // canvas has been reached. Notes: Needs fix for IE.
           if (extend && old == c.scrollLeft) {
             if (this.dialect == mxConstants.DIALECT_SVG) {
-              var root = this.view.getDrawPane().ownerSVGElement;
-              var width = this.container.scrollWidth + border - dx;
+              let root = this.view.getDrawPane().ownerSVGElement;
+              let width = this.container.scrollWidth + border - dx;
 
               // Updates the clipping region. This is an expensive
               // operation that should not be executed too often.
               root.style.width = width + 'px';
             } else {
-              var width = Math.max(c.clientWidth, c.scrollWidth) + border - dx;
-              var canvas = this.view.getCanvas();
+              let width = Math.max(c.clientWidth, c.scrollWidth) + border - dx;
+              let canvas = this.view.getCanvas();
               canvas.style.width = width + 'px';
             }
 
@@ -2581,23 +2590,23 @@ class mxGraph extends mxEventSource {
           }
         }
 
-        var dy = c.scrollTop + c.clientHeight - y;
+        let dy = c.scrollTop + c.clientHeight - y;
 
         if (dy < border) {
-          var old = c.scrollTop;
+          let old = c.scrollTop;
           c.scrollTop += border - dy;
 
           if (old == c.scrollTop && extend) {
             if (this.dialect == mxConstants.DIALECT_SVG) {
-              var root = this.view.getDrawPane().ownerSVGElement;
-              var height = this.container.scrollHeight + border - dy;
+              let root = this.view.getDrawPane().ownerSVGElement;
+              let height = this.container.scrollHeight + border - dy;
 
               // Updates the clipping region. This is an expensive
               // operation that should not be executed too often.
               root.style.height = height + 'px';
             } else {
-              var height = Math.max(c.clientHeight, c.scrollHeight) + border - dy;
-              var canvas = this.view.getCanvas();
+              let height = Math.max(c.clientHeight, c.scrollHeight) + border - dy;
+              let canvas = this.view.getCanvas();
               canvas.style.height = height + 'px';
             }
 
@@ -2638,7 +2647,7 @@ class mxGraph extends mxEventSource {
    * width and height of the returned <mxRectangle>, respectively.
    */
   getBorderSizes = () => {
-    var css = mxUtils.getCurrentStyle(this.container);
+    let css = mxUtils.getCurrentStyle(this.container);
 
     return new mxRectangle(mxUtils.parseCssNumber(css.paddingLeft) +
         ((css.borderLeftStyle != 'none') ? mxUtils.parseCssNumber(css.borderLeftWidth) : 0),
@@ -2656,14 +2665,14 @@ class mxGraph extends mxEventSource {
    * Returns the preferred size of the background page if <preferPageSize> is true.
    */
   getPreferredPageSize = (bounds, width, height) => {
-    var scale = this.view.scale;
-    var tr = this.view.translate;
-    var fmt = this.pageFormat;
-    var ps = this.pageScale;
-    var page = new mxRectangle(0, 0, Math.ceil(fmt.width * ps), Math.ceil(fmt.height * ps));
+    let scale = this.view.scale;
+    let tr = this.view.translate;
+    let fmt = this.pageFormat;
+    let ps = this.pageScale;
+    let page = new mxRectangle(0, 0, Math.ceil(fmt.width * ps), Math.ceil(fmt.height * ps));
 
-    var hCount = (this.pageBreaksVisible) ? Math.ceil(width / page.width) : 1;
-    var vCount = (this.pageBreaksVisible) ? Math.ceil(height / page.height) : 1;
+    let hCount = (this.pageBreaksVisible) ? Math.ceil(width / page.width) : 1;
+    let vCount = (this.pageBreaksVisible) ? Math.ceil(height / page.height) : 1;
 
     return new mxRectangle(0, 0, hCount * page.width + 2 + tr.x, vCount * page.height + 2 + tr.y);
   };
@@ -2685,15 +2694,15 @@ class mxGraph extends mxEventSource {
    * To fit and center the graph, the following code can be used.
    *
    * (code)
-   * var margin = 2;
-   * var max = 3;
+   * let margin = 2;
+   * let max = 3;
    *
-   * var bounds = graph.getGraphBounds();
-   * var cw = graph.container.clientWidth - margin;
-   * var ch = graph.container.clientHeight - margin;
-   * var w = bounds.width / graph.view.scale;
-   * var h = bounds.height / graph.view.scale;
-   * var s = Math.min(max, Math.min(cw / w, ch / h));
+   * let bounds = graph.getGraphBounds();
+   * let cw = graph.container.clientWidth - margin;
+   * let ch = graph.container.clientHeight - margin;
+   * let w = bounds.width / graph.view.scale;
+   * let h = bounds.height / graph.view.scale;
+   * let s = Math.min(max, Math.min(cw / w, ch / h));
    *
    * graph.view.scaleAndTranslate(s,
    *   (margin + cw - w * s) / (2 * s) - bounds.x / graph.view.scale,
@@ -2724,10 +2733,10 @@ class mxGraph extends mxEventSource {
       ignoreHeight = (ignoreHeight != null) ? ignoreHeight : false;
 
       // Adds spacing and border from css
-      var cssBorder = this.getBorderSizes();
+      let cssBorder = this.getBorderSizes();
       var w1 = this.container.offsetWidth - cssBorder.x - cssBorder.width - 1;
       var h1 = (maxHeight != null) ? maxHeight : this.container.offsetHeight - cssBorder.y - cssBorder.height - 1;
-      var bounds = this.view.getGraphBounds();
+      let bounds = this.view.getGraphBounds();
 
       if (bounds.width > 0 && bounds.height > 0) {
         if (keepOrigin && bounds.x != null && bounds.y != null) {
@@ -2739,7 +2748,7 @@ class mxGraph extends mxEventSource {
         }
 
         // LATER: Use unscaled bounding boxes to fix rounding errors
-        var s = this.view.scale;
+        let s = this.view.scale;
         var w2 = bounds.width / s;
         var h2 = bounds.height / s;
 
@@ -2749,7 +2758,7 @@ class mxGraph extends mxEventSource {
           h2 = Math.max(h2, this.backgroundImage.height - bounds.y / s);
         }
 
-        var b = ((keepOrigin) ? border : 2 * border) + margin + 1;
+        let b = ((keepOrigin) ? border : 2 * border) + margin + 1;
 
         w1 -= b;
         h1 -= b;
@@ -2804,13 +2813,13 @@ class mxGraph extends mxEventSource {
    * SVG-bases browsers.
    */
   sizeDidChange = () => {
-    var bounds = this.getGraphBounds();
+    let bounds = this.getGraphBounds();
 
     if (this.container != null) {
-      var border = this.getBorder();
+      let border = this.getBorder();
 
-      var width = Math.max(0, bounds.x) + bounds.width + 2 * border;
-      var height = Math.max(0, bounds.y) + bounds.height + 2 * border;
+      let width = Math.max(0, bounds.x) + bounds.width + 2 * border;
+      let height = Math.max(0, bounds.y) + bounds.height + 2 * border;
 
       if (this.minimumContainerSize != null) {
         width = Math.max(width, this.minimumContainerSize.width);
@@ -2822,7 +2831,7 @@ class mxGraph extends mxEventSource {
       }
 
       if (this.preferPageSize || this.pageVisible) {
-        var size = this.getPreferredPageSize(bounds, Math.max(1, width), Math.max(1, height));
+        let size = this.getPreferredPageSize(bounds, Math.max(1, width), Math.max(1, height));
 
         if (size != null) {
           width = size.width * this.view.scale;
@@ -2839,7 +2848,7 @@ class mxGraph extends mxEventSource {
       height = Math.ceil(height);
 
       if (this.dialect == mxConstants.DIALECT_SVG) {
-        var root = this.view.getDrawPane().ownerSVGElement;
+        let root = this.view.getDrawPane().ownerSVGElement;
 
         if (root != null) {
           root.style.minWidth = Math.max(1, width) + 'px';
@@ -2885,13 +2894,13 @@ class mxGraph extends mxEventSource {
    * height - Specifies the height of the container in pixels.
    */
   updatePageBreaks = (visible, width, height) => {
-    var scale = this.view.scale;
-    var tr = this.view.translate;
-    var fmt = this.pageFormat;
-    var ps = scale * this.pageScale;
-    var bounds = new mxRectangle(0, 0, fmt.width * ps, fmt.height * ps);
+    let scale = this.view.scale;
+    let tr = this.view.translate;
+    let fmt = this.pageFormat;
+    let ps = scale * this.pageScale;
+    let bounds = new mxRectangle(0, 0, fmt.width * ps, fmt.height * ps);
 
-    var gb = mxRectangle.fromRectangle(this.getGraphBounds());
+    let gb = mxRectangle.fromRectangle(this.getGraphBounds());
     gb.width = Math.max(1, gb.width);
     gb.height = Math.max(1, gb.height);
 
@@ -2904,10 +2913,10 @@ class mxGraph extends mxEventSource {
     // Does not show page breaks if the scale is too small
     visible = visible && Math.min(bounds.width, bounds.height) > this.minPageBreakDist;
 
-    var horizontalCount = (visible) ? Math.ceil(gb.height / bounds.height) + 1 : 0;
-    var verticalCount = (visible) ? Math.ceil(gb.width / bounds.width) + 1 : 0;
-    var right = (verticalCount - 1) * bounds.width;
-    var bottom = (horizontalCount - 1) * bounds.height;
+    let horizontalCount = (visible) ? Math.ceil(gb.height / bounds.height) + 1 : 0;
+    let verticalCount = (visible) ? Math.ceil(gb.width / bounds.width) + 1 : 0;
+    let right = (verticalCount - 1) * bounds.width;
+    let bottom = (horizontalCount - 1) * bounds.height;
 
     if (this.horizontalPageBreaks == null && horizontalCount > 0) {
       this.horizontalPageBreaks = [];
@@ -2917,12 +2926,12 @@ class mxGraph extends mxEventSource {
       this.verticalPageBreaks = [];
     }
 
-    var drawPageBreaks = (breaks) => {
+    let drawPageBreaks = (breaks) => {
       if (breaks != null) {
-        var count = (breaks == this.horizontalPageBreaks) ? horizontalCount : verticalCount;
+        let count = (breaks == this.horizontalPageBreaks) ? horizontalCount : verticalCount;
 
-        for (var i = 0; i <= count; i++) {
-          var pts = (breaks == this.horizontalPageBreaks) ?
+        for (let i = 0; i <= count; i++) {
+          let pts = (breaks == this.horizontalPageBreaks) ?
               [new mxPoint(Math.round(bounds.x), Math.round(bounds.y + i * bounds.height)),
                 new mxPoint(Math.round(bounds.x + right), Math.round(bounds.y + i * bounds.height))] :
               [new mxPoint(Math.round(bounds.x + i * bounds.width), Math.round(bounds.y)),
@@ -2932,7 +2941,7 @@ class mxGraph extends mxEventSource {
             breaks[i].points = pts;
             breaks[i].redraw();
           } else {
-            var pageBreak = new mxPolyline(pts, this.pageBreakColor);
+            let pageBreak = new mxPolyline(pts, this.pageBreakColor);
             pageBreak.dialect = this.dialect;
             pageBreak.pointerEvents = false;
             pageBreak.isDashed = this.pageBreakDashed;
@@ -2943,7 +2952,7 @@ class mxGraph extends mxEventSource {
           }
         }
 
-        for (var i = count; i < breaks.length; i++) {
+        for (let i = count; i < breaks.length; i++) {
           breaks[i].destroy();
         }
 
@@ -2971,7 +2980,7 @@ class mxGraph extends mxEventSource {
    * ignoreState - Optional boolean that specifies if the cell state should be ignored.
    */
   getCurrentCellStyle = (cell, ignoreState) => {
-    var state = (ignoreState) ? null : this.view.getState(cell);
+    let state = (ignoreState) ? null : this.view.getState(cell);
 
     return (state != null) ? state.style : this.getCellStyle(cell);
   };
@@ -2991,8 +3000,8 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> whose style should be returned as an array.
    */
   getCellStyle = (cell) => {
-    var stylename = this.model.getStyle(cell);
-    var style = null;
+    let stylename = this.model.getStyle(cell);
+    let style = null;
 
     // Gets the default style for the cell
     if (this.model.isEdge(cell)) {
@@ -3023,8 +3032,8 @@ class mxGraph extends mxEventSource {
    */
   postProcessCellStyle = (style) => {
     if (style != null) {
-      var key = style[mxConstants.STYLE_IMAGE];
-      var image = this.getImageFromBundles(key);
+      let key = style[mxConstants.STYLE_IMAGE];
+      let image = this.getImageFromBundles(key);
 
       if (image != null) {
         style[mxConstants.STYLE_IMAGE] = image;
@@ -3033,15 +3042,15 @@ class mxGraph extends mxEventSource {
       }
 
       // Converts short data uris to normal data uris
-      if (image != null && image.substring(0, 11) == 'data:image/') {
-        if (image.substring(0, 20) == 'data:image/svg+xml,<') {
+      if (image != null && image.substring(0, 11) === 'data:image/') {
+        if (image.substring(0, 20) === 'data:image/svg+xml,<') {
           // Required for FF and IE11
           image = image.substring(0, 19) + encodeURIComponent(image.substring(19));
-        } else if (image.substring(0, 22) != 'data:image/svg+xml,%3C') {
-          var comma = image.indexOf(',');
+        } else if (image.substring(0, 22) !== 'data:image/svg+xml,%3C') {
+          let comma = image.indexOf(',');
 
           // Adds base64 encoding prefix if needed
-          if (comma > 0 && image.substring(comma - 7, comma + 1) != ';base64,') {
+          if (comma > 0 && image.substring(comma - 7, comma + 1) !== ';base64,') {
             image = image.substring(0, comma) + ';base64,'
                 + image.substring(comma + 1);
           }
@@ -3072,7 +3081,7 @@ class mxGraph extends mxEventSource {
     if (cells != null) {
       this.model.beginUpdate();
       try {
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           this.model.setStyle(cells[i], style);
         }
       } finally {
@@ -3121,10 +3130,10 @@ class mxGraph extends mxEventSource {
   toggleCellStyles = (key, defaultValue, cells) => {
     defaultValue = (defaultValue != null) ? defaultValue : false;
     cells = cells || this.getSelectionCells();
-    var value = null;
+    let value = null;
 
     if (cells != null && cells.length > 0) {
-      var style = this.getCurrentCellStyle(cells[0]);
+      let style = this.getCurrentCellStyle(cells[0]);
       value = (mxUtils.getValue(style, key, defaultValue)) ? 0 : 1;
       this.setCellStyles(key, value, cells);
     }
@@ -3189,9 +3198,9 @@ class mxGraph extends mxEventSource {
 
     if (cells != null && cells.length > 0) {
       if (value == null) {
-        var style = this.getCurrentCellStyle(cells[0]);
-        var current = parseInt(style[key] || 0);
-        value = !((current & flag) == flag);
+        let style = this.getCurrentCellStyle(cells[0]);
+        let current = parseInt(style[key] || 0);
+        value = !((current & flag) === flag);
       }
 
       mxUtils.setCellStyleFlags(this.model, cells, key, flag, value);
@@ -3223,32 +3232,32 @@ class mxGraph extends mxEventSource {
     if (cells != null && cells.length > 1) {
       // Finds the required coordinate for the alignment
       if (param == null) {
-        for (var i = 0; i < cells.length; i++) {
-          var state = this.view.getState(cells[i]);
+        for (let i = 0; i < cells.length; i++) {
+          let state = this.view.getState(cells[i]);
 
           if (state != null && !this.model.isEdge(cells[i])) {
             if (param == null) {
-              if (align == mxConstants.ALIGN_CENTER) {
+              if (align === mxConstants.ALIGN_CENTER) {
                 param = state.x + state.width / 2;
                 break;
-              } else if (align == mxConstants.ALIGN_RIGHT) {
+              } else if (align === mxConstants.ALIGN_RIGHT) {
                 param = state.x + state.width;
-              } else if (align == mxConstants.ALIGN_TOP) {
+              } else if (align === mxConstants.ALIGN_TOP) {
                 param = state.y;
-              } else if (align == mxConstants.ALIGN_MIDDLE) {
+              } else if (align === mxConstants.ALIGN_MIDDLE) {
                 param = state.y + state.height / 2;
                 break;
-              } else if (align == mxConstants.ALIGN_BOTTOM) {
+              } else if (align === mxConstants.ALIGN_BOTTOM) {
                 param = state.y + state.height;
               } else {
                 param = state.x;
               }
             } else {
-              if (align == mxConstants.ALIGN_RIGHT) {
+              if (align === mxConstants.ALIGN_RIGHT) {
                 param = Math.max(param, state.x + state.width);
-              } else if (align == mxConstants.ALIGN_TOP) {
+              } else if (align === mxConstants.ALIGN_TOP) {
                 param = Math.min(param, state.y);
-              } else if (align == mxConstants.ALIGN_BOTTOM) {
+              } else if (align === mxConstants.ALIGN_BOTTOM) {
                 param = Math.max(param, state.y + state.height);
               } else {
                 param = Math.min(param, state.x);
@@ -3260,28 +3269,28 @@ class mxGraph extends mxEventSource {
 
       // Aligns the cells to the coordinate
       if (param != null) {
-        var s = this.view.scale;
+        let s = this.view.scale;
 
         this.model.beginUpdate();
         try {
-          for (var i = 0; i < cells.length; i++) {
-            var state = this.view.getState(cells[i]);
+          for (let i = 0; i < cells.length; i++) {
+            let state = this.view.getState(cells[i]);
 
             if (state != null) {
-              var geo = this.getCellGeometry(cells[i]);
+              let geo = this.getCellGeometry(cells[i]);
 
               if (geo != null && !this.model.isEdge(cells[i])) {
                 geo = geo.clone();
 
-                if (align == mxConstants.ALIGN_CENTER) {
+                if (align === mxConstants.ALIGN_CENTER) {
                   geo.x += (param - state.x - state.width / 2) / s;
-                } else if (align == mxConstants.ALIGN_RIGHT) {
+                } else if (align === mxConstants.ALIGN_RIGHT) {
                   geo.x += (param - state.x - state.width) / s;
-                } else if (align == mxConstants.ALIGN_TOP) {
+                } else if (align === mxConstants.ALIGN_TOP) {
                   geo.y += (param - state.y) / s;
-                } else if (align == mxConstants.ALIGN_MIDDLE) {
+                } else if (align === mxConstants.ALIGN_MIDDLE) {
                   geo.y += (param - state.y - state.height / 2) / s;
-                } else if (align == mxConstants.ALIGN_BOTTOM) {
+                } else if (align === mxConstants.ALIGN_BOTTOM) {
                   geo.y += (param - state.y - state.height) / s;
                 } else {
                   geo.x += (param - state.x) / s;
@@ -3318,10 +3327,10 @@ class mxGraph extends mxEventSource {
    * {
    *   if (edge != null)
    *   {
-   *     var style = this.getCurrentCellStyle(edge);
-   *     var elbow = mxUtils.getValue(style, mxConstants.STYLE_ELBOW,
+   *     let style = this.getCurrentCellStyle(edge);
+   *     let elbow = mxUtils.getValue(style, mxConstants.STYLE_ELBOW,
    *         mxConstants.ELBOW_HORIZONTAL);
-   *     var value = (elbow == mxConstants.ELBOW_HORIZONTAL) ?
+   *     let value = (elbow == mxConstants.ELBOW_HORIZONTAL) ?
    *         mxConstants.ELBOW_VERTICAL : mxConstants.ELBOW_HORIZONTAL;
    *     this.setCellStyles(mxConstants.STYLE_ELBOW, value, [edge]);
    *   }
@@ -3337,9 +3346,9 @@ class mxGraph extends mxEventSource {
         this.alternateEdgeStyle != null) {
       this.model.beginUpdate();
       try {
-        var style = this.model.getStyle(edge);
+        let style = this.model.getStyle(edge);
 
-        if (style == null || style.length == 0) {
+        if (style == null || style.length === 0) {
           this.model.setStyle(edge, this.alternateEdgeStyle);
         } else {
           this.model.setStyle(edge, null);
@@ -3371,10 +3380,10 @@ class mxGraph extends mxEventSource {
    * Removes the specified <mxImageBundle>.
    */
   removeImageBundle = (bundle) => {
-    var tmp = [];
+    let tmp = [];
 
-    for (var i = 0; i < this.imageBundles.length; i++) {
-      if (this.imageBundles[i] != bundle) {
+    for (let i = 0; i < this.imageBundles.length; i++) {
+      if (this.imageBundles[i] !== bundle) {
         tmp.push(this.imageBundles[i]);
       }
     }
@@ -3390,8 +3399,8 @@ class mxGraph extends mxEventSource {
    */
   getImageFromBundles = (key) => {
     if (key != null) {
-      for (var i = 0; i < this.imageBundles.length; i++) {
-        var image = this.imageBundles[i].getImage(key);
+      for (let i = 0; i < this.imageBundles.length; i++) {
+        let image = this.imageBundles[i].getImage(key);
 
         if (image != null) {
           return image;
@@ -3451,8 +3460,8 @@ class mxGraph extends mxEventSource {
     if (cells != null) {
       this.model.beginUpdate();
       try {
-        for (var i = 0; i < cells.length; i++) {
-          var parent = this.model.getParent(cells[i]);
+        for (let i = 0; i < cells.length; i++) {
+          let parent = this.model.getParent(cells[i]);
 
           if (back) {
             this.model.add(parent, cells[i], i);
@@ -3503,11 +3512,11 @@ class mxGraph extends mxEventSource {
       group = this.createGroupCell(cells);
     }
 
-    var bounds = this.getBoundsForGroup(group, cells, border);
+    let bounds = this.getBoundsForGroup(group, cells, border);
 
     if (cells.length > 1 && bounds != null) {
       // Uses parent of group or previous parent of first child
-      var parent = this.model.getParent(group);
+      let parent = this.model.getParent(group);
 
       if (parent == null) {
         parent = this.model.getParent(cells[0]);
@@ -3522,7 +3531,7 @@ class mxGraph extends mxEventSource {
         }
 
         // Adds the group into the parent
-        var index = this.model.getChildCount(parent);
+        let index = this.model.getChildCount(parent);
         this.cellsAdded([group], parent, index, null, null, false, false, false);
 
         // Adds the children into the group and moves
@@ -3550,15 +3559,15 @@ class mxGraph extends mxEventSource {
    * in the given array.
    */
   getCellsForGroup = (cells) => {
-    var result = [];
+    let result = [];
 
     if (cells != null && cells.length > 0) {
-      var parent = this.model.getParent(cells[0]);
+      let parent = this.model.getParent(cells[0]);
       result.push(cells[0]);
 
       // Filters selection cells with the same parent
-      for (var i = 1; i < cells.length; i++) {
-        if (this.model.getParent(cells[i]) == parent) {
+      for (let i = 1; i < cells.length; i++) {
+        if (this.model.getParent(cells[i]) === parent) {
           result.push(cells[i]);
         }
       }
@@ -3573,11 +3582,11 @@ class mxGraph extends mxEventSource {
    * Returns the bounds to be used for the given group and children.
    */
   getBoundsForGroup = (group, children, border) => {
-    var result = this.getBoundingBoxFromGeometry(children, true);
+    let result = this.getBoundingBoxFromGeometry(children, true);
 
     if (result != null) {
       if (this.isSwimlane(group)) {
-        var size = this.getStartSize(group);
+        let size = this.getStartSize(group);
 
         result.x -= size.width;
         result.y -= size.height;
@@ -3606,17 +3615,17 @@ class mxGraph extends mxEventSource {
    * The following code can be used to set the style of new group cells.
    *
    * (code)
-   * var graphCreateGroupCell = graph.createGroupCell;
+   * let graphCreateGroupCell = graph.createGroupCell;
    * graph.createGroupCell = (cells)=>
    * {
-   *   var group = graphCreateGroupCell.apply(this, arguments);
+   *   let group = graphCreateGroupCell.apply(this, arguments);
    *   group.setStyle('group');
    *
    *   return group;
    * };
    */
   createGroupCell = (cells) => {
-    var group = new mxCell('');
+    let group = new mxCell('');
     group.setVertex(true);
     group.setConnectable(false);
 
@@ -3636,7 +3645,7 @@ class mxGraph extends mxEventSource {
    * selection cells are used.
    */
   ungroupCells = (cells) => {
-    var result = [];
+    let result = [];
 
     if (cells == null) {
       cells = this.getCellsForUngroup();
@@ -3645,21 +3654,21 @@ class mxGraph extends mxEventSource {
     if (cells != null && cells.length > 0) {
       this.model.beginUpdate();
       try {
-        for (var i = 0; i < cells.length; i++) {
-          var children = this.model.getChildren(cells[i]);
+        for (let i = 0; i < cells.length; i++) {
+          let children = this.model.getChildren(cells[i]);
 
           if (children != null && children.length > 0) {
             children = children.slice();
-            var parent = this.model.getParent(cells[i]);
-            var index = this.model.getChildCount(parent);
+            let parent = this.model.getParent(cells[i]);
+            let index = this.model.getChildCount(parent);
 
             this.cellsAdded(children, parent, index, null, null, true);
             result = result.concat(children);
 
             // Fix relative child cells
-            for (var j = 0; j < children.length; j++) {
-              var state = this.view.getState(children[j]);
-              var geo = this.getCellGeometry(children[j]);
+            for (let j = 0; j < children.length; j++) {
+              let state = this.view.getState(children[j]);
+              let geo = this.getCellGeometry(children[j]);
 
               if (state != null && geo != null && geo.relative) {
                 geo = geo.clone();
@@ -3689,12 +3698,12 @@ class mxGraph extends mxEventSource {
    * Returns the selection cells that can be ungrouped.
    */
   getCellsForUngroup = () => {
-    var cells = this.getSelectionCells();
+    let cells = this.getSelectionCells();
 
     // Finds the cells with children
-    var tmp = [];
+    let tmp = [];
 
-    for (var i = 0; i < cells.length; i++) {
+    for (let i = 0; i < cells.length; i++) {
       if (this.model.isVertex(cells[i]) &&
           this.model.getChildCount(cells[i]) > 0) {
         tmp.push(cells[i]);
@@ -3731,18 +3740,16 @@ class mxGraph extends mxEventSource {
     if (cells == null) {
       cells = this.getSelectionCells();
     }
-
     this.model.beginUpdate();
     try {
-      var parent = this.getDefaultParent();
-      var index = this.model.getChildCount(parent);
+      let parent = this.getDefaultParent();
+      let index = this.model.getChildCount(parent);
 
       this.cellsAdded(cells, parent, index, null, null, true);
       this.fireEvent(new mxEventObject(mxEvent.REMOVE_CELLS_FROM_PARENT, 'cells', cells));
     } finally {
       this.model.endUpdate();
     }
-
     return cells;
   };
 
@@ -3780,18 +3787,18 @@ class mxGraph extends mxEventSource {
 
     this.model.beginUpdate();
     try {
-      for (var i = cells.length - 1; i >= 0; i--) {
-        var geo = this.getCellGeometry(cells[i]);
+      for (let i = cells.length - 1; i >= 0; i--) {
+        let geo = this.getCellGeometry(cells[i]);
 
         if (geo != null) {
-          var children = this.getChildCells(cells[i]);
+          let children = this.getChildCells(cells[i]);
 
           if (children != null && children.length > 0) {
-            var bounds = this.getBoundingBoxFromGeometry(children, true);
+            let bounds = this.getBoundingBoxFromGeometry(children, true);
 
             if (bounds != null && bounds.width > 0 && bounds.height > 0) {
               // Adds the size of the title area for swimlanes
-              var size = (this.isSwimlane(cells[i])) ?
+              let size = (this.isSwimlane(cells[i])) ?
                   this.getActualStartSize(cells[i], true) : new mxRectangle();
               geo = geo.clone();
 
@@ -3828,12 +3835,12 @@ class mxGraph extends mxEventSource {
    * cells - Array of <mxCells> whose bounding box should be returned.
    */
   getBoundingBox = (cells) => {
-    var result = null;
+    let result = null;
 
     if (cells != null && cells.length > 0) {
-      for (var i = 0; i < cells.length; i++) {
+      for (let i = 0; i < cells.length; i++) {
         if (this.model.isVertex(cells[i]) || this.model.isEdge(cells[i])) {
-          var bbox = this.view.getBoundingBox(this.view.getState(cells[i]), true);
+          let bbox = this.view.getBoundingBox(this.view.getState(cells[i]), true);
 
           if (bbox != null) {
             if (result == null) {
@@ -3890,46 +3897,46 @@ class mxGraph extends mxEventSource {
    */
   cloneCells = (cells, allowInvalidEdges, mapping, keepPosition) => {
     allowInvalidEdges = (allowInvalidEdges != null) ? allowInvalidEdges : true;
-    var clones = null;
+    let clones = null;
 
     if (cells != null) {
       // Creates a dictionary for fast lookups
-      var dict = new mxDictionary();
-      var tmp = [];
+      let dict = new mxDictionary();
+      let tmp = [];
 
-      for (var i = 0; i < cells.length; i++) {
+      for (let i = 0; i < cells.length; i++) {
         dict.put(cells[i], true);
         tmp.push(cells[i]);
       }
 
       if (tmp.length > 0) {
-        var scale = this.view.scale;
-        var trans = this.view.translate;
+        let scale = this.view.scale;
+        let trans = this.view.translate;
         clones = this.model.cloneCells(cells, true, mapping);
 
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           if (!allowInvalidEdges && this.model.isEdge(clones[i]) &&
               this.getEdgeValidationError(clones[i],
                   this.model.getTerminal(clones[i], true),
                   this.model.getTerminal(clones[i], false)) != null) {
             clones[i] = null;
           } else {
-            var g = this.model.getGeometry(clones[i]);
+            let g = this.model.getGeometry(clones[i]);
 
             if (g != null) {
-              var state = this.view.getState(cells[i]);
-              var pstate = this.view.getState(this.model.getParent(cells[i]));
+              let state = this.view.getState(cells[i]);
+              let pstate = this.view.getState(this.model.getParent(cells[i]));
 
               if (state != null && pstate != null) {
-                var dx = (keepPosition) ? 0 : pstate.origin.x;
-                var dy = (keepPosition) ? 0 : pstate.origin.y;
+                let dx = (keepPosition) ? 0 : pstate.origin.x;
+                let dy = (keepPosition) ? 0 : pstate.origin.y;
 
                 if (this.model.isEdge(clones[i])) {
-                  var pts = state.absolutePoints;
+                  let pts = state.absolutePoints;
 
                   if (pts != null) {
                     // Checks if the source is cloned or sets the terminal point
-                    var src = this.model.getTerminal(cells[i], true);
+                    let src = this.model.getTerminal(cells[i], true);
 
                     while (src != null && !dict.get(src)) {
                       src = this.model.getParent(src);
@@ -3942,13 +3949,13 @@ class mxGraph extends mxEventSource {
                     }
 
                     // Checks if the target is cloned or sets the terminal point
-                    var trg = this.model.getTerminal(cells[i], false);
+                    let trg = this.model.getTerminal(cells[i], false);
 
                     while (trg != null && !dict.get(trg)) {
                       trg = this.model.getParent(trg);
                     }
 
-                    var n = pts.length - 1;
+                    let n = pts.length - 1;
 
                     if (trg == null && pts[n] != null) {
                       g.setTerminalPoint(
@@ -3957,10 +3964,10 @@ class mxGraph extends mxEventSource {
                     }
 
                     // Translates the control points
-                    var points = g.points;
+                    let points = g.points;
 
                     if (points != null) {
-                      for (var j = 0; j < points.length; j++) {
+                      for (let j = 0; j < points.length; j++) {
                         points[j].x += dx;
                         points[j].y += dy;
                       }
@@ -3995,8 +4002,8 @@ class mxGraph extends mxEventSource {
    * coordinates using <mxGraph.getPointForEvent> as follows:
    *
    * (code)
-   * var pt = graph.getPointForEvent(evt);
-   * var parent = graph.getDefaultParent();
+   * let pt = graph.getPointForEvent(evt);
+   * let parent = graph.getDefaultParent();
    * graph.insertVertex(parent, null,
    *       'Hello, World!', x, y, 220, 30);
    * (end)
@@ -4117,7 +4124,7 @@ class mxGraph extends mxEventSource {
    */
   createEdge = (parent, id, value, source, target, style) => {
     // Creates the edge
-    var edge = new mxCell(value, new mxGeometry(), style);
+    let edge = new mxCell(value, new mxGeometry(), style);
     edge.setId(id);
     edge.setEdge(true);
     edge.geometry.relative = true;
@@ -4214,25 +4221,25 @@ class mxGraph extends mxEventSource {
     if (cells != null && parent != null && index != null) {
       this.model.beginUpdate();
       try {
-        var parentState = (absolute) ? this.view.getState(parent) : null;
+        let parentState = (absolute) ? this.view.getState(parent) : null;
         var o1 = (parentState != null) ? parentState.origin : null;
-        var zero = new mxPoint(0, 0);
+        let zero = new mxPoint(0, 0);
 
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           if (cells[i] == null) {
             index--;
           } else {
-            var previous = this.model.getParent(cells[i]);
+            let previous = this.model.getParent(cells[i]);
 
             // Keeps the cell at its absolute location
-            if (o1 != null && cells[i] != parent && parent != previous) {
-              var oldState = this.view.getState(previous);
+            if (o1 != null && cells[i] !== parent && parent !== previous) {
+              let oldState = this.view.getState(previous);
               var o2 = (oldState != null) ? oldState.origin : zero;
-              var geo = this.model.getGeometry(cells[i]);
+              let geo = this.model.getGeometry(cells[i]);
 
               if (geo != null) {
-                var dx = o2.x - o1.x;
-                var dy = o2.y - o1.y;
+                let dx = o2.x - o1.x;
+                let dy = o2.y - o1.y;
 
                 // FIXME: Cells should always be inserted first before any other edit
                 // to avoid forward references in sessions.
@@ -4251,7 +4258,7 @@ class mxGraph extends mxEventSource {
 
             // Decrements all following indices
             // if cell is already in parent
-            if (parent == previous && index + i > this.model.getChildCount(parent)) {
+            if (parent === previous && index + i > this.model.getChildCount(parent)) {
               index--;
             }
 
@@ -4308,9 +4315,9 @@ class mxGraph extends mxEventSource {
     recurse = (recurse != null) ? recurse : true;
 
     if (recurse) {
-      var childCount = this.model.getChildCount(cell);
+      let childCount = this.model.getChildCount(cell);
 
-      for (var i = 0; i < childCount; i++) {
+      for (let i = 0; i < childCount; i++) {
         this.autoSizeCell(this.model.getChildAt(cell, i));
       }
     }
@@ -4352,14 +4359,14 @@ class mxGraph extends mxEventSource {
 
       // Removes edges that are currently not
       // visible as those cannot be updated
-      var edges = this.getDeletableCells(this.getAllEdges(cells));
-      var dict = new mxDictionary();
+      let edges = this.getDeletableCells(this.getAllEdges(cells));
+      let dict = new mxDictionary();
 
-      for (var i = 0; i < cells.length; i++) {
+      for (let i = 0; i < cells.length; i++) {
         dict.put(cells[i], true);
       }
 
-      for (var i = 0; i < edges.length; i++) {
+      for (let i = 0; i < edges.length; i++) {
         if (this.view.getState(edges[i]) == null &&
             !dict.get(edges[i])) {
           dict.put(edges[i], true);
@@ -4392,33 +4399,33 @@ class mxGraph extends mxEventSource {
    */
   cellsRemoved = (cells) => {
     if (cells != null && cells.length > 0) {
-      var scale = this.view.scale;
-      var tr = this.view.translate;
+      let scale = this.view.scale;
+      let tr = this.view.translate;
 
       this.model.beginUpdate();
       try {
         // Creates hashtable for faster lookup
-        var dict = new mxDictionary();
+        let dict = new mxDictionary();
 
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           dict.put(cells[i], true);
         }
 
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           // Disconnects edges which are not being removed
-          var edges = this.getAllEdges([cells[i]]);
+          let edges = this.getAllEdges([cells[i]]);
 
-          var disconnectTerminal = mxUtils.bind(this, (edge, source) => {
-            var geo = this.model.getGeometry(edge);
+          let disconnectTerminal = mxUtils.bind(this, (edge, source) => {
+            let geo = this.model.getGeometry(edge);
 
             if (geo != null) {
               // Checks if terminal is being removed
-              var terminal = this.model.getTerminal(edge, source);
-              var connected = false;
-              var tmp = terminal;
+              let terminal = this.model.getTerminal(edge, source);
+              let connected = false;
+              let tmp = terminal;
 
               while (tmp != null) {
-                if (cells[i] == tmp) {
+                if (cells[i] === tmp) {
                   connected = true;
                   break;
                 }
@@ -4428,11 +4435,11 @@ class mxGraph extends mxEventSource {
 
               if (connected) {
                 geo = geo.clone();
-                var state = this.view.getState(edge);
+                let state = this.view.getState(edge);
 
                 if (state != null && state.absolutePoints != null) {
-                  var pts = state.absolutePoints;
-                  var n = (source) ? 0 : pts.length - 1;
+                  let pts = state.absolutePoints;
+                  let n = (source) ? 0 : pts.length - 1;
 
                   geo.setTerminalPoint(new mxPoint(
                       pts[n].x / scale - tr.x - state.origin.x,
@@ -4443,7 +4450,7 @@ class mxGraph extends mxEventSource {
                   // KNOWN: Should recurse to find parent offset
                   // of edge for nested groups but invisible edges
                   // should be removed in removeCells step
-                  var tstate = this.view.getState(terminal);
+                  let tstate = this.view.getState(terminal);
 
                   if (tstate != null) {
                     geo.setTerminalPoint(new mxPoint(
@@ -4458,7 +4465,7 @@ class mxGraph extends mxEventSource {
             }
           });
 
-          for (var j = 0; j < edges.length; j++) {
+          for (let j = 0; j < edges.length; j++) {
             if (!dict.get(edges[j])) {
               dict.put(edges[j], true);
               disconnectTerminal(edges[j], true);
@@ -4501,7 +4508,7 @@ class mxGraph extends mxEventSource {
     dy = dy || 0;
 
     parent = (parent != null) ? parent : this.model.getParent(edge);
-    var source = this.model.getTerminal(edge, true);
+    let source = this.model.getTerminal(edge, true);
 
     this.model.beginUpdate();
     try {
@@ -4509,13 +4516,13 @@ class mxGraph extends mxEventSource {
         newEdge = this.cloneCell(edge);
 
         // Removes waypoints before/after new cell
-        var state = this.view.getState(edge);
-        var geo = this.getCellGeometry(newEdge);
+        let state = this.view.getState(edge);
+        let geo = this.getCellGeometry(newEdge);
 
         if (geo != null && geo.points != null && state != null) {
-          var t = this.view.translate;
-          var s = this.view.scale;
-          var idx = mxUtils.findNearestSegment(state, (dx + t.x) * s, (dy + t.y) * s);
+          let t = this.view.translate;
+          let s = this.view.scale;
+          let idx = mxUtils.findNearestSegment(state, (dx + t.x) * s, (dy + t.y) * s);
           geo.points = geo.points.slice(0, idx);
 
           geo = this.getCellGeometry(edge);
@@ -4599,7 +4606,7 @@ class mxGraph extends mxEventSource {
     if (cells != null && cells.length > 0) {
       this.model.beginUpdate();
       try {
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           this.model.setVisible(cells[i], show);
         }
       } finally {
@@ -4672,9 +4679,9 @@ class mxGraph extends mxEventSource {
     if (cells != null && cells.length > 0) {
       this.model.beginUpdate();
       try {
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           if ((!checkFoldable || this.isCellFoldable(cells[i], collapse)) &&
-              collapse != this.isCellCollapsed(cells[i])) {
+              collapse !== this.isCellCollapsed(cells[i])) {
             this.model.setCollapsed(cells[i], collapse);
             this.swapBounds(cells[i], collapse);
 
@@ -4683,7 +4690,7 @@ class mxGraph extends mxEventSource {
             }
 
             if (recurse) {
-              var children = this.model.getChildren(cells[i]);
+              let children = this.model.getChildren(cells[i]);
               this.cellsFolded(children, collapse, recurse);
             }
 
@@ -4712,7 +4719,7 @@ class mxGraph extends mxEventSource {
    */
   swapBounds = (cell, willCollapse) => {
     if (cell != null) {
-      var geo = this.model.getGeometry(cell);
+      let geo = this.model.getGeometry(cell);
 
       if (geo != null) {
         geo = geo.clone();
@@ -4743,18 +4750,18 @@ class mxGraph extends mxEventSource {
    */
   updateAlternateBounds = (cell, geo, willCollapse) => {
     if (cell != null && geo != null) {
-      var style = this.getCurrentCellStyle(cell);
+      let style = this.getCurrentCellStyle(cell);
 
       if (geo.alternateBounds == null) {
-        var bounds = geo;
+        let bounds = geo;
 
         if (this.collapseToPreferredSize) {
-          var tmp = this.getPreferredSizeForCell(cell);
+          let tmp = this.getPreferredSizeForCell(cell);
 
           if (tmp != null) {
             bounds = tmp;
 
-            var startSize = mxUtils.getValue(style, mxConstants.STYLE_STARTSIZE);
+            let startSize = mxUtils.getValue(style, mxConstants.STYLE_STARTSIZE);
 
             if (startSize > 0) {
               bounds.height = Math.max(bounds.height, startSize);
@@ -4769,14 +4776,14 @@ class mxGraph extends mxEventSource {
         geo.alternateBounds.x = geo.x;
         geo.alternateBounds.y = geo.y;
 
-        var alpha = mxUtils.toRadians(style[mxConstants.STYLE_ROTATION] || 0);
+        let alpha = mxUtils.toRadians(style[mxConstants.STYLE_ROTATION] || 0);
 
-        if (alpha != 0) {
-          var dx = geo.alternateBounds.getCenterX() - geo.getCenterX();
-          var dy = geo.alternateBounds.getCenterY() - geo.getCenterY();
+        if (alpha !== 0) {
+          let dx = geo.alternateBounds.getCenterX() - geo.getCenterX();
+          let dy = geo.alternateBounds.getCenterY() - geo.getCenterY();
 
-          var cos = Math.cos(alpha);
-          var sin = Math.sin(alpha);
+          let cos = Math.cos(alpha);
+          let sin = Math.sin(alpha);
 
           var dx2 = cos * dx - sin * dy;
           var dy2 = sin * dx + cos * dy;
@@ -4795,7 +4802,7 @@ class mxGraph extends mxEventSource {
    * to a cell or one of its descendants.
    */
   addAllEdges = (cells) => {
-    var allCells = cells.slice();
+    let allCells = cells.slice();
 
     return mxUtils.removeDuplicates(allCells.concat(this.getAllEdges(cells)));
   };
@@ -4806,18 +4813,18 @@ class mxGraph extends mxEventSource {
    * Returns all edges connected to the given cells or its descendants.
    */
   getAllEdges = (cells) => {
-    var edges = [];
+    let edges = [];
 
     if (cells != null) {
-      for (var i = 0; i < cells.length; i++) {
-        var edgeCount = this.model.getEdgeCount(cells[i]);
+      for (let i = 0; i < cells.length; i++) {
+        let edgeCount = this.model.getEdgeCount(cells[i]);
 
-        for (var j = 0; j < edgeCount; j++) {
+        for (let j = 0; j < edgeCount; j++) {
           edges.push(this.model.getEdgeAt(cells[i], j));
         }
 
         // Recurses
-        var children = this.model.getChildren(cells[i]);
+        let children = this.model.getChildren(cells[i]);
         edges = edges.concat(this.getAllEdges(children));
       }
     }
@@ -4869,16 +4876,16 @@ class mxGraph extends mxEventSource {
     if (cell != null) {
       this.model.beginUpdate();
       try {
-        var size = this.getPreferredSizeForCell(cell);
-        var geo = this.model.getGeometry(cell);
+        let size = this.getPreferredSizeForCell(cell);
+        let geo = this.model.getGeometry(cell);
 
         if (size != null && geo != null) {
-          var collapsed = this.isCellCollapsed(cell);
+          let collapsed = this.isCellCollapsed(cell);
           geo = geo.clone();
 
           if (this.isSwimlane(cell)) {
-            var style = this.getCellStyle(cell);
-            var cellStyle = this.model.getStyle(cell);
+            let style = this.getCellStyle(cell);
+            let cellStyle = this.model.getStyle(cell);
 
             if (cellStyle == null) {
               cellStyle = '';
@@ -4906,20 +4913,20 @@ class mxGraph extends mxEventSource {
 
             this.model.setStyle(cell, cellStyle);
           } else {
-            var state = this.view.createState(cell);
-            var align = (state.style[mxConstants.STYLE_ALIGN] || mxConstants.ALIGN_CENTER);
+            let state = this.view.createState(cell);
+            let align = (state.style[mxConstants.STYLE_ALIGN] || mxConstants.ALIGN_CENTER);
 
-            if (align == mxConstants.ALIGN_RIGHT) {
+            if (align === mxConstants.ALIGN_RIGHT) {
               geo.x += geo.width - size.width;
-            } else if (align == mxConstants.ALIGN_CENTER) {
+            } else if (align === mxConstants.ALIGN_CENTER) {
               geo.x += Math.round((geo.width - size.width) / 2);
             }
 
-            var valign = this.getVerticalAlign(state);
+            let valign = this.getVerticalAlign(state);
 
-            if (valign == mxConstants.ALIGN_BOTTOM) {
+            if (valign === mxConstants.ALIGN_BOTTOM) {
               geo.y += geo.height - size.height;
-            } else if (valign == mxConstants.ALIGN_MIDDLE) {
+            } else if (valign === mxConstants.ALIGN_MIDDLE) {
               geo.y += Math.round((geo.height - size.height) / 2);
             }
 
@@ -4928,14 +4935,14 @@ class mxGraph extends mxEventSource {
           }
 
           if (!ignoreChildren && !collapsed) {
-            var bounds = this.view.getBounds(this.model.getChildren(cell));
+            let bounds = this.view.getBounds(this.model.getChildren(cell));
 
             if (bounds != null) {
-              var tr = this.view.translate;
-              var scale = this.view.scale;
+              let tr = this.view.translate;
+              let scale = this.view.scale;
 
-              var width = (bounds.x + bounds.width) / scale - geo.x - tr.x;
-              var height = (bounds.y + bounds.height) / scale - geo.y - tr.y;
+              let width = (bounds.x + bounds.width) / scale - geo.x - tr.x;
+              let height = (bounds.y + bounds.height) / scale - geo.y - tr.y;
 
               geo.width = Math.max(geo.width, width);
               geo.height = Math.max(geo.height, height);
@@ -4958,11 +4965,11 @@ class mxGraph extends mxEventSource {
    * minWidth in the vertex and override this method as follows.
    *
    * (code)
-   * var graphGetPreferredSizeForCell = graph.getPreferredSizeForCell;
+   * let graphGetPreferredSizeForCell = graph.getPreferredSizeForCell;
    * graph.getPreferredSizeForCell = (cell)=>
    * {
-   *   var result = graphGetPreferredSizeForCell.apply(this, arguments);
-   *   var style = this.getCellStyle(cell);
+   *   let result = graphGetPreferredSizeForCell.apply(this, arguments);
+   *   let style = this.getCellStyle(cell);
    *
    *   if (style['minWidth'] > 0)
    *   {
@@ -4979,25 +4986,25 @@ class mxGraph extends mxEventSource {
    * textWidth - Optional maximum text width for word wrapping.
    */
   getPreferredSizeForCell = (cell, textWidth) => {
-    var result = null;
+    let result = null;
 
     if (cell != null) {
-      var state = this.view.createState(cell);
-      var style = state.style;
+      let state = this.view.createState(cell);
+      let style = state.style;
 
       if (!this.model.isEdge(cell)) {
-        var fontSize = style[mxConstants.STYLE_FONTSIZE] || mxConstants.DEFAULT_FONTSIZE;
-        var dx = 0;
-        var dy = 0;
+        let fontSize = style[mxConstants.STYLE_FONTSIZE] || mxConstants.DEFAULT_FONTSIZE;
+        let dx = 0;
+        let dy = 0;
 
         // Adds dimension of image if shape is a label
         if (this.getImage(state) != null || style[mxConstants.STYLE_IMAGE] != null) {
-          if (style[mxConstants.STYLE_SHAPE] == mxConstants.SHAPE_LABEL) {
-            if (style[mxConstants.STYLE_VERTICAL_ALIGN] == mxConstants.ALIGN_MIDDLE) {
+          if (style[mxConstants.STYLE_SHAPE] === mxConstants.SHAPE_LABEL) {
+            if (style[mxConstants.STYLE_VERTICAL_ALIGN] === mxConstants.ALIGN_MIDDLE) {
               dx += parseFloat(style[mxConstants.STYLE_IMAGE_WIDTH]) || imageSize;
             }
 
-            if (style[mxConstants.STYLE_ALIGN] != mxConstants.ALIGN_CENTER) {
+            if (style[mxConstants.STYLE_ALIGN] !== mxConstants.ALIGN_CENTER) {
               dy += parseFloat(style[mxConstants.STYLE_IMAGE_HEIGHT]) || imageSize;
             }
           }
@@ -5015,14 +5022,14 @@ class mxGraph extends mxEventSource {
         // Add spacing for collapse/expand icon
         // LATER: Check alignment and use constants
         // for image spacing
-        var image = this.getFoldingImage(state);
+        let image = this.getFoldingImage(state);
 
         if (image != null) {
           dx += image.width + 8;
         }
 
         // Adds space for label
-        var value = this.cellRenderer.getLabelValue(state);
+        let value = this.cellRenderer.getLabelValue(state);
 
         if (value != null && value.length > 0) {
           if (!this.isHtmlLabel(state.cell)) {
@@ -5031,15 +5038,14 @@ class mxGraph extends mxEventSource {
 
           value = value.replace(/\n/g, '<br>');
 
-          var size = mxUtils.getSizeForString(value, fontSize,
+          let size = mxUtils.getSizeForString(value, fontSize,
               style[mxConstants.STYLE_FONTFAMILY], textWidth,
               style[mxConstants.STYLE_FONTSTYLE]);
-          var width = size.width + dx;
-          var height = size.height + dy;
+          let width = size.width + dx;
+          let height = size.height + dy;
 
           if (!mxUtils.getValue(style, mxConstants.STYLE_HORIZONTAL, true)) {
-            var tmp = height;
-
+            let tmp = height;
             height = width;
             width = tmp;
           }
@@ -5092,7 +5098,7 @@ class mxGraph extends mxEventSource {
 
     this.model.beginUpdate();
     try {
-      var prev = this.cellsResized(cells, bounds, recurse);
+      let prev = this.cellsResized(cells, bounds, recurse);
       this.fireEvent(new mxEventObject(mxEvent.RESIZE_CELLS,
           'cells', cells, 'bounds', bounds, 'previous', prev));
     } finally {
@@ -5115,20 +5121,20 @@ class mxGraph extends mxEventSource {
    * (code)
    * graph.addListener(mxEvent.CELLS_RESIZED, (sender, evt)=>
    * {
-   *   var cells = evt.getProperty('cells');
+   *   let cells = evt.getProperty('cells');
    *
    *   if (cells != null)
    *   {
-   *     for (var i = 0; i < cells.length; i++)
+   *     for (let i = 0; i < cells.length; i++)
    *     {
    *       if (graph.getModel().getChildCount(cells[i]) > 0)
    *       {
-   *         var geo = graph.getCellGeometry(cells[i]);
+   *         let geo = graph.getCellGeometry(cells[i]);
    *
    *         if (geo != null)
    *         {
-   *           var children = graph.getChildCells(cells[i], true, true);
-   *           var bounds = graph.getBoundingBoxFromGeometry(children, true);
+   *           let children = graph.getChildCells(cells[i], true, true);
+   *           let bounds = graph.getBoundingBoxFromGeometry(children, true);
    *
    *           geo = geo.clone();
    *           geo.width = Math.max(geo.width, bounds.width);
@@ -5150,12 +5156,12 @@ class mxGraph extends mxEventSource {
    */
   cellsResized = (cells, bounds, recurse) => {
     recurse = (recurse != null) ? recurse : false;
-    var prev = [];
+    let prev = [];
 
-    if (cells != null && bounds != null && cells.length == bounds.length) {
+    if (cells != null && bounds != null && cells.length === bounds.length) {
       this.model.beginUpdate();
       try {
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           prev.push(this.cellResized(cells[i], bounds[i], false, recurse));
 
           if (this.isExtendParent(cells[i])) {
@@ -5193,14 +5199,14 @@ class mxGraph extends mxEventSource {
    * recurse - Optional boolean that specifies if the children should be resized.
    */
   cellResized = (cell, bounds, ignoreRelative, recurse) => {
-    var prev = this.model.getGeometry(cell);
+    let prev = this.model.getGeometry(cell);
 
-    if (prev != null && (prev.x != bounds.x || prev.y != bounds.y ||
-        prev.width != bounds.width || prev.height != bounds.height)) {
-      var geo = prev.clone();
+    if (prev != null && (prev.x !== bounds.x || prev.y !== bounds.y ||
+        prev.width !== bounds.width || prev.height !== bounds.height)) {
+      let geo = prev.clone();
 
       if (!ignoreRelative && geo.relative) {
-        var offset = geo.offset;
+        let offset = geo.offset;
 
         if (offset != null) {
           offset.x += bounds.x - geo.x;
@@ -5247,12 +5253,12 @@ class mxGraph extends mxEventSource {
    * newGeo - <mxGeometry> that represents the new bounds.
    */
   resizeChildCells = (cell, newGeo) => {
-    var geo = this.model.getGeometry(cell);
-    var dx = (geo.width != 0) ? newGeo.width / geo.width : 1;
-    var dy = (geo.height != 0) ? newGeo.height / geo.height : 1;
-    var childCount = this.model.getChildCount(cell);
+    let geo = this.model.getGeometry(cell);
+    let dx = (geo.width !== 0) ? newGeo.width / geo.width : 1;
+    let dy = (geo.height !== 0) ? newGeo.height / geo.height : 1;
+    let childCount = this.model.getChildCount(cell);
 
-    for (var i = 0; i < childCount; i++) {
+    for (let i = 0; i < childCount; i++) {
       this.scaleCell(this.model.getChildAt(cell, i), dx, dy, true);
     }
   };
@@ -5267,9 +5273,9 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> that has been resized.
    */
   constrainChildCells = (cell) => {
-    var childCount = this.model.getChildCount(cell);
+    let childCount = this.model.getChildCount(cell);
 
-    for (var i = 0; i < childCount; i++) {
+    for (let i = 0; i < childCount; i++) {
       this.constrainChild(this.model.getChildAt(cell, i));
     }
   };
@@ -5288,19 +5294,19 @@ class mxGraph extends mxEventSource {
    * recurse - Boolean indicating if the child cells should be scaled.
    */
   scaleCell = (cell, dx, dy, recurse) => {
-    var geo = this.model.getGeometry(cell);
+    let geo = this.model.getGeometry(cell);
 
     if (geo != null) {
-      var style = this.getCurrentCellStyle(cell);
+      let style = this.getCurrentCellStyle(cell);
       geo = geo.clone();
 
       // Stores values for restoring based on style
-      var x = geo.x;
-      var y = geo.y
-      var w = geo.width;
-      var h = geo.height;
+      let x = geo.x;
+      let y = geo.y
+      let w = geo.width;
+      let h = geo.height;
 
-      geo.scale(dx, dy, style[mxConstants.STYLE_ASPECT] == 'fixed');
+      geo.scale(dx, dy, style[mxConstants.STYLE_ASPECT] === 'fixed');
 
       if (style[mxConstants.STYLE_RESIZE_WIDTH] == '1') {
         geo.width = w * dx;
@@ -5344,11 +5350,11 @@ class mxGraph extends mxEventSource {
    */
   extendParent = (cell) => {
     if (cell != null) {
-      var parent = this.model.getParent(cell);
-      var p = this.getCellGeometry(parent);
+      let parent = this.model.getParent(cell);
+      let p = this.getCellGeometry(parent);
 
       if (parent != null && p != null && !this.isCellCollapsed(parent)) {
-        var geo = this.getCellGeometry(cell);
+        let geo = this.getCellGeometry(cell);
 
         if (geo != null && !geo.relative &&
             (p.width < geo.x + geo.width ||
@@ -5418,22 +5424,22 @@ class mxGraph extends mxEventSource {
     dy = (dy != null) ? dy : 0;
     clone = (clone != null) ? clone : false;
 
-    if (cells != null && (dx != 0 || dy != 0 || clone || target != null)) {
+    if (cells != null && (dx !== 0 || dy !== 0 || clone || target != null)) {
       // Removes descendants with ancestors in cells to avoid multiple moving
       cells = this.model.getTopmostCells(cells);
-      var origCells = cells;
+      let origCells = cells;
 
       this.model.beginUpdate();
       try {
         // Faster cell lookups to remove relative edge labels with selected
         // terminals to avoid explicit and implicit move at same time
-        var dict = new mxDictionary();
+        let dict = new mxDictionary();
 
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           dict.put(cells[i], true);
         }
 
-        var isSelected = mxUtils.bind(this, (cell) => {
+        let isSelected = mxUtils.bind(this, (cell) => {
           while (cell != null) {
             if (dict.get(cell)) {
               return true;
@@ -5446,11 +5452,11 @@ class mxGraph extends mxEventSource {
         });
 
         // Removes relative edge labels with selected terminals
-        var checked = [];
+        let checked = [];
 
-        for (var i = 0; i < cells.length; i++) {
-          var geo = this.getCellGeometry(cells[i]);
-          var parent = this.model.getParent(cells[i]);
+        for (let i = 0; i < cells.length; i++) {
+          let geo = this.getCellGeometry(cells[i]);
+          let parent = this.model.getParent(cells[i]);
 
           if ((geo == null || !geo.relative) || !this.model.isEdge(parent) ||
               (!isSelected(this.model.getTerminal(parent, true)) &&
@@ -5473,7 +5479,7 @@ class mxGraph extends mxEventSource {
         // to avoid forward references in sessions.
         // Need to disable allowNegativeCoordinates if target not null to
         // allow for temporary negative numbers until cellsAdded is called.
-        var previous = this.isAllowNegativeCoordinates();
+        let previous = this.isAllowNegativeCoordinates();
 
         if (target != null) {
           this.setAllowNegativeCoordinates(true);
@@ -5486,14 +5492,14 @@ class mxGraph extends mxEventSource {
         this.setAllowNegativeCoordinates(previous);
 
         if (target != null) {
-          var index = this.model.getChildCount(target);
+          let index = this.model.getChildCount(target);
           this.cellsAdded(cells, target, index, null, null, true);
 
           // Restores parent edge on cloned edge labels
           if (clone) {
-            for (var i = 0; i < cells.length; i++) {
-              var geo = this.getCellGeometry(cells[i]);
-              var parent = this.model.getParent(origCells[i]);
+            for (let i = 0; i < cells.length; i++) {
+              let geo = this.getCellGeometry(cells[i]);
+              let parent = this.model.getParent(origCells[i]);
 
               if (geo != null && geo.relative &&
                   this.model.isEdge(parent) &&
@@ -5523,7 +5529,7 @@ class mxGraph extends mxEventSource {
    * <mxEvent.CELLS_MOVED> while the transaction is in progress.
    */
   cellsMoved = (cells, dx, dy, disconnect, constrain, extend) => {
-    if (cells != null && (dx != 0 || dy != 0)) {
+    if (cells != null && (dx !== 0 || dy !== 0)) {
       extend = (extend != null) ? extend : false;
 
       this.model.beginUpdate();
@@ -5532,7 +5538,7 @@ class mxGraph extends mxEventSource {
           this.disconnectGraph(cells);
         }
 
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           this.translateCell(cells[i], dx, dy);
 
           if (extend && this.isExtendParent(cells[i])) {
@@ -5561,7 +5567,7 @@ class mxGraph extends mxEventSource {
    * translated geometry in the model as an atomic change.
    */
   translateCell = (cell, dx, dy) => {
-    var geo = this.model.getGeometry(cell);
+    let geo = this.model.getGeometry(cell);
 
     if (geo != null) {
       dx = parseFloat(dx);
@@ -5575,19 +5581,19 @@ class mxGraph extends mxEventSource {
       }
 
       if (geo.relative && !this.model.isEdge(cell)) {
-        var parent = this.model.getParent(cell);
-        var angle = 0;
+        let parent = this.model.getParent(cell);
+        let angle = 0;
 
         if (this.model.isVertex(parent)) {
-          var style = this.getCurrentCellStyle(parent);
+          let style = this.getCurrentCellStyle(parent);
           angle = mxUtils.getValue(style, mxConstants.STYLE_ROTATION, 0);
         }
 
-        if (angle != 0) {
-          var rad = mxUtils.toRadians(-angle);
-          var cos = Math.cos(rad);
-          var sin = Math.sin(rad);
-          var pt = mxUtils.getRotatedPoint(new mxPoint(dx, dy), cos, sin, new mxPoint(0, 0));
+        if (angle !== 0) {
+          let rad = mxUtils.toRadians(-angle);
+          let cos = Math.cos(rad);
+          let sin = Math.sin(rad);
+          let pt = mxUtils.getRotatedPoint(new mxPoint(dx, dy), cos, sin, new mxPoint(0, 0));
           dx = pt.x;
           dy = pt.y;
         }
@@ -5615,32 +5621,32 @@ class mxGraph extends mxEventSource {
    */
   getCellContainmentArea = (cell) => {
     if (cell != null && !this.model.isEdge(cell)) {
-      var parent = this.model.getParent(cell);
+      let parent = this.model.getParent(cell);
 
-      if (parent != null && parent != this.getDefaultParent()) {
-        var g = this.model.getGeometry(parent);
+      if (parent != null && parent !== this.getDefaultParent()) {
+        let g = this.model.getGeometry(parent);
 
         if (g != null) {
-          var x = 0;
-          var y = 0;
-          var w = g.width;
-          var h = g.height;
+          let x = 0;
+          let y = 0;
+          let w = g.width;
+          let h = g.height;
 
           if (this.isSwimlane(parent)) {
-            var size = this.getStartSize(parent);
-            var style = this.getCurrentCellStyle(parent);
-            var dir = mxUtils.getValue(style, mxConstants.STYLE_DIRECTION, mxConstants.DIRECTION_EAST);
-            var flipH = mxUtils.getValue(style, mxConstants.STYLE_FLIPH, 0) == 1;
-            var flipV = mxUtils.getValue(style, mxConstants.STYLE_FLIPV, 0) == 1;
+            let size = this.getStartSize(parent);
+            let style = this.getCurrentCellStyle(parent);
+            let dir = mxUtils.getValue(style, mxConstants.STYLE_DIRECTION, mxConstants.DIRECTION_EAST);
+            let flipH = mxUtils.getValue(style, mxConstants.STYLE_FLIPH, 0) == 1;
+            let flipV = mxUtils.getValue(style, mxConstants.STYLE_FLIPV, 0) == 1;
 
-            if (dir == mxConstants.DIRECTION_SOUTH || dir == mxConstants.DIRECTION_NORTH) {
-              var tmp = size.width;
+            if (dir === mxConstants.DIRECTION_SOUTH || dir === mxConstants.DIRECTION_NORTH) {
+              let tmp = size.width;
               size.width = size.height;
               size.height = tmp;
             }
 
-            if ((dir == mxConstants.DIRECTION_EAST && !flipV) || (dir == mxConstants.DIRECTION_NORTH && !flipH) ||
-                (dir == mxConstants.DIRECTION_WEST && flipV) || (dir == mxConstants.DIRECTION_SOUTH && flipH)) {
+            if ((dir === mxConstants.DIRECTION_EAST && !flipV) || (dir === mxConstants.DIRECTION_NORTH && !flipH) ||
+                (dir === mxConstants.DIRECTION_WEST && flipV) || (dir === mxConstants.DIRECTION_SOUTH && flipH)) {
               x = size.width;
               y = size.height;
             }
@@ -5684,16 +5690,16 @@ class mxGraph extends mxEventSource {
     sizeFirst = (sizeFirst != null) ? sizeFirst : true;
 
     if (cell != null) {
-      var geo = this.getCellGeometry(cell);
+      let geo = this.getCellGeometry(cell);
 
       if (geo != null && (this.isConstrainRelativeChildren() || !geo.relative)) {
-        var parent = this.model.getParent(cell);
-        var pgeo = this.getCellGeometry(parent);
-        var max = this.getMaximumGraphBounds();
+        let parent = this.model.getParent(cell);
+        let pgeo = this.getCellGeometry(parent);
+        let max = this.getMaximumGraphBounds();
 
         // Finds parent offset
         if (max != null) {
-          var off = this.getBoundingBoxFromGeometry([parent], false);
+          let off = this.getBoundingBoxFromGeometry([parent], false);
 
           if (off != null) {
             max = mxRectangle.fromRectangle(max);
@@ -5704,10 +5710,10 @@ class mxGraph extends mxEventSource {
         }
 
         if (this.isConstrainChild(cell)) {
-          var tmp = this.getCellContainmentArea(cell);
+          let tmp = this.getCellContainmentArea(cell);
 
           if (tmp != null) {
-            var overlap = this.getOverlap(cell);
+            let overlap = this.getOverlap(cell);
 
             if (overlap > 0) {
               tmp = mxRectangle.fromRectangle(tmp);
@@ -5729,25 +5735,25 @@ class mxGraph extends mxEventSource {
         }
 
         if (max != null) {
-          var cells = [cell];
+          let cells = [cell];
 
           if (!this.isCellCollapsed(cell)) {
-            var desc = this.model.getDescendants(cell);
+            let desc = this.model.getDescendants(cell);
 
-            for (var i = 0; i < desc.length; i++) {
+            for (let i = 0; i < desc.length; i++) {
               if (this.isCellVisible(desc[i])) {
                 cells.push(desc[i]);
               }
             }
           }
 
-          var bbox = this.getBoundingBoxFromGeometry(cells, false);
+          let bbox = this.getBoundingBoxFromGeometry(cells, false);
 
           if (bbox != null) {
             geo = geo.clone();
 
             // Cumulative horizontal movement
-            var dx = 0;
+            let dx = 0;
 
             if (geo.width > max.width) {
               dx = geo.width - max.width;
@@ -5759,7 +5765,7 @@ class mxGraph extends mxEventSource {
             }
 
             // Cumulative vertical movement
-            var dy = 0;
+            let dy = 0;
 
             if (geo.height > max.height) {
               dy = geo.height - max.height;
@@ -5778,7 +5784,7 @@ class mxGraph extends mxEventSource {
               dy -= bbox.y - max.y;
             }
 
-            if (dx != 0 || dy != 0) {
+            if (dx !== 0 || dy !== 0) {
               if (geo.relative) {
                 // Relative geometries are moved via absolute offset
                 if (geo.offset == null) {
@@ -5814,23 +5820,23 @@ class mxGraph extends mxEventSource {
   resetEdges = (cells) => {
     if (cells != null) {
       // Prepares faster cells lookup
-      var dict = new mxDictionary();
+      let dict = new mxDictionary();
 
-      for (var i = 0; i < cells.length; i++) {
+      for (let i = 0; i < cells.length; i++) {
         dict.put(cells[i], true);
       }
 
       this.model.beginUpdate();
       try {
-        for (var i = 0; i < cells.length; i++) {
-          var edges = this.model.getEdges(cells[i]);
+        for (let i = 0; i < cells.length; i++) {
+          let edges = this.model.getEdges(cells[i]);
 
           if (edges != null) {
-            for (var j = 0; j < edges.length; j++) {
-              var state = this.view.getState(edges[j]);
+            for (let j = 0; j < edges.length; j++) {
+              let state = this.view.getState(edges[j]);
 
-              var source = (state != null) ? state.getVisibleTerminal(true) : this.view.getVisibleTerminal(edges[j], true);
-              var target = (state != null) ? state.getVisibleTerminal(false) : this.view.getVisibleTerminal(edges[j], false);
+              let source = (state != null) ? state.getVisibleTerminal(true) : this.view.getVisibleTerminal(edges[j], true);
+              let target = (state != null) ? state.getVisibleTerminal(false) : this.view.getVisibleTerminal(edges[j], false);
 
               // Checks if one of the terminals is not in the given array
               if (!dict.get(source) || !dict.get(target)) {
@@ -5857,7 +5863,7 @@ class mxGraph extends mxEventSource {
    * edge - <mxCell> whose points should be reset.
    */
   resetEdge = (edge) => {
-    var geo = this.model.getGeometry(edge);
+    let geo = this.model.getGeometry(edge);
 
     // Resets the control points
     if (geo != null && geo.points != null && geo.points.length > 0) {
@@ -5880,45 +5886,45 @@ class mxGraph extends mxEventSource {
    */
   getOutlineConstraint = (point, terminalState, me) => {
     if (terminalState.shape != null) {
-      var bounds = this.view.getPerimeterBounds(terminalState);
-      var direction = terminalState.style[mxConstants.STYLE_DIRECTION];
+      let bounds = this.view.getPerimeterBounds(terminalState);
+      let direction = terminalState.style[mxConstants.STYLE_DIRECTION];
 
-      if (direction == mxConstants.DIRECTION_NORTH || direction == mxConstants.DIRECTION_SOUTH) {
+      if (direction === mxConstants.DIRECTION_NORTH || direction === mxConstants.DIRECTION_SOUTH) {
         bounds.x += bounds.width / 2 - bounds.height / 2;
         bounds.y += bounds.height / 2 - bounds.width / 2;
-        var tmp = bounds.width;
+        let tmp = bounds.width;
         bounds.width = bounds.height;
         bounds.height = tmp;
       }
 
-      var alpha = mxUtils.toRadians(terminalState.shape.getShapeRotation());
+      let alpha = mxUtils.toRadians(terminalState.shape.getShapeRotation());
 
-      if (alpha != 0) {
-        var cos = Math.cos(-alpha);
-        var sin = Math.sin(-alpha);
+      if (alpha !== 0) {
+        let cos = Math.cos(-alpha);
+        let sin = Math.sin(-alpha);
 
-        var ct = new mxPoint(bounds.getCenterX(), bounds.getCenterY());
+        let ct = new mxPoint(bounds.getCenterX(), bounds.getCenterY());
         point = mxUtils.getRotatedPoint(point, cos, sin, ct);
       }
 
-      var sx = 1;
-      var sy = 1;
-      var dx = 0;
-      var dy = 0;
+      let sx = 1;
+      let sy = 1;
+      let dx = 0;
+      let dy = 0;
 
       // LATER: Add flipping support for image shapes
       if (this.getModel().isVertex(terminalState.cell)) {
-        var flipH = terminalState.style[mxConstants.STYLE_FLIPH];
-        var flipV = terminalState.style[mxConstants.STYLE_FLIPV];
+        let flipH = terminalState.style[mxConstants.STYLE_FLIPH];
+        let flipV = terminalState.style[mxConstants.STYLE_FLIPV];
 
         // Legacy support for stencilFlipH/V
         if (terminalState.shape != null && terminalState.shape.stencil != null) {
-          flipH = mxUtils.getValue(terminalState.style, 'stencilFlipH', 0) == 1 || flipH;
-          flipV = mxUtils.getValue(terminalState.style, 'stencilFlipV', 0) == 1 || flipV;
+          flipH = mxUtils.getValue(terminalState.style, 'stencilFlipH', 0) === 1 || flipH;
+          flipV = mxUtils.getValue(terminalState.style, 'stencilFlipV', 0) === 1 || flipV;
         }
 
-        if (direction == mxConstants.DIRECTION_NORTH || direction == mxConstants.DIRECTION_SOUTH) {
-          var tmp = flipH;
+        if (direction === mxConstants.DIRECTION_NORTH || direction === mxConstants.DIRECTION_SOUTH) {
+          let tmp = flipH;
           flipH = flipV;
           flipV = tmp;
         }
@@ -5936,8 +5942,8 @@ class mxGraph extends mxEventSource {
 
       point = new mxPoint((point.x - bounds.x) * sx - dx + bounds.x, (point.y - bounds.y) * sy - dy + bounds.y);
 
-      var x = (bounds.width == 0) ? 0 : Math.round((point.x - bounds.x) * 1000 / bounds.width) / 1000;
-      var y = (bounds.height == 0) ? 0 : Math.round((point.y - bounds.y) * 1000 / bounds.height) / 1000;
+      let x = (bounds.width === 0) ? 0 : Math.round((point.x - bounds.x) * 1000 / bounds.width) / 1000;
+      let y = (bounds.height === 0) ? 0 : Math.round((point.y - bounds.y) * 1000 / bounds.height) / 1000;
 
       return new mxConnectionConstraint(new mxPoint(x, y), false);
     }
@@ -5978,19 +5984,19 @@ class mxGraph extends mxEventSource {
    * source - Boolean indicating if the terminal is the source or target.
    */
   getConnectionConstraint = (edge, terminal, source) => {
-    var point = null;
-    var x = edge.style[(source) ? mxConstants.STYLE_EXIT_X : mxConstants.STYLE_ENTRY_X];
+    let point = null;
+    let x = edge.style[(source) ? mxConstants.STYLE_EXIT_X : mxConstants.STYLE_ENTRY_X];
 
     if (x != null) {
-      var y = edge.style[(source) ? mxConstants.STYLE_EXIT_Y : mxConstants.STYLE_ENTRY_Y];
+      let y = edge.style[(source) ? mxConstants.STYLE_EXIT_Y : mxConstants.STYLE_ENTRY_Y];
 
       if (y != null) {
         point = new mxPoint(parseFloat(x), parseFloat(y));
       }
     }
 
-    var perimeter = false;
-    var dx = 0, dy = 0;
+    let perimeter = false;
+    let dx = 0, dy = 0;
 
     if (point != null) {
       perimeter = mxUtils.getValue(edge.style, (source) ? mxConstants.STYLE_EXIT_PERIMETER :
@@ -6077,12 +6083,12 @@ class mxGraph extends mxEventSource {
    */
   getConnectionPoint = (vertex, constraint, round) => {
     round = (round != null) ? round : true;
-    var point = null;
+    let point = null;
 
     if (vertex != null && constraint.point != null) {
-      var bounds = this.view.getPerimeterBounds(vertex);
-      var cx = new mxPoint(bounds.getCenterX(), bounds.getCenterY());
-      var direction = vertex.style[mxConstants.STYLE_DIRECTION];
+      let bounds = this.view.getPerimeterBounds(vertex);
+      let cx = new mxPoint(bounds.getCenterX(), bounds.getCenterY());
+      let direction = vertex.style[mxConstants.STYLE_DIRECTION];
       var r1 = 0;
 
       // Bounds need to be rotated by 90 degrees for further computation
@@ -6097,13 +6103,13 @@ class mxGraph extends mxEventSource {
         }
 
         // Bounds need to be rotated by 90 degrees for further computation
-        if (direction == mxConstants.DIRECTION_NORTH ||
-            direction == mxConstants.DIRECTION_SOUTH) {
+        if (direction === mxConstants.DIRECTION_NORTH ||
+            direction === mxConstants.DIRECTION_SOUTH) {
           bounds.rotate90();
         }
       }
 
-      var scale = this.view.scale;
+      let scale = this.view.scale;
       point = new mxPoint(bounds.x + constraint.point.x * bounds.width + constraint.dx * scale,
           bounds.y + constraint.point.y * bounds.height + constraint.dy * scale);
 
@@ -6111,16 +6117,16 @@ class mxGraph extends mxEventSource {
       var r2 = vertex.style[mxConstants.STYLE_ROTATION] || 0;
 
       if (constraint.perimeter) {
-        if (r1 != 0) {
+        if (r1 !== 0) {
           // Only 90 degrees steps possible here so no trig needed
-          var cos = 0;
-          var sin = 0;
+          let cos = 0;
+          let sin = 0;
 
-          if (r1 == 90) {
+          if (r1 === 90) {
             sin = 1;
-          } else if (r1 == 180) {
+          } else if (r1 === 180) {
             cos = -1;
-          } else if (r1 == 270) {
+          } else if (r1 === 270) {
             sin = -1;
           }
 
@@ -6132,8 +6138,8 @@ class mxGraph extends mxEventSource {
         r2 += r1;
 
         if (this.getModel().isVertex(vertex.cell)) {
-          var flipH = vertex.style[mxConstants.STYLE_FLIPH] == 1;
-          var flipV = vertex.style[mxConstants.STYLE_FLIPV] == 1;
+          let flipH = vertex.style[mxConstants.STYLE_FLIPH] == 1;
+          let flipV = vertex.style[mxConstants.STYLE_FLIPV] == 1;
 
           // Legacy support for stencilFlipH/V
           if (vertex.shape != null && vertex.shape.stencil != null) {
@@ -6141,9 +6147,9 @@ class mxGraph extends mxEventSource {
             flipV = (mxUtils.getValue(vertex.style, 'stencilFlipV', 0) == 1) || flipV;
           }
 
-          if (direction == mxConstants.DIRECTION_NORTH ||
-              direction == mxConstants.DIRECTION_SOUTH) {
-            var temp = flipH;
+          if (direction === mxConstants.DIRECTION_NORTH ||
+              direction === mxConstants.DIRECTION_SOUTH) {
+            let temp = flipH;
             flipH = flipV
             flipV = temp;
           }
@@ -6159,10 +6165,10 @@ class mxGraph extends mxEventSource {
       }
 
       // Generic rotation after projection on perimeter
-      if (r2 != 0 && point != null) {
-        var rad = mxUtils.toRadians(r2);
-        var cos = Math.cos(rad);
-        var sin = Math.sin(rad);
+      if (r2 !== 0 && point != null) {
+        let rad = mxUtils.toRadians(r2);
+        let cos = Math.cos(rad);
+        let sin = Math.sin(rad);
 
         point = mxUtils.getRotatedPoint(point, cos, sin, cx);
       }
@@ -6194,7 +6200,7 @@ class mxGraph extends mxEventSource {
   connectCell = (edge, terminal, source, constraint) => {
     this.model.beginUpdate();
     try {
-      var previous = this.model.getTerminal(edge, source);
+      let previous = this.model.getTerminal(edge, source);
       this.cellConnected(edge, terminal, source, constraint);
       this.fireEvent(new mxEventObject(mxEvent.CONNECT_CELL,
           'edge', edge, 'terminal', terminal, 'source', source,
@@ -6224,7 +6230,7 @@ class mxGraph extends mxEventSource {
     if (edge != null) {
       this.model.beginUpdate();
       try {
-        var previous = this.model.getTerminal(edge, source);
+        let previous = this.model.getTerminal(edge, source);
 
         // Updates the constraint
         this.setConnectionConstraint(edge, terminal, source, constraint);
@@ -6232,7 +6238,7 @@ class mxGraph extends mxEventSource {
         // Checks if the new terminal is a port, uses the ID of the port in the
         // style and the parent of the port as the actual terminal of the edge.
         if (this.isPortsEnabled()) {
-          var id = null;
+          let id = null;
 
           if (this.isPort(terminal)) {
             id = terminal.getId();
@@ -6240,7 +6246,7 @@ class mxGraph extends mxEventSource {
           }
 
           // Sets or resets all previous information for connecting to a child port
-          var key = (source) ? mxConstants.STYLE_SOURCE_PORT :
+          let key = (source) ? mxConstants.STYLE_SOURCE_PORT :
               mxConstants.STYLE_TARGET_PORT;
           this.setCellStyles(key, id, [edge]);
         }
@@ -6274,34 +6280,34 @@ class mxGraph extends mxEventSource {
     if (cells != null) {
       this.model.beginUpdate();
       try {
-        var scale = this.view.scale;
-        var tr = this.view.translate;
+        let scale = this.view.scale;
+        let tr = this.view.translate;
 
         // Fast lookup for finding cells in array
-        var dict = new mxDictionary();
+        let dict = new mxDictionary();
 
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           dict.put(cells[i], true);
         }
 
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           if (this.model.isEdge(cells[i])) {
-            var geo = this.model.getGeometry(cells[i]);
+            let geo = this.model.getGeometry(cells[i]);
 
             if (geo != null) {
-              var state = this.view.getState(cells[i]);
-              var pstate = this.view.getState(
+              let state = this.view.getState(cells[i]);
+              let pstate = this.view.getState(
                   this.model.getParent(cells[i]));
 
               if (state != null &&
                   pstate != null) {
                 geo = geo.clone();
 
-                var dx = -pstate.origin.x;
-                var dy = -pstate.origin.y;
-                var pts = state.absolutePoints;
+                let dx = -pstate.origin.x;
+                let dy = -pstate.origin.y;
+                let pts = state.absolutePoints;
 
-                var src = this.model.getTerminal(cells[i], true);
+                let src = this.model.getTerminal(cells[i], true);
 
                 if (src != null && this.isCellDisconnectable(cells[i], src, true)) {
                   while (src != null && !dict.get(src)) {
@@ -6316,7 +6322,7 @@ class mxGraph extends mxEventSource {
                   }
                 }
 
-                var trg = this.model.getTerminal(cells[i], false);
+                let trg = this.model.getTerminal(cells[i], false);
 
                 if (trg != null && this.isCellDisconnectable(cells[i], trg, false)) {
                   while (trg != null && !dict.get(trg)) {
@@ -6324,7 +6330,7 @@ class mxGraph extends mxEventSource {
                   }
 
                   if (trg == null) {
-                    var n = pts.length - 1;
+                    let n = pts.length - 1;
                     geo.setTerminalPoint(
                         new mxPoint(pts[n].x / scale - tr.x + dx,
                             pts[n].y / scale - tr.y + dy), false);
@@ -6369,11 +6375,11 @@ class mxGraph extends mxEventSource {
    * this function can be overridden as follows.
    *
    * (code)
-   * var offset = new mxPoint(0, 0);
+   * let offset = new mxPoint(0, 0);
    *
    * while (cell != null)
    * {
-   *   var geo = this.model.getGeometry(cell);
+   *   let geo = this.model.getGeometry(cell);
    *
    *   if (geo != null)
    *   {
@@ -6410,7 +6416,7 @@ class mxGraph extends mxEventSource {
    * (code)
    * graph.isPort = (cell)=>
    * {
-   *   var geo = this.getCellGeometry(cell);
+   *   let geo = this.getCellGeometry(cell);
    *
    *   return (geo != null) ? geo.relative : false;
    * };
@@ -6485,27 +6491,27 @@ class mxGraph extends mxEventSource {
    * hierarchy.
    */
   exitGroup = () => {
-    var root = this.model.getRoot();
-    var current = this.getCurrentRoot();
+    let root = this.model.getRoot();
+    let current = this.getCurrentRoot();
 
     if (current != null) {
-      var next = this.model.getParent(current);
+      let next = this.model.getParent(current);
 
       // Finds the next valid root in the hierarchy
-      while (next != root && !this.isValidRoot(next) &&
-      this.model.getParent(next) != root) {
+      while (next !== root && !this.isValidRoot(next) &&
+      this.model.getParent(next) !== root) {
         next = this.model.getParent(next);
       }
 
       // Clears the current root if the new root is
       // the model's root or one of the layers.
-      if (next == root || this.model.getParent(next) == root) {
+      if (next === root || this.model.getParent(next) === root) {
         this.view.setCurrentRoot(null);
       } else {
         this.view.setCurrentRoot(next);
       }
 
-      var state = this.view.getState(current);
+      let state = this.view.getState(current);
 
       // Selects the previous root in the graph
       if (state != null) {
@@ -6521,11 +6527,11 @@ class mxGraph extends mxEventSource {
    * and selects the previous root.
    */
   home = () => {
-    var current = this.getCurrentRoot();
+    let current = this.getCurrentRoot();
 
     if (current != null) {
       this.view.setCurrentRoot(null);
-      var state = this.view.getState(current);
+      let state = this.view.getState(current);
 
       if (state != null) {
         this.setSelectionCell(current);
@@ -6576,21 +6582,21 @@ class mxGraph extends mxEventSource {
    * of all descendants should be included. Default is false.
    */
   getCellBounds = (cell, includeEdges, includeDescendants) => {
-    var cells = [cell];
+    let cells = [cell];
 
     // Includes all connected edges
     if (includeEdges) {
       cells = cells.concat(this.model.getEdges(cell));
     }
 
-    var result = this.view.getBounds(cells);
+    let result = this.view.getBounds(cells);
 
     // Recursively includes the bounds of the children
     if (includeDescendants) {
-      var childCount = this.model.getChildCount(cell);
+      let childCount = this.model.getChildCount(cell);
 
-      for (var i = 0; i < childCount; i++) {
-        var tmp = this.getCellBounds(this.model.getChildAt(cell, i),
+      for (let i = 0; i < childCount; i++) {
+        let tmp = this.getCellBounds(this.model.getChildAt(cell, i),
             includeEdges, true);
 
         if (result != null) {
@@ -6612,8 +6618,8 @@ class mxGraph extends mxEventSource {
    * a layout operation (ie. before the last endUpdate) as follows:
    *
    * (code)
-   * var cells = graph.getChildCells(graph.getDefaultParent(), true, true);
-   * var bounds = graph.getBoundingBoxFromGeometry(cells, true);
+   * let cells = graph.getChildCells(graph.getDefaultParent(), true, true);
+   * let bounds = graph.getBoundingBoxFromGeometry(cells, true);
    * (end)
    *
    * This can then be used to move cells to the origin:
@@ -6642,19 +6648,19 @@ class mxGraph extends mxEventSource {
    */
   getBoundingBoxFromGeometry = (cells, includeEdges) => {
     includeEdges = (includeEdges != null) ? includeEdges : false;
-    var result = null;
+    let result = null;
 
     if (cells != null) {
-      for (var i = 0; i < cells.length; i++) {
+      for (let i = 0; i < cells.length; i++) {
         if (includeEdges || this.model.isVertex(cells[i])) {
           // Computes the bounding box for the points in the geometry
-          var geo = this.getCellGeometry(cells[i]);
+          let geo = this.getCellGeometry(cells[i]);
 
           if (geo != null) {
-            var bbox = null;
+            let bbox = null;
 
             if (this.model.isEdge(cells[i])) {
-              var addPoint = (pt) => {
+              let addPoint = (pt) => {
                 if (pt != null) {
                   if (tmp == null) {
                     tmp = new mxRectangle(pt.x, pt.y, 0, 0);
@@ -6672,23 +6678,23 @@ class mxGraph extends mxEventSource {
                 addPoint(geo.getTerminalPoint(false));
               }
 
-              var pts = geo.points;
+              let pts = geo.points;
 
               if (pts != null && pts.length > 0) {
-                var tmp = new mxRectangle(pts[0].x, pts[0].y, 0, 0);
+                let tmp = new mxRectangle(pts[0].x, pts[0].y, 0, 0);
 
-                for (var j = 1; j < pts.length; j++) {
+                for (let j = 1; j < pts.length; j++) {
                   addPoint(pts[j]);
                 }
               }
 
               bbox = tmp;
             } else {
-              var parent = this.model.getParent(cells[i]);
+              let parent = this.model.getParent(cells[i]);
 
               if (geo.relative) {
-                if (this.model.isVertex(parent) && parent != this.view.currentRoot) {
-                  var tmp = this.getBoundingBoxFromGeometry([parent], false);
+                if (this.model.isVertex(parent) && parent !== this.view.currentRoot) {
+                  let tmp = this.getBoundingBoxFromGeometry([parent], false);
 
                   if (tmp != null) {
                     bbox = new mxRectangle(geo.x * tmp.width, geo.y * tmp.height, geo.width, geo.height);
@@ -6703,7 +6709,7 @@ class mxGraph extends mxEventSource {
                 bbox = mxRectangle.fromRectangle(geo);
 
                 if (this.model.isVertex(parent) && mxUtils.indexOf(cells, parent) >= 0) {
-                  var tmp = this.getBoundingBoxFromGeometry([parent], false);
+                  let tmp = this.getBoundingBoxFromGeometry([parent], false);
 
                   if (tmp != null) {
                     bbox.x += tmp.x;
@@ -6717,12 +6723,12 @@ class mxGraph extends mxEventSource {
                 bbox.y += geo.offset.y;
               }
 
-              var style = this.getCurrentCellStyle(cells[i]);
+              let style = this.getCurrentCellStyle(cells[i]);
 
               if (bbox != null) {
-                var angle = mxUtils.getValue(style, mxConstants.STYLE_ROTATION, 0);
+                let angle = mxUtils.getValue(style, mxConstants.STYLE_ROTATION, 0);
 
-                if (angle != 0) {
+                if (angle !== 0) {
                   bbox = mxUtils.getBoundingBox(bbox, angle);
                 }
               }
@@ -6784,14 +6790,14 @@ class mxGraph extends mxEventSource {
    * Snaps the given delta with the given scaled bounds.
    */
   snapDelta = (delta, bounds, ignoreGrid, ignoreHorizontal, ignoreVertical) => {
-    var t = this.view.translate;
-    var s = this.view.scale;
+    let t = this.view.translate;
+    let s = this.view.scale;
 
     if (!ignoreGrid && this.gridEnabled) {
-      var tol = this.gridSize * s * 0.5;
+      let tol = this.gridSize * s * 0.5;
 
       if (!ignoreHorizontal) {
-        var tx = bounds.x - (this.snap(bounds.x / s - t.x) + t.x) * s;
+        let tx = bounds.x - (this.snap(bounds.x / s - t.x) + t.x) * s;
 
         if (Math.abs(delta.x - tx) < tol) {
           delta.x = 0;
@@ -6801,7 +6807,7 @@ class mxGraph extends mxEventSource {
       }
 
       if (!ignoreVertical) {
-        var ty = bounds.y - (this.snap(bounds.y / s - t.y) + t.y) * s;
+        let ty = bounds.y - (this.snap(bounds.y / s - t.y) + t.y) * s;
 
         if (Math.abs(delta.y - ty) < tol) {
           delta.y = 0;
@@ -6810,10 +6816,10 @@ class mxGraph extends mxEventSource {
         }
       }
     } else {
-      var tol = 0.5 * s;
+      let tol = 0.5 * s;
 
       if (!ignoreHorizontal) {
-        var tx = bounds.x - (Math.round(bounds.x / s - t.x) + t.x) * s;
+        let tx = bounds.x - (Math.round(bounds.x / s - t.x) + t.x) * s;
 
         if (Math.abs(delta.x - tx) < tol) {
           delta.x = 0;
@@ -6823,7 +6829,7 @@ class mxGraph extends mxEventSource {
       }
 
       if (!ignoreVertical) {
-        var ty = bounds.y - (Math.round(bounds.y / s - t.y) + t.y) * s;
+        let ty = bounds.y - (Math.round(bounds.y / s - t.y) + t.y) * s;
 
         if (Math.abs(delta.y - ty) < tol) {
           delta.y = 0;
@@ -6853,19 +6859,19 @@ class mxGraph extends mxEventSource {
       this.container.scrollLeft = -dx;
       this.container.scrollTop = -dy;
     } else {
-      var canvas = this.view.getCanvas();
+      let canvas = this.view.getCanvas();
 
       if (this.dialect === mxConstants.DIALECT_SVG) {
         // Puts everything inside the container in a DIV so that it
         // can be moved without changing the state of the container
-        if (dx == 0 && dy == 0) {
+        if (dx === 0 && dy === 0) {
           canvas.removeAttribute('transform');
 
           if (this.shiftPreview1 != null) {
-            var child = this.shiftPreview1.firstChild;
+            let child = this.shiftPreview1.firstChild;
 
             while (child != null) {
-              var next = child.nextSibling;
+              let next = child.nextSibling;
               this.container.appendChild(child);
               child = next;
             }
@@ -6881,7 +6887,7 @@ class mxGraph extends mxEventSource {
             child = this.shiftPreview2.firstChild;
 
             while (child != null) {
-              var next = child.nextSibling;
+              let next = child.nextSibling;
               this.container.appendChild(child);
               child = next;
             }
@@ -6905,14 +6911,14 @@ class mxGraph extends mxEventSource {
             this.shiftPreview2.style.position = 'absolute';
             this.shiftPreview2.style.overflow = 'visible';
 
-            var current = this.shiftPreview1;
-            var child = this.container.firstChild;
+            let current = this.shiftPreview1;
+            let child = this.container.firstChild;
 
             while (child != null) {
-              var next = child.nextSibling;
+              let next = child.nextSibling;
 
               // SVG element is moved via transform attribute
-              if (child != canvas.parentNode) {
+              if (child !== canvas.parentNode) {
                 current.appendChild(child);
               } else {
                 current = this.shiftPreview2;
@@ -6972,7 +6978,7 @@ class mxGraph extends mxEventSource {
    * Resets the zoom and panning in the view.
    */
   zoomActual = () => {
-    if (this.view.scale == 1) {
+    if (this.view.scale === 1) {
       this.view.setTranslate(0, 0);
     } else {
       this.view.translate.x = 0;
@@ -7012,17 +7018,17 @@ class mxGraph extends mxEventSource {
     cx = (cx != null) ? cx : 0.5;
     cy = (cy != null) ? cy : 0.5;
 
-    var hasScrollbars = mxUtils.hasScrollbars(this.container);
-    var padding = 2 * this.getBorder();
-    var cw = this.container.clientWidth - padding;
-    var ch = this.container.clientHeight - padding;
-    var bounds = this.getGraphBounds();
+    let hasScrollbars = mxUtils.hasScrollbars(this.container);
+    let padding = 2 * this.getBorder();
+    let cw = this.container.clientWidth - padding;
+    let ch = this.container.clientHeight - padding;
+    let bounds = this.getGraphBounds();
 
-    var t = this.view.translate;
-    var s = this.view.scale;
+    let t = this.view.translate;
+    let s = this.view.scale;
 
-    var dx = (horizontal) ? cw - bounds.width : 0;
-    var dy = (vertical) ? ch - bounds.height : 0;
+    let dx = (horizontal) ? cw - bounds.width : 0;
+    let dy = (vertical) ? ch - bounds.height : 0;
 
     if (!hasScrollbars) {
       this.view.setTranslate((horizontal) ? Math.floor(t.x - bounds.x / s + dx * cx / s) : t.x,
@@ -7031,8 +7037,8 @@ class mxGraph extends mxEventSource {
       bounds.x -= t.x;
       bounds.y -= t.y;
 
-      var sw = this.container.scrollWidth;
-      var sh = this.container.scrollHeight;
+      let sw = this.container.scrollWidth;
+      let sh = this.container.scrollHeight;
 
       if (sw > cw) {
         dx = 0;
@@ -7057,12 +7063,12 @@ class mxGraph extends mxEventSource {
    */
   zoom = (factor, center) => {
     center = (center != null) ? center : this.centerZoom;
-    var scale = Math.round(this.view.scale * factor * 100) / 100;
-    var state = this.view.getState(this.getSelectionCell());
+    let scale = Math.round(this.view.scale * factor * 100) / 100;
+    let state = this.view.getState(this.getSelectionCell());
     factor = scale / this.view.scale;
 
     if (this.keepSelectionVisibleOnZoom && state != null) {
-      var rect = new mxRectangle(state.x * factor, state.y * factor,
+      let rect = new mxRectangle(state.x * factor, state.y * factor,
           state.width * factor, state.height * factor);
 
       // Refreshes the display only once if a scroll is carried out
@@ -7075,18 +7081,18 @@ class mxGraph extends mxEventSource {
         this.view.setScale(scale);
       }
     } else {
-      var hasScrollbars = mxUtils.hasScrollbars(this.container);
+      let hasScrollbars = mxUtils.hasScrollbars(this.container);
 
       if (center && !hasScrollbars) {
-        var dx = this.container.offsetWidth;
-        var dy = this.container.offsetHeight;
+        let dx = this.container.offsetWidth;
+        let dy = this.container.offsetHeight;
 
         if (factor > 1) {
-          var f = (factor - 1) / (scale * 2);
+          let f = (factor - 1) / (scale * 2);
           dx *= -f;
           dy *= -f;
         } else {
-          var f = (1 / factor - 1) / (this.view.scale * 2);
+          let f = (1 / factor - 1) / (this.view.scale * 2);
           dx *= f;
           dy *= f;
         }
@@ -7096,16 +7102,16 @@ class mxGraph extends mxEventSource {
             this.view.translate.y + dy);
       } else {
         // Allows for changes of translate and scrollbars during setscale
-        var tx = this.view.translate.x;
-        var ty = this.view.translate.y;
-        var sl = this.container.scrollLeft;
-        var st = this.container.scrollTop;
+        let tx = this.view.translate.x;
+        let ty = this.view.translate.y;
+        let sl = this.container.scrollLeft;
+        let st = this.container.scrollTop;
 
         this.view.setScale(scale);
 
         if (hasScrollbars) {
-          var dx = 0;
-          var dy = 0;
+          let dx = 0;
+          let dy = 0;
 
           if (center) {
             dx = this.container.offsetWidth * (factor - 1) / 2;
@@ -7134,15 +7140,15 @@ class mxGraph extends mxEventSource {
    * after the operation
    */
   zoomToRect = (rect) => {
-    var scaleX = this.container.clientWidth / rect.width;
-    var scaleY = this.container.clientHeight / rect.height;
-    var aspectFactor = scaleX / scaleY;
+    let scaleX = this.container.clientWidth / rect.width;
+    let scaleY = this.container.clientHeight / rect.height;
+    let aspectFactor = scaleX / scaleY;
 
     // Remove any overlap of the rect outside the client area
     rect.x = Math.max(0, rect.x);
     rect.y = Math.max(0, rect.y);
-    var rectRight = Math.min(this.container.scrollWidth, rect.x + rect.width);
-    var rectBottom = Math.min(this.container.scrollHeight, rect.y + rect.height);
+    let rectRight = Math.min(this.container.scrollWidth, rect.x + rect.width);
+    let rectBottom = Math.min(this.container.scrollHeight, rect.y + rect.height);
     rect.width = rectRight - rect.x;
     rect.height = rectBottom - rect.y;
 
@@ -7151,13 +7157,13 @@ class mxGraph extends mxEventSource {
     // original rect passed in.
     if (aspectFactor < 1.0) {
       // Height needs increasing
-      var newHeight = rect.height / aspectFactor;
-      var deltaHeightBuffer = (newHeight - rect.height) / 2.0;
+      let newHeight = rect.height / aspectFactor;
+      let deltaHeightBuffer = (newHeight - rect.height) / 2.0;
       rect.height = newHeight;
 
       // Assign up to half the buffer to the upper part of the rect, not crossing 0
       // put the rest on the bottom
-      var upperBuffer = Math.min(rect.y, deltaHeightBuffer);
+      let upperBuffer = Math.min(rect.y, deltaHeightBuffer);
       rect.y = rect.y - upperBuffer;
 
       // Check if the bottom has extended too far
@@ -7165,13 +7171,13 @@ class mxGraph extends mxEventSource {
       rect.height = rectBottom - rect.y;
     } else {
       // Width needs increasing
-      var newWidth = rect.width * aspectFactor;
-      var deltaWidthBuffer = (newWidth - rect.width) / 2.0;
+      let newWidth = rect.width * aspectFactor;
+      let deltaWidthBuffer = (newWidth - rect.width) / 2.0;
       rect.width = newWidth;
 
       // Assign up to half the buffer to the upper part of the rect, not crossing 0
       // put the rest on the bottom
-      var leftBuffer = Math.min(rect.x, deltaWidthBuffer);
+      let leftBuffer = Math.min(rect.x, deltaWidthBuffer);
       rect.x = rect.x - leftBuffer;
 
       // Check if the right hand side has extended too far
@@ -7179,8 +7185,8 @@ class mxGraph extends mxEventSource {
       rect.width = rectRight - rect.x;
     }
 
-    var scale = this.container.clientWidth / rect.width;
-    var newScale = this.view.scale * scale;
+    let scale = this.container.clientWidth / rect.width;
+    let newScale = this.view.scale * scale;
 
     if (!mxUtils.hasScrollbars(this.container)) {
       this.view.scaleAndTranslate(newScale, (this.view.translate.x - rect.x / this.view.scale), (this.view.translate.y - rect.y / this.view.scale));
@@ -7200,7 +7206,7 @@ class mxGraph extends mxEventSource {
    * To center a given graph if the <container> has no scrollbars, use the following code.
    *
    * [code]
-   * var bounds = graph.getGraphBounds();
+   * let bounds = graph.getGraphBounds();
    * graph.view.setTranslate(-bounds.x - (bounds.width - container.clientWidth) / 2,
    *                -bounds.y - (bounds.height - container.clientHeight) / 2);
    * [/code]
@@ -7211,18 +7217,18 @@ class mxGraph extends mxEventSource {
    * center - Optional boolean flag. Default is false.
    */
   scrollCellToVisible = (cell, center) => {
-    var x = -this.view.translate.x;
-    var y = -this.view.translate.y;
+    let x = -this.view.translate.x;
+    let y = -this.view.translate.y;
 
-    var state = this.view.getState(cell);
+    let state = this.view.getState(cell);
 
     if (state != null) {
-      var bounds = new mxRectangle(x + state.x, y + state.y, state.width,
+      let bounds = new mxRectangle(x + state.x, y + state.y, state.width,
           state.height);
 
       if (center && this.container != null) {
-        var w = this.container.clientWidth;
-        var h = this.container.clientHeight;
+        let w = this.container.clientWidth;
+        let h = this.container.clientHeight;
 
         bounds.x = bounds.getCenterX() - w / 2;
         bounds.width = w;
@@ -7230,7 +7236,7 @@ class mxGraph extends mxEventSource {
         bounds.height = h;
       }
 
-      var tr = new mxPoint(this.view.translate.x, this.view.translate.y);
+      let tr = new mxPoint(this.view.translate.x, this.view.translate.y);
 
       if (this.scrollRectToVisible(bounds)) {
         // Triggers an update via the view's event source
@@ -7252,21 +7258,21 @@ class mxGraph extends mxEventSource {
    * rect - <mxRectangle> to be made visible.
    */
   scrollRectToVisible = (rect) => {
-    var isChanged = false;
+    let isChanged = false;
 
     if (rect != null) {
-      var w = this.container.offsetWidth;
-      var h = this.container.offsetHeight;
+      let w = this.container.offsetWidth;
+      let h = this.container.offsetHeight;
 
-      var widthLimit = Math.min(w, rect.width);
-      var heightLimit = Math.min(h, rect.height);
+      let widthLimit = Math.min(w, rect.width);
+      let heightLimit = Math.min(h, rect.height);
 
       if (mxUtils.hasScrollbars(this.container)) {
-        var c = this.container;
+        let c = this.container;
         rect.x += this.view.translate.x;
         rect.y += this.view.translate.y;
-        var dx = c.scrollLeft - rect.x;
-        var ddx = Math.max(dx - c.scrollLeft, 0);
+        let dx = c.scrollLeft - rect.x;
+        let ddx = Math.max(dx - c.scrollLeft, 0);
 
         if (dx > 0) {
           c.scrollLeft -= dx + 2;
@@ -7278,8 +7284,8 @@ class mxGraph extends mxEventSource {
           }
         }
 
-        var dy = c.scrollTop - rect.y;
-        var ddy = Math.max(0, dy - c.scrollTop);
+        let dy = c.scrollTop - rect.y;
+        let ddy = Math.max(0, dy - c.scrollTop);
 
         if (dy > 0) {
           c.scrollTop -= dy + 2;
@@ -7295,10 +7301,10 @@ class mxGraph extends mxEventSource {
           this.view.setTranslate(ddx, ddy);
         }
       } else {
-        var x = -this.view.translate.x;
-        var y = -this.view.translate.y;
+        let x = -this.view.translate.x;
+        let y = -this.view.translate.y;
 
-        var s = this.view.scale;
+        let s = this.view.scale;
 
         if (rect.x + widthLimit > x + w) {
           this.view.translate.x -= (rect.x + widthLimit - w - x) / s;
@@ -7415,20 +7421,20 @@ class mxGraph extends mxEventSource {
    * edge - <mxCellState> that represents the edge.
    */
   isOrthogonal = (edge) => {
-    var orthogonal = edge.style[mxConstants.STYLE_ORTHOGONAL];
+    let orthogonal = edge.style[mxConstants.STYLE_ORTHOGONAL];
 
     if (orthogonal != null) {
       return orthogonal;
     }
 
-    var tmp = this.view.getEdgeStyle(edge);
+    let tmp = this.view.getEdgeStyle(edge);
 
-    return tmp == mxEdgeStyle.SegmentConnector ||
-        tmp == mxEdgeStyle.ElbowConnector ||
-        tmp == mxEdgeStyle.SideToSide ||
-        tmp == mxEdgeStyle.TopToBottom ||
-        tmp == mxEdgeStyle.EntityRelation ||
-        tmp == mxEdgeStyle.OrthConnector;
+    return tmp === mxEdgeStyle.SegmentConnector ||
+        tmp === mxEdgeStyle.ElbowConnector ||
+        tmp === mxEdgeStyle.SideToSide ||
+        tmp === mxEdgeStyle.TopToBottom ||
+        tmp === mxEdgeStyle.EntityRelation ||
+        tmp === mxEdgeStyle.OrthConnector;
   };
 
   /**
@@ -7441,8 +7447,8 @@ class mxGraph extends mxEventSource {
    * state - <mxCellState> that represents a potential loop.
    */
   isLoop = (state) => {
-    var src = state.getVisibleTerminalState(true);
-    var trg = state.getVisibleTerminalState(false);
+    let src = state.getVisibleTerminalState(true);
+    let trg = state.getVisibleTerminalState(false);
 
     return (src != null && src == trg);
   };
@@ -7589,7 +7595,7 @@ class mxGraph extends mxEventSource {
     }
 
     // Checks if we're dealing with a loop
-    if (!this.allowLoops && source == target && source != null) {
+    if (!this.allowLoops && source === target && source != null) {
       return '';
     }
 
@@ -7599,15 +7605,15 @@ class mxGraph extends mxEventSource {
     }
 
     if (source != null && target != null) {
-      var error = '';
+      let error = '';
 
       // Checks if the cells are already connected
       // and adds an error message if required
       if (!this.multigraph) {
-        var tmp = this.model.getEdgesBetween(source, target, true);
+        let tmp = this.model.getEdgesBetween(source, target, true);
 
         // Checks if the source and target are not connected by another edge
-        if (tmp.length > 1 || (tmp.length == 1 && tmp[0] != edge)) {
+        if (tmp.length > 1 || (tmp.length === 1 && tmp[0] !== edge)) {
           error += (mxResources.get(this.alreadyConnectedResource) ||
               this.alreadyConnectedResource) + '\n';
         }
@@ -7616,13 +7622,13 @@ class mxGraph extends mxEventSource {
       // Gets the number of outgoing edges from the source
       // and the number of incoming edges from the target
       // without counting the edge being currently changed.
-      var sourceOut = this.model.getDirectedEdgeCount(source, true, edge);
-      var targetIn = this.model.getDirectedEdgeCount(target, false, edge);
+      let sourceOut = this.model.getDirectedEdgeCount(source, true, edge);
+      let targetIn = this.model.getDirectedEdgeCount(target, false, edge);
 
       // Checks the change against each multiplicity rule
       if (this.multiplicities != null) {
-        for (var i = 0; i < this.multiplicities.length; i++) {
-          var err = this.multiplicities[i].check(this, edge, source,
+        for (let i = 0; i < this.multiplicities.length; i++) {
+          let err = this.multiplicities[i].check(this, edge, source,
               target, sourceOut, targetIn);
 
           if (err != null) {
@@ -7632,7 +7638,7 @@ class mxGraph extends mxEventSource {
       }
 
       // Validates the source and target terminals independently
-      var err = this.validateEdge(edge, source, target);
+      let err = this.validateEdge(edge, source, target);
 
       if (err != null) {
         error += err;
@@ -7680,18 +7686,18 @@ class mxGraph extends mxEventSource {
     cell = (cell != null) ? cell : this.model.getRoot();
     context = (context != null) ? context : {};
 
-    var isValid = true;
-    var childCount = this.model.getChildCount(cell);
+    let isValid = true;
+    let childCount = this.model.getChildCount(cell);
 
-    for (var i = 0; i < childCount; i++) {
-      var tmp = this.model.getChildAt(cell, i);
-      var ctx = context;
+    for (let i = 0; i < childCount; i++) {
+      let tmp = this.model.getChildAt(cell, i);
+      let ctx = context;
 
       if (this.isValidRoot(tmp)) {
         ctx = {};
       }
 
-      var warn = this.validateGraph(tmp, ctx);
+      let warn = this.validateGraph(tmp, ctx);
 
       if (warn != null) {
         this.setCellWarning(tmp, warn.replace(/\n/g, '<br>'));
@@ -7702,7 +7708,7 @@ class mxGraph extends mxEventSource {
       isValid = isValid && warn == null;
     }
 
-    var warning = '';
+    let warning = '';
 
     // Adds error for invalid children if collapsed (children invisible)
     if (this.isCellCollapsed(cell) && !isValid) {
@@ -7720,7 +7726,7 @@ class mxGraph extends mxEventSource {
     }
 
     // Checks custom validation rules
-    var err = this.validateCell(cell, context);
+    let err = this.validateCell(cell, context);
 
     if (err != null) {
       warning += err;
@@ -7749,14 +7755,14 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> for which the multiplicities should be checked.
    */
   getCellValidationError = (cell) => {
-    var outCount = this.model.getDirectedEdgeCount(cell, true);
-    var inCount = this.model.getDirectedEdgeCount(cell, false);
-    var value = this.model.getValue(cell);
-    var error = '';
+    let outCount = this.model.getDirectedEdgeCount(cell, true);
+    let inCount = this.model.getDirectedEdgeCount(cell, false);
+    let value = this.model.getValue(cell);
+    let error = '';
 
     if (this.multiplicities != null) {
-      for (var i = 0; i < this.multiplicities.length; i++) {
-        var rule = this.multiplicities[i];
+      for (let i = 0; i < this.multiplicities.length; i++) {
+        let rule = this.multiplicities[i];
 
         if (rule.source && mxUtils.isNode(value, rule.type,
             rule.attr, rule.value) && (outCount > rule.max ||
@@ -7823,7 +7829,7 @@ class mxGraph extends mxEventSource {
    */
   getFoldingImage = (state) => {
     if (state != null && this.foldingEnabled && !this.getModel().isEdge(state.cell)) {
-      var tmp = this.isCellCollapsed(state.cell);
+      let tmp = this.isCellCollapsed(state.cell);
 
       if (this.isCellFoldable(state.cell, !tmp)) {
         return (tmp) ? this.collapsedImage : this.expandedImage;
@@ -7859,7 +7865,7 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> whose textual representation should be returned.
    */
   convertValueToString = (cell) => {
-    var value = this.model.getValue(cell);
+    let value = this.model.getValue(cell);
 
     if (value != null) {
       if (mxUtils.isNode(value)) {
@@ -7885,15 +7891,15 @@ class mxGraph extends mxEventSource {
    * (code)
    * graph.getLabel = (cell)=>
    * {
-   *   var label = getLabel.apply(this, arguments);
+   *   let label = getLabel.apply(this, arguments);
    *
    *   if (label != null && this.model.isVertex(cell))
    *   {
-   *     var geo = this.getCellGeometry(cell);
+   *     let geo = this.getCellGeometry(cell);
    *
    *     if (geo != null)
    *     {
-   *       var max = parseInt(geo.width / 8);
+   *       let max = parseInt(geo.width / 8);
    *
    *       if (label.length > max)
    *       {
@@ -7911,9 +7917,9 @@ class mxGraph extends mxEventSource {
    * (code)
    * graph.addListener(mxEvent.RESIZE_CELLS, (sender, evt)=>
    * {
-   *   var cells = evt.getProperty('cells');
+   *   let cells = evt.getProperty('cells');
    *
-   *   for (var i = 0; i < cells.length; i++)
+   *   for (let i = 0; i < cells.length; i++)
    *   {
    *     this.view.removeState(cells[i]);
    *   }
@@ -7925,10 +7931,10 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> whose label should be returned.
    */
   getLabel = (cell) => {
-    var result = '';
+    let result = '';
 
     if (this.labelsVisible && cell != null) {
-      var style = this.getCurrentCellStyle(cell);
+      let style = this.getCurrentCellStyle(cell);
 
       if (!mxUtils.getValue(style, mxConstants.STYLE_NOLABEL, false)) {
         result = this.convertValueToString(cell);
@@ -7991,7 +7997,7 @@ class mxGraph extends mxEventSource {
    * (code)
    * graph.getLabel = (cell)=>
    * {
-   *   var tmp = getLabel.apply(this, arguments); // "supercall"
+   *   let tmp = getLabel.apply(this, arguments); // "supercall"
    *
    *   if (this.model.isEdge(cell))
    *   {
@@ -8016,7 +8022,7 @@ class mxGraph extends mxEventSource {
    * state - <mxCell> whose label should be wrapped.
    */
   isWrapping = (cell) => {
-    return this.getCurrentCellStyle(cell)[mxConstants.STYLE_WHITE_SPACE] == 'wrap';
+    return this.getCurrentCellStyle(cell)[mxConstants.STYLE_WHITE_SPACE] === 'wrap';
   };
 
   /**
@@ -8032,7 +8038,7 @@ class mxGraph extends mxEventSource {
    * state - <mxCell> whose label should be clipped.
    */
   isLabelClipped = (cell) => {
-    return this.getCurrentCellStyle(cell)[mxConstants.STYLE_OVERFLOW] == 'hidden';
+    return this.getCurrentCellStyle(cell)[mxConstants.STYLE_OVERFLOW] === 'hidden';
   };
 
   /**
@@ -8055,12 +8061,12 @@ class mxGraph extends mxEventSource {
    * y - Y-coordinate of the mouse.
    */
   getTooltip = (state, node, x, y) => {
-    var tip = null;
+    let tip = null;
 
     if (state != null) {
       // Checks if the mouse is over the folding icon
-      if (state.control != null && (node == state.control.node ||
-          node.parentNode == state.control.node)) {
+      if (state.control != null && (node === state.control.node ||
+          node.parentNode === state.control.node)) {
         tip = this.collapseExpandResource;
         tip = mxUtils.htmlEntities(mxResources.get(tip) || tip).replace(/\\n/g, '<br>');
       }
@@ -8068,14 +8074,14 @@ class mxGraph extends mxEventSource {
       if (tip == null && state.overlays != null) {
         state.overlays.visit((id, shape) => {
           // LATER: Exit loop if tip is not null
-          if (tip == null && (node == shape.node || node.parentNode == shape.node)) {
+          if (tip == null && (node === shape.node || node.parentNode === shape.node)) {
             tip = shape.overlay.toString();
           }
         });
       }
 
       if (tip == null) {
-        var handler = this.selectionCellsHandler.getHandler(state.cell);
+        let handler = this.selectionCellsHandler.getHandler(state.cell);
 
         if (handler != null && typeof (handler.getTooltipForNode) == 'function') {
           tip = handler.getTooltipForNode(node);
@@ -8113,7 +8119,7 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> whose tooltip should be returned.
    */
   getTooltipForCell = (cell) => {
-    var tip = null;
+    let tip = null;
 
     if (cell != null && cell.getTooltip != null) {
       tip = cell.getTooltip();
@@ -8180,9 +8186,9 @@ class mxGraph extends mxEventSource {
    * ignoreState - Optional boolean that specifies if cell state should be ignored.
    */
   getStartSize = (swimlane, ignoreState) => {
-    var result = new mxRectangle();
-    var style = this.getCurrentCellStyle(swimlane, ignoreState);
-    var size = parseInt(mxUtils.getValue(style,
+    let result = new mxRectangle();
+    let style = this.getCurrentCellStyle(swimlane, ignoreState);
+    let size = parseInt(mxUtils.getValue(style,
         mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE));
 
     if (mxUtils.getValue(style, mxConstants.STYLE_HORIZONTAL, true)) {
@@ -8200,27 +8206,27 @@ class mxGraph extends mxEventSource {
    * Returns the direction for the given swimlane style.
    */
   getSwimlaneDirection = (style) => {
-    var dir = mxUtils.getValue(style, mxConstants.STYLE_DIRECTION, mxConstants.DIRECTION_EAST);
-    var flipH = mxUtils.getValue(style, mxConstants.STYLE_FLIPH, 0) == 1;
-    var flipV = mxUtils.getValue(style, mxConstants.STYLE_FLIPV, 0) == 1;
-    var h = mxUtils.getValue(style, mxConstants.STYLE_HORIZONTAL, true);
-    var n = (h) ? 0 : 3;
+    let dir = mxUtils.getValue(style, mxConstants.STYLE_DIRECTION, mxConstants.DIRECTION_EAST);
+    let flipH = mxUtils.getValue(style, mxConstants.STYLE_FLIPH, 0) == 1;
+    let flipV = mxUtils.getValue(style, mxConstants.STYLE_FLIPV, 0) == 1;
+    let h = mxUtils.getValue(style, mxConstants.STYLE_HORIZONTAL, true);
+    let n = (h) ? 0 : 3;
 
-    if (dir == mxConstants.DIRECTION_NORTH) {
+    if (dir === mxConstants.DIRECTION_NORTH) {
       n--;
-    } else if (dir == mxConstants.DIRECTION_WEST) {
+    } else if (dir === mxConstants.DIRECTION_WEST) {
       n += 2;
-    } else if (dir == mxConstants.DIRECTION_SOUTH) {
+    } else if (dir === mxConstants.DIRECTION_SOUTH) {
       n += 1;
     }
 
-    var mod = mxUtils.mod(n, 2);
+    let mod = mxUtils.mod(n, 2);
 
-    if (flipH && mod == 1) {
+    if (flipH && mod === 1) {
       n += 2;
     }
 
-    if (flipV && mod == 0) {
+    if (flipV && mod === 0) {
       n += 2;
     }
 
@@ -8243,19 +8249,19 @@ class mxGraph extends mxEventSource {
    * ignoreState - Optional boolean that specifies if cell state should be ignored.
    */
   getActualStartSize = (swimlane, ignoreState) => {
-    var result = new mxRectangle();
+    let result = new mxRectangle();
 
     if (this.isSwimlane(swimlane, ignoreState)) {
-      var style = this.getCurrentCellStyle(swimlane, ignoreState);
-      var size = parseInt(mxUtils.getValue(style, mxConstants.STYLE_STARTSIZE,
+      let style = this.getCurrentCellStyle(swimlane, ignoreState);
+      let size = parseInt(mxUtils.getValue(style, mxConstants.STYLE_STARTSIZE,
           mxConstants.DEFAULT_STARTSIZE));
-      var dir = this.getSwimlaneDirection(style);
+      let dir = this.getSwimlaneDirection(style);
 
-      if (dir == mxConstants.DIRECTION_NORTH) {
+      if (dir === mxConstants.DIRECTION_NORTH) {
         result.y = size;
-      } else if (dir == mxConstants.DIRECTION_WEST) {
+      } else if (dir === mxConstants.DIRECTION_WEST) {
         result.x = size;
-      } else if (dir == mxConstants.DIRECTION_SOUTH) {
+      } else if (dir === mxConstants.DIRECTION_SOUTH) {
         result.height = size;
       } else {
         result.width = size;
@@ -8290,16 +8296,12 @@ class mxGraph extends mxEventSource {
    * state - <mxCellState> to check.
    */
   isTransparentState = (state) => {
-    var result = false;
-
+    let result = false;
     if (state != null) {
-      var stroke = mxUtils.getValue(state.style, mxConstants.STYLE_STROKECOLOR, mxConstants.NONE);
-      var fill = mxUtils.getValue(state.style, mxConstants.STYLE_FILLCOLOR, mxConstants.NONE);
-
-      result = stroke == mxConstants.NONE && fill == mxConstants.NONE && this.getImage(state) == null;
-
+      let stroke = mxUtils.getValue(state.style, mxConstants.STYLE_STROKECOLOR, mxConstants.NONE);
+      let fill = mxUtils.getValue(state.style, mxConstants.STYLE_FILLCOLOR, mxConstants.NONE);
+      result = stroke === mxConstants.NONE && fill === mxConstants.NONE && this.getImage(state) == null;
     }
-
     return result;
   };
 
@@ -8418,10 +8420,9 @@ class mxGraph extends mxEventSource {
    * ignoreState - Optional boolean that specifies if the cell state should be ignored.
    */
   isSwimlane = (cell, ignoreState) => {
-    if (cell != null && this.model.getParent(cell) != this.model.getRoot() &&
+    if (cell != null && this.model.getParent(cell) !== this.model.getRoot() &&
         !this.model.isEdge(cell)) {
-      return this.getCurrentCellStyle(cell, ignoreState)
-          [mxConstants.STYLE_SHAPE] == mxConstants.SHAPE_SWIMLANE;
+      return this.getCurrentCellStyle(cell, ignoreState)[mxConstants.STYLE_SHAPE] === mxConstants.SHAPE_SWIMLANE;
     }
 
     return false;
@@ -8546,7 +8547,7 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> whose locked state should be returned.
    */
   isCellLocked = (cell) => {
-    var geometry = this.model.getGeometry(cell);
+    let geometry = this.model.getGeometry(cell);
 
     return this.isCellsLocked() || (geometry != null && this.model.isVertex(cell) && geometry.relative);
   };
@@ -8603,9 +8604,9 @@ class mxGraph extends mxEventSource {
    * cell - Optional <mxCell> whose cloneable state should be returned.
    */
   isCellCloneable = (cell) => {
-    var style = this.getCurrentCellStyle(cell);
+    let style = this.getCurrentCellStyle(cell);
 
-    return this.isCellsCloneable() && style[mxConstants.STYLE_CLONEABLE] != 0;
+    return this.isCellsCloneable() && style[mxConstants.STYLE_CLONEABLE] !== 0;
   };
 
   /**
@@ -8694,7 +8695,7 @@ class mxGraph extends mxEventSource {
    * (code)
    * isCellSelectable = (cell)=>
    * {
-   *   var style = this.getCurrentCellStyle(cell);
+   *   let style = this.getCurrentCellStyle(cell);
    *
    *   return this.isCellsSelectable() && !this.isCellLocked(cell) && style['selectable'] != 0;
    * };
@@ -8755,9 +8756,9 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> whose deletable state should be returned.
    */
   isCellDeletable = (cell) => {
-    var style = this.getCurrentCellStyle(cell);
+    let style = this.getCurrentCellStyle(cell);
 
-    return this.isCellsDeletable() && style[mxConstants.STYLE_DELETABLE] != 0;
+    return this.isCellsDeletable() && style[mxConstants.STYLE_DELETABLE] !== 0;
   };
 
   /**
@@ -8810,9 +8811,9 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> whose rotatable state should be returned.
    */
   isCellRotatable = (cell) => {
-    var style = this.getCurrentCellStyle(cell);
+    let style = this.getCurrentCellStyle(cell);
 
-    return style[mxConstants.STYLE_ROTATABLE] != 0;
+    return style[mxConstants.STYLE_ROTATABLE] !== 0;
   };
 
   /**
@@ -8838,9 +8839,9 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> whose movable state should be returned.
    */
   isCellMovable = (cell) => {
-    var style = this.getCurrentCellStyle(cell);
+    let style = this.getCurrentCellStyle(cell);
 
-    return this.isCellsMovable() && !this.isCellLocked(cell) && style[mxConstants.STYLE_MOVABLE] != 0;
+    return this.isCellsMovable() && !this.isCellLocked(cell) && style[mxConstants.STYLE_MOVABLE] !== 0;
   };
 
   /**
@@ -9229,7 +9230,7 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> whose resizable state should be returned.
    */
   isCellResizable = (cell) => {
-    var style = this.getCurrentCellStyle(cell);
+    let style = this.getCurrentCellStyle(cell);
 
     return this.isCellsResizable() && !this.isCellLocked(cell) &&
         mxUtils.getValue(style, mxConstants.STYLE_RESIZABLE, '1') != '0';
@@ -9289,7 +9290,7 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> whose bendable state should be returned.
    */
   isCellBendable = (cell) => {
-    var style = this.getCurrentCellStyle(cell);
+    let style = this.getCurrentCellStyle(cell);
 
     return this.isCellsBendable() && !this.isCellLocked(cell) && style[mxConstants.STYLE_BENDABLE] != 0;
   };
@@ -9330,7 +9331,7 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> whose editable state should be returned.
    */
   isCellEditable = (cell) => {
-    var style = this.getCurrentCellStyle(cell);
+    let style = this.getCurrentCellStyle(cell);
 
     return this.isCellsEditable() && !this.isCellLocked(cell) && style[mxConstants.STYLE_EDITABLE] != 0;
   };
@@ -9508,9 +9509,9 @@ class mxGraph extends mxEventSource {
    */
   isEditing = (cell) => {
     if (this.cellEditor != null) {
-      var editingCell = this.cellEditor.getEditingCell();
+      let editingCell = this.cellEditor.getEditingCell();
 
-      return (cell == null) ? editingCell != null : cell == editingCell;
+      return (cell == null) ? editingCell != null : cell === editingCell;
     }
 
     return false;
@@ -9529,7 +9530,7 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> that should be resized.
    */
   isAutoSizeCell = (cell) => {
-    var style = this.getCurrentCellStyle(cell);
+    let style = this.getCurrentCellStyle(cell);
 
     return this.isAutoSizeCells() || style[mxConstants.STYLE_AUTOSIZE] == 1;
   };
@@ -9792,7 +9793,7 @@ class mxGraph extends mxEventSource {
    * cell - <mxCell> whose foldable state should be returned.
    */
   isCellFoldable = (cell, collapse) => {
-    var style = this.getCurrentCellStyle(cell);
+    let style = this.getCurrentCellStyle(cell);
 
     return this.model.getChildCount(cell) > 0 && style[mxConstants.STYLE_FOLDABLE] != 0;
   };
@@ -9834,8 +9835,8 @@ class mxGraph extends mxEventSource {
     if (this.model.isEdge(target) && cells != null && cells.length == 1 &&
         this.isCellConnectable(cells[0]) && this.getEdgeValidationError(target,
             this.model.getTerminal(target, true), cells[0]) == null) {
-      var src = this.model.getTerminal(target, true);
-      var trg = this.model.getTerminal(target, false);
+      let src = this.model.getTerminal(target, true);
+      let trg = this.model.getTerminal(target, false);
 
       return (!this.model.isAncestor(cells[0], src) &&
           !this.model.isAncestor(cells[0], trg));
@@ -9864,25 +9865,25 @@ class mxGraph extends mxEventSource {
    */
   getDropTarget = (cells, evt, cell, clone) => {
     if (!this.isSwimlaneNesting()) {
-      for (var i = 0; i < cells.length; i++) {
+      for (let i = 0; i < cells.length; i++) {
         if (this.isSwimlane(cells[i])) {
           return null;
         }
       }
     }
 
-    var pt = mxUtils.convertPoint(this.container,
+    let pt = mxUtils.convertPoint(this.container,
         mxEvent.getClientX(evt), mxEvent.getClientY(evt));
     pt.x -= this.panDx;
     pt.y -= this.panDy;
-    var swimlane = this.getSwimlaneAt(pt.x, pt.y);
+    let swimlane = this.getSwimlaneAt(pt.x, pt.y);
 
     if (cell == null) {
       cell = swimlane;
     } else if (swimlane != null) {
       // Checks if the cell is an ancestor of the swimlane
       // under the mouse and uses the swimlane in that case
-      var tmp = this.model.getParent(swimlane);
+      let tmp = this.model.getParent(swimlane);
 
       while (tmp != null && this.isSwimlane(tmp) && tmp != cell) {
         tmp = this.model.getParent(tmp);
@@ -9900,7 +9901,7 @@ class mxGraph extends mxEventSource {
 
     // Checks if parent is dropped into child if not cloning
     if (clone == null || !clone) {
-      var parent = cell;
+      let parent = cell;
 
       while (parent != null && mxUtils.indexOf(cells, parent) < 0) {
         parent = this.model.getParent(parent);
@@ -9923,13 +9924,13 @@ class mxGraph extends mxEventSource {
    * layer).
    */
   getDefaultParent = () => {
-    var parent = this.getCurrentRoot();
+    let parent = this.getCurrentRoot();
 
     if (parent == null) {
       parent = this.defaultParent;
 
       if (parent == null) {
-        var root = this.model.getRoot();
+        let root = this.model.getRoot();
         parent = this.model.getChildAt(root, 0);
       }
     }
@@ -9988,18 +9989,18 @@ class mxGraph extends mxEventSource {
     }
 
     if (parent != null) {
-      var childCount = this.model.getChildCount(parent);
+      let childCount = this.model.getChildCount(parent);
 
-      for (var i = 0; i < childCount; i++) {
-        var child = this.model.getChildAt(parent, i);
+      for (let i = 0; i < childCount; i++) {
+        let child = this.model.getChildAt(parent, i);
 
         if (child != null) {
-          var result = this.getSwimlaneAt(x, y, child);
+          let result = this.getSwimlaneAt(x, y, child);
 
           if (result != null) {
             return result;
           } else if (this.isCellVisible(child) && this.isSwimlane(child)) {
-            var state = this.view.getState(child);
+            let state = this.view.getState(child);
 
             if (this.intersects(state, x, y)) {
               return child;
@@ -10048,17 +10049,17 @@ class mxGraph extends mxEventSource {
     }
 
     if (parent != null) {
-      var childCount = this.model.getChildCount(parent);
+      let childCount = this.model.getChildCount(parent);
 
-      for (var i = childCount - 1; i >= 0; i--) {
-        var cell = this.model.getChildAt(parent, i);
-        var result = this.getCellAt(x, y, cell, vertices, edges, ignoreFn);
+      for (let i = childCount - 1; i >= 0; i--) {
+        let cell = this.model.getChildAt(parent, i);
+        let result = this.getCellAt(x, y, cell, vertices, edges, ignoreFn);
 
         if (result != null) {
           return result;
         } else if (this.isCellVisible(cell) && (edges && this.model.isEdge(cell) ||
             vertices && this.model.isVertex(cell))) {
-          var state = this.view.getState(cell);
+          let state = this.view.getState(cell);
 
           if (state != null && (ignoreFn == null || !ignoreFn(state, x, y)) &&
               this.intersects(state, x, y)) {
@@ -10085,15 +10086,15 @@ class mxGraph extends mxEventSource {
    */
   intersects = (state, x, y) => {
     if (state != null) {
-      var pts = state.absolutePoints;
+      let pts = state.absolutePoints;
 
       if (pts != null) {
         var t2 = this.tolerance * this.tolerance;
-        var pt = pts[0];
+        let pt = pts[0];
 
-        for (var i = 1; i < pts.length; i++) {
-          var next = pts[i];
-          var dist = mxUtils.ptSegDistSq(pt.x, pt.y, next.x, next.y, x, y);
+        for (let i = 1; i < pts.length; i++) {
+          let next = pts[i];
+          let dist = mxUtils.ptSegDistSq(pt.x, pt.y, next.x, next.y, x, y);
 
           if (dist <= t2) {
             return true;
@@ -10102,13 +10103,13 @@ class mxGraph extends mxEventSource {
           pt = next;
         }
       } else {
-        var alpha = mxUtils.toRadians(mxUtils.getValue(state.style, mxConstants.STYLE_ROTATION) || 0);
+        let alpha = mxUtils.toRadians(mxUtils.getValue(state.style, mxConstants.STYLE_ROTATION) || 0);
 
         if (alpha != 0) {
-          var cos = Math.cos(-alpha);
-          var sin = Math.sin(-alpha);
-          var cx = new mxPoint(state.getCenterX(), state.getCenterY());
-          var pt = mxUtils.getRotatedPoint(new mxPoint(x, y), cos, sin, cx);
+          let cos = Math.cos(-alpha);
+          let sin = Math.sin(-alpha);
+          let cx = new mxPoint(state.getCenterX(), state.getCenterY());
+          let pt = mxUtils.getRotatedPoint(new mxPoint(x, y), cos, sin, cx);
           x = pt.x;
           y = pt.y;
         }
@@ -10135,11 +10136,11 @@ class mxGraph extends mxEventSource {
    * y - Y-coordinate of the mouse event.
    */
   hitsSwimlaneContent = (swimlane, x, y) => {
-    var state = this.getView().getState(swimlane);
-    var size = this.getStartSize(swimlane);
+    let state = this.getView().getState(swimlane);
+    let size = this.getStartSize(swimlane);
 
     if (state != null) {
-      var scale = this.getView().getScale();
+      let scale = this.getView().getScale();
       x -= state.x;
       y -= state.y;
 
@@ -10198,11 +10199,11 @@ class mxGraph extends mxEventSource {
     vertices = (vertices != null) ? vertices : false;
     edges = (edges != null) ? edges : false;
 
-    var cells = this.model.getChildCells(parent, vertices, edges);
-    var result = [];
+    let cells = this.model.getChildCells(parent, vertices, edges);
+    let result = [];
 
     // Filters out the non-visible child cells
-    for (var i = 0; i < cells.length; i++) {
+    for (let i = 0; i < cells.length; i++) {
       if (this.isCellVisible(cells[i])) {
         result.push(cells[i]);
       }
@@ -10290,12 +10291,12 @@ class mxGraph extends mxEventSource {
     includeLoops = (includeLoops != null) ? includeLoops : true;
     recurse = (recurse != null) ? recurse : false;
 
-    var edges = [];
-    var isCollapsed = this.isCellCollapsed(cell);
-    var childCount = this.model.getChildCount(cell);
+    let edges = [];
+    let isCollapsed = this.isCellCollapsed(cell);
+    let childCount = this.model.getChildCount(cell);
 
-    for (var i = 0; i < childCount; i++) {
-      var child = this.model.getChildAt(cell, i);
+    for (let i = 0; i < childCount; i++) {
+      let child = this.model.getChildAt(cell, i);
 
       if (isCollapsed || !this.isCellVisible(child)) {
         edges = edges.concat(this.model.getEdges(child, incoming, outgoing));
@@ -10303,13 +10304,13 @@ class mxGraph extends mxEventSource {
     }
 
     edges = edges.concat(this.model.getEdges(cell, incoming, outgoing));
-    var result = [];
+    let result = [];
 
-    for (var i = 0; i < edges.length; i++) {
-      var state = this.view.getState(edges[i]);
+    for (let i = 0; i < edges.length; i++) {
+      let state = this.view.getState(edges[i]);
 
-      var source = (state != null) ? state.getVisibleTerminal(true) : this.view.getVisibleTerminal(edges[i], true);
-      var target = (state != null) ? state.getVisibleTerminal(false) : this.view.getVisibleTerminal(edges[i], false);
+      let source = (state != null) ? state.getVisibleTerminal(true) : this.view.getVisibleTerminal(edges[i], true);
+      let target = (state != null) ? state.getVisibleTerminal(false) : this.view.getVisibleTerminal(edges[i], false);
 
       if ((includeLoops && source == target) || ((source != target) && ((incoming &&
           target == cell && (parent == null || this.isValidAncestor(source, parent, recurse))) ||
@@ -10361,17 +10362,17 @@ class mxGraph extends mxEventSource {
     sources = (sources != null) ? sources : true;
     targets = (targets != null) ? targets : true;
 
-    var terminals = [];
+    let terminals = [];
 
     // Fast lookup to avoid duplicates in terminals array
-    var dict = new mxDictionary();
+    let dict = new mxDictionary();
 
     if (edges != null) {
-      for (var i = 0; i < edges.length; i++) {
-        var state = this.view.getState(edges[i]);
+      for (let i = 0; i < edges.length; i++) {
+        let state = this.view.getState(edges[i]);
 
-        var source = (state != null) ? state.getVisibleTerminal(true) : this.view.getVisibleTerminal(edges[i], true);
-        var target = (state != null) ? state.getVisibleTerminal(false) : this.view.getVisibleTerminal(edges[i], false);
+        let source = (state != null) ? state.getVisibleTerminal(true) : this.view.getVisibleTerminal(edges[i], true);
+        let target = (state != null) ? state.getVisibleTerminal(false) : this.view.getVisibleTerminal(edges[i], false);
 
         // Checks if the terminal is the source of the edge and if the
         // target should be stored in the result
@@ -10411,16 +10412,16 @@ class mxGraph extends mxEventSource {
    */
   getEdgesBetween = (source, target, directed) => {
     directed = (directed != null) ? directed : false;
-    var edges = this.getEdges(source);
-    var result = [];
+    let edges = this.getEdges(source);
+    let result = [];
 
     // Checks if the edge is connected to the correct
     // cell and returns the first match
-    for (var i = 0; i < edges.length; i++) {
-      var state = this.view.getState(edges[i]);
+    for (let i = 0; i < edges.length; i++) {
+      let state = this.view.getState(edges[i]);
 
-      var src = (state != null) ? state.getVisibleTerminal(true) : this.view.getVisibleTerminal(edges[i], true);
-      var trg = (state != null) ? state.getVisibleTerminal(false) : this.view.getVisibleTerminal(edges[i], false);
+      let src = (state != null) ? state.getVisibleTerminal(true) : this.view.getVisibleTerminal(edges[i], true);
+      let trg = (state != null) ? state.getVisibleTerminal(false) : this.view.getVisibleTerminal(edges[i], false);
 
       if ((src == source && trg == target) || (!directed && src == target && trg == source)) {
         result.push(edges[i]);
@@ -10443,12 +10444,12 @@ class mxGraph extends mxEventSource {
    * offset by half of the <gridSize>. Default is true.
    */
   getPointForEvent = (evt, addOffset) => {
-    var p = mxUtils.convertPoint(this.container,
+    let p = mxUtils.convertPoint(this.container,
         mxEvent.getClientX(evt), mxEvent.getClientY(evt));
 
-    var s = this.view.scale;
-    var tr = this.view.translate;
-    var off = (addOffset != false) ? this.gridSize / 2 : 0;
+    let s = this.view.scale;
+    let tr = this.view.translate;
+    let off = (addOffset != false) ? this.gridSize / 2 : 0;
 
     p.x = this.snap(p.x / s - tr.x - off);
     p.y = this.snap(p.y / s - tr.y - off);
@@ -10482,9 +10483,9 @@ class mxGraph extends mxEventSource {
     result = (result != null) ? result : [];
 
     if (width > 0 || height > 0 || intersection != null) {
-      var model = this.getModel();
-      var right = x + width;
-      var bottom = y + height;
+      let model = this.getModel();
+      let right = x + width;
+      let bottom = y + height;
 
       if (parent == null) {
         parent = this.getCurrentRoot();
@@ -10495,22 +10496,22 @@ class mxGraph extends mxEventSource {
       }
 
       if (parent != null) {
-        var childCount = model.getChildCount(parent);
+        let childCount = model.getChildCount(parent);
 
-        for (var i = 0; i < childCount; i++) {
-          var cell = model.getChildAt(parent, i);
-          var state = this.view.getState(cell);
+        for (let i = 0; i < childCount; i++) {
+          let cell = model.getChildAt(parent, i);
+          let state = this.view.getState(cell);
 
           if (state != null && this.isCellVisible(cell) &&
               (ignoreFn == null || !ignoreFn(state))) {
-            var deg = mxUtils.getValue(state.style, mxConstants.STYLE_ROTATION) || 0;
-            var box = state;
+            let deg = mxUtils.getValue(state.style, mxConstants.STYLE_ROTATION) || 0;
+            let box = state;
 
             if (deg != 0) {
               box = mxUtils.getBoundingBox(box, deg);
             }
 
-            var hit = (intersection != null && model.isVertex(cell) && mxUtils.intersects(intersection, box)) ||
+            let hit = (intersection != null && model.isVertex(cell) && mxUtils.intersects(intersection, box)) ||
                 (intersection == null && (model.isEdge(cell) || model.isVertex(cell)) &&
                     box.x >= x && box.y + box.height <= bottom &&
                     box.y >= y && box.x + box.width <= right);
@@ -10549,7 +10550,7 @@ class mxGraph extends mxEventSource {
    * from the origin should be returned.
    */
   getCellsBeyond = (x0, y0, parent, rightHalfpane, bottomHalfpane) => {
-    var result = [];
+    let result = [];
 
     if (rightHalfpane || bottomHalfpane) {
       if (parent == null) {
@@ -10557,11 +10558,11 @@ class mxGraph extends mxEventSource {
       }
 
       if (parent != null) {
-        var childCount = this.model.getChildCount(parent);
+        let childCount = this.model.getChildCount(parent);
 
-        for (var i = 0; i < childCount; i++) {
-          var child = this.model.getChildAt(parent, i);
-          var state = this.view.getState(child);
+        for (let i = 0; i < childCount; i++) {
+          let child = this.model.getChildAt(parent, i);
+          let state = this.view.getState(child);
 
           if (this.isCellVisible(child) && state != null) {
             if ((!rightHalfpane || state.x >= x0) &&
@@ -10596,24 +10597,24 @@ class mxGraph extends mxEventSource {
   findTreeRoots = (parent, isolate, invert) => {
     isolate = (isolate != null) ? isolate : false;
     invert = (invert != null) ? invert : false;
-    var roots = [];
+    let roots = [];
 
     if (parent != null) {
-      var model = this.getModel();
-      var childCount = model.getChildCount(parent);
-      var best = null;
-      var maxDiff = 0;
+      let model = this.getModel();
+      let childCount = model.getChildCount(parent);
+      let best = null;
+      let maxDiff = 0;
 
-      for (var i = 0; i < childCount; i++) {
-        var cell = model.getChildAt(parent, i);
+      for (let i = 0; i < childCount; i++) {
+        let cell = model.getChildAt(parent, i);
 
         if (this.model.isVertex(cell) && this.isCellVisible(cell)) {
-          var conns = this.getConnections(cell, (isolate) ? parent : null);
-          var fanOut = 0;
-          var fanIn = 0;
+          let conns = this.getConnections(cell, (isolate) ? parent : null);
+          let fanOut = 0;
+          let fanIn = 0;
 
-          for (var j = 0; j < conns.length; j++) {
-            var src = this.view.getVisibleTerminal(conns[j], true);
+          for (let j = 0; j < conns.length; j++) {
+            let src = this.view.getVisibleTerminal(conns[j], true);
 
             if (src == cell) {
               fanOut++;
@@ -10627,7 +10628,7 @@ class mxGraph extends mxEventSource {
             roots.push(cell);
           }
 
-          var diff = (invert) ? fanIn - fanOut : fanOut - fanIn;
+          let diff = (invert) ? fanIn - fanOut : fanOut - fanIn;
 
           if (diff > maxDiff) {
             maxDiff = diff;
@@ -10657,7 +10658,7 @@ class mxGraph extends mxEventSource {
    *
    * (code)
    * mxLog.show();
-   * var cell = graph.getSelectionCell();
+   * let cell = graph.getSelectionCell();
    * graph.traverse(cell, false, (vertex, edge)=>
    * {
    *   mxLog.debug(graph.getLabel(vertex));
@@ -10685,18 +10686,18 @@ class mxGraph extends mxEventSource {
 
       if (!visited.get(vertex)) {
         visited.put(vertex, true);
-        var result = func(vertex, edge);
+        let result = func(vertex, edge);
 
         if (result == null || result) {
-          var edgeCount = this.model.getEdgeCount(vertex);
+          let edgeCount = this.model.getEdgeCount(vertex);
 
           if (edgeCount > 0) {
-            for (var i = 0; i < edgeCount; i++) {
-              var e = this.model.getEdgeAt(vertex, i);
-              var isSource = this.model.getTerminal(e, true) == vertex;
+            for (let i = 0; i < edgeCount; i++) {
+              let e = this.model.getEdgeAt(vertex, i);
+              let isSource = this.model.getTerminal(e, true) == vertex;
 
               if (!directed || (!inverse == isSource)) {
-                var next = this.model.getTerminal(e, !isSource);
+                let next = this.model.getTerminal(e, !isSource);
                 this.traverse(next, directed, func, e, visited, inverse);
               }
             }
@@ -10858,7 +10859,7 @@ class mxGraph extends mxEventSource {
    * evt - Mouseevent that triggered the selection.
    */
   selectRegion = (rect, evt) => {
-    var cells = this.getCells(rect.x, rect.y, rect.width, rect.height);
+    let cells = this.getCells(rect.x, rect.y, rect.width, rect.height);
     this.selectCellsForEvent(cells, evt);
 
     return cells;
@@ -10913,21 +10914,21 @@ class mxGraph extends mxEventSource {
    * isChild - Boolean indicating if the first child cell should be selected.
    */
   selectCell = (isNext, isParent, isChild) => {
-    var sel = this.selectionModel;
-    var cell = (sel.cells.length > 0) ? sel.cells[0] : null;
+    let sel = this.selectionModel;
+    let cell = (sel.cells.length > 0) ? sel.cells[0] : null;
 
     if (sel.cells.length > 1) {
       sel.clear();
     }
 
-    var parent = (cell != null) ?
+    let parent = (cell != null) ?
         this.model.getParent(cell) :
         this.getDefaultParent();
 
-    var childCount = this.model.getChildCount(parent);
+    let childCount = this.model.getChildCount(parent);
 
     if (cell == null && childCount > 0) {
-      var child = this.model.getChildAt(parent, 0);
+      let child = this.model.getChildAt(parent, 0);
       this.setSelectionCell(child);
     } else if ((cell == null || isParent) &&
         this.view.getState(parent) != null &&
@@ -10936,23 +10937,23 @@ class mxGraph extends mxEventSource {
         this.setSelectionCell(parent);
       }
     } else if (cell != null && isChild) {
-      var tmp = this.model.getChildCount(cell);
+      let tmp = this.model.getChildCount(cell);
 
       if (tmp > 0) {
-        var child = this.model.getChildAt(cell, 0);
+        let child = this.model.getChildAt(cell, 0);
         this.setSelectionCell(child);
       }
     } else if (childCount > 0) {
-      var i = parent.getIndex(cell);
+      let i = parent.getIndex(cell);
 
       if (isNext) {
         i++;
-        var child = this.model.getChildAt(parent, i % childCount);
+        let child = this.model.getChildAt(parent, i % childCount);
         this.setSelectionCell(child);
       } else {
         i--;
-        var index = (i < 0) ? childCount - 1 : i;
-        var child = this.model.getChildAt(parent, index);
+        let index = (i < 0) ? childCount - 1 : i;
+        let child = this.model.getChildAt(parent, index);
         this.setSelectionCell(child);
       }
     }
@@ -10975,7 +10976,7 @@ class mxGraph extends mxEventSource {
   selectAll = (parent, descendants) => {
     parent = parent || this.getDefaultParent();
 
-    var cells = (descendants) ? this.model.filterDescendants(mxUtils.bind(this, (cell) => {
+    let cells = (descendants) ? this.model.filterDescendants(mxUtils.bind(this, (cell) => {
       return cell != parent && this.view.getState(cell) != null;
     }), parent) : this.model.getChildren(parent);
 
@@ -11022,7 +11023,7 @@ class mxGraph extends mxEventSource {
   selectCells = (vertices, edges, parent, selectGroups) => {
     parent = parent || this.getDefaultParent();
 
-    var filter = mxUtils.bind(this, (cell) => {
+    let filter = mxUtils.bind(this, (cell) => {
       return this.view.getState(cell) != null &&
           (((selectGroups || this.model.getChildCount(cell) == 0) &&
               this.model.isVertex(cell) && vertices
@@ -11030,7 +11031,7 @@ class mxGraph extends mxEventSource {
               (this.model.isEdge(cell) && edges));
     });
 
-    var cells = this.model.filterDescendants(filter, parent);
+    let cells = this.model.filterDescendants(filter, parent);
 
     if (cells != null) {
       this.setSelectionCells(cells);
@@ -11050,7 +11051,7 @@ class mxGraph extends mxEventSource {
    * evt - Optional mouseevent that triggered the selection.
    */
   selectCellForEvent = (cell, evt) => {
-    var isSelected = this.isCellSelected(cell);
+    let isSelected = this.isCellSelected(cell);
 
     if (this.isToggleEvent(evt)) {
       if (isSelected) {
@@ -11099,15 +11100,15 @@ class mxGraph extends mxEventSource {
    * state - <mxCellState> whose handler should be created.
    */
   createHandler = (state) => {
-    var result = null;
+    let result = null;
 
     if (state != null) {
       if (this.model.isEdge(state.cell)) {
-        var source = state.getVisibleTerminalState(true);
-        var target = state.getVisibleTerminalState(false);
-        var geo = this.getCellGeometry(state.cell);
+        let source = state.getVisibleTerminalState(true);
+        let target = state.getVisibleTerminalState(false);
+        let geo = this.getCellGeometry(state.cell);
 
-        var edgeStyle = this.view.getEdgeStyle(state, (geo != null) ? geo.points : null, source, target);
+        let edgeStyle = this.view.getEdgeStyle(state, (geo != null) ? geo.points : null, source, target);
         result = this.createEdgeHandler(state, edgeStyle);
       } else {
         result = this.createVertexHandler(state);
@@ -11140,7 +11141,7 @@ class mxGraph extends mxEventSource {
    * state - <mxCellState> to create the handler for.
    */
   createEdgeHandler = (state, edgeStyle) => {
-    var result = null;
+    let result = null;
 
     if (edgeStyle == mxEdgeStyle.Loop ||
         edgeStyle == mxEdgeStyle.ElbowConnector ||
@@ -11217,8 +11218,8 @@ class mxGraph extends mxEventSource {
    */
   removeMouseListener = (listener) => {
     if (this.mouseListeners != null) {
-      for (var i = 0; i < this.mouseListeners.length; i++) {
-        if (this.mouseListeners[i] == listener) {
+      for (let i = 0; i < this.mouseListeners.length; i++) {
+        if (this.mouseListeners[i] === listener) {
           this.mouseListeners.splice(i, 1);
           break;
         }
@@ -11239,17 +11240,17 @@ class mxGraph extends mxEventSource {
    */
   updateMouseEvent = (me, evtName) => {
     if (me.graphX == null || me.graphY == null) {
-      var pt = mxUtils.convertPoint(this.container, me.getX(), me.getY());
+      let pt = mxUtils.convertPoint(this.container, me.getX(), me.getY());
 
       me.graphX = pt.x - this.panDx;
       me.graphY = pt.y - this.panDy;
 
       // Searches for rectangles using method if native hit detection is disabled on shape
-      if (me.getCell() == null && this.isMouseDown && evtName == mxEvent.MOUSE_MOVE) {
+      if (me.getCell() == null && this.isMouseDown && evtName === mxEvent.MOUSE_MOVE) {
         me.state = this.view.getState(this.getCellAt(pt.x, pt.y, null, null, null, (state) => {
-          return state.shape == null || state.shape.paintBackground != paintBackground ||
+          return state.shape == null || state.shape.paintBackground !== paintBackground ||
               mxUtils.getValue(state.style, mxConstants.STYLE_POINTER_EVENTS, '1') == '1' ||
-              (state.shape.fill != null && state.shape.fill != mxConstants.NONE);
+              (state.shape.fill != null && state.shape.fill !== mxConstants.NONE);
         }));
       }
     }
@@ -11263,12 +11264,12 @@ class mxGraph extends mxEventSource {
    * Returns the state for the given touch event.
    */
   getStateForTouchEvent = (evt) => {
-    var x = mxEvent.getClientX(evt);
-    var y = mxEvent.getClientY(evt);
+    let x = mxEvent.getClientX(evt);
+    let y = mxEvent.getClientY(evt);
 
     // Dispatches the drop event to the graph which
     // consumes and executes the source function
-    var pt = mxUtils.convertPoint(this.container, x, y);
+    let pt = mxUtils.convertPoint(this.container, x, y);
 
     return this.view.getState(this.getCellAt(pt.x, pt.y));
   };
@@ -11279,11 +11280,11 @@ class mxGraph extends mxEventSource {
    * Returns true if the event should be ignored in <fireMouseEvent>.
    */
   isEventIgnored = (evtName, me, sender) => {
-    var mouseEvent = mxEvent.isMouseEvent(me.getEvent());
-    var result = false;
+    let mouseEvent = mxEvent.isMouseEvent(me.getEvent());
+    let result = false;
 
     // Drops events that are fired more than once
-    if (me.getEvent() == this.lastEvent) {
+    if (me.getEvent() === this.lastEvent) {
       result = true;
     } else {
       this.lastEvent = me.getEvent();
@@ -11292,14 +11293,14 @@ class mxGraph extends mxEventSource {
     // Installs event listeners to capture the complete gesture from the event source
     // for non-MS touch events as a workaround for all events for the same geture being
     // fired from the event source even if that was removed from the DOM.
-    if (this.eventSource != null && evtName != mxEvent.MOUSE_MOVE) {
+    if (this.eventSource != null && evtName !== mxEvent.MOUSE_MOVE) {
       mxEvent.removeGestureListeners(this.eventSource, null, this.mouseMoveRedirect, this.mouseUpRedirect);
       this.mouseMoveRedirect = null;
       this.mouseUpRedirect = null;
       this.eventSource = null;
     } else if (!mxClient.IS_GC && this.eventSource != null && me.getSource() != this.eventSource) {
       result = true;
-    } else if (mxClient.IS_TOUCH && evtName == mxEvent.MOUSE_DOWN &&
+    } else if (mxClient.IS_TOUCH && evtName === mxEvent.MOUSE_DOWN &&
         !mouseEvent && !mxEvent.isPenEvent(me.getEvent())) {
       this.eventSource = me.getSource();
 
@@ -11320,27 +11321,27 @@ class mxGraph extends mxEventSource {
     }
 
     // Never fires mouseUp/-Down for double clicks
-    if (!mxEvent.isPopupTrigger(this.lastEvent) && evtName != mxEvent.MOUSE_MOVE && this.lastEvent.detail == 2) {
+    if (!mxEvent.isPopupTrigger(this.lastEvent) && evtName !== mxEvent.MOUSE_MOVE && this.lastEvent.detail === 2) {
       return true;
     }
 
     // Filters out of sequence events or mixed event types during a gesture
-    if (evtName == mxEvent.MOUSE_UP && this.isMouseDown) {
+    if (evtName === mxEvent.MOUSE_UP && this.isMouseDown) {
       this.isMouseDown = false;
-    } else if (evtName == mxEvent.MOUSE_DOWN && !this.isMouseDown) {
+    } else if (evtName === mxEvent.MOUSE_DOWN && !this.isMouseDown) {
       this.isMouseDown = true;
       this.isMouseTrigger = mouseEvent;
     }
         // Drops mouse events that are fired during touch gestures as a workaround for Webkit
     // and mouse events that are not in sync with the current internal button state
-    else if (!result && (((!mxClient.IS_FF || evtName != mxEvent.MOUSE_MOVE) &&
-        this.isMouseDown && this.isMouseTrigger != mouseEvent) ||
-        (evtName == mxEvent.MOUSE_DOWN && this.isMouseDown) ||
-        (evtName == mxEvent.MOUSE_UP && !this.isMouseDown))) {
+    else if (!result && (((!mxClient.IS_FF || evtName !== mxEvent.MOUSE_MOVE) &&
+        this.isMouseDown && this.isMouseTrigger !== mouseEvent) ||
+        (evtName === mxEvent.MOUSE_DOWN && this.isMouseDown) ||
+        (evtName === mxEvent.MOUSE_UP && !this.isMouseDown))) {
       result = true;
     }
 
-    if (!result && evtName == mxEvent.MOUSE_DOWN) {
+    if (!result && evtName === mxEvent.MOUSE_DOWN) {
       this.lastMouseX = me.getX();
       this.lastMouseY = me.getY();
     }
@@ -11354,14 +11355,14 @@ class mxGraph extends mxEventSource {
    * Hook for ignoring synthetic mouse events after touchend in Firefox.
    */
   isSyntheticEventIgnored = (evtName, me, sender) => {
-    var result = false;
-    var mouseEvent = mxEvent.isMouseEvent(me.getEvent());
+    let result = false;
+    let mouseEvent = mxEvent.isMouseEvent(me.getEvent());
 
     // LATER: This does not cover all possible cases that can go wrong in FF
-    if (this.ignoreMouseEvents && mouseEvent && evtName != mxEvent.MOUSE_MOVE) {
-      this.ignoreMouseEvents = evtName != mxEvent.MOUSE_UP;
+    if (this.ignoreMouseEvents && mouseEvent && evtName !== mxEvent.MOUSE_MOVE) {
+      this.ignoreMouseEvents = evtName !== mxEvent.MOUSE_UP;
       result = true;
-    } else if (mxClient.IS_FF && !mouseEvent && evtName == mxEvent.MOUSE_UP) {
+    } else if (mxClient.IS_FF && !mouseEvent && evtName === mxEvent.MOUSE_UP) {
       this.ignoreMouseEvents = true;
     }
 
@@ -11382,13 +11383,13 @@ class mxGraph extends mxEventSource {
    * me - <mxMouseEvent> that should be ignored.
    */
   isEventSourceIgnored = (evtName, me) => {
-    var source = me.getSource();
-    var name = (source.nodeName != null) ? source.nodeName.toLowerCase() : '';
-    var candidate = !mxEvent.isMouseEvent(me.getEvent()) || mxEvent.isLeftMouseButton(me.getEvent());
+    let source = me.getSource();
+    let name = (source.nodeName != null) ? source.nodeName.toLowerCase() : '';
+    let candidate = !mxEvent.isMouseEvent(me.getEvent()) || mxEvent.isLeftMouseButton(me.getEvent());
 
-    return evtName == mxEvent.MOUSE_DOWN && candidate && (name == 'select' || name == 'option' ||
-        (name == 'input' && source.type != 'checkbox' && source.type != 'radio' &&
-            source.type != 'button' && source.type != 'submit' && source.type != 'file'));
+    return evtName === mxEvent.MOUSE_DOWN && candidate && (name === 'select' || name === 'option' ||
+        (name === 'input' && source.type !== 'checkbox' && source.type !== 'radio' &&
+            source.type !== 'button' && source.type !== 'submit' && source.type !== 'file'));
   };
 
   /**
@@ -11442,21 +11443,21 @@ class mxGraph extends mxEventSource {
     // detect which mouseup(s) are part of the first click, ie we do not know when the first click ends.
     if ((!this.nativeDblClickEnabled && !mxEvent.isPopupTrigger(me.getEvent())) || (this.doubleTapEnabled &&
         mxClient.IS_TOUCH && (mxEvent.isTouchEvent(me.getEvent()) || mxEvent.isPenEvent(me.getEvent())))) {
-      var currentTime = new Date().getTime();
+      let currentTime = new Date().getTime();
 
-      if (evtName == mxEvent.MOUSE_DOWN) {
-        if (this.lastTouchEvent != null && this.lastTouchEvent != me.getEvent() &&
+      if (evtName === mxEvent.MOUSE_DOWN) {
+        if (this.lastTouchEvent != null && this.lastTouchEvent !== me.getEvent() &&
             currentTime - this.lastTouchTime < this.doubleTapTimeout &&
             Math.abs(this.lastTouchX - me.getX()) < this.doubleTapTolerance &&
             Math.abs(this.lastTouchY - me.getY()) < this.doubleTapTolerance &&
             this.doubleClickCounter < 2) {
           this.doubleClickCounter++;
-          var doubleClickFired = false;
+          let doubleClickFired = false;
 
-          if (evtName == mxEvent.MOUSE_UP) {
-            if (me.getCell() == this.lastTouchCell && this.lastTouchCell != null) {
+          if (evtName === mxEvent.MOUSE_UP) {
+            if (me.getCell() === this.lastTouchCell && this.lastTouchCell !== null) {
               this.lastTouchTime = 0;
-              var cell = this.lastTouchCell;
+              let cell = this.lastTouchCell;
               this.lastTouchCell = null;
 
               this.dblClick(me.getEvent(), cell);
@@ -11471,7 +11472,7 @@ class mxGraph extends mxEventSource {
             mxEvent.consume(me.getEvent());
             return;
           }
-        } else if (this.lastTouchEvent == null || this.lastTouchEvent != me.getEvent()) {
+        } else if (this.lastTouchEvent == null || this.lastTouchEvent !== me.getEvent()) {
           this.lastTouchCell = me.getCell();
           this.lastTouchX = me.getX();
           this.lastTouchY = me.getY();
@@ -11479,14 +11480,14 @@ class mxGraph extends mxEventSource {
           this.lastTouchEvent = me.getEvent();
           this.doubleClickCounter = 0;
         }
-      } else if ((this.isMouseDown || evtName == mxEvent.MOUSE_UP) && this.fireDoubleClick) {
+      } else if ((this.isMouseDown || evtName === mxEvent.MOUSE_UP) && this.fireDoubleClick) {
         this.fireDoubleClick = false;
-        var cell = this.lastTouchCell;
+        let cell = this.lastTouchCell;
         this.lastTouchCell = null;
         this.isMouseDown = false;
 
         // Workaround for Chrome/Safari not firing native double click events for double touch on background
-        var valid = (cell != null) || ((mxEvent.isTouchEvent(me.getEvent()) || mxEvent.isPenEvent(me.getEvent())) &&
+        let valid = (cell != null) || ((mxEvent.isTouchEvent(me.getEvent()) || mxEvent.isPenEvent(me.getEvent())) &&
             (mxClient.IS_GC || mxClient.IS_SF));
 
         if (valid && Math.abs(this.lastTouchX - me.getX()) < this.doubleTapTolerance &&
@@ -11505,53 +11506,53 @@ class mxGraph extends mxEventSource {
       me.state = this.getEventState(me.getState());
       this.fireEvent(new mxEventObject(mxEvent.FIRE_MOUSE_EVENT, 'eventName', evtName, 'event', me));
 
-      if ((mxClient.IS_SF || mxClient.IS_GC || me.getEvent().target != this.container)) {
-        if (evtName == mxEvent.MOUSE_MOVE && this.isMouseDown && this.autoScroll && !mxEvent.isMultiTouchEvent(me.getEvent)) {
+      if ((mxClient.IS_SF || mxClient.IS_GC || me.getEvent().target !== this.container)) {
+        if (evtName === mxEvent.MOUSE_MOVE && this.isMouseDown && this.autoScroll && !mxEvent.isMultiTouchEvent(me.getEvent)) {
           this.scrollPointToVisible(me.getGraphX(), me.getGraphY(), this.autoExtend);
-        } else if (evtName == mxEvent.MOUSE_UP && this.ignoreScrollbars && this.translateToScrollPosition &&
-            (this.container.scrollLeft != 0 || this.container.scrollTop != 0)) {
-          var s = this.view.scale;
-          var tr = this.view.translate;
+        } else if (evtName === mxEvent.MOUSE_UP && this.ignoreScrollbars && this.translateToScrollPosition &&
+            (this.container.scrollLeft !== 0 || this.container.scrollTop !== 0)) {
+          let s = this.view.scale;
+          let tr = this.view.translate;
           this.view.setTranslate(tr.x - this.container.scrollLeft / s, tr.y - this.container.scrollTop / s);
           this.container.scrollLeft = 0;
           this.container.scrollTop = 0;
         }
 
         if (this.mouseListeners != null) {
-          var args = [sender, me];
+          let args = [sender, me];
 
           // Does not change returnValue in Opera
           if (!me.getEvent().preventDefault) {
             me.getEvent().returnValue = true;
           }
 
-          for (var i = 0; i < this.mouseListeners.length; i++) {
-            var l = this.mouseListeners[i];
+          for (let i = 0; i < this.mouseListeners.length; i++) {
+            let l = this.mouseListeners[i];
 
-            if (evtName == mxEvent.MOUSE_DOWN) {
+            if (evtName === mxEvent.MOUSE_DOWN) {
               l.mouseDown.apply(l, args);
-            } else if (evtName == mxEvent.MOUSE_MOVE) {
+            } else if (evtName === mxEvent.MOUSE_MOVE) {
               l.mouseMove.apply(l, args);
-            } else if (evtName == mxEvent.MOUSE_UP) {
+            } else if (evtName === mxEvent.MOUSE_UP) {
               l.mouseUp.apply(l, args);
             }
           }
         }
 
         // Invokes the click handler
-        if (evtName == mxEvent.MOUSE_UP) {
+        if (evtName === mxEvent.MOUSE_UP) {
           this.click(me);
         }
       }
 
       // Detects tapAndHold events using a timer
       if ((mxEvent.isTouchEvent(me.getEvent()) || mxEvent.isPenEvent(me.getEvent())) &&
-          evtName == mxEvent.MOUSE_DOWN && this.tapAndHoldEnabled && !this.tapAndHoldInProgress) {
+          evtName === mxEvent.MOUSE_DOWN && this.tapAndHoldEnabled && !this.tapAndHoldInProgress) {
         this.tapAndHoldInProgress = true;
         this.initialTouchX = me.getGraphX();
         this.initialTouchY = me.getGraphY();
 
-        var handler = () => {
+        let handler = () => {
           if (this.tapAndHoldValid) {
             this.tapAndHold(me);
           }
@@ -11566,7 +11567,7 @@ class mxGraph extends mxEventSource {
 
         this.tapAndHoldThread = window.setTimeout(mxUtils.bind(this, handler), this.tapAndHoldDelay);
         this.tapAndHoldValid = true;
-      } else if (evtName == mxEvent.MOUSE_UP) {
+      } else if (evtName === mxEvent.MOUSE_UP) {
         this.tapAndHoldInProgress = false;
         this.tapAndHoldValid = false;
       } else if (this.tapAndHoldValid) {
@@ -11576,7 +11577,7 @@ class mxGraph extends mxEventSource {
       }
 
       // Stops editing for all events other than from cellEditor
-      if (evtName == mxEvent.MOUSE_DOWN && this.isEditing() && !this.cellEditor.isEventSource(me.getEvent())) {
+      if (evtName === mxEvent.MOUSE_DOWN && this.isEditing() && !this.cellEditor.isEventSource(me.getEvent())) {
         this.stopEditing(!this.isInvokesStopCellEditing());
       }
 
@@ -11591,7 +11592,7 @@ class mxGraph extends mxEventSource {
    */
   consumeMouseEvent = (evtName, me, sender) => {
     // Workaround for duplicate click in Windows 8 with Chrome/FF/Opera with touch
-    if (evtName == mxEvent.MOUSE_DOWN && mxEvent.isTouchEvent(me.getEvent())) {
+    if (evtName === mxEvent.MOUSE_DOWN && mxEvent.isTouchEvent(me.getEvent())) {
       me.consume(false);
     }
   };
@@ -11605,20 +11606,20 @@ class mxGraph extends mxEventSource {
    * (code)
    * graph.addListener(mxEvent.GESTURE, (sender, eo)=>
    * {
-   *   var evt = eo.getProperty('event');
-   *   var state = graph.view.getState(eo.getProperty('cell'));
+   *   let evt = eo.getProperty('event');
+   *   let state = graph.view.getState(eo.getProperty('cell'));
    *
    *   if (graph.isEnabled() && graph.isCellResizable(state.cell) && Math.abs(1 - evt.scale) > 0.2)
    *   {
-   *     var scale = graph.view.scale;
-   *     var tr = graph.view.translate;
+   *     let scale = graph.view.scale;
+   *     let tr = graph.view.translate;
    *
-   *     var w = state.width * evt.scale;
-   *     var h = state.height * evt.scale;
-   *     var x = state.x - (w - state.width) / 2;
-   *     var y = state.y - (h - state.height) / 2;
+   *     let w = state.width * evt.scale;
+   *     let h = state.height * evt.scale;
+   *     let x = state.x - (w - state.width) / 2;
+   *     let y = state.y - (h - state.height) / 2;
    *
-   *     var bounds = new mxRectangle(graph.snap(x / scale) - tr.x,
+   *     let bounds = new mxRectangle(graph.snap(x / scale) - tr.x,
    *         graph.snap(y / scale) - tr.y, graph.snap(w / scale), graph.snap(h / scale));
    *     graph.resizeCell(state.cell, bounds);
    *     eo.consume();
diff --git a/src/js/view/mxGraphSelectionModel.js b/src/js/view/mxGraphSelectionModel.js
index 55d7aa42c..fedc68cc8 100644
--- a/src/js/view/mxGraphSelectionModel.js
+++ b/src/js/view/mxGraphSelectionModel.js
@@ -51,9 +51,9 @@ class mxGraphSelectionModel extends mxEventSource {
    * (code)
    * graph.getSelectionModel().addListener(mxEvent.CHANGE, (sender, evt)=>
    * {
-   *   var cells = evt.getProperty('added');
+   *   let cells = evt.getProperty('added');
    *
-   *   for (var i = 0; i < cells.length; i++)
+   *   for (let i = 0; i < cells.length; i++)
    *   {
    *     // Handle cells[i]...
    *   }
@@ -173,9 +173,9 @@ class mxGraphSelectionModel extends mxEventSource {
         cells = [this.getFirstSelectableCell(cells)];
       }
 
-      var tmp = [];
+      let tmp = [];
 
-      for (var i = 0; i < cells.length; i++) {
+      for (let i = 0; i < cells.length; i++) {
         if (this.graph.isCellSelectable(cells[i])) {
           tmp.push(cells[i]);
         }
@@ -192,7 +192,7 @@ class mxGraphSelectionModel extends mxEventSource {
    */
   getFirstSelectableCell = (cells) => {
     if (cells != null) {
-      for (var i = 0; i < cells.length; i++) {
+      for (let i = 0; i < cells.length; i++) {
         if (this.graph.isCellSelectable(cells[i])) {
           return cells[i];
         }
@@ -229,16 +229,16 @@ class mxGraphSelectionModel extends mxEventSource {
    */
   addCells = (cells) => {
     if (cells != null) {
-      var remove = null;
+      let remove = null;
 
       if (this.singleSelection) {
         remove = this.cells;
         cells = [this.getFirstSelectableCell(cells)];
       }
 
-      var tmp = [];
+      let tmp = [];
 
-      for (var i = 0; i < cells.length; i++) {
+      for (let i = 0; i < cells.length; i++) {
         if (!this.isSelected(cells[i]) &&
             this.graph.isCellSelectable(cells[i])) {
           tmp.push(cells[i]);
@@ -270,9 +270,9 @@ class mxGraphSelectionModel extends mxEventSource {
    */
   removeCells = (cells) => {
     if (cells != null) {
-      var tmp = [];
+      let tmp = [];
 
-      for (var i = 0; i < cells.length; i++) {
+      for (let i = 0; i < cells.length; i++) {
         if (this.isSelected(cells[i])) {
           tmp.push(cells[i]);
         }
@@ -299,9 +299,9 @@ class mxGraphSelectionModel extends mxEventSource {
         (removed != null &&
             removed.length > 0 &&
             removed[0] != null)) {
-      var change = new mxSelectionChange(this, added, removed);
+      let change = new mxSelectionChange(this, added, removed);
       change.execute();
-      var edit = new mxUndoableEdit(this, false);
+      let edit = new mxUndoableEdit(this, false);
       edit.add(change);
       this.fireEvent(new mxEventObject(mxEvent.UNDO, 'edit', edit));
     }
@@ -336,7 +336,7 @@ class mxGraphSelectionModel extends mxEventSource {
    */
   cellRemoved = (cell) => {
     if (cell != null) {
-      var index = mxUtils.indexOf(this.cells, cell);
+      let index = mxUtils.indexOf(this.cells, cell);
 
       if (index >= 0) {
         this.cells.splice(index, 1);
@@ -371,18 +371,18 @@ class mxGraphSelectionModel extends mxEventSource {
         this.selectionModel.updatingSelectionResource;
 
     if (this.removed != null) {
-      for (var i = 0; i < this.removed.length; i++) {
+      for (let i = 0; i < this.removed.length; i++) {
         this.selectionModel.cellRemoved(this.removed[i]);
       }
     }
 
     if (this.added != null) {
-      for (var i = 0; i < this.added.length; i++) {
+      for (let i = 0; i < this.added.length; i++) {
         this.selectionModel.cellAdded(this.added[i]);
       }
     }
 
-    var tmp = this.added;
+    let tmp = this.added;
     this.added = this.removed;
     this.removed = tmp;
 
diff --git a/src/js/view/mxGraphView.js b/src/js/view/mxGraphView.js
index 133bf71c0..f72d2415f 100644
--- a/src/js/view/mxGraphView.js
+++ b/src/js/view/mxGraphView.js
@@ -228,14 +228,14 @@ class mxGraphView extends mxEventSource {
    * cells - Array of <mxCells> whose bounds should be returned.
    */
   getBounds = (cells) => {
-    var result = null;
+    let result = null;
 
     if (cells != null && cells.length > 0) {
-      var model = this.graph.getModel();
+      let model = this.graph.getModel();
 
-      for (var i = 0; i < cells.length; i++) {
+      for (let i = 0; i < cells.length; i++) {
         if (model.isVertex(cells[i]) || model.isEdge(cells[i])) {
-          var state = this.getState(cells[i]);
+          let state = this.getState(cells[i]);
 
           if (state != null) {
             if (result == null) {
@@ -263,9 +263,9 @@ class mxGraphView extends mxEventSource {
    */
   setCurrentRoot = (root) => {
     if (this.currentRoot != root) {
-      var change = new mxCurrentRootChange(this, root);
+      let change = new mxCurrentRootChange(this, root);
       change.execute();
-      var edit = new mxUndoableEdit(this, true);
+      let edit = new mxUndoableEdit(this, true);
       edit.add(change);
       this.fireEvent(new mxEventObject(mxEvent.UNDO, 'edit', edit));
       this.graph.sizeDidChange();
@@ -287,8 +287,8 @@ class mxGraphView extends mxEventSource {
    * dy - Y-coordinate of the translation.
    */
   scaleAndTranslate = (scale, dx, dy) => {
-    var previousScale = this.scale;
-    var previousTranslate = new mxPoint(this.translate.x, this.translate.y);
+    let previousScale = this.scale;
+    let previousTranslate = new mxPoint(this.translate.x, this.translate.y);
 
     if (this.scale != scale || this.translate.x != dx || this.translate.y != dy) {
       this.scale = scale;
@@ -326,7 +326,7 @@ class mxGraphView extends mxEventSource {
    * value - Decimal value that specifies the new scale (1 is 100%).
    */
   setScale = (value) => {
-    var previousScale = this.scale;
+    let previousScale = this.scale;
 
     if (this.scale != value) {
       this.scale = value;
@@ -362,7 +362,7 @@ class mxGraphView extends mxEventSource {
    * dy - Y-coordinate of the translation.
    */
   setTranslate = (dx, dy) => {
-    var previousTranslate = new mxPoint(this.translate.x, this.translate.y);
+    let previousTranslate = new mxPoint(this.translate.x, this.translate.y);
 
     if (this.translate.x != dx || this.translate.y != dy) {
       this.translate.x = dx;
@@ -424,7 +424,7 @@ class mxGraphView extends mxEventSource {
    * recursion.
    */
   clear = (cell, force, recurse) => {
-    var model = this.graph.getModel();
+    let model = this.graph.getModel();
     cell = cell || model.getRoot();
     force = (force != null) ? force : false;
     recurse = (recurse != null) ? recurse : true;
@@ -432,9 +432,9 @@ class mxGraphView extends mxEventSource {
     this.removeState(cell);
 
     if (recurse && (force || cell != this.currentRoot)) {
-      var childCount = model.getChildCount(cell);
+      let childCount = model.getChildCount(cell);
 
-      for (var i = 0; i < childCount; i++) {
+      for (let i = 0; i < childCount; i++) {
         this.clear(model.getChildAt(cell, i), force);
       }
     } else {
@@ -454,12 +454,12 @@ class mxGraphView extends mxEventSource {
    * model.
    */
   invalidate = (cell, recurse, includeEdges) => {
-    var model = this.graph.getModel();
+    let model = this.graph.getModel();
     cell = cell || model.getRoot();
     recurse = (recurse != null) ? recurse : true;
     includeEdges = (includeEdges != null) ? includeEdges : true;
 
-    var state = this.getState(cell);
+    let state = this.getState(cell);
 
     if (state != null) {
       state.invalid = true;
@@ -471,19 +471,19 @@ class mxGraphView extends mxEventSource {
 
       // Recursively invalidates all descendants
       if (recurse) {
-        var childCount = model.getChildCount(cell);
+        let childCount = model.getChildCount(cell);
 
-        for (var i = 0; i < childCount; i++) {
-          var child = model.getChildAt(cell, i);
+        for (let i = 0; i < childCount; i++) {
+          let child = model.getChildAt(cell, i);
           this.invalidate(child, recurse, includeEdges);
         }
       }
 
       // Propagates invalidation to all connected edges
       if (includeEdges) {
-        var edgeCount = model.getEdgeCount(cell);
+        let edgeCount = model.getEdgeCount(cell);
 
-        for (var i = 0; i < edgeCount; i++) {
+        for (let i = 0; i < edgeCount; i++) {
           this.invalidate(model.getEdgeAt(cell, i), recurse, includeEdges);
         }
       }
@@ -511,7 +511,7 @@ class mxGraphView extends mxEventSource {
 
     this.resetValidationState();
 
-    var graphBounds = this.getBoundingBox(this.validateCellState(
+    let graphBounds = this.getBoundingBox(this.validateCellState(
         this.validateCell(cell || ((this.currentRoot != null) ?
             this.currentRoot : this.graph.getModel().getRoot()))));
     this.setGraphBounds((graphBounds != null) ? graphBounds : this.getEmptyBounds());
@@ -548,7 +548,7 @@ class mxGraphView extends mxEventSource {
    */
   getBoundingBox = (state, recurse) => {
     recurse = (recurse != null) ? recurse : true;
-    var bbox = null;
+    let bbox = null;
 
     if (state != null) {
       if (state.shape != null && state.shape.boundingBox != null) {
@@ -565,11 +565,11 @@ class mxGraphView extends mxEventSource {
       }
 
       if (recurse) {
-        var model = this.graph.getModel();
-        var childCount = model.getChildCount(state.cell);
+        let model = this.graph.getModel();
+        let childCount = model.getChildCount(state.cell);
 
-        for (var i = 0; i < childCount; i++) {
-          var bounds = this.getBoundingBox(this.getState(model.getChildAt(state.cell, i)));
+        for (let i = 0; i < childCount; i++) {
+          let bounds = this.getBoundingBox(this.getState(model.getChildAt(state.cell, i)));
 
           if (bounds != null) {
             if (bbox == null) {
@@ -614,7 +614,7 @@ class mxGraphView extends mxEventSource {
    * Validates the background image.
    */
   validateBackgroundImage = () => {
-    var bg = this.graph.getBackgroundImage();
+    let bg = this.graph.getBackgroundImage();
 
     if (bg != null) {
       if (this.backgroundImage == null || this.backgroundImage.image != bg.src) {
@@ -622,7 +622,7 @@ class mxGraphView extends mxEventSource {
           this.backgroundImage.destroy();
         }
 
-        var bounds = new mxRectangle(0, 0, 1, 1);
+        let bounds = new mxRectangle(0, 0, 1, 1);
 
         this.backgroundImage = new mxImageShape(bounds, bg.src);
         this.backgroundImage.dialect = this.graph.dialect;
@@ -644,7 +644,7 @@ class mxGraphView extends mxEventSource {
    */
   validateBackgroundPage = () => {
     if (this.graph.pageVisible) {
-      var bounds = this.getBackgroundPageBounds();
+      let bounds = this.getBackgroundPageBounds();
 
       if (this.backgroundPageShape == null) {
         this.backgroundPageShape = this.createBackgroundPageShape(bounds);
@@ -698,9 +698,9 @@ class mxGraphView extends mxEventSource {
    * Returns the bounds for the background page.
    */
   getBackgroundPageBounds = () => {
-    var fmt = this.graph.pageFormat;
-    var ps = this.scale * this.graph.pageScale;
-    var bounds = new mxRectangle(this.scale * this.translate.x, this.scale * this.translate.y,
+    let fmt = this.graph.pageFormat;
+    let ps = this.scale * this.graph.pageScale;
+    let bounds = new mxRectangle(this.scale * this.translate.x, this.scale * this.translate.y,
         fmt.width * ps, fmt.height * ps);
 
     return bounds;
@@ -761,15 +761,15 @@ class mxGraphView extends mxEventSource {
 
     if (cell != null) {
       visible = visible && this.graph.isCellVisible(cell);
-      var state = this.getState(cell, visible);
+      let state = this.getState(cell, visible);
 
       if (state != null && !visible) {
         this.removeState(cell);
       } else {
-        var model = this.graph.getModel();
-        var childCount = model.getChildCount(cell);
+        let model = this.graph.getModel();
+        let childCount = model.getChildCount(cell);
 
-        for (var i = 0; i < childCount; i++) {
+        for (let i = 0; i < childCount; i++) {
           this.validateCell(model.getChildAt(cell, i), visible &&
               (!this.isCellCollapsed(cell) || cell == this.currentRoot));
         }
@@ -792,13 +792,13 @@ class mxGraphView extends mxEventSource {
    */
   validateCellState = (cell, recurse) => {
     recurse = (recurse != null) ? recurse : true;
-    var state = null;
+    let state = null;
 
     if (cell != null) {
       state = this.getState(cell);
 
       if (state != null) {
-        var model = this.graph.getModel();
+        let model = this.graph.getModel();
 
         if (state.invalid) {
           state.invalid = false;
@@ -832,9 +832,9 @@ class mxGraphView extends mxEventSource {
             this.stateValidated(state);
           }
 
-          var childCount = model.getChildCount(cell);
+          let childCount = model.getChildCount(cell);
 
-          for (var i = 0; i < childCount; i++) {
+          for (let i = 0; i < childCount; i++) {
             this.validateCellState(model.getChildAt(cell, i));
           }
         }
@@ -861,22 +861,22 @@ class mxGraphView extends mxEventSource {
     state.length = 0;
 
     if (state.cell != this.currentRoot) {
-      var model = this.graph.getModel();
-      var pState = this.getState(model.getParent(state.cell));
+      let model = this.graph.getModel();
+      let pState = this.getState(model.getParent(state.cell));
 
       if (pState != null && pState.cell != this.currentRoot) {
         state.origin.x += pState.origin.x;
         state.origin.y += pState.origin.y;
       }
 
-      var offset = this.graph.getChildOffsetForCell(state.cell);
+      let offset = this.graph.getChildOffsetForCell(state.cell);
 
       if (offset != null) {
         state.origin.x += offset.x;
         state.origin.y += offset.y;
       }
 
-      var geo = this.graph.getCellGeometry(state.cell);
+      let geo = this.graph.getCellGeometry(state.cell);
 
       if (geo != null) {
         if (!model.isEdge(state.cell)) {
@@ -884,7 +884,7 @@ class mxGraphView extends mxEventSource {
 
           if (geo.relative && pState != null) {
             if (model.isEdge(pState.cell)) {
-              var origin = this.getPoint(pState, geo);
+              let origin = this.getPoint(pState, geo);
 
               if (origin != null) {
                 state.origin.x += (origin.x / this.scale) - pState.origin.x - this.translate.x;
@@ -939,19 +939,19 @@ class mxGraphView extends mxEventSource {
    * Validates the given cell state.
    */
   updateVertexState = (state, geo) => {
-    var model = this.graph.getModel();
-    var pState = this.getState(model.getParent(state.cell));
+    let model = this.graph.getModel();
+    let pState = this.getState(model.getParent(state.cell));
 
     if (geo.relative && pState != null && !model.isEdge(pState.cell)) {
-      var alpha = mxUtils.toRadians(pState.style[mxConstants.STYLE_ROTATION] || '0');
+      let alpha = mxUtils.toRadians(pState.style[mxConstants.STYLE_ROTATION] || '0');
 
       if (alpha != 0) {
-        var cos = Math.cos(alpha);
-        var sin = Math.sin(alpha);
+        let cos = Math.cos(alpha);
+        let sin = Math.sin(alpha);
 
-        var ct = new mxPoint(state.getCenterX(), state.getCenterY());
-        var cx = new mxPoint(pState.getCenterX(), pState.getCenterY());
-        var pt = mxUtils.getRotatedPoint(ct, cos, sin, cx);
+        let ct = new mxPoint(state.getCenterX(), state.getCenterY());
+        let cx = new mxPoint(pState.getCenterX(), pState.getCenterY());
+        let pt = mxUtils.getRotatedPoint(ct, cos, sin, cx);
         state.x = pt.x - state.width / 2;
         state.y = pt.y - state.height / 2;
       }
@@ -966,8 +966,8 @@ class mxGraphView extends mxEventSource {
    * Validates the given cell state.
    */
   updateEdgeState = (state, geo) => {
-    var source = state.getVisibleTerminalState(true);
-    var target = state.getVisibleTerminalState(false);
+    let source = state.getVisibleTerminalState(true);
+    let target = state.getVisibleTerminalState(false);
 
     // This will remove edges with no terminals and no terminal points
     // as such edges are invalid and produce NPEs in the edge styles.
@@ -982,7 +982,7 @@ class mxGraphView extends mxEventSource {
       this.updatePoints(state, geo.points, source, target);
       this.updateFloatingTerminalPoints(state, source, target);
 
-      var pts = state.absolutePoints;
+      let pts = state.absolutePoints;
 
       if (state.cell != this.currentRoot && (pts == null || pts.length < 2 ||
           pts[0] == null || pts[pts.length - 1] == null)) {
@@ -1007,10 +1007,10 @@ class mxGraphView extends mxEventSource {
    * state - <mxCellState> whose absolute offset should be updated.
    */
   updateVertexLabelOffset = (state) => {
-    var h = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
+    let h = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
 
     if (h == mxConstants.ALIGN_LEFT) {
-      var lw = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_WIDTH, null);
+      let lw = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_WIDTH, null);
 
       if (lw != null) {
         lw *= this.scale;
@@ -1022,12 +1022,12 @@ class mxGraphView extends mxEventSource {
     } else if (h == mxConstants.ALIGN_RIGHT) {
       state.absoluteOffset.x += state.width;
     } else if (h == mxConstants.ALIGN_CENTER) {
-      var lw = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_WIDTH, null);
+      let lw = mxUtils.getValue(state.style, mxConstants.STYLE_LABEL_WIDTH, null);
 
       if (lw != null) {
         // Aligns text block with given width inside the vertex width
-        var align = mxUtils.getValue(state.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER);
-        var dx = 0;
+        let align = mxUtils.getValue(state.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER);
+        let dx = 0;
 
         if (align == mxConstants.ALIGN_CENTER) {
           dx = 0.5;
@@ -1041,7 +1041,7 @@ class mxGraphView extends mxEventSource {
       }
     }
 
-    var v = mxUtils.getValue(state.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
+    let v = mxUtils.getValue(state.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
 
     if (v == mxConstants.ALIGN_TOP) {
       state.absoluteOffset.y -= state.height;
@@ -1073,11 +1073,11 @@ class mxGraphView extends mxEventSource {
    * state - <mxCellState> that represents the cell state.
    */
   stateValidated = (state) => {
-    var fg = (this.graph.getModel().isEdge(state.cell) && this.graph.keepEdgesInForeground) ||
+    let fg = (this.graph.getModel().isEdge(state.cell) && this.graph.keepEdgesInForeground) ||
         (this.graph.getModel().isVertex(state.cell) && this.graph.keepEdgesInBackground);
-    var htmlNode = (fg) ? this.lastForegroundHtmlNode || this.lastHtmlNode : this.lastHtmlNode;
-    var node = (fg) ? this.lastForegroundNode || this.lastNode : this.lastNode;
-    var result = this.graph.cellRenderer.insertStateAfter(state, node, htmlNode);
+    let htmlNode = (fg) ? this.lastForegroundHtmlNode || this.lastHtmlNode : this.lastHtmlNode;
+    let node = (fg) ? this.lastForegroundNode || this.lastNode : this.lastNode;
+    let result = this.graph.cellRenderer.insertStateAfter(state, node, htmlNode);
 
     if (fg) {
       this.lastForegroundHtmlNode = result[1];
@@ -1136,17 +1136,17 @@ class mxGraphView extends mxEventSource {
    * constraint - <mxConnectionConstraint> that specifies the connection.
    */
   getFixedTerminalPoint = (edge, terminal, source, constraint) => {
-    var pt = null;
+    let pt = null;
 
     if (constraint != null) {
       pt = this.graph.getConnectionPoint(terminal, constraint, false); // FIXME Rounding introduced bugs when calculating label positions -> , this.graph.isOrthogonal(edge));
     }
 
     if (pt == null && terminal == null) {
-      var s = this.scale;
-      var tr = this.translate;
-      var orig = edge.origin;
-      var geo = this.graph.getCellGeometry(edge.cell);
+      let s = this.scale;
+      let tr = this.translate;
+      let orig = edge.origin;
+      let geo = this.graph.getCellGeometry(edge.cell);
       pt = geo.getTerminalPoint(source);
 
       if (pt != null) {
@@ -1170,11 +1170,11 @@ class mxGraphView extends mxEventSource {
    * edge - <mxCellState> whose bounds should be updated.
    */
   updateBoundsFromStencil = (state) => {
-    var previous = null;
+    let previous = null;
 
     if (state != null && state.shape != null && state.shape.stencil != null && state.shape.stencil.aspect == 'fixed') {
       previous = mxRectangle.fromRectangle(state);
-      var asp = state.shape.stencil.computeAspect(state.style, state.x, state.y, state.width, state.height);
+      let asp = state.shape.stencil.computeAspect(state.style, state.x, state.y, state.width, state.height);
       state.setRect(asp.x, asp.y, state.shape.stencil.w0 * asp.width, state.shape.stencil.h0 * asp.height);
     }
 
@@ -1196,17 +1196,17 @@ class mxGraphView extends mxEventSource {
    */
   updatePoints = (edge, points, source, target) => {
     if (edge != null) {
-      var pts = [];
+      let pts = [];
       pts.push(edge.absolutePoints[0]);
-      var edgeStyle = this.getEdgeStyle(edge, points, source, target);
+      let edgeStyle = this.getEdgeStyle(edge, points, source, target);
 
       if (edgeStyle != null) {
-        var src = this.getTerminalPort(edge, source, true);
-        var trg = this.getTerminalPort(edge, target, false);
+        let src = this.getTerminalPort(edge, source, true);
+        let trg = this.getTerminalPort(edge, target, false);
 
         // Uses the stencil bounds for routing and restores after routing
-        var srcBounds = this.updateBoundsFromStencil(src);
-        var trgBounds = this.updateBoundsFromStencil(trg);
+        let srcBounds = this.updateBoundsFromStencil(src);
+        let trgBounds = this.updateBoundsFromStencil(trg);
 
         edgeStyle(edge, src, trg, points, pts);
 
@@ -1219,15 +1219,15 @@ class mxGraphView extends mxEventSource {
           trg.setRect(trgBounds.x, trgBounds.y, trgBounds.width, trgBounds.height);
         }
       } else if (points != null) {
-        for (var i = 0; i < points.length; i++) {
+        for (let i = 0; i < points.length; i++) {
           if (points[i] != null) {
-            var pt = mxUtils.clone(points[i]);
+            let pt = mxUtils.clone(points[i]);
             pts.push(this.transformControlPoint(edge, pt));
           }
         }
       }
 
-      var tmp = edge.absolutePoints;
+      let tmp = edge.absolutePoints;
       pts.push(tmp[tmp.length - 1]);
 
       edge.absolutePoints = pts;
@@ -1241,8 +1241,8 @@ class mxGraphView extends mxEventSource {
    */
   transformControlPoint = (state, pt, ignoreScale) => {
     if (state != null && pt != null) {
-      var orig = state.origin;
-      var scale = ignoreScale ? 1 : this.scale
+      let orig = state.origin;
+      let scale = ignoreScale ? 1 : this.scale
 
       return new mxPoint(scale * (pt.x + this.translate.x + orig.x),
           scale * (pt.y + this.translate.y + orig.y));
@@ -1260,8 +1260,8 @@ class mxGraphView extends mxEventSource {
    * associated.
    */
   isLoopStyleEnabled = (edge, points, source, target) => {
-    var sc = this.graph.getConnectionConstraint(edge, source, true);
-    var tc = this.graph.getConnectionConstraint(edge, target, false);
+    let sc = this.graph.getConnectionConstraint(edge, source, true);
+    let tc = this.graph.getConnectionConstraint(edge, target, false);
 
     if ((points == null || points.length < 2) &&
         (!mxUtils.getValue(edge.style, mxConstants.STYLE_ORTHOGONAL_LOOP, false) ||
@@ -1278,14 +1278,14 @@ class mxGraphView extends mxEventSource {
    * Returns the edge style function to be used to render the given edge state.
    */
   getEdgeStyle = (edge, points, source, target) => {
-    var edgeStyle = this.isLoopStyleEnabled(edge, points, source, target) ?
+    let edgeStyle = this.isLoopStyleEnabled(edge, points, source, target) ?
         mxUtils.getValue(edge.style, mxConstants.STYLE_LOOP, this.graph.defaultLoopStyle) :
         (!mxUtils.getValue(edge.style, mxConstants.STYLE_NOEDGESTYLE, false) ?
             edge.style[mxConstants.STYLE_EDGE] : null);
 
     // Converts string values to objects
     if (typeof (edgeStyle) == "string") {
-      var tmp = mxStyleRegistry.getValue(edgeStyle);
+      let tmp = mxStyleRegistry.getValue(edgeStyle);
 
       if (tmp == null && this.isAllowEval()) {
         tmp = mxUtils.eval(edgeStyle);
@@ -1314,9 +1314,9 @@ class mxGraphView extends mxEventSource {
    * target - <mxCellState> that represents the target terminal.
    */
   updateFloatingTerminalPoints = (state, source, target) => {
-    var pts = state.absolutePoints;
+    let pts = state.absolutePoints;
     var p0 = pts[0];
-    var pe = pts[pts.length - 1];
+    let pe = pts[pts.length - 1];
 
     if (pe == null && target != null) {
       this.updateFloatingTerminalPoint(state, target, source, false);
@@ -1359,27 +1359,27 @@ class mxGraphView extends mxEventSource {
    */
   getFloatingTerminalPoint = (edge, start, end, source) => {
     start = this.getTerminalPort(edge, start, source);
-    var next = this.getNextPoint(edge, end, source);
+    let next = this.getNextPoint(edge, end, source);
 
-    var orth = this.graph.isOrthogonal(edge);
-    var alpha = mxUtils.toRadians(Number(start.style[mxConstants.STYLE_ROTATION] || '0'));
-    var center = new mxPoint(start.getCenterX(), start.getCenterY());
+    let orth = this.graph.isOrthogonal(edge);
+    let alpha = mxUtils.toRadians(Number(start.style[mxConstants.STYLE_ROTATION] || '0'));
+    let center = new mxPoint(start.getCenterX(), start.getCenterY());
 
     if (alpha != 0) {
-      var cos = Math.cos(-alpha);
-      var sin = Math.sin(-alpha);
+      let cos = Math.cos(-alpha);
+      let sin = Math.sin(-alpha);
       next = mxUtils.getRotatedPoint(next, cos, sin, center);
     }
 
-    var border = parseFloat(edge.style[mxConstants.STYLE_PERIMETER_SPACING] || 0);
+    let border = parseFloat(edge.style[mxConstants.STYLE_PERIMETER_SPACING] || 0);
     border += parseFloat(edge.style[(source) ?
         mxConstants.STYLE_SOURCE_PERIMETER_SPACING :
         mxConstants.STYLE_TARGET_PERIMETER_SPACING] || 0);
-    var pt = this.getPerimeterPoint(start, next, alpha == 0 && orth, border);
+    let pt = this.getPerimeterPoint(start, next, alpha == 0 && orth, border);
 
     if (alpha != 0) {
-      var cos = Math.cos(alpha);
-      var sin = Math.sin(alpha);
+      let cos = Math.cos(alpha);
+      let sin = Math.sin(alpha);
       pt = mxUtils.getRotatedPoint(pt, cos, sin, center);
     }
 
@@ -1399,12 +1399,12 @@ class mxGraphView extends mxEventSource {
    * source - Boolean indicating if the given terminal is the source terminal.
    */
   getTerminalPort = (state, terminal, source) => {
-    var key = (source) ? mxConstants.STYLE_SOURCE_PORT :
+    let key = (source) ? mxConstants.STYLE_SOURCE_PORT :
         mxConstants.STYLE_TARGET_PORT;
-    var id = mxUtils.getValue(state.style, key);
+    let id = mxUtils.getValue(state.style, key);
 
     if (id != null) {
-      var tmp = this.getState(this.graph.getModel().getCell(id));
+      let tmp = this.getState(this.graph.getModel().getCell(id));
 
       // Only uses ports where a cell state exists
       if (tmp != null) {
@@ -1432,18 +1432,18 @@ class mxGraphView extends mxEventSource {
    * border - Optional border between the perimeter and the shape.
    */
   getPerimeterPoint = (terminal, next, orthogonal, border) => {
-    var point = null;
+    let point = null;
 
     if (terminal != null) {
-      var perimeter = this.getPerimeterFunction(terminal);
+      let perimeter = this.getPerimeterFunction(terminal);
 
       if (perimeter != null && next != null) {
-        var bounds = this.getPerimeterBounds(terminal, border);
+        let bounds = this.getPerimeterBounds(terminal, border);
 
         if (bounds.width > 0 || bounds.height > 0) {
           point = new mxPoint(next.x, next.y);
-          var flipH = false;
-          var flipV = false;
+          let flipH = false;
+          let flipV = false;
 
           if (this.graph.model.isVertex(terminal.cell)) {
             flipH = mxUtils.getValue(terminal.style, mxConstants.STYLE_FLIPH, 0) == 1;
@@ -1492,7 +1492,7 @@ class mxGraphView extends mxEventSource {
    * Returns the x-coordinate of the center point for automatic routing.
    */
   getRoutingCenterX = (state) => {
-    var f = (state.style != null) ? parseFloat(state.style
+    let f = (state.style != null) ? parseFloat(state.style
         [mxConstants.STYLE_ROUTING_CENTER_X]) || 0 : 0;
 
     return state.getCenterX() + f * state.width;
@@ -1504,7 +1504,7 @@ class mxGraphView extends mxEventSource {
    * Returns the y-coordinate of the center point for automatic routing.
    */
   getRoutingCenterY = (state) => {
-    var f = (state.style != null) ? parseFloat(state.style
+    let f = (state.style != null) ? parseFloat(state.style
         [mxConstants.STYLE_ROUTING_CENTER_Y]) || 0 : 0;
 
     return state.getCenterY() + f * state.height;
@@ -1521,21 +1521,21 @@ class mxGraphView extends mxEventSource {
    * this method can be replaced as follows:
    *
    * (code)
-   * var oldGetPerimeterBounds = getPerimeterBounds;
+   * let oldGetPerimeterBounds = getPerimeterBounds;
    * getPerimeterBounds = (terminal, edge, isSource)=>
    * {
-   *   var model = this.graph.getModel();
-   *   var childCount = model.getChildCount(terminal.cell);
+   *   let model = this.graph.getModel();
+   *   let childCount = model.getChildCount(terminal.cell);
    *
    *   if (childCount > 0)
    *   {
-   *     var child = model.getChildAt(terminal.cell, 0);
-   *     var geo = model.getGeometry(child);
+   *     let child = model.getChildAt(terminal.cell, 0);
+   *     let geo = model.getGeometry(child);
    *
    *     if (geo != null &&
    *         geo.relative)
    *     {
-   *       var state = this.getState(child);
+   *       let state = this.getState(child);
    *
    *       if (state != null)
    *       {
@@ -1569,11 +1569,11 @@ class mxGraphView extends mxEventSource {
    * Returns the perimeter function for the given state.
    */
   getPerimeterFunction = (state) => {
-    var perimeter = state.style[mxConstants.STYLE_PERIMETER];
+    let perimeter = state.style[mxConstants.STYLE_PERIMETER];
 
     // Converts string values to objects
     if (typeof (perimeter) == "string") {
-      var tmp = mxStyleRegistry.getValue(perimeter);
+      let tmp = mxStyleRegistry.getValue(perimeter);
 
       if (tmp == null && this.isAllowEval()) {
         tmp = mxUtils.eval(perimeter);
@@ -1603,11 +1603,11 @@ class mxGraphView extends mxEventSource {
    * should be returned.
    */
   getNextPoint = (edge, opposite, source) => {
-    var pts = edge.absolutePoints;
-    var point = null;
+    let pts = edge.absolutePoints;
+    let point = null;
 
     if (pts != null && pts.length >= 2) {
-      var count = pts.length;
+      let count = pts.length;
       point = pts[(source) ? Math.min(1, count - 1) : Math.max(0, count - 2)];
     }
 
@@ -1632,9 +1632,9 @@ class mxGraphView extends mxEventSource {
    * should be returned.
    */
   getVisibleTerminal = (edge, source) => {
-    var model = this.graph.getModel();
-    var result = model.getTerminal(edge, source);
-    var best = result;
+    let model = this.graph.getModel();
+    let result = model.getTerminal(edge, source);
+    let best = result;
 
     while (result != null && result != this.currentRoot) {
       if (!this.graph.isCellVisible(best) || this.isCellCollapsed(result)) {
@@ -1667,36 +1667,36 @@ class mxGraphView extends mxEventSource {
    * state - <mxCellState> whose bounds should be updated.
    */
   updateEdgeBounds = (state) => {
-    var points = state.absolutePoints;
+    let points = state.absolutePoints;
     var p0 = points[0];
-    var pe = points[points.length - 1];
+    let pe = points[points.length - 1];
 
     if (p0.x != pe.x || p0.y != pe.y) {
-      var dx = pe.x - p0.x;
-      var dy = pe.y - p0.y;
+      let dx = pe.x - p0.x;
+      let dy = pe.y - p0.y;
       state.terminalDistance = Math.sqrt(dx * dx + dy * dy);
     } else {
       state.terminalDistance = 0;
     }
 
-    var length = 0;
-    var segments = [];
-    var pt = p0;
+    let length = 0;
+    let segments = [];
+    let pt = p0;
 
     if (pt != null) {
-      var minX = pt.x;
-      var minY = pt.y;
-      var maxX = minX;
-      var maxY = minY;
+      let minX = pt.x;
+      let minY = pt.y;
+      let maxX = minX;
+      let maxY = minY;
 
-      for (var i = 1; i < points.length; i++) {
-        var tmp = points[i];
+      for (let i = 1; i < points.length; i++) {
+        let tmp = points[i];
 
         if (tmp != null) {
-          var dx = pt.x - tmp.x;
-          var dy = pt.y - tmp.y;
+          let dx = pt.x - tmp.x;
+          let dy = pt.y - tmp.y;
 
-          var segment = Math.sqrt(dx * dx + dy * dy);
+          let segment = Math.sqrt(dx * dx + dy * dy);
           segments.push(segment);
           length += segment;
 
@@ -1712,7 +1712,7 @@ class mxGraphView extends mxEventSource {
       state.length = length;
       state.segments = segments;
 
-      var markerSize = 1; // TODO: include marker size
+      let markerSize = 1; // TODO: include marker size
 
       state.x = minX;
       state.y = minY;
@@ -1734,34 +1734,34 @@ class mxGraphView extends mxEventSource {
    * geometry - <mxGeometry> that represents the relative location.
    */
   getPoint = (state, geometry) => {
-    var x = state.getCenterX();
-    var y = state.getCenterY();
+    let x = state.getCenterX();
+    let y = state.getCenterY();
 
     if (state.segments != null && (geometry == null || geometry.relative)) {
-      var gx = (geometry != null) ? geometry.x / 2 : 0;
-      var pointCount = state.absolutePoints.length;
-      var dist = Math.round((gx + 0.5) * state.length);
-      var segment = state.segments[0];
-      var length = 0;
-      var index = 1;
+      let gx = (geometry != null) ? geometry.x / 2 : 0;
+      let pointCount = state.absolutePoints.length;
+      let dist = Math.round((gx + 0.5) * state.length);
+      let segment = state.segments[0];
+      let length = 0;
+      let index = 1;
 
       while (dist >= Math.round(length + segment) && index < pointCount - 1) {
         length += segment;
         segment = state.segments[index++];
       }
 
-      var factor = (segment == 0) ? 0 : (dist - length) / segment;
+      let factor = (segment == 0) ? 0 : (dist - length) / segment;
       var p0 = state.absolutePoints[index - 1];
-      var pe = state.absolutePoints[index];
+      let pe = state.absolutePoints[index];
 
       if (p0 != null && pe != null) {
-        var gy = 0;
-        var offsetX = 0;
-        var offsetY = 0;
+        let gy = 0;
+        let offsetX = 0;
+        let offsetY = 0;
 
         if (geometry != null) {
           gy = geometry.y;
-          var offset = geometry.offset;
+          let offset = geometry.offset;
 
           if (offset != null) {
             offsetX = offset.x;
@@ -1769,16 +1769,16 @@ class mxGraphView extends mxEventSource {
           }
         }
 
-        var dx = pe.x - p0.x;
-        var dy = pe.y - p0.y;
-        var nx = (segment == 0) ? 0 : dy / segment;
-        var ny = (segment == 0) ? 0 : dx / segment;
+        let dx = pe.x - p0.x;
+        let dy = pe.y - p0.y;
+        let nx = (segment == 0) ? 0 : dy / segment;
+        let ny = (segment == 0) ? 0 : dx / segment;
 
         x = p0.x + dx * factor + (nx * gy + offsetX) * this.scale;
         y = p0.y + dy * factor - (ny * gy - offsetY) * this.scale;
       }
     } else if (geometry != null) {
-      var offset = geometry.offset;
+      let offset = geometry.offset;
 
       if (offset != null) {
         x += offset.x;
@@ -1802,28 +1802,28 @@ class mxGraphView extends mxEventSource {
    * y - Specifies the y-coordinate of the absolute label location.
    */
   getRelativePoint = (edgeState, x, y) => {
-    var model = this.graph.getModel();
-    var geometry = model.getGeometry(edgeState.cell);
+    let model = this.graph.getModel();
+    let geometry = model.getGeometry(edgeState.cell);
 
     if (geometry != null) {
-      var pointCount = edgeState.absolutePoints.length;
+      let pointCount = edgeState.absolutePoints.length;
 
       if (geometry.relative && pointCount > 1) {
-        var totalLength = edgeState.length;
-        var segments = edgeState.segments;
+        let totalLength = edgeState.length;
+        let segments = edgeState.segments;
 
         // Works out which line segment the point of the label is closest to
         var p0 = edgeState.absolutePoints[0];
-        var pe = edgeState.absolutePoints[1];
-        var minDist = mxUtils.ptSegDistSq(p0.x, p0.y, pe.x, pe.y, x, y);
-        var length = 0;
-        var index = 0;
-        var tmp = 0;
+        let pe = edgeState.absolutePoints[1];
+        let minDist = mxUtils.ptSegDistSq(p0.x, p0.y, pe.x, pe.y, x, y);
+        let length = 0;
+        let index = 0;
+        let tmp = 0;
 
-        for (var i = 2; i < pointCount; i++) {
+        for (let i = 2; i < pointCount; i++) {
           p0 = pe;
           pe = edgeState.absolutePoints[i];
-          var dist = mxUtils.ptSegDistSq(p0.x, p0.y, pe.x, pe.y, x, y);
+          let dist = mxUtils.ptSegDistSq(p0.x, p0.y, pe.x, pe.y, x, y);
           tmp += segments[i - 2];
 
           if (dist <= minDist) {
@@ -1833,7 +1833,7 @@ class mxGraphView extends mxEventSource {
           }
         }
 
-        var seg = segments[index];
+        let seg = segments[index];
         p0 = edgeState.absolutePoints[index];
         pe = edgeState.absolutePoints[index + 1];
 
@@ -1843,19 +1843,19 @@ class mxGraphView extends mxEventSource {
         var x1 = pe.x;
         var y1 = pe.y;
 
-        var px = x;
-        var py = y;
+        let px = x;
+        let py = y;
 
-        var xSegment = x2 - x1;
-        var ySegment = y2 - y1;
+        let xSegment = x2 - x1;
+        let ySegment = y2 - y1;
 
         px -= x1;
         py -= y1;
-        var projlenSq = 0;
+        let projlenSq = 0;
 
         px = xSegment - px;
         py = ySegment - py;
-        var dotprod = px * xSegment + py * ySegment;
+        let dotprod = px * xSegment + py * ySegment;
 
         if (dotprod <= 0.0) {
           projlenSq = 0;
@@ -1864,15 +1864,15 @@ class mxGraphView extends mxEventSource {
               / (xSegment * xSegment + ySegment * ySegment);
         }
 
-        var projlen = Math.sqrt(projlenSq);
+        let projlen = Math.sqrt(projlenSq);
 
         if (projlen > seg) {
           projlen = seg;
         }
 
-        var yDistance = Math.sqrt(mxUtils.ptSegDistSq(p0.x, p0.y, pe
+        let yDistance = Math.sqrt(mxUtils.ptSegDistSq(p0.x, p0.y, pe
             .x, pe.y, x, y));
-        var direction = mxUtils.relativeCcw(p0.x, p0.y, pe.x, pe.y, x, y);
+        let direction = mxUtils.relativeCcw(p0.x, p0.y, pe.x, pe.y, x, y);
 
         if (direction == -1) {
           yDistance = -yDistance;
@@ -1902,39 +1902,39 @@ class mxGraphView extends mxEventSource {
    * state - <mxCellState> whose absolute offset should be updated.
    */
   updateEdgeLabelOffset = (state) => {
-    var points = state.absolutePoints;
+    let points = state.absolutePoints;
 
     state.absoluteOffset.x = state.getCenterX();
     state.absoluteOffset.y = state.getCenterY();
 
     if (points != null && points.length > 0 && state.segments != null) {
-      var geometry = this.graph.getCellGeometry(state.cell);
+      let geometry = this.graph.getCellGeometry(state.cell);
 
       if (geometry.relative) {
-        var offset = this.getPoint(state, geometry);
+        let offset = this.getPoint(state, geometry);
 
         if (offset != null) {
           state.absoluteOffset = offset;
         }
       } else {
         var p0 = points[0];
-        var pe = points[points.length - 1];
+        let pe = points[points.length - 1];
 
         if (p0 != null && pe != null) {
-          var dx = pe.x - p0.x;
-          var dy = pe.y - p0.y;
+          let dx = pe.x - p0.x;
+          let dy = pe.y - p0.y;
           var x0 = 0;
           var y0 = 0;
 
-          var off = geometry.offset;
+          let off = geometry.offset;
 
           if (off != null) {
             x0 = off.x;
             y0 = off.y;
           }
 
-          var x = p0.x + dx / 2 + x0 * this.scale;
-          var y = p0.y + dy / 2 + y0 * this.scale;
+          let x = p0.x + dx / 2 + x0 * this.scale;
+          let y = p0.y + dy / 2 + y0 * this.scale;
 
           state.absoluteOffset.x = x;
           state.absoluteOffset.y = y;
@@ -1957,7 +1957,7 @@ class mxGraphView extends mxEventSource {
    */
   getState = (cell, create) => {
     create = create || false;
-    var state = null;
+    let state = null;
 
     if (cell != null) {
       state = this.states.get(cell);
@@ -2041,10 +2041,10 @@ class mxGraphView extends mxEventSource {
     if (cells == null) {
       return this.states;
     } else {
-      var result = [];
+      let result = [];
 
-      for (var i = 0; i < cells.length; i++) {
-        var state = this.getState(cells[i]);
+      for (let i = 0; i < cells.length; i++) {
+        let state = this.getState(cells[i]);
 
         if (state != null) {
           result.push(state);
@@ -2065,7 +2065,7 @@ class mxGraphView extends mxEventSource {
    * cell - <mxCell> for which the <mxCellState> should be removed.
    */
   removeState = (cell) => {
-    var state = null;
+    let state = null;
 
     if (cell != null) {
       state = this.states.remove(cell);
@@ -2147,7 +2147,7 @@ class mxGraphView extends mxEventSource {
    * containers of the view.
    */
   isContainerEvent = (evt) => {
-    var source = mxEvent.getSource(evt);
+    let source = mxEvent.getSource(evt);
 
     return (source == this.graph.container ||
         source.parentNode == this.backgroundPane ||
@@ -2168,18 +2168,18 @@ class mxGraphView extends mxEventSource {
    * container in IE. Such events are ignored.
    */
   isScrollEvent = (evt) => {
-    var offset = mxUtils.getOffset(this.graph.container);
-    var pt = new mxPoint(evt.clientX - offset.x, evt.clientY - offset.y);
+    let offset = mxUtils.getOffset(this.graph.container);
+    let pt = new mxPoint(evt.clientX - offset.x, evt.clientY - offset.y);
 
-    var outWidth = this.graph.container.offsetWidth;
-    var inWidth = this.graph.container.clientWidth;
+    let outWidth = this.graph.container.offsetWidth;
+    let inWidth = this.graph.container.clientWidth;
 
     if (outWidth > inWidth && pt.x > inWidth + 2 && pt.x <= outWidth) {
       return true;
     }
 
-    var outHeight = this.graph.container.offsetHeight;
-    var inHeight = this.graph.container.clientHeight;
+    let outHeight = this.graph.container.offsetHeight;
+    let inHeight = this.graph.container.clientHeight;
 
     if (outHeight > inHeight && pt.y > inHeight + 2 && pt.y <= outHeight) {
       return true;
@@ -2198,7 +2198,7 @@ class mxGraphView extends mxEventSource {
     this.installListeners();
 
     // Creates the DOM nodes for the respective display dialect
-    var graph = this.graph;
+    let graph = this.graph;
 
     if (graph.dialect == mxConstants.DIALECT_SVG) {
       this.createSvg();
@@ -2215,8 +2215,8 @@ class mxGraphView extends mxEventSource {
    * Installs the required listeners in the container.
    */
   installListeners = () => {
-    var graph = this.graph;
-    var container = graph.container;
+    let graph = this.graph;
+    let container = graph.container;
 
     if (container != null) {
       // Support for touch device gestures (eg. pinch to zoom)
@@ -2239,7 +2239,7 @@ class mxGraphView extends mxEventSource {
       }
 
       // Fires event only for one pointer per gesture
-      var pointerId = null;
+      let pointerId = null;
 
       // Adds basic listeners for graph event dispatching
       mxEvent.addGestureListeners(container, mxUtils.bind(this, (evt) => {
@@ -2274,19 +2274,19 @@ class mxGraphView extends mxEventSource {
       // Workaround for touch events which started on some DOM node
       // on top of the container, in which case the cells under the
       // mouse for the move and up events are not detected.
-      var getState = (evt) => {
-        var state = null;
+      let getState = (evt) => {
+        let state = null;
 
         // Workaround for touch events which started on some DOM node
         // on top of the container, in which case the cells under the
         // mouse for the move and up events are not detected.
         if (mxClient.IS_TOUCH) {
-          var x = mxEvent.getClientX(evt);
-          var y = mxEvent.getClientY(evt);
+          let x = mxEvent.getClientX(evt);
+          let y = mxEvent.getClientY(evt);
 
           // Dispatches the drop event to the graph which
           // consumes and executes the source function
-          var pt = mxUtils.convertPoint(container, x, y);
+          let pt = mxUtils.convertPoint(container, x, y);
           state = graph.view.getState(graph.getCellAt(pt.x, pt.y));
         }
 
@@ -2339,7 +2339,7 @@ class mxGraphView extends mxEventSource {
    * Creates the DOM nodes for the HTML display.
    */
   createHtml = () => {
-    var container = this.graph.container;
+    let container = this.graph.container;
 
     if (container != null) {
       this.canvas = this.createHtmlPane('100%', '100%');
@@ -2370,8 +2370,8 @@ class mxGraphView extends mxEventSource {
    */
   updateHtmlCanvasSize = (width, height) => {
     if (this.graph.container != null) {
-      var ow = this.graph.container.offsetWidth;
-      var oh = this.graph.container.offsetHeight;
+      let ow = this.graph.container.offsetWidth;
+      let oh = this.graph.container.offsetHeight;
 
       if (ow < width) {
         this.canvas.style.width = width + 'px';
@@ -2393,7 +2393,7 @@ class mxGraphView extends mxEventSource {
    * Creates and returns a drawing pane in HTML (DIV).
    */
   createHtmlPane = (width, height) => {
-    var pane = document.createElement('DIV');
+    let pane = document.createElement('DIV');
 
     if (width != null && height != null) {
       pane.style.position = 'absolute';
@@ -2415,11 +2415,11 @@ class mxGraphView extends mxEventSource {
    * Creates the DOM nodes for the VML display.
    */
   createVml = () => {
-    var container = this.graph.container;
+    let container = this.graph.container;
 
     if (container != null) {
-      var width = container.offsetWidth;
-      var height = container.offsetHeight;
+      let width = container.offsetWidth;
+      let height = container.offsetHeight;
       this.canvas = this.createVmlPane(width, height);
       this.canvas.style.overflow = 'hidden';
 
@@ -2443,7 +2443,7 @@ class mxGraphView extends mxEventSource {
    * Creates and returns the DOM nodes for the SVG display.
    */
   createSvg = () => {
-    var container = this.graph.container;
+    let container = this.graph.container;
     this.canvas = document.createElementNS(mxConstants.NS_SVG, 'g');
 
     // For background image
@@ -2460,7 +2460,7 @@ class mxGraphView extends mxEventSource {
     this.decoratorPane = document.createElementNS(mxConstants.NS_SVG, 'g');
     this.canvas.appendChild(this.decoratorPane);
 
-    var root = document.createElementNS(mxConstants.NS_SVG, 'svg');
+    let root = document.createElementNS(mxConstants.NS_SVG, 'svg');
     root.style.left = '0px';
     root.style.top = '0px';
     root.style.width = '100%';
@@ -2484,7 +2484,7 @@ class mxGraphView extends mxEventSource {
    */
   updateContainerStyle = (container) => {
     // Workaround for offset of container
-    var style = mxUtils.getCurrentStyle(container);
+    let style = mxUtils.getCurrentStyle(container);
 
     if (style != null && style.position == 'static') {
       container.style.position = 'relative';
@@ -2502,7 +2502,7 @@ class mxGraphView extends mxEventSource {
    * Destroys the view and all its resources.
    */
   destroy = () => {
-    var root = (this.canvas != null) ? this.canvas.ownerSVGElement : null;
+    let root = (this.canvas != null) ? this.canvas.ownerSVGElement : null;
 
     if (root == null) {
       root = this.canvas;
@@ -2531,8 +2531,8 @@ class mxGraphView extends mxEventSource {
     this.isUp = root == null;
 
     if (!this.isUp) {
-      var tmp = this.view.currentRoot;
-      var model = this.view.graph.getModel();
+      let tmp = this.view.currentRoot;
+      let model = this.view.graph.getModel();
 
       while (tmp != null) {
         if (tmp == root) {
@@ -2551,11 +2551,11 @@ class mxGraphView extends mxEventSource {
    * Changes the current root of the view.
    */
   execute = () => {
-    var tmp = this.view.currentRoot;
+    let tmp = this.view.currentRoot;
     this.view.currentRoot = this.previous;
     this.previous = tmp;
 
-    var translate = this.view.graph.getTranslateForRoot(this.view.currentRoot);
+    let translate = this.view.graph.getTranslateForRoot(this.view.currentRoot);
 
     if (translate != null) {
       this.view.translate = new mxPoint(-translate.x, -translate.y);
@@ -2568,7 +2568,7 @@ class mxGraphView extends mxEventSource {
       this.view.refresh();
     }
 
-    var name = (this.isUp) ? mxEvent.UP : mxEvent.DOWN;
+    let name = (this.isUp) ? mxEvent.UP : mxEvent.DOWN;
     this.view.fireEvent(new mxEventObject(name,
         'root', this.view.currentRoot, 'previous', this.previous));
     this.isUp = !this.isUp;
diff --git a/src/js/view/mxLayoutManager.js b/src/js/view/mxLayoutManager.js
index d256c4750..8f0422c16 100644
--- a/src/js/view/mxLayoutManager.js
+++ b/src/js/view/mxLayoutManager.js
@@ -58,7 +58,7 @@ class mxLayoutManager extends mxEventSource {
    * Example:
    *
    * (code)
-   * var layoutMgr = new mxLayoutManager(graph);
+   * let layoutMgr = new mxLayoutManager(graph);
    * layoutMgr.getLayout = (cell, eventName)=>
    * {
    *   return layout;
@@ -169,7 +169,7 @@ class mxLayoutManager extends mxEventSource {
    */
   setGraph = (graph) => {
     if (this.graph != null) {
-      var model = this.graph.getModel();
+      let model = this.graph.getModel();
       model.removeListener(this.undoHandler);
       this.graph.removeListener(this.moveHandler);
       this.graph.removeListener(this.resizeHandler);
@@ -178,7 +178,7 @@ class mxLayoutManager extends mxEventSource {
     this.graph = graph;
 
     if (this.graph != null) {
-      var model = this.graph.getModel();
+      let model = this.graph.getModel();
       model.addListener(mxEvent.BEFORE_UNDO, this.undoHandler);
       this.graph.addListener(mxEvent.MOVE_CELLS, this.moveHandler);
       this.graph.addListener(mxEvent.RESIZE_CELLS, this.resizeHandler);
@@ -239,12 +239,12 @@ class mxLayoutManager extends mxEventSource {
    */
   cellsMoved = (cells, evt) => {
     if (cells != null && evt != null) {
-      var point = mxUtils.convertPoint(this.getGraph().container,
+      let point = mxUtils.convertPoint(this.getGraph().container,
           mxEvent.getClientX(evt), mxEvent.getClientY(evt));
-      var model = this.getGraph().getModel();
+      let model = this.getGraph().getModel();
 
-      for (var i = 0; i < cells.length; i++) {
-        var layout = this.getLayout(model.getParent(cells[i]), mxEvent.MOVE_CELLS);
+      for (let i = 0; i < cells.length; i++) {
+        let layout = this.getLayout(model.getParent(cells[i]), mxEvent.MOVE_CELLS);
 
         if (layout != null) {
           layout.moveCell(cells[i], point.x, point.y);
@@ -265,10 +265,10 @@ class mxLayoutManager extends mxEventSource {
    */
   cellsResized = (cells, bounds, prev) => {
     if (cells != null && bounds != null) {
-      var model = this.getGraph().getModel();
+      let model = this.getGraph().getModel();
 
-      for (var i = 0; i < cells.length; i++) {
-        var layout = this.getLayout(model.getParent(cells[i]), mxEvent.RESIZE_CELLS);
+      for (let i = 0; i < cells.length; i++) {
+        let layout = this.getLayout(model.getParent(cells[i]), mxEvent.RESIZE_CELLS);
 
         if (layout != null) {
           layout.resizeCell(cells[i], bounds[i], prev[i]);
@@ -283,10 +283,10 @@ class mxLayoutManager extends mxEventSource {
    * Returns the cells for which a layout should be executed.
    */
   getCellsForChanges = (changes) => {
-    var result = [];
+    let result = [];
 
-    for (var i = 0; i < changes.length; i++) {
-      var change = changes[i];
+    for (let i = 0; i < changes.length; i++) {
+      let change = changes[i];
 
       if (change instanceof mxRootChange) {
         return [];
@@ -338,14 +338,14 @@ class mxLayoutManager extends mxEventSource {
     result = (result != null) ? result : [];
 
     if (cell != null) {
-      var layout = this.hasLayout(cell);
+      let layout = this.hasLayout(cell);
 
       if (layout != null) {
         result.push(cell);
       }
 
       if (this.isBubbling()) {
-        var model = this.getGraph().getModel();
+        let model = this.getGraph().getModel();
         this.addAncestorsWithLayout(
             model.getParent(cell), result);
       }
@@ -363,10 +363,10 @@ class mxLayoutManager extends mxEventSource {
     result = (result != null) ? result : [];
 
     if (cell != null && this.hasLayout(cell)) {
-      var model = this.getGraph().getModel();
+      let model = this.getGraph().getModel();
 
-      for (var i = 0; i < model.getChildCount(cell); i++) {
-        var child = model.getChildAt(cell, i);
+      for (let i = 0; i < model.getChildCount(cell); i++) {
+        let child = model.getChildAt(cell, i);
 
         if (this.hasLayout(child)) {
           result.push(child);
@@ -387,7 +387,7 @@ class mxLayoutManager extends mxEventSource {
    * executed before layouts for child cells with <mxEvent.END_UPDATE>.
    */
   executeLayoutForCells = (cells) => {
-    var sorted = mxUtils.sortCells(cells, false);
+    let sorted = mxUtils.sortCells(cells, false);
     this.layoutCells(sorted, true);
     this.layoutCells(sorted.reverse(), false);
   };
@@ -400,13 +400,13 @@ class mxLayoutManager extends mxEventSource {
   layoutCells = (cells, bubble) => {
     if (cells.length > 0) {
       // Invokes the layouts while removing duplicates
-      var model = this.getGraph().getModel();
+      let model = this.getGraph().getModel();
 
       model.beginUpdate();
       try {
-        var last = null;
+        let last = null;
 
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           if (cells[i] != model.getRoot() && cells[i] != last) {
             this.executeLayout(cells[i], bubble);
             last = cells[i];
@@ -426,7 +426,7 @@ class mxLayoutManager extends mxEventSource {
    * Executes the given layout on the given parent.
    */
   executeLayout = (cell, bubble) => {
-    var layout = this.getLayout(cell, (bubble) ?
+    let layout = this.getLayout(cell, (bubble) ?
         mxEvent.BEGIN_UPDATE : mxEvent.END_UPDATE);
 
     if (layout != null) {
diff --git a/src/js/view/mxMultiplicity.js b/src/js/view/mxMultiplicity.js
index 6dc8b083a..06bf4e80d 100644
--- a/src/js/view/mxMultiplicity.js
+++ b/src/js/view/mxMultiplicity.js
@@ -163,7 +163,7 @@ class mxMultiplicity {
    * targetIn - Number of incoming edges for the target terminal.
    */
   check = (graph, edge, source, target, sourceOut, targetIn) => {
-    var error = '';
+    let error = '';
 
     if ((this.source && this.checkTerminal(graph, source, edge)) ||
         (!this.source && this.checkTerminal(graph, target, edge))) {
@@ -174,7 +174,7 @@ class mxMultiplicity {
       }
 
       if (this.validNeighbors != null && this.typeError != null && this.validNeighbors.length > 0) {
-        var isValid = this.checkNeighbors(graph, edge, source, target);
+        let isValid = this.checkNeighbors(graph, edge, source, target);
 
         if (!isValid) {
           error += this.typeError + '\n';
@@ -192,12 +192,12 @@ class mxMultiplicity {
    * called if <validNeighbors> is a non-empty array.
    */
   checkNeighbors = (graph, edge, source, target) => {
-    var sourceValue = graph.model.getValue(source);
-    var targetValue = graph.model.getValue(target);
-    var isValid = !this.validNeighborsAllowed;
-    var valid = this.validNeighbors;
+    let sourceValue = graph.model.getValue(source);
+    let targetValue = graph.model.getValue(target);
+    let isValid = !this.validNeighborsAllowed;
+    let valid = this.validNeighbors;
 
-    for (var j = 0; j < valid.length; j++) {
+    for (let j = 0; j < valid.length; j++) {
       if (this.source &&
           this.checkType(graph, targetValue, valid[j])) {
         isValid = this.validNeighborsAllowed;
@@ -220,7 +220,7 @@ class mxMultiplicity {
    * <source>. This implementation uses <checkType> on the terminal's value.
    */
   checkTerminal = (graph, terminal, edge) => {
-    var value = graph.model.getValue(terminal);
+    let value = graph.model.getValue(terminal);
 
     return this.checkType(graph, value, this.type, this.attr, this.value);
   };
diff --git a/src/js/view/mxOutline.js b/src/js/view/mxOutline.js
index 8dc6f46f1..e11213178 100644
--- a/src/js/view/mxOutline.js
+++ b/src/js/view/mxOutline.js
@@ -106,7 +106,7 @@ class mxOutline {
    * Example:
    *
    * (code)
-   * var outline = new mxOutline(graph, div);
+   * let outline = new mxOutline(graph, div);
    * (end)
    *
    * If an outline is used in an <mxWindow> in IE8 standards mode, the following
@@ -124,8 +124,8 @@ class mxOutline {
    * To move the graph to the top, left corner the following code can be used.
    *
    * (code)
-   * var scale = graph.view.scale;
-   * var bounds = graph.getGraphBounds();
+   * let scale = graph.view.scale;
+   * let bounds = graph.getGraphBounds();
    * graph.view.setTranslate(-bounds.x / scale, -bounds.y / scale);
    * (end)
    *
@@ -163,7 +163,7 @@ class mxOutline {
    * Creates the <mxGraph> used in the outline.
    */
   createGraph = (container) => {
-    var graph = new mxGraph(container, this.source.getModel(), this.graphRenderHint, this.source.getStylesheet());
+    let graph = new mxGraph(container, this.source.getModel(), this.graphRenderHint, this.source.getStylesheet());
     graph.foldingEnabled = false;
     graph.autoScroll = false;
 
@@ -179,7 +179,7 @@ class mxOutline {
     this.outline = this.createGraph(container);
 
     // Do not repaint when suspended
-    var outlineGraphModelChanged = this.outline.graphModelChanged;
+    let outlineGraphModelChanged = this.outline.graphModelChanged;
     this.outline.graphModelChanged = mxUtils.bind(this, (changes) => {
       if (!this.suspended && this.outline != null) {
         outlineGraphModelChanged.apply(this.outline, arguments);
@@ -188,7 +188,7 @@ class mxOutline {
 
     // Enables faster painting in SVG
     if (mxClient.IS_SVG) {
-      var node = this.outline.getView().getCanvas().parentNode;
+      let node = this.outline.getView().getCanvas().parentNode;
       node.setAttribute('shape-rendering', 'optimizeSpeed');
       node.setAttribute('image-rendering', 'optimizeSpeed');
     }
@@ -208,7 +208,7 @@ class mxOutline {
     this.outline.addMouseListener(this);
 
     // Adds listeners to keep the outline in sync with the source graph
-    var view = this.source.getView();
+    let view = this.source.getView();
     view.addListener(mxEvent.SCALE, this.updateHandler);
     view.addListener(mxEvent.TRANSLATE, this.updateHandler);
     view.addListener(mxEvent.SCALE_AND_TRANSLATE, this.updateHandler);
@@ -250,10 +250,10 @@ class mxOutline {
     // complete gesture on the event target. This is needed because all the events
     // are routed via the initial element even if that element is removed from the
     // DOM, which happens when we repaint the selection border and zoom handles.
-    var handler = mxUtils.bind(this, (evt) => {
-      var t = mxEvent.getSource(evt);
+    let handler = mxUtils.bind(this, (evt) => {
+      let t = mxEvent.getSource(evt);
 
-      var redirect = mxUtils.bind(this, (evt) => {
+      let redirect = mxUtils.bind(this, (evt) => {
         this.outline.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(evt));
       });
 
@@ -346,12 +346,12 @@ class mxOutline {
    */
   createSizer = () => {
     if (this.sizerImage != null) {
-      var sizer = new mxImageShape(new mxRectangle(0, 0, this.sizerImage.width, this.sizerImage.height), this.sizerImage.src);
+      let sizer = new mxImageShape(new mxRectangle(0, 0, this.sizerImage.width, this.sizerImage.height), this.sizerImage.src);
       sizer.dialect = this.outline.dialect;
 
       return sizer;
     } else {
-      var sizer = new mxRectangleShape(new mxRectangle(0, 0, this.sizerSize, this.sizerSize),
+      let sizer = new mxRectangleShape(new mxRectangle(0, 0, this.sizerSize, this.sizerSize),
           mxConstants.OUTLINE_HANDLE_FILLCOLOR, mxConstants.OUTLINE_HANDLE_STROKECOLOR);
       sizer.dialect = this.outline.dialect;
 
@@ -394,29 +394,29 @@ class mxOutline {
   update = (revalidate) => {
     if (this.source != null && this.source.container != null &&
         this.outline != null && this.outline.container != null) {
-      var sourceScale = this.source.view.scale;
-      var scaledGraphBounds = this.getSourceGraphBounds();
-      var unscaledGraphBounds = new mxRectangle(scaledGraphBounds.x / sourceScale + this.source.panDx,
+      let sourceScale = this.source.view.scale;
+      let scaledGraphBounds = this.getSourceGraphBounds();
+      let unscaledGraphBounds = new mxRectangle(scaledGraphBounds.x / sourceScale + this.source.panDx,
           scaledGraphBounds.y / sourceScale + this.source.panDy, scaledGraphBounds.width / sourceScale,
           scaledGraphBounds.height / sourceScale);
 
-      var unscaledFinderBounds = new mxRectangle(0, 0,
+      let unscaledFinderBounds = new mxRectangle(0, 0,
           this.source.container.clientWidth / sourceScale,
           this.source.container.clientHeight / sourceScale);
 
-      var union = unscaledGraphBounds.clone();
+      let union = unscaledGraphBounds.clone();
       union.add(unscaledFinderBounds);
 
       // Zooms to the scrollable area if that is bigger than the graph
-      var size = this.getSourceContainerSize();
-      var completeWidth = Math.max(size.width / sourceScale, union.width);
-      var completeHeight = Math.max(size.height / sourceScale, union.height);
+      let size = this.getSourceContainerSize();
+      let completeWidth = Math.max(size.width / sourceScale, union.width);
+      let completeHeight = Math.max(size.height / sourceScale, union.height);
 
-      var availableWidth = Math.max(0, this.outline.container.clientWidth - this.border);
-      var availableHeight = Math.max(0, this.outline.container.clientHeight - this.border);
+      let availableWidth = Math.max(0, this.outline.container.clientWidth - this.border);
+      let availableHeight = Math.max(0, this.outline.container.clientHeight - this.border);
 
-      var outlineScale = Math.min(availableWidth / completeWidth, availableHeight / completeHeight);
-      var scale = (isNaN(outlineScale)) ? this.minScale : Math.max(this.minScale, outlineScale);
+      let outlineScale = Math.min(availableWidth / completeWidth, availableHeight / completeHeight);
+      let scale = (isNaN(outlineScale)) ? this.minScale : Math.max(this.minScale, outlineScale);
 
       if (scale > 0) {
         if (this.outline.getView().scale != scale) {
@@ -424,17 +424,17 @@ class mxOutline {
           revalidate = true;
         }
 
-        var navView = this.outline.getView();
+        let navView = this.outline.getView();
 
         if (navView.currentRoot != this.source.getView().currentRoot) {
           navView.setCurrentRoot(this.source.getView().currentRoot);
         }
 
-        var t = this.source.view.translate;
-        var tx = t.x + this.source.panDx;
-        var ty = t.y + this.source.panDy;
+        let t = this.source.view.translate;
+        let tx = t.x + this.source.panDx;
+        let ty = t.y + this.source.panDy;
 
-        var off = this.getOutlineOffset(scale);
+        let off = this.getOutlineOffset(scale);
 
         if (off != null) {
           tx += off.x;
@@ -459,7 +459,7 @@ class mxOutline {
         scale = this.source.getView().scale;
         var scale2 = scale / navView.scale;
         var scale3 = 1.0 / navView.scale;
-        var container = this.source.container;
+        let container = this.source.container;
 
         // Updates the bounds of the viewrect in the navigation
         this.bounds = new mxRectangle(
@@ -472,7 +472,7 @@ class mxOutline {
         this.bounds.x += this.source.container.scrollLeft * navView.scale / scale;
         this.bounds.y += this.source.container.scrollTop * navView.scale / scale;
 
-        var b = this.selectionBorder.bounds;
+        let b = this.selectionBorder.bounds;
 
         if (b.x != this.bounds.x || b.y != this.bounds.y || b.width != this.bounds.width || b.height != this.bounds.height) {
           this.selectionBorder.bounds = this.bounds;
@@ -480,7 +480,7 @@ class mxOutline {
         }
 
         // Updates the bounds of the zoom handle at the bottom right
-        var b = this.sizer.bounds;
+        let b = this.sizer.bounds;
         var b2 = new mxRectangle(this.bounds.x + this.bounds.width - b.width / 2,
             this.bounds.y + this.bounds.height - b.height / 2, b.width, b.height);
 
@@ -507,8 +507,8 @@ class mxOutline {
    */
   mouseDown = (sender, me) => {
     if (this.enabled && this.showViewport) {
-      var tol = (!mxEvent.isMouseEvent(me.getEvent())) ? this.source.tolerance : 0;
-      var hit = (this.source.allowHandleBoundsCheck && tol > 0) ?
+      let tol = (!mxEvent.isMouseEvent(me.getEvent())) ? this.source.tolerance : 0;
+      let hit = (this.source.allowHandleBoundsCheck && tol > 0) ?
           new mxRectangle(me.getGraphX() - tol, me.getGraphY() - tol, 2 * tol, 2 * tol) : null;
       this.zoom = me.isSource(this.sizer) || (hit != null && mxUtils.intersects(shape.bounds, hit));
       this.startX = me.getX();
@@ -538,14 +538,14 @@ class mxOutline {
       this.selectionBorder.node.style.display = (this.showViewport) ? '' : 'none';
       this.sizer.node.style.display = this.selectionBorder.node.style.display;
 
-      var delta = this.getTranslateForEvent(me);
-      var dx = delta.x;
-      var dy = delta.y;
-      var bounds = null;
+      let delta = this.getTranslateForEvent(me);
+      let dx = delta.x;
+      let dy = delta.y;
+      let bounds = null;
 
       if (!this.zoom) {
         // Previews the panning on the source graph
-        var scale = this.outline.getView().scale;
+        let scale = this.outline.getView().scale;
         bounds = new mxRectangle(this.bounds.x + dx,
             this.bounds.y + dy, this.bounds.width, this.bounds.height);
         this.selectionBorder.bounds = bounds;
@@ -557,8 +557,8 @@ class mxOutline {
         this.source.panGraph(-dx - this.dx0, -dy - this.dy0);
       } else {
         // Does *not* preview zooming on the source graph
-        var container = this.source.container;
-        var viewRatio = container.clientWidth / container.clientHeight;
+        let container = this.source.container;
+        let viewRatio = container.clientWidth / container.clientHeight;
         dy = dx / viewRatio;
         bounds = new mxRectangle(this.bounds.x,
             this.bounds.y,
@@ -569,7 +569,7 @@ class mxOutline {
       }
 
       // Updates the zoom handle
-      var b = this.sizer.bounds;
+      let b = this.sizer.bounds;
       this.sizer.bounds = new mxRectangle(
           bounds.x + bounds.width - b.width / 2,
           bounds.y + bounds.height - b.height / 2,
@@ -593,11 +593,11 @@ class mxOutline {
    * (code)
    * outline.getTranslateForEvent = (me)=>
    * {
-   *   var pt = new mxPoint(me.getX() - this.startX, me.getY() - this.startY);
+   *   let pt = new mxPoint(me.getX() - this.startX, me.getY() - this.startY);
    *
    *   if (!this.zoom)
    *   {
-   *     var tr = this.source.view.translate;
+   *     let tr = this.source.view.translate;
    *     pt.x = Math.max(tr.x * this.outline.view.scale, pt.x);
    *     pt.y = Math.max(tr.y * this.outline.view.scale, pt.y);
    *   }
@@ -617,9 +617,9 @@ class mxOutline {
    */
   mouseUp = (sender, me) => {
     if (this.active) {
-      var delta = this.getTranslateForEvent(me);
-      var dx = delta.x;
-      var dy = delta.y;
+      let delta = this.getTranslateForEvent(me);
+      let dx = delta.x;
+      let dy = delta.y;
 
       if (Math.abs(dx) > 0 || Math.abs(dy) > 0) {
         if (!this.zoom) {
@@ -630,13 +630,13 @@ class mxOutline {
             this.source.panGraph(0, 0);
             dx /= this.outline.getView().scale;
             dy /= this.outline.getView().scale;
-            var t = this.source.getView().translate;
+            let t = this.source.getView().translate;
             this.source.getView().setTranslate(t.x - dx, t.y - dy);
           }
         } else {
           // Applies the new zoom
-          var w = this.selectionBorder.bounds.width;
-          var scale = this.source.getView().scale;
+          let w = this.selectionBorder.bounds.width;
+          let scale = this.source.getView().scale;
           this.source.zoomTo(Math.max(this.minScale, scale - (dx * scale) / w), false);
         }
 
diff --git a/src/js/view/mxPerimeter.js b/src/js/view/mxPerimeter.js
index e25f5ae90..28ab45293 100644
--- a/src/js/view/mxPerimeter.js
+++ b/src/js/view/mxPerimeter.js
@@ -7,7 +7,7 @@
 import mxUtils from "../util/mxUtils";
 import mxPoint from "../util/mxPoint";
 
-var mxPerimeter = {
+let mxPerimeter = {
   /**
    * Class: mxPerimeter
    *
@@ -33,8 +33,8 @@ var mxPerimeter = {
    * (code)
    * mxPerimeter.CustomPerimeter = (bounds, vertex, next, orthogonal) =>
    * {
-   *   var x = 0; // Calculate x-coordinate
-   *   var y = 0; // Calculate y-coordainte
+   *   let x = 0; // Calculate x-coordinate
+   *   let y = 0; // Calculate y-coordainte
    *   
    *   return new mxPoint(x, y);
    * }
@@ -59,7 +59,7 @@ var mxPerimeter = {
    * Or it can be used for all vertices in the graph as follows:
    *
    * (code)
-   * var style = graph.getStylesheet().getDefaultVertexStyle();
+   * let style = graph.getStylesheet().getDefaultVertexStyle();
    * style[mxConstants.STYLE_PERIMETER] = mxPerimeter.CustomPerimeter;
    * (end)
    *
@@ -86,16 +86,16 @@ var mxPerimeter = {
    * returned.
    */
   RectanglePerimeter: function (bounds, vertex, next, orthogonal) {
-    var cx = bounds.getCenterX();
-    var cy = bounds.getCenterY();
-    var dx = next.x - cx;
-    var dy = next.y - cy;
-    var alpha = Math.atan2(dy, dx);
-    var p = new mxPoint(0, 0);
-    var pi = Math.PI;
+    let cx = bounds.getCenterX();
+    let cy = bounds.getCenterY();
+    let dx = next.x - cx;
+    let dy = next.y - cy;
+    let alpha = Math.atan2(dy, dx);
+    let p = new mxPoint(0, 0);
+    let pi = Math.PI;
     var pi2 = Math.PI / 2;
-    var beta = pi2 - alpha;
-    var t = Math.atan2(bounds.height, bounds.width);
+    let beta = pi2 - alpha;
+    let t = Math.atan2(bounds.height, bounds.width);
 
     if (alpha < -pi + t || alpha > pi - t) {
       // Left edge
@@ -145,19 +145,19 @@ var mxPerimeter = {
    * for a description of the parameters.
    */
   EllipsePerimeter: function (bounds, vertex, next, orthogonal) {
-    var x = bounds.x;
-    var y = bounds.y;
-    var a = bounds.width / 2;
-    var b = bounds.height / 2;
-    var cx = x + a;
-    var cy = y + b;
-    var px = next.x;
-    var py = next.y;
+    let x = bounds.x;
+    let y = bounds.y;
+    let a = bounds.width / 2;
+    let b = bounds.height / 2;
+    let cx = x + a;
+    let cy = y + b;
+    let px = next.x;
+    let py = next.y;
 
     // Calculates straight line equation through
     // point and ellipse center y = d * x + h
-    var dx = parseInt(px - cx);
-    var dy = parseInt(py - cy);
+    let dx = parseInt(px - cx);
+    let dy = parseInt(py - cy);
 
     if (dx == 0 && dy != 0) {
       return new mxPoint(cx, cy + b * dy / Math.abs(dy));
@@ -167,8 +167,8 @@ var mxPerimeter = {
 
     if (orthogonal) {
       if (py >= y && py <= y + bounds.height) {
-        var ty = py - cy;
-        var tx = Math.sqrt(a * a * (1 - (ty * ty) / (b * b))) || 0;
+        let ty = py - cy;
+        let tx = Math.sqrt(a * a * (1 - (ty * ty) / (b * b))) || 0;
 
         if (px <= x) {
           tx = -tx;
@@ -178,8 +178,8 @@ var mxPerimeter = {
       }
 
       if (px >= x && px <= x + bounds.width) {
-        var tx = px - cx;
-        var ty = Math.sqrt(b * b * (1 - (tx * tx) / (a * a))) || 0;
+        let tx = px - cx;
+        let ty = Math.sqrt(b * b * (1 - (tx * tx) / (a * a))) || 0;
 
         if (py <= y) {
           ty = -ty;
@@ -190,14 +190,14 @@ var mxPerimeter = {
     }
 
     // Calculates intersection
-    var d = dy / dx;
-    var h = cy - d * cx;
-    var e = a * a * d * d + b * b;
-    var f = -2 * cx * e;
-    var g = a * a * d * d * cx * cx +
+    let d = dy / dx;
+    let h = cy - d * cx;
+    let e = a * a * d * d + b * b;
+    let f = -2 * cx * e;
+    let g = a * a * d * d * cx * cx +
         b * b * cx * cx -
         a * a * b * b;
-    var det = Math.sqrt(f * f - 4 * e * g);
+    let det = Math.sqrt(f * f - 4 * e * g);
 
     // Two solutions (perimeter points)
     var xout1 = (-f + det) / (2 * e);
@@ -210,8 +210,8 @@ var mxPerimeter = {
         + Math.pow((yout2 - py), 2));
 
     // Correct solution
-    var xout = 0;
-    var yout = 0;
+    let xout = 0;
+    let yout = 0;
 
     if (dist1 < dist2) {
       xout = xout1;
@@ -231,16 +231,16 @@ var mxPerimeter = {
    * for a description of the parameters.
    */
   RhombusPerimeter: function (bounds, vertex, next, orthogonal) {
-    var x = bounds.x;
-    var y = bounds.y;
-    var w = bounds.width;
-    var h = bounds.height;
+    let x = bounds.x;
+    let y = bounds.y;
+    let w = bounds.width;
+    let h = bounds.height;
 
-    var cx = x + w / 2;
-    var cy = y + h / 2;
+    let cx = x + w / 2;
+    let cy = y + h / 2;
 
-    var px = next.x;
-    var py = next.y;
+    let px = next.x;
+    let py = next.y;
 
     // Special case for intersecting the diamond's corners
     if (cx == px) {
@@ -257,8 +257,8 @@ var mxPerimeter = {
       }
     }
 
-    var tx = cx;
-    var ty = cy;
+    let tx = cx;
+    let ty = cy;
 
     if (orthogonal) {
       if (px >= x && px <= x + w) {
@@ -290,22 +290,22 @@ var mxPerimeter = {
    * for a description of the parameters.
    */
   TrianglePerimeter: function (bounds, vertex, next, orthogonal) {
-    var direction = (vertex != null) ?
+    let direction = (vertex != null) ?
         vertex.style[mxConstants.STYLE_DIRECTION] : null;
-    var vertical = direction == mxConstants.DIRECTION_NORTH ||
+    let vertical = direction == mxConstants.DIRECTION_NORTH ||
         direction == mxConstants.DIRECTION_SOUTH;
 
-    var x = bounds.x;
-    var y = bounds.y;
-    var w = bounds.width;
-    var h = bounds.height;
+    let x = bounds.x;
+    let y = bounds.y;
+    let w = bounds.width;
+    let h = bounds.height;
 
-    var cx = x + w / 2;
-    var cy = y + h / 2;
+    let cx = x + w / 2;
+    let cy = y + h / 2;
 
-    var start = new mxPoint(x, y);
-    var corner = new mxPoint(x + w, cy);
-    var end = new mxPoint(x, y + h);
+    let start = new mxPoint(x, y);
+    let corner = new mxPoint(x + w, cy);
+    let end = new mxPoint(x, y + h);
 
     if (direction == mxConstants.DIRECTION_NORTH) {
       start = end;
@@ -320,13 +320,13 @@ var mxPerimeter = {
       end = new mxPoint(x + w, y + h);
     }
 
-    var dx = next.x - cx;
-    var dy = next.y - cy;
+    let dx = next.x - cx;
+    let dy = next.y - cy;
 
-    var alpha = (vertical) ? Math.atan2(dx, dy) : Math.atan2(dy, dx);
-    var t = (vertical) ? Math.atan2(w, h) : Math.atan2(h, w);
+    let alpha = (vertical) ? Math.atan2(dx, dy) : Math.atan2(dy, dx);
+    let t = (vertical) ? Math.atan2(w, h) : Math.atan2(h, w);
 
-    var base = false;
+    let base = false;
 
     if (direction == mxConstants.DIRECTION_NORTH ||
         direction == mxConstants.DIRECTION_WEST) {
@@ -335,7 +335,7 @@ var mxPerimeter = {
       base = alpha < -Math.PI + t || alpha > Math.PI - t;
     }
 
-    var result = null;
+    let result = null;
 
     if (base) {
       if (orthogonal && ((vertical && next.x >= start.x && next.x <= end.x) ||
@@ -362,7 +362,7 @@ var mxPerimeter = {
       }
     } else {
       if (orthogonal) {
-        var pt = new mxPoint(cx, cy);
+        let pt = new mxPoint(cx, cy);
 
         if (next.y >= y && next.y <= y + h) {
           pt.x = (vertical) ? cx : (
@@ -408,30 +408,30 @@ var mxPerimeter = {
    * for a description of the parameters.
    */
   HexagonPerimeter: function (bounds, vertex, next, orthogonal) {
-    var x = bounds.x;
-    var y = bounds.y;
-    var w = bounds.width;
-    var h = bounds.height;
+    let x = bounds.x;
+    let y = bounds.y;
+    let w = bounds.width;
+    let h = bounds.height;
 
-    var cx = bounds.getCenterX();
-    var cy = bounds.getCenterY();
-    var px = next.x;
-    var py = next.y;
-    var dx = px - cx;
-    var dy = py - cy;
-    var alpha = -Math.atan2(dy, dx);
-    var pi = Math.PI;
+    let cx = bounds.getCenterX();
+    let cy = bounds.getCenterY();
+    let px = next.x;
+    let py = next.y;
+    let dx = px - cx;
+    let dy = py - cy;
+    let alpha = -Math.atan2(dy, dx);
+    let pi = Math.PI;
     var pi2 = Math.PI / 2;
 
-    var result = new mxPoint(cx, cy);
+    let result = new mxPoint(cx, cy);
 
-    var direction = (vertex != null) ? mxUtils.getValue(
+    let direction = (vertex != null) ? mxUtils.getValue(
         vertex.style, mxConstants.STYLE_DIRECTION,
         mxConstants.DIRECTION_EAST) : mxConstants.DIRECTION_EAST;
-    var vertical = direction == mxConstants.DIRECTION_NORTH
+    let vertical = direction == mxConstants.DIRECTION_NORTH
         || direction == mxConstants.DIRECTION_SOUTH;
-    var a = new mxPoint();
-    var b = new mxPoint();
+    let a = new mxPoint();
+    let b = new mxPoint();
 
     //Only consider corrects quadrants for the orthogonal case.
     if ((px < x) && (py < y) || (px < x) && (py > y + h)
@@ -575,8 +575,8 @@ var mxPerimeter = {
         }
       }
 
-      var tx = cx;
-      var ty = cy;
+      let tx = cx;
+      let ty = cy;
 
       if (px >= x && px <= x + w) {
         tx = px;
@@ -599,7 +599,7 @@ var mxPerimeter = {
       result = mxUtils.intersection(tx, ty, next.x, next.y, a.x, a.y, b.x, b.y);
     } else {
       if (vertical) {
-        var beta = Math.atan2(h / 4, w / 2);
+        let beta = Math.atan2(h / 4, w / 2);
 
         //Special cases where intersects with hexagon corners
         if (alpha == beta) {
@@ -641,7 +641,7 @@ var mxPerimeter = {
           b = new mxPoint(x + w, y + Math.floor(1.25 * h));
         }
       } else {
-        var beta = Math.atan2(h / 2, w / 4);
+        let beta = Math.atan2(h / 2, w / 4);
 
         //Special cases where intersects with hexagon corners
         if (alpha == beta) {
diff --git a/src/js/view/mxPrintPreview.js b/src/js/view/mxPrintPreview.js
index 84394590e..f9af799fb 100644
--- a/src/js/view/mxPrintPreview.js
+++ b/src/js/view/mxPrintPreview.js
@@ -162,7 +162,7 @@ class mxPrintPreview {
    * a print preview for an existing graph:
    *
    * (code)
-   * var preview = new mxPrintPreview(graph);
+   * let preview = new mxPrintPreview(graph);
    * preview.open();
    * (end)
    *
@@ -170,12 +170,12 @@ class mxPrintPreview {
    * across a given number of pages:
    *
    * (code)
-   * var pageCount = mxUtils.prompt('Enter page count', '1');
+   * let pageCount = mxUtils.prompt('Enter page count', '1');
    *
    * if (pageCount != null)
    * {
-   *   var scale = mxUtils.getScaleForPageCount(pageCount, graph);
-   *   var preview = new mxPrintPreview(graph, scale);
+   *   let scale = mxUtils.getScaleForPageCount(pageCount, graph);
+   *   let preview = new mxPrintPreview(graph, scale);
    *   preview.open();
    * }
    * (end)
@@ -186,7 +186,7 @@ class mxPrintPreview {
    * <getAppendices> can be used, respectively.
    *
    * (code)
-   * var preview = new mxPrintPreview(graph, 1);
+   * let preview = new mxPrintPreview(graph, 1);
    *
    * preview.getCoverPages = (w, h)=>
    * {
@@ -214,7 +214,7 @@ class mxPrintPreview {
    * override <writeHead> to add the respective link tags as follows:
    *
    * (code)
-   * var writeHead = preview.writeHead;
+   * let writeHead = preview.writeHead;
    * preview.writeHead = (doc, css)=>
    * {
    *   writeHead.apply(this, arguments);
@@ -246,12 +246,12 @@ class mxPrintPreview {
    * can override <renderPage> as follows to add a header to any page:
    *
    * (code)
-   * var oldRenderPage = renderPage;
+   * let oldRenderPage = renderPage;
    * renderPage = (w, h, x, y, content, pageNumber)=>
    * {
-   *   var div = oldRenderPage.apply(this, arguments);
+   *   let div = oldRenderPage.apply(this, arguments);
    *
-   *   var header = document.createElement('div');
+   *   let header = document.createElement('div');
    *   header.style.position = 'absolute';
    *   header.style.top = '0px';
    *   header.style.width = '100%';
@@ -293,7 +293,7 @@ class mxPrintPreview {
    * an example for IE8 standards mode.
    *
    * (code)
-   * var preview = new mxPrintPreview(graph);
+   * let preview = new mxPrintPreview(graph);
    * preview.getDoctype = ()=>
    * {
    *   return '<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=5,IE=8" ><![endif]-->';
@@ -354,7 +354,7 @@ class mxPrintPreview {
    * IE8 in IE8 standards mode and edge in IE9 standards mode.
    */
   getDoctype = () => {
-    var dt = '';
+    let dt = '';
     return dt;
   };
 
@@ -392,8 +392,8 @@ class mxPrintPreview {
   open = (css, targetWindow, forcePageBreaks, keepOpen) => {
     // Closing the window while the page is being rendered may cause an
     // exception in IE. This and any other exceptions are simply ignored.
-    var previousInitializeOverlay = this.graph.cellRenderer.initializeOverlay;
-    var div = null;
+    let previousInitializeOverlay = this.graph.cellRenderer.initializeOverlay;
+    let div = null;
 
     try {
       // Temporarily overrides the method to redirect rendering of overlays
@@ -412,17 +412,17 @@ class mxPrintPreview {
       }
 
       this.wnd = (targetWindow != null) ? targetWindow : this.wnd;
-      var isNewWindow = false;
+      let isNewWindow = false;
 
       if (this.wnd == null) {
         isNewWindow = true;
         this.wnd = window.open();
       }
 
-      var doc = this.wnd.document;
+      let doc = this.wnd.document;
 
       if (isNewWindow) {
-        var dt = this.getDoctype();
+        let dt = this.getDoctype();
 
         if (dt != null && dt.length > 0) {
           doc.writeln(dt);
@@ -441,10 +441,10 @@ class mxPrintPreview {
       }
 
       // Computes the horizontal and vertical page count
-      var bounds = this.graph.getGraphBounds().clone();
-      var currentScale = this.graph.getView().getScale();
-      var sc = currentScale / this.scale;
-      var tr = this.graph.getView().getTranslate();
+      let bounds = this.graph.getGraphBounds().clone();
+      let currentScale = this.graph.getView().getScale();
+      let sc = currentScale / this.scale;
+      let tr = this.graph.getView().getTranslate();
 
       // Uses the absolute origin with no offset for all printing
       if (!this.autoOrigin) {
@@ -458,8 +458,8 @@ class mxPrintPreview {
       }
 
       // Store the available page area
-      var availableWidth = this.pageFormat.width - (this.border * 2);
-      var availableHeight = this.pageFormat.height - (this.border * 2);
+      let availableWidth = this.pageFormat.width - (this.border * 2);
+      let availableHeight = this.pageFormat.height - (this.border * 2);
 
       // Adds margins to page format
       this.pageFormat.height += this.marginTop + this.marginBottom;
@@ -469,18 +469,18 @@ class mxPrintPreview {
       bounds.width /= sc;
       bounds.height /= sc;
 
-      var hpages = Math.max(1, Math.ceil((bounds.width + this.x0) / availableWidth));
-      var vpages = Math.max(1, Math.ceil((bounds.height + this.y0) / availableHeight));
+      let hpages = Math.max(1, Math.ceil((bounds.width + this.x0) / availableWidth));
+      let vpages = Math.max(1, Math.ceil((bounds.height + this.y0) / availableHeight));
       this.pageCount = hpages * vpages;
 
-      var writePageSelector = () => {
+      let writePageSelector = () => {
         if (this.pageSelector && (vpages > 1 || hpages > 1)) {
-          var table = this.createPageSelector(vpages, hpages);
+          let table = this.createPageSelector(vpages, hpages);
           doc.body.appendChild(table);
         }
       };
 
-      var addPage =  (div, addBreak) => {
+      let addPage =  (div, addBreak) => {
         // Border of the DIV (aka page) inside the document
         if (this.borderColor != null) {
           div.style.borderColor = this.borderColor;
@@ -512,7 +512,7 @@ class mxPrintPreview {
           doc.writeln(div.outerHTML);
           div.parentNode.removeChild(div);
         } else if (mxClient.IS_EDGE) {
-          var clone = doc.createElement('div');
+          let clone = doc.createElement('div');
           clone.innerHTML = div.outerHTML;
           clone = clone.getElementsByTagName('div')[0];
           doc.body.appendChild(clone);
@@ -527,31 +527,31 @@ class mxPrintPreview {
         }
       };
 
-      var cov = this.getCoverPages(this.pageFormat.width, this.pageFormat.height);
+      let cov = this.getCoverPages(this.pageFormat.width, this.pageFormat.height);
 
       if (cov != null) {
-        for (var i = 0; i < cov.length; i++) {
+        for (let i = 0; i < cov.length; i++) {
           addPage(cov[i], true);
         }
       }
 
-      var apx = this.getAppendices(this.pageFormat.width, this.pageFormat.height);
+      let apx = this.getAppendices(this.pageFormat.width, this.pageFormat.height);
 
       // Appends each page to the page output for printing, making
       // sure there will be a page break after each page (ie. div)
-      for (var i = 0; i < vpages; i++) {
-        var dy = i * availableHeight / this.scale - this.y0 / this.scale +
+      for (let i = 0; i < vpages; i++) {
+        let dy = i * availableHeight / this.scale - this.y0 / this.scale +
             (bounds.y - tr.y * currentScale) / currentScale;
 
-        for (var j = 0; j < hpages; j++) {
+        for (let j = 0; j < hpages; j++) {
           if (this.wnd == null) {
             return null;
           }
 
-          var dx = j * availableWidth / this.scale - this.x0 / this.scale +
+          let dx = j * availableWidth / this.scale - this.x0 / this.scale +
               (bounds.x - tr.x * currentScale) / currentScale;
-          var pageNum = i * hpages + j + 1;
-          var clip = new mxRectangle(dx, dy, availableWidth, availableHeight);
+          let pageNum = i * hpages + j + 1;
+          let clip = new mxRectangle(dx, dy, availableWidth, availableHeight);
           div = this.renderPage(this.pageFormat.width, this.pageFormat.height, 0, 0, mxUtils.bind(this, (div) => {
             this.addGraphFragment(-dx, -dy, this.scale, pageNum, div, clip);
 
@@ -568,7 +568,7 @@ class mxPrintPreview {
       }
 
       if (apx != null) {
-        for (var i = 0; i < apx.length; i++) {
+        for (let i = 0; i < apx.length; i++) {
           addPage(apx[i], i < apx.length - 1);
         }
       }
@@ -597,7 +597,7 @@ class mxPrintPreview {
    * Adds a page break to the given document.
    */
   addPageBreak = (doc) => {
-    var hr = doc.createElement('hr');
+    let hr = doc.createElement('hr');
     hr.className = 'mxPageBreak';
     doc.body.appendChild(hr);
   };
@@ -610,7 +610,7 @@ class mxPrintPreview {
   closeDocument = () => {
     try {
       if (this.wnd != null && this.wnd.document != null) {
-        var doc = this.wnd.document;
+        let doc = this.wnd.document;
 
         this.writePostfix(doc);
         doc.writeln('</body>');
@@ -679,25 +679,25 @@ class mxPrintPreview {
    * Creates the page selector table.
    */
   createPageSelector = (vpages, hpages) => {
-    var doc = this.wnd.document;
-    var table = doc.createElement('table');
+    let doc = this.wnd.document;
+    let table = doc.createElement('table');
     table.className = 'mxPageSelector';
     table.setAttribute('border', '0');
 
-    var tbody = doc.createElement('tbody');
+    let tbody = doc.createElement('tbody');
 
-    for (var i = 0; i < vpages; i++) {
-      var row = doc.createElement('tr');
+    for (let i = 0; i < vpages; i++) {
+      let row = doc.createElement('tr');
 
-      for (var j = 0; j < hpages; j++) {
-        var pageNum = i * hpages + j + 1;
-        var cell = doc.createElement('td');
-        var a = doc.createElement('a');
+      for (let j = 0; j < hpages; j++) {
+        let pageNum = i * hpages + j + 1;
+        let cell = doc.createElement('td');
+        let a = doc.createElement('a');
         a.setAttribute('href', '#mxPage-' + pageNum);
 
         // Workaround for FF where the anchor is appended to the URL of the original document
         if (mxClient.IS_NS && !mxClient.IS_SF && !mxClient.IS_GC) {
-          var js = 'var page = document.getElementById(\'mxPage-' + pageNum + '\');page.scrollIntoView(true);event.preventDefault();';
+          let js = 'let page = document.getElementById(\'mxPage-' + pageNum + '\');page.scrollIntoView(true);event.preventDefault();';
           a.setAttribute('onclick', js);
         }
 
@@ -732,9 +732,9 @@ class mxPrintPreview {
    * pageNumber - Integer representing the page number.
    */
   renderPage = (w, h, dx, dy, content, pageNumber) => {
-    var doc = this.wnd.document;
-    var div = document.createElement('div');
-    var arg = null;
+    let doc = this.wnd.document;
+    let div = document.createElement('div');
+    let arg = null;
 
     try {
       // Workaround for ignored clipping in IE 9 standards
@@ -745,7 +745,7 @@ class mxPrintPreview {
         div.style.height = h + 'px';
         div.style.pageBreakInside = 'avoid';
 
-        var innerDiv = document.createElement('div');
+        let innerDiv = document.createElement('div');
         innerDiv.style.position = 'relative';
         innerDiv.style.top = this.border + 'px';
         innerDiv.style.left = this.border + 'px';
@@ -753,7 +753,7 @@ class mxPrintPreview {
         innerDiv.style.height = (h - 2 * this.border) + 'px';
         innerDiv.style.overflow = 'hidden';
 
-        var viewport = document.createElement('div');
+        let viewport = document.createElement('div');
         viewport.style.position = 'relative';
         viewport.style.marginLeft = dx + 'px';
         viewport.style.marginTop = dy + 'px';
@@ -770,7 +770,7 @@ class mxPrintPreview {
         div.style.overflow = 'hidden';
         div.style.pageBreakInside = 'avoid';
 
-        var innerDiv = document.createElement('div');
+        let innerDiv = document.createElement('div');
         innerDiv.style.width = (w - 2 * this.border) + 'px';
         innerDiv.style.height = (h - 2 * this.border) + 'px';
         innerDiv.style.overflow = 'hidden';
@@ -804,7 +804,7 @@ class mxPrintPreview {
    * Returns the root cell for painting the graph.
    */
   getRoot = () => {
-    var root = this.graph.view.currentRoot;
+    let root = this.graph.view.currentRoot;
 
     if (root == null) {
       root = this.graph.getModel().getRoot();
@@ -839,23 +839,23 @@ class mxPrintPreview {
    * clip - Contains the clipping rectangle as an <mxRectangle>.
    */
   addGraphFragment = (dx, dy, scale, pageNumber, div, clip) => {
-    var view = this.graph.getView();
-    var previousContainer = this.graph.container;
+    let view = this.graph.getView();
+    let previousContainer = this.graph.container;
     this.graph.container = div;
 
-    var canvas = view.getCanvas();
-    var backgroundPane = view.getBackgroundPane();
-    var drawPane = view.getDrawPane();
-    var overlayPane = view.getOverlayPane();
-    var realScale = scale;
+    let canvas = view.getCanvas();
+    let backgroundPane = view.getBackgroundPane();
+    let drawPane = view.getDrawPane();
+    let overlayPane = view.getOverlayPane();
+    let realScale = scale;
 
     if (this.graph.dialect == mxConstants.DIALECT_SVG) {
       view.createSvg();
 
       // Uses CSS transform for scaling
       if (this.useCssTransforms()) {
-        var g = view.getDrawPane().parentNode;
-        var prev = g.getAttribute('transform');
+        let g = view.getDrawPane().parentNode;
+        let prev = g.getAttribute('transform');
         g.setAttribute('transformOrigin', '0 0');
         g.setAttribute('transform', 'scale(' + scale + ',' + scale + ')' +
             'translate(' + dx + ',' + dy + ')');
@@ -871,25 +871,25 @@ class mxPrintPreview {
     }
 
     // Disables events on the view
-    var eventsEnabled = view.isEventsEnabled();
+    let eventsEnabled = view.isEventsEnabled();
     view.setEventsEnabled(false);
 
     // Disables the graph to avoid cursors
-    var graphEnabled = this.graph.isEnabled();
+    let graphEnabled = this.graph.isEnabled();
     this.graph.setEnabled(false);
 
     // Resets the translation
-    var translate = view.getTranslate();
+    let translate = view.getTranslate();
     view.translate = new mxPoint(dx, dy);
 
     // Redraws only states that intersect the clip
-    var redraw = this.graph.cellRenderer.redraw;
-    var states = view.states;
-    var s = view.scale;
+    let redraw = this.graph.cellRenderer.redraw;
+    let states = view.states;
+    let s = view.scale;
 
     // Gets the transformed clip for intersection check below
     if (this.clipping) {
-      var tempClip = new mxRectangle((clip.x + translate.x) * s, (clip.y + translate.y) * s,
+      let tempClip = new mxRectangle((clip.x + translate.x) * s, (clip.y + translate.y) * s,
           clip.width * s / realScale, clip.height * s / realScale);
 
       // Checks clipping rectangle for speedup
@@ -897,10 +897,10 @@ class mxPrintPreview {
       this.graph.cellRenderer.redraw = (state, force, rendering) => {
         if (state != null) {
           // Gets original state from graph to find bounding box
-          var orig = states.get(state.cell);
+          let orig = states.get(state.cell);
 
           if (orig != null) {
-            var bbox = view.getBoundingBox(orig, false);
+            let bbox = view.getBoundingBox(orig, false);
 
             // Stops rendering if outside clip for speedup but ignores
             // edge labels where width and height is set to 0
@@ -915,22 +915,22 @@ class mxPrintPreview {
       };
     }
 
-    var temp = null;
+    let temp = null;
 
     try {
       // Creates the temporary cell states in the view and
       // draws them onto the temporary DOM nodes in the view
-      var cells = [this.getRoot()];
+      let cells = [this.getRoot()];
       temp = new mxTemporaryCellStates(view, scale, cells, null, (state) => {
         return this.getLinkForCellState(state);
       });
     } finally {
       // Removes everything but the SVG node
-      var tmp = div.firstChild;
+      let tmp = div.firstChild;
 
       while (tmp != null) {
-        var next = tmp.nextSibling;
-        var name = tmp.nodeName.toLowerCase();
+        let next = tmp.nextSibling;
+        let name = tmp.nodeName.toLowerCase();
 
         // Note: Width and height are required in FF 11
         if (name == 'svg') {
@@ -952,7 +952,7 @@ class mxPrintPreview {
 
       // Puts background image behind SVG output
       if (this.printBackgroundImage) {
-        var svgs = div.getElementsByTagName('svg');
+        let svgs = div.getElementsByTagName('svg');
 
         if (svgs.length > 0) {
           svgs[0].style.position = 'absolute';
@@ -991,10 +991,10 @@ class mxPrintPreview {
    * Inserts the background image into the given div.
    */
   insertBackgroundImage = (div, dx, dy) => {
-    var bg = this.graph.backgroundImage;
+    let bg = this.graph.backgroundImage;
 
     if (bg != null) {
-      var img = document.createElement('img');
+      let img = document.createElement('img');
       img.style.position = 'absolute';
       img.style.marginLeft = Math.round(dx * this.scale) + 'px';
       img.style.marginTop = Math.round(dy * this.scale) + 'px';
@@ -1034,7 +1034,7 @@ class mxPrintPreview {
    * css - Optional CSS string to be used in the head section.
    */
   print = (css) => {
-    var wnd = this.open(css);
+    let wnd = this.open(css);
 
     if (wnd != null) {
       wnd.print();
diff --git a/src/js/view/mxStyleRegistry.js b/src/js/view/mxStyleRegistry.js
index 38120afb2..3eb89fb3a 100644
--- a/src/js/view/mxStyleRegistry.js
+++ b/src/js/view/mxStyleRegistry.js
@@ -6,7 +6,7 @@
 
 import mxConstants from "../util/mxConstants";
 
-var mxStyleRegistry = {
+let mxStyleRegistry = {
   /**
    * Class: mxStyleRegistry
    *
diff --git a/src/js/view/mxStylesheet.js b/src/js/view/mxStylesheet.js
index 6bf315b02..da57f7a2c 100644
--- a/src/js/view/mxStylesheet.js
+++ b/src/js/view/mxStylesheet.js
@@ -34,9 +34,9 @@ class mxStylesheet {
    * Example:
    *
    * (code)
-   * var vertexStyle = stylesheet.getDefaultVertexStyle();
+   * let vertexStyle = stylesheet.getDefaultVertexStyle();
    * vertexStyle[mxConstants.STYLE_ROUNDED] = true;
-   * var edgeStyle = stylesheet.getDefaultEdgeStyle();
+   * let edgeStyle = stylesheet.getDefaultEdgeStyle();
    * edgeStyle[mxConstants.STYLE_EDGE] = mxEdgeStyle.EntityRelation;
    * (end)
    *
@@ -76,7 +76,7 @@ class mxStylesheet {
    * Creates and returns the default vertex style.
    */
   createDefaultVertexStyle = () => {
-    var style = {};
+    let style = {};
     style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE;
     style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
     style[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_MIDDLE;
@@ -93,7 +93,7 @@ class mxStylesheet {
    * Creates and returns the default edge style.
    */
   createDefaultEdgeStyle = () => {
-    var style = {};
+    let style = {};
     style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_CONNECTOR;
     style[mxConstants.STYLE_ENDARROW] = mxConstants.ARROW_CLASSIC;
     style[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_MIDDLE;
@@ -155,7 +155,7 @@ class mxStylesheet {
    * existing stylesheet:
    *
    * (code)
-   * var style = {};
+   * let style = {};
    * style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE;
    * style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
    * style[mxConstants.STYLE_ROUNDED] = true;
@@ -197,10 +197,10 @@ class mxStylesheet {
    * defaultStyle - Default style to be returned if no style can be found.
    */
   getCellStyle = (name, defaultStyle) => {
-    var style = defaultStyle;
+    let style = defaultStyle;
 
     if (name != null && name.length > 0) {
-      var pairs = name.split(';');
+      let pairs = name.split(';');
 
       if (style != null &&
           name.charAt(0) != ';') {
@@ -210,13 +210,13 @@ class mxStylesheet {
       }
 
       // Parses each key, value pair into the existing style
-      for (var i = 0; i < pairs.length; i++) {
-        var tmp = pairs[i];
-        var pos = tmp.indexOf('=');
+      for (let i = 0; i < pairs.length; i++) {
+        let tmp = pairs[i];
+        let pos = tmp.indexOf('=');
 
         if (pos >= 0) {
-          var key = tmp.substring(0, pos);
-          var value = tmp.substring(pos + 1);
+          let key = tmp.substring(0, pos);
+          let value = tmp.substring(pos + 1);
 
           if (value == mxConstants.NONE) {
             delete style[key];
@@ -227,7 +227,7 @@ class mxStylesheet {
           }
         } else {
           // Merges the entries from a named style
-          var tmpStyle = this.styles[tmp];
+          let tmpStyle = this.styles[tmp];
 
           if (tmpStyle != null) {
             for (var key in tmpStyle) {
diff --git a/src/js/view/mxSwimlaneManager.js b/src/js/view/mxSwimlaneManager.js
index da9521101..f684565a0 100644
--- a/src/js/view/mxSwimlaneManager.js
+++ b/src/js/view/mxSwimlaneManager.js
@@ -216,7 +216,7 @@ class mxSwimlaneManager extends mxEventSource {
    */
   isCellHorizontal = (cell) => {
     if (this.graph.isSwimlane(cell)) {
-      var style = this.graph.getCellStyle(cell);
+      let style = this.graph.getCellStyle(cell);
 
       return mxUtils.getValue(style, mxConstants.STYLE_HORIZONTAL, 1) == 1;
     }
@@ -235,11 +235,11 @@ class mxSwimlaneManager extends mxEventSource {
    */
   cellsAdded = (cells) => {
     if (cells != null) {
-      var model = this.getGraph().getModel();
+      let model = this.getGraph().getModel();
 
       model.beginUpdate();
       try {
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           if (!this.isSwimlaneIgnored(cells[i])) {
             this.swimlaneAdded(cells[i]);
           }
@@ -261,14 +261,14 @@ class mxSwimlaneManager extends mxEventSource {
    * swimlane - <mxCell> that represents the new swimlane.
    */
   swimlaneAdded = (swimlane) => {
-    var model = this.getGraph().getModel();
-    var parent = model.getParent(swimlane);
-    var childCount = model.getChildCount(parent);
-    var geo = null;
+    let model = this.getGraph().getModel();
+    let parent = model.getParent(swimlane);
+    let childCount = model.getChildCount(parent);
+    let geo = null;
 
     // Finds the first valid sibling swimlane as reference
-    for (var i = 0; i < childCount; i++) {
-      var child = model.getChildAt(parent, i);
+    for (let i = 0; i < childCount; i++) {
+      let child = model.getChildAt(parent, i);
 
       if (child != swimlane && !this.isSwimlaneIgnored(child)) {
         geo = model.getGeometry(child);
@@ -281,7 +281,7 @@ class mxSwimlaneManager extends mxEventSource {
 
     // Applies the size of the refernece to the newly added swimlane
     if (geo != null) {
-      var parentHorizontal = (parent != null) ? this.isCellHorizontal(parent) : this.horizontal;
+      let parentHorizontal = (parent != null) ? this.isCellHorizontal(parent) : this.horizontal;
       this.resizeSwimlane(swimlane, geo.width, geo.height, parentHorizontal);
     }
   };
@@ -298,31 +298,31 @@ class mxSwimlaneManager extends mxEventSource {
    */
   cellsResized = (cells) => {
     if (cells != null) {
-      var model = this.getGraph().getModel();
+      let model = this.getGraph().getModel();
 
       model.beginUpdate();
       try {
         // Finds the top-level swimlanes and adds offsets
-        for (var i = 0; i < cells.length; i++) {
+        for (let i = 0; i < cells.length; i++) {
           if (!this.isSwimlaneIgnored(cells[i])) {
-            var geo = model.getGeometry(cells[i]);
+            let geo = model.getGeometry(cells[i]);
 
             if (geo != null) {
-              var size = new mxRectangle(0, 0, geo.width, geo.height);
-              var top = cells[i];
-              var current = top;
+              let size = new mxRectangle(0, 0, geo.width, geo.height);
+              let top = cells[i];
+              let current = top;
 
               while (current != null) {
                 top = current;
                 current = model.getParent(current);
-                var tmp = (this.graph.isSwimlane(current)) ?
+                let tmp = (this.graph.isSwimlane(current)) ?
                     this.graph.getStartSize(current) :
                     new mxRectangle();
                 size.width += tmp.width;
                 size.height += tmp.height;
               }
 
-              var parentHorizontal = (current != null) ? this.isCellHorizontal(current) : this.horizontal;
+              let parentHorizontal = (current != null) ? this.isCellHorizontal(current) : this.horizontal;
               this.resizeSwimlane(top, size.width, size.height, parentHorizontal);
             }
           }
@@ -345,14 +345,14 @@ class mxSwimlaneManager extends mxEventSource {
    * swimlane - <mxCell> whose size has changed.
    */
   resizeSwimlane = (swimlane, w, h, parentHorizontal) => {
-    var model = this.getGraph().getModel();
+    let model = this.getGraph().getModel();
 
     model.beginUpdate();
     try {
-      var horizontal = this.isCellHorizontal(swimlane);
+      let horizontal = this.isCellHorizontal(swimlane);
 
       if (!this.isSwimlaneIgnored(swimlane)) {
-        var geo = model.getGeometry(swimlane);
+        let geo = model.getGeometry(swimlane);
 
         if (geo != null) {
           if ((parentHorizontal && geo.height != h) || (!parentHorizontal && geo.width != w)) {
@@ -369,16 +369,16 @@ class mxSwimlaneManager extends mxEventSource {
         }
       }
 
-      var tmp = (this.graph.isSwimlane(swimlane)) ?
+      let tmp = (this.graph.isSwimlane(swimlane)) ?
           this.graph.getStartSize(swimlane) :
           new mxRectangle();
       w -= tmp.width;
       h -= tmp.height;
 
-      var childCount = model.getChildCount(swimlane);
+      let childCount = model.getChildCount(swimlane);
 
-      for (var i = 0; i < childCount; i++) {
-        var child = model.getChildAt(swimlane, i);
+      for (let i = 0; i < childCount; i++) {
+        let child = model.getChildAt(swimlane, i);
         this.resizeSwimlane(child, w, h, horizontal);
       }
     } finally {
diff --git a/src/js/view/mxTemporaryCellStates.js b/src/js/view/mxTemporaryCellStates.js
index 8f9ecb9d2..b0da020fd 100644
--- a/src/js/view/mxTemporaryCellStates.js
+++ b/src/js/view/mxTemporaryCellStates.js
@@ -51,15 +51,15 @@ class mxTemporaryCellStates {
     this.oldScale = view.getScale();
     this.oldDoRedrawShape = view.graph.cellRenderer.doRedrawShape;
 
-    var self = this;
+    let self = this;
 
     // Overrides doRedrawShape and paint shape to add links on shapes
     if (getLinkForCellState != null) {
       view.graph.cellRenderer.doRedrawShape = (state) => {
-        var oldPaint = state.shape.paint;
+        let oldPaint = state.shape.paint;
 
         state.shape.paint = (c) => {
-          var link = getLinkForCellState(state);
+          let link = getLinkForCellState(state);
 
           if (link != null) {
             c.setLink(link);
@@ -92,12 +92,12 @@ class mxTemporaryCellStates {
 
     if (cells != null) {
       view.resetValidationState();
-      var bbox = null;
+      let bbox = null;
 
       // Validates the vertices and edges without adding them to
       // the model so that the original cells are not modified
-      for (var i = 0; i < cells.length; i++) {
-        var bounds = view.getBoundingBox(view.validateCellState(view.validateCell(cells[i])));
+      for (let i = 0; i < cells.length; i++) {
+        let bounds = view.getBoundingBox(view.validateCellState(view.validateCell(cells[i])));
 
         if (bbox == null) {
           bbox = bounds;